在Android设备上,某些视频有效,有些则无效.它们都以相同的方式创建,除了大多数不工作的都由静止图像和音频组成.
我们尝试用Videora重新编码它们,并尝试用MP4Box暗示它们.存储在SD卡上时,所有视频播放都非常精细.我们还尝试首先将视频从服务器下载到SD卡,将其保存为文件,然后从文件中播放,但这也不起作用.
帮助会很棒.我非常困惑.
谢谢.
编辑 – Logcat:
01-19 08:19:12.669: DEBUG/MediaPlayer(1878): Couldn't open file on client side,trying server side 01-19 08:19:14.119: INFO/ActivityManager(1172): Displayed activity com.myproject/.VideoClass: 1966 ms (total 1966 ms) 01-19 08:19:15.779: ERROR/PlayerDriver(1071): Command PLAYER_INIT completed with an error or info UNKNOWN PVMFStatus 01-19 08:19:15.789: ERROR/MediaPlayer(1878): error (200,-32) 01-19 08:19:15.789: ERROR/MediaPlayer(1878): Error (200,-32) 01-19 08:19:15.789: DEBUG/VideoView(1878): Error: 200,-32 01-19 08:19:15.849: WARN/PlayerDriver(1071): PVMFInfoErrorHandlingComplete
更新:
这里是三个不同视频的视频分析的pastebin.
来自服务器的app上的第一个流.
第二个视频不会流式传输,但可以下载然后从设备播放.
第三个既不能流式播放也不能下载播放.
http://pastebin.com/9qChSkFz
WTF.
解决方法
我偶然发现了以下页面
http://developer.android.com/guide/appendix/media-formats.html其中指出:
For 3GPP and MPEG-4 containers,the moov atom must precede any mdat atoms,but must succeed the ftyp atom.
在做了一些挖掘后,我发现这正是问题所在.从某些Android手机录制的视频(我相信前2.3版)将moov原子放在文件的末尾.这使得它们不可流动.一些谷歌搜索将向您显示这是MP4文件和闪存播放器的常见问题,因为它们是用于流视频.
在MediaPlayer中甚至有一个特定的错误代码(但我没有看到这些记录)
MediaPlayer的#MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK.
我的解决方案是通过外部工具运行视频文件,将moov原子移动到开始.我最终使用MP4Box:http://gpac.wp.institut-telecom.fr/mp4box/和命令
MP4Box -inter 500 original.mp4 -out fixed.mp4
希望能帮助别人!