spe*_*ane 20 java video android media-player
我正在开发一个Android应用程序,我正在使用Android SDK MediaPlayer在我的应用程序中播放一些视频.当我在我的应用程序中播放视频时,大约五分之一,视频播放没有视频.这不是一个简单的编码错误,因为大多数时候视频播放都很完美.
我认为我的代码中的竞争条件导致了这个错误.但是,我添加了许多调试语句,当视频无法播放时,所有内容似乎都已正确设置.
我已经扫描了网络,并试图寻找解决方案,但没有一个是足够的(见下文).
有没有人遇到过这类问题?如果是这样,你做了什么?
类似问题:
更多细节:
更新:
我一直在调试这个并查看logcat.我发现当视频工作时,logcat中出现如下内容:
09-28 00:09:03.651: VERBOSE/PVPlayer(10875): setVideoSurface(0x65638)
Run Code Online (Sandbox Code Playgroud)
但是当视频没有播放时,它看起来像是一个空条目:
09-28 00:03:35.284: VERBOSE/PVPlayer(10875): setVideoSurface(0x0)
Run Code Online (Sandbox Code Playgroud)
更新2:
当视频无法播放时,函数MediaPlayer.OnInfoListener带参数 what==MEDIA_ERROR_UNKNOWN(0x1)和extra==35.我查看了Android代码库,试图确定未知错误35的含义.我遇到了文件pv_player_interface.h,它表明错误代码35对应于一个名为a的东西PVMFInfoTrackDisable.我用谷歌搜索了那个把我带到一个叫做文件的文章 pvmf_return_codes.pdf.该文件给了我以下难以理解的解释:
4.34.PVMFInfoTrackDisable
禁用特定轨道的通知.这个是基于每个轨道.对于未压缩的音频/视频格式,在选择内容中可用的轨道的过程中,如果解码器不支持轨道,则发送PVMFInfoTrackDisable事件.如有必要,该活动将在每个赛道发送一次.
我觉得我已经走了很长的路,但我没有找到答案......仍然在调查.
spe*_*ane 18
我解决了这个问题,虽然完全是一种黑客的方式.实际上有两个问题:
邪恶的信息35消息:我发现有时会使用extra == 35调用MediaPlayer.OnInfoListener.发生这种情况时,您已经搞砸了,视频无法正常播放.我不知道是什么原因造成的.我找到的唯一解决方法是尝试重新启动视频并重新完成整个prepareAsync过程.视频播放通常是第二次播放.
视频大小未设置:即使发出MediaPlayer.OnPreparedListener(或等效prepare()返回),也可能未设置视频大小.视频大小通常会在准备返回后设置几个毫秒,但有一段时间它处于模糊状态.如果在设置视频大小之前调用MediaPlayer.start(),则有时(但不总是)播放失败.有两种可能的解决方案:(1)轮询MediaPlayer.getVideoHeight()或getVideoWidth()直到它们非零或(2)等待直到调用OnVideoSizeChangedListener.只有在这两个事件中的一个之后,才应该调用start().
通过这两个修复,视频播放更加一致.这些问题很可能是我的手机(Samsung Charge和T-Mobile Comet)的问题,所以如果在其他手机上存在不同但类似的问题我也不会感到惊讶.
| 归档时间: |
|
| 查看次数: |
12388 次 |
| 最近记录: |