android - 无法播放某些视频

标签 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。 来自服务器的应用程序上的第一个流。 第二个视频不会流式传输,但可以下载然后从设备播放。 第三个既不能流式传输也不能下载播放。 http://pastebin.com/9qChSkFz

卧槽。

最佳答案

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

我偶然发现了以下页面 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 文件和 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

希望对其他人有所帮助!

关于android - 无法播放某些视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4728085/

相关文章:

android - Google+ 登录 : Google Play Services out of date exception

Android 似乎像 8 位 PNG 一样渲染框阴影,有人知道如何解决这个问题吗?

video - ffmpeg 根据视频大小缩放 Logo 大小

javascript - 在html5中一个接一个地播放视频

.net - 删除 Assets 和转换作业(Azure 媒体服务 v3)

c++ - 视频稳定

java - NestedScrollView 里面没有 Recyclerview

android - 无法解析 Manifest.permission.ACCESS_FINE_LOCATION

audio - ffmpeg水平翻转视频

python - ffmpeg stdin 管道搜索