• 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");

    另外

  • 相关阅读:
    成为会带团队的技术人 做规划:除了交付和稳定性,还要规划什么?
    时间序列-AR MA ARIMA
    Prometheus部署
    如果你要去拜访国外客户需要做哪些准备
    SCI论文解读复现|目录一览表
    Vulnhub靶机:GEMINI INC_ 2
    逆向通达信 x 逆向微信 x 逆向Qt
    2023年【熔化焊接与热切割】考试资料及熔化焊接与热切割复审模拟考试
    Postman如何在本地测试服务接口
    Linux bash介绍与使用
  • 原文地址:https://blog.csdn.net/irainsa/article/details/127938439