【发布时间】:2011-09-22 05:06:13
【问题描述】:
我正在开发一个 Android 应用程序,我正在使用 Android SDK 的 MediaPlayer 在我的应用程序中播放一些视频。当我在我的应用程序中播放视频时,大约五分之一的时候,音频播放时没有视频。这不是一个简单的编码错误,因为大多数时候视频播放完美。
我认为我的代码中的竞争条件导致了该错误。但是,我添加了一些调试语句,当视频无法播放时,一切似乎都已正确设置。
我已经扫描了网络并试图找到解决方案,但没有一个是足够的(见下文)。
以前有没有人遇到过这种类型的问题?如果有,你做了什么?
类似问题:
android media player shows audio but no video
android video, hear sound but no video
更多细节:
- 我在两部手机上都遇到过这个错误。在三星 Charge 视频中,80% 的时间和 20% 的时间有音频但没有视频。在 T-Mobile Comet 上情况更糟;视频只播放大约 10% 的时间。
- 文件没有问题,我尝试了各种视频文件和编解码器,都遇到了同样的问题。
- 不是存储介质的问题。当视频存储在内部存储器和 SD 卡上时,我尝试播放视频,但两者都没有区别。我什至尝试在播放之前读取一些文件,希望系统将其缓存,但这似乎也无济于事。
更新:
我一直在调试它并查看 logcat。我发现当视频播放时,logcat 中会出现如下内容:
09-28 00:09:03.651: VERBOSE/PVPlayer(10875): setVideoSurface(0x65638)
但是当视频不播放时,似乎有一个空条目:
09-28 00:03:35.284: VERBOSE/PVPlayer(10875): setVideoSurface(0x0)
更新 2:
当视频播放失败时,函数MediaPlayer.OnInfoListener,参数what==MEDIA_ERROR_UNKNOWN(0x1)和extra==35。我查看了 Android 代码库,试图确定未知错误 35 的含义。我遇到了文件 pv_player_interface.h,它表明错误代码 35 对应于称为 PVMFInfoTrackDisable 的东西。我用谷歌搜索了这个词,它把我带到了一个名为pvmf_return_codes.pdf 的文件中。该文件给了我以下难以理解的解释:
4.34。 PVMFInfoTrack 禁用
关于特定曲目的通知 禁用。这是基于每个轨道的。对于未压缩 音频/视频格式,在选择可用曲目的过程中 在内容中,如果解码器不支持轨道,则 发送 PVMFInfoTrackDisable 事件。如有必要,该活动将 每首曲目发送一次。
我觉得我已经走了很长一段路,但距离找到答案还差得远……仍在调查中。
【问题讨论】:
-
您每次播放的媒体内容是相同的还是不同的?
-
您是否在多台设备上进行了测试以确保这不是设备错误?
-
我已经回复了你的 cmets inline。
-
这看起来像是视频编解码器的问题,您可以粘贴 logcat 中的日志吗?如果结果证明是编解码器的问题,那么除了更改内容之外你什么也做不了..
-
让我补充一下,随着 android 源代码和 kernel.org 的关闭,追踪这些问题变得更加困难......愚蠢的黑客。
标签: java android video media-player