无法播放某些视频

时间:2011-01-18 19:21:43

标签: android video video-processing video-encoding h.264

我正在尝试从我们的服务器在Android设备上播放电影。它不是媒体服务器,只是常规的Apache服务器。我们使用相同的API访问iPhone上的视频,它工作正常。

在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。

1 个答案:

答案 0 :(得分:11)

我遇到了同样的问题,在最初放弃之后,我找到了解决方案。

我偶然发现了以下页面 http://developer.android.com/guide/appendix/media-formats.html声明:

  

对于3GPP和MPEG-4容器,moov原子必须在任何mdat原子之前,但必须接替ftyp原子。

经过一番挖掘,我发现这正是问题所在。从某些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

希望能帮到别人!