You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android MediaPlayer播放直播流22分钟报(1,-1010)错误停止求助

故障原因分析
  • 服务端HTTP长连接超时:你日志中出现的MediaHTTPConnection抛出的ProtocolException是核心报错点,绝大多数CDN或直播源站的HTTP长连接默认超时阈值在20~30分钟区间,22分钟刚好符合该区间特征。当服务端主动断开超时连接时,原生MediaPlayer的默认HTTP连接模块不会自动发起重连,流读取中断后底层解码器无法拿到有效数据,就会抛出-1010错误。该错误码字面含义为不支持的媒体格式,但实际属于流读取异常触发的误报,能正常播放22分钟即可排除格式兼容问题。
  • 直播流metadata配置错误:部分直播源会误写入固定时长的点播类metadata,若该值刚好为22分钟,MediaPlayer会将直播流识别为点播文件,播放到预设时长后主动停止。你可以检查直播流的响应头,正常直播流应该返回Transfer-Encoding: chunked,不会携带固定的Content-Length字段。
  • 缓冲区耗尽:原生MediaPlayer的默认缓冲区是为点播场景优化的,缓存阈值较低,若直播流出现短时间网络抖动、码率波动,缓冲区数据耗尽后无法及时补充,也会触发播放停止逻辑。
自定义MediaPlayer缓冲区的实现方法

原生MediaPlayer未对外公开直接设置缓冲区的系统API,可通过两种方式实现自定义配置:

  1. 反射调用隐藏接口,该方法兼容性有限,部分厂商定制ROM可能修改了相关接口实现:
try {
    Field bufferingParamsField = MediaPlayer.class.getDeclaredField("mBufferingParams");
    bufferingParamsField.setAccessible(true);
    Object bufferingParams = bufferingParamsField.get(mediaPlayer);
    Method setHighWaterMarkMsMethod = bufferingParams.getClass().getMethod("setHighWaterMarkMs", int.class);
    // 设置缓冲区高水位为30秒,单位毫秒
    setHighWaterMarkMsMethod.invoke(bufferingParams, 30 * 1000);
} catch (Exception e) {
    e.printStackTrace();
}
  1. 自建本地代理服务:自己实现HTTP代理模块拉取直播流,先写入本地缓存再投喂给MediaPlayer,可完全控制缓冲区大小、重连逻辑,是稳定性最高的方案,也是主流直播播放器的通用实现逻辑。
优化方案
  1. 先排查直播源配置:确认直播源支持Range请求,可在连接断开时自动续传;如果是自有源站,可将直播流的HTTP长连接超时阈值调整到4小时以上,从根源避免超时断开问题。
  2. 修正prepareAsync的调用逻辑:prepareAsync是异步方法,不能直接在调用后执行start,需要注册OnPreparedListener,在回调中触发播放:
@Override
public void setStreamSource(StreamSource streamSource) {
    try {
        if (!mediaPlayer.isPlaying()) {
            mediaPlayer.setDataSource(streamSource.getAudioUrl());
            mediaPlayer.setOnPreparedListener(mp -> mp.start());
            mediaPlayer.prepareAsync();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
  1. 增加错误降级逻辑:注册OnErrorListener,监听到(1, -1010)错误时,重置MediaPlayer重新拉流播放,该方案对用户感知影响极小,可作为临时兜底方案。
  2. 长期优化建议:直播场景下建议替换为ExoPlayer,该播放器是谷歌官方推出的MediaPlayer替代方案,原生支持直播场景、可自定义缓冲区参数、默认支持断连自动重连,适配成本低,稳定性远高于原生MediaPlayer。

内容的提问来源于stack exchange,提问作者omega1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:39:02