MediaPlayer error类型汇总

这篇博客详细介绍了MediaPlayer在播放过程中可能遇到的各种错误代码,包括MEDIA_ERROR_UNKNOWN、MEDIA_ERROR_SERVER_DIED等,涵盖了从文件错误到不支持的媒体格式等各种情况。对于每个错误代码,都提供了相应的处理建议,如释放并重建MediaPlayer对象或检查文件格式的正确性。
/** Unspecified media player error.
 * @see android.media.MediaPlayer.OnErrorListener
 */
public static final int MEDIA_ERROR_UNKNOWN = 1;

/** Media server died. In this case, the application must release the
 * MediaPlayer object and instantiate a new one.
 * @see android.media.MediaPlayer.OnErrorListener
 */
public static final int MEDIA_ERROR_SERVER_DIED = 100;

/** The video is streamed and its container is not valid for progressive
 * playback i.e the video's index (e.g moov atom) is not at the start of the
 * file.
 * @see android.media.MediaPlayer.OnErrorListener
 */
public static final int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200;

/** File or network related operation errors. */
public static final int MEDIA_ERROR_IO = -1004;
/** Bitstream is not conforming to the related coding standard or file spec. */
public static final int MEDIA_ERROR_MALFORMED = -1007;
/** Bitstream is conforming to the related coding standard or file spec, but
 * the media framework does not support the feature. */
public static final int MEDIA_ERROR_UNSUPPORTED = -1010;
/** Some operation takes too long to complete, usually more than 3-5 seconds. */
public static final int MEDIA_ERROR_TIMED_OUT = -110;
在 Android 开发中,`MediaPlayer` 错误代码 `(1, -2147483648)` 是一个常见的问题,通常与媒体播放器在准备或播放过程中遇到的内部错误有关。该错误的第一个参数 `1` 表示通用的播放错误,而第二个参数 `-2147483648`(即 `Integer.MIN_VALUE`)则表示底层系统调用失败或资源不可用 [^1]。 ### 可能的原因 1. **无效或损坏的媒体 URI** 如果尝试播放的媒体文件路径或 URL 无效、格式不支持或文件已损坏,可能导致此错误。 2. **网络连接问题** 当播放远程流媒体时,设备没有互联网连接或服务器响应异常,也可能触发此错误 [^1]。 3. **权限不足** 在访问本地存储中的媒体文件时,若未正确申请 `READ_EXTERNAL_STORAGE` 权限,可能会导致无法加载文件。 4. **资源释放问题** 如果 `MediaPlayer` 实例尚未正确释放或重复使用不当,可能造成内部状态混乱,从而引发此类错误。 5. **音频焦点冲突** 多个应用同时请求音频焦点,未正确处理音频焦点变化事件也可能影响 `MediaPlayer` 的正常运行。 ### 解决方案 #### 1. 检查媒体源有效性 确保提供的媒体 URI 或路径是有效的,并且设备能够访问该资源。对于网络资源,应验证其可访问性: ```java try { mediaPlayer.setDataSource("http://example.com/audio.mp3"); } catch (IOException e) { e.printStackTrace(); } ``` #### 2. 添加网络权限 如果播放的是在线内容,确保在 `AndroidManifest.xml` 中添加了网络权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> ``` #### 3. 请求必要的存储权限 对于本地文件播放,确保应用具有读取外部存储的权限: ```java if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE); } ``` #### 4. 正确管理 MediaPlayer 生命周期 在每次使用前检查是否已经释放,在使用完毕后及时调用 `release()` 方法以避免资源泄漏: ```java if (mediaPlayer != null) { mediaPlayer.release(); mediaPlayer = null; } ``` #### 5. 处理音频焦点变化 注册并监听音频焦点变化,确保在失去音频焦点时暂停播放或降低音量: ```java AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); int result = audioManager.requestAudioFocus(focusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { // 开始播放 } ``` #### 6. 添加错误监听器 通过设置 `OnErrorListener` 来捕获错误并进行相应处理: ```java mediaPlayer.setOnErrorListener((mp, what, extra) -> { Log.e("MediaPlayer", "Error: " + what + ", Extra: " + extra); return true; }); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值