mediaplayer onerror status 错误 状态

一.onError


http://univasity.iteye.com/blog/898613

开发中使用MediaPlayer时经常会遇到如下这样的错误提示(红色字):



但是API文档中并未找到详细说明或给出对应的错误列表...

经过研究和网上资料的收集,暂总结如下:
error(-38, 0)为例,
1. error中的两个数值,分别对应OnErrorListener.onError(MediaPlayer mp, int what, int extra)中的what(-38)和extra(0);
2. 对应编号的错误信息可以在这里找到个大概说明,像这里的
/*
* DRMclockisnotavailableorcannotberead
*/
constPVMFStatusPVMFErrDrmClockError=(-38);
/*
* Returncodeforpendingcompletion
*/
constPVMFStatusPVMFPending=0;

仍未知具体针对性的解决办法,但作为补救的方法(仅供参考):
通过设置监听器,并自己设置变量来标记MediaPlayer的大概状态(特别是Error,End,Idle),在操作相关的函数前先检测下,就能避免大多数"操作错误"。再不行就每个MediaPlayer的函数操作都加上对IllegalStateException异常的捕获。

ps:state的对应表仍然不是很清楚,也许研究下源码能找到答案?

****** update ******* // 2011.03.29
通过源码找到了state的相关定义:
enum media_player_states {
MEDIA_PLAYER_STATE_ERROR = 0,
MEDIA_PLAYER_IDLE = 1 << 0, // 1
MEDIA_PLAYER_INITIALIZED = 1 << 1, // 2
MEDIA_PLAYER_PREPARING = 1 << 2, // 4
MEDIA_PLAYER_PREPARED = 1 << 3, // 6
MEDIA_PLAYER_STARTED = 1 << 4, // 8
MEDIA_PLAYER_PAUSED = 1 << 5, // 16
MEDIA_PLAYER_STOPPED = 1 << 6, // 32
MEDIA_PLAYER_PLAYBACK_COMPLETE = 1 << 7 // 64
};

二.MediaPlayer(362): error (-38, 0)

在android开发中,经常会用到MediaPlayer。

在使用MediaPlayer时,有时候会遇到:MediaPlayer(362): error (-38, 0) 类似的错误。

这时,需要检查一下在设置MediaPlayer的数据源时,使用的是那种方式:

1.在初始化MediaPlayer时,通过create方法设置数据源。则不能写MediaPlayer.prepare()方法,这时,会报错。

2.如果是使用MediaPlayer构造函数初始化MediaPlayer,然后通过setDataSource方法设置数据源时,就需要在start()之前,使用MediaPlayer.prepare()方法,对数据源进行一次编译。能够避免出现(-38,0)这种错误。

ps:如果是apk里,写好的文件。可能还需要“"chmod 777 ”修复一下权限。

你可能感兴趣的:(mediaplayer)