无法播放某些视频

6
我正在尝试从我们的服务器上在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链接。第一个视频从服务器上流式传输。第二个视频无法流式传输,但可以下载到设备上后播放。第三个视频既不能流式传输也不能下载播放。http://pastebin.com/9qChSkFz

真是醉了。


在它不起作用后,我尝试了几个不同的编码方式,但最初使用的是H.264。 - Jai
@Jai:使用adb logcat、DDMS或Eclipse中的DDMS透视图来检查LogCat,看看是否有与视频播放相关的警告。 - CommonsWare
我已经在logcat中添加了我收到的错误信息。 - Jai
你在Apache服务器上使用什么MIME类型来处理扩展名为.mp4的文件?在PC上可以下载和播放那个文件吗? - Cipi
没有设置。应该设置什么?当它们被编码相同时,这如何影响一个动画工作但其他动画不工作的情况? - Jai
刚试了一下使用MIME .mp4 video/mpeg,但是没有成功。 - Jai
1个回答

11

我遇到了同样的问题,最初放弃了,但后来找到了一个解决方法。

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

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

经过一些挖掘,我发现这正是问题所在。某些Android手机(我相信是2.3之前的版本)录制的视频将moov原子放在文件末尾。这使得它们无法流式传输。一些搜索会向您展示,这是MP4文件和Flash播放器特别常见的问题,因为它们是用于流式传输视频的。

甚至在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

希望这能帮到其他人!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接