超低延时直播rtmp推流
程序员文章站
2022-07-06 19:19:55
...
项目起源:
改项目主要是基于类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
上一篇: ai怎么绘制心形的蛋糕素材?