mediaplayer在播放过程中自动触发了onerror方法,调用getDurtion方法 发生错误 返回值是负数E/MediaPlayer: Attempt to call getDuration in wrong state: mPlayer=0x75c09cc0c0, mCurrentState=0
E/MediaPlayer: error (-38, 0)
E/error: -230755392            getDurtion的值
E/error: 1698650                  当前播放时长网上查说是这些原因
1.在初始化MediaPlayer时,通过create方法设置数据源。则不能写MediaPlayer.prepare()方法,这时,会报错。2.如果是使用MediaPlayer构造函数初始化MediaPlayer,然后通过setDataSource方法设置数据源时,就需要在start()之前,使用MediaPlayer.prepare()方法,对数据源进行一次编译。能够避免出现(-38,0)这种错误。我感觉我的不是  望做过这方便的大神解答

解决方案 »

  1.   

    参考下
    http://ask.csdn.net/questions/158778
    另外你可以看下android 原版的APK 如何做的!
      

  2.   

    谢谢您的回答  我在网上查了点也  我的问题好像给他的不一样  我视频正常播放 说明已经准备完成了  其实我的意思是这个onerror方法的调用有什么情况,看源码onerror方法调用后 我掉oncomplete方法  但是我这个方法中有对应的逻辑  会出错  现在闹不懂为什么视频正常播放下为什么会调用这个onerror方法。
      

  3.   

    比较简单的方法可以考虑换一个播放的测试文件尝试,看看是不是文件有问题,有时候错误不来源于代码getDuration有问题可能是文件没有加载,甚至是文件转码过程中出现了bug,不能播放
    另外只有报错的栈信息,没有你播放的源码一般很难进行问题定位
      

  4.   

    原来的代码 在出错时不能直接调用 getDurtion,有个以前的保存的值,你可以在开始播放时先获取;
    我了解的多个平台发现 视频正常播放下为什么会调用这个onerror方法 有以下几个方面,1,视频文件在读取时出错,或文件本身有问题,2,CPU运行不稳定 解码出错,3、温度过高运行不稳定,4、外部接口调用频繁,CPU占用太高,信号不稳 5、其它APK占用CPU太高
      

  5.   

    原来的代码 在出错时不能直接调用 getDurtion,有个以前的保存的值,你可以在开始播放时先获取;
    我了解的多个平台发现 视频正常播放下为什么会调用这个onerror方法 有以下几个方面,1,视频文件在读取时出错,或文件本身有问题,2,CPU运行不稳定 解码出错,3、温度过高运行不稳定,4、外部接口调用频繁,CPU占用太高,信号不稳 5、其它APK占用CPU太高
    谢谢您  那我们针对这种情况是不是就要自己在onError中处理逻辑了呗  比如出错重新加载等等!