MediaPlayer
在我的应用程序中播放一些视频。当我在应用程序中播放视频时,大约五分之一的时间,音频会没有视频。这不是简单的编码错误,因为大多数情况下视频都可以正常播放。我考虑到我的代码中可能存在竞争条件导致了这个bug。然而,我添加了许多调试语句,当视频未播放时,一切似乎都设置正确。
我已经在网上和SO上搜索解决方案,但没有一个是充分的(请参见下面)。
有人遇到过这种问题吗?如果是这样,你做了什么?
类似的问题: MediaPlayer Video not played android media player shows audio but no video android video, hear sound but no video 一些更多的细节:
- 我在两部手机上遇到了这个bug。在三星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. PVMFInfoTrackDisable
通知某个特定轨道已被禁用。这是按轨道基础进行的。对于未压缩的音频/视频格式,在选择可用轨道的过程中,如果解码器不支持该轨道,则会发送一个PVMFInfoTrackDisable事件。如有必要,该事件将每个轨道发送一次。
我感觉我走了很远,但离找到答案还很远……仍在调查中。