超低延时直播rtmp推流

项目起源:

       改项目主要是基于类qt av的模式,快速集成, 将ffmpeg融入到插件当中, 并提供本地的音频设备和视频设备的查找输出, 并可以采集各类虚拟摄像头, 酷狗直播助手/YY开播/6K Box等助手,有些助手比如酷狗,ffmpeg采集不到640*480的视频,采集模块我更换成webr

关键代码

int FFRtmpMuter::OpenVECodec()
{
    hlogi("[%p] Call %s Start.", this, __FUNCTION__);
    ///4 初始化编码器
    AVCodec *codec = avcodec_find_encoder(AV_CODEC_ID_H264);
    if (!codec)
     {
       std::cout << "avcodec_find_encoder  failed!" << endl;
       return -1;
     }
     //编码器上下文
     videoEncCtx = avcodec_alloc_context3(codec);
    if (!videoEncCtx)
    {
        std::cout << "avcodec_alloc_context3 failed!" << endl;
        return -1;
    }

    std::cout << "avcodec_alloc_context3 success!" << endl;
    videoEncCtx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER| AV_CODEC_FLAG_LOW_DELAY;
    videoEncCtx->thread_count = 4;

    videoEncCtx->time_base={1,1000000};//调整time_base小点 视乎可以减少延迟,有待验证


    //preset有ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow,placebo 10个级别
    av_opt_set(videoEncCtx->priv_data, "preset", "superfast", 0);
    av_opt_set(videoEncCtx->priv_data, "tune", "zerolatency", 0);
    //av_opt_set(videoEncCtx->priv_data,"profile","main",0);
    av_opt_set(videoEncCtx->priv_data,"profile","high",0);
    videoEncCtx->bit_rate = 80 * 1024 * 8;//压缩后每秒视频的bit位大小 50kB
    videoEncCtx->width = m_outWidth;
    videoEncCtx->height = m_outHeight;
    //vc->time_base = { 1,fps };
    videoEncCtx->framerate = { m_fps,1 };
    //画面组的大小,多少帧一个关键帧,关键帧间隔,对应flash里面keyinterframe;
    videoEncCtx->gop_size = 50;
    videoEncCtx->max_b_frames = 0;
    videoEncCtx->pix_fmt = AV_PIX_FMT_YUV420P;


    //打开音频编码器
    int ret = avcodec_open2(videoEncCtx, 0, 0);
    if (ret != 0)
    {
        char err[1024] = { 0 };
        av_strerror(ret, err, sizeof(err) - 1);
        std::cout << err << std::endl;
        avcodec_free_context(&videoEncCtx);
         videoEncCtx = NULL;
        return -1;
    }


    hlogi("[%p] Call %s End.", this, __FUNCTION__);
    return 0;
}

 

界面测试

 

测试效果,目前延时很低

 

 

 

 

技术合作

 

demo 下载

https://download.csdn.net/download/m0_37826678/12911878

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RTMP推流延时可以通过以下几种方式来减小: 1. 使用WebRTC:WebRTC是一种实时通信协议,相比于RTMP具有更延时。它使用UDP传输,并且支持NACK机制,可以更及时地反馈丢包情况并进行重传,从而减小延时。\[1\] 2. 优化网络环境:确保网络稳定和带宽充足是减小延时的关键。可以通过使用高质量的网络连接、优化CDN节点的覆盖范围等方式来改善网络环境。\[1\] 3. 使用RTCP报文:RTCP报文可以用于通知播放和推流连接的断开,从而节省资源消耗和减少无效传输。这可以通过减少无效传输来降延时。\[2\] 4. 优化播放端缓冲:播放端的jitbuffer设置可以影响延时。如果希望实现延时,可以适当减小jitbuffer的大小,以便更快地播放数据。然而,需要注意的是,减小jitbuffer可能会增加对网络抖动的敏感性。\[3\] 综上所述,通过使用WebRTC、优化网络环境、使用RTCP报文和优化播放端缓冲等方式,可以减小RTMP推流延时。 #### 引用[.reference_title] - *1* *2* *3* [下一代延时直播CDN:HLS、RTMP 与UDP +WebRTC](https://blog.csdn.net/weixin_33986223/article/details/111984220)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值