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

    另外

  • 相关阅读:
    大型项目开发设计文档规范
    ffmpeg视频编解码 demo初探(一)(包含下载指定windows版本ffmpeg)分离视频文件中的视频流每一帧YUV图片
    使用Java分析器优化代码性能,解决OOM问题
    【牛客网】链表中倒数第k个结点、CM11 链表分割、OR36 链表的回文结构
    阿里云数据盘挂载目录
    Visual Studio Code---介绍
    【QT】界面布局-登陆窗口
    Java 面试题
    上周热点回顾(5.6-5.12)
    orderby是如何工作的?
  • 原文地址:https://blog.csdn.net/irainsa/article/details/127938439