• ijkplayer基于rtsp直播延时的深度优化


    现在ijkPlayer是许多播放器、直播平台的首选,相信很多开发者都接触过ijkPlayer,无论是Android工程师还是iOS工程师。本文主要是总结,也是与大家探讨RTSP直播的延时优化。

    目录

    一、修改编译脚本支持RTSP

    二、修改播放器的option参数

    三、网络抖动的丢包

    四、解码器设为零延时

    五、减少FFmpeg拆帧等待延时

    1、找到当前帧结束符

    2、去掉parse_packet的while循环

    3、 修改av_parser_parse2的帧偏移量

    4、去掉parser_parse的寻找帧起始码

    5、修改parser.c的组帧方法

    一、修改编译脚本支持RTSP

    ijkPlayer默认是没有把RTSP协议编译进去,所以我们得修改编译脚本,原来的disable改为enable:

    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=tcp"
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=sdp"
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtp"

    二、修改播放器的option参数

    //丢帧阈值
    mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 30);
    //视频帧率
    mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "fps", 30);
    //环路滤波
    mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48);
    //设置无packet缓存
    mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 0);
    mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "fflags", "nobuffer");
    //不限制拉流缓存大小
    mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "infbuf", 1);
    //设置最大缓存数量
    mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "max-buffer-size", 1024);
    //设置最小解码帧数
    mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "min-frames", 3);
    //启动预加载
    mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 1);
    //设置探测包数量
    mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "probsize", "4096");
    //设置分析流时长
    mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "analyzeduration", "2000000");

    值得注意的是,ijkPlayer默认使用udp拉流,因为速度比较快。如果需要可靠且减少丢包,可以改为tcp协议:

    mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp");

    另外

  • 相关阅读:
    【在线实习】推推项目课程介绍—小说更新就通知
    强网杯2022 pwn 赛题解析——yakacmp
    【猿创征文】 Vue3 企业级优雅实战 - 组件库框架 - 4 组件库的 CSS 架构
    Kubernetes学习笔记-了解kubernetes机理(1)20220702
    java:数组缩减
    【Linux】基础开发工具——gcc/g++使用
    1.5.4 HDFS 客户端操作-hadoop-最全最完整的保姆级的java大数据学习资料
    XxlJob实现Alarm警告
    C# 多线程造成CPU占用率高
    Git命令meger和rebase命令的用法和区别
  • 原文地址:https://blog.csdn.net/irainsa/article/details/127938439