首页 新闻 会员 周边 捐助

ijkplayer 在android 手机上播放rtsp 流视频一定时间后,画面卡住不动了,抛出下面的错误。

0
悬赏园豆:40 [待解决问题]

on-existing SPS 2 referenced in buffering period

Fitz的主页 Fitz | 菜鸟二级 | 园豆:364
提问于:2024-10-12 12:50
< >
分享
所有回答(1)
0

这个错误一般是说 ijkplayer 在解码 RTSP 流的时候遇到了与视频编码相关的问题,主要是SPS丢失或者错误引用的,RTSP 流的中断或不连续的数据包可能报这个错,这个错误算是比较常见的,有下面几种情况你可以参考一下:

  1. 网络问题,看看RTSP流的服务器稳不稳定,可以试试在本地网络环境上测一下RTSP流
  2. 看看是不是ijkplayer配置参数的问题,试一试这样写:
    IjkMediaPlayer ijkPlayer = new IjkMediaPlayer();
    ijkPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1); // 启用硬件解码
    ijkPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp"); // 强制使用 TCP 传输
    ijkPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-buffer-size", 1024 * 512); // 限制缓冲大小
    ijkPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 0); // 关闭缓冲避免卡顿
    可以提高稳定性
  3. 有时候这种问题也和版本有关系,试一试更新版本,因为IjkPlayer 是基于 FFmpeg 的项目,可能会存在一些兼容性问题
  4. 在RTSP流的服务器端做一些优化,
    关键帧频率(GOP)调整,这个可以确保 RTSP 流中的关键帧间隔足够短,这样即使数据丢失也可以尽快恢复。
    SPS 和 PPS 重发,一些流媒体服务器可以配置周期性重发 SPS 和 PPS,确保解码器不会丢失这些重要信息。
  5. 用日志调试一下看看,ijkPlayer.setLogLevel(IjkMediaPlayer.IJK_LOG_DEBUG);
  6. 实在找不到问题就换一个播放器试试吧,建议使用 ExoPlayer,它在处理 RTSP 流方面有比较较好的支持
    implementation 'com.google.android.exoplayer:exoplayer-rtsp:2.18.1'
五号位 | 园豆:344 (菜鸟二级) | 2024-10-12 17:33

返回的错误为什么没有被 ijkvideoview.setOnErrorListener() 这个事件监听到?

支持(0) 反对(0) Fitz | 园豆:364 (菜鸟二级) | 2024-10-15 08:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册