Лучшие настройки для H264_Nven c, чтобы минимизировать задержку? (FFMPEG) - PullRequest
1 голос
/ 17 января 2020

В настоящее время я использую Libavcode c для кодирования видеокадров с использованием H.264. Поскольку я транслирую эти видеокадры после их кодирования, для меня крайне важно минимизировать задержку. Мои текущие настройки:

avcodec_register_all();
codec = avcodec_find_encoder(AV_CODEC_ID_H264);

// allocate and set ffmpeg context
context = avcodec_alloc_context3(encoder->codec);
context->bit_rate = bitrate;
context->width = out_width;
context->height = out_height;
context->time_base.num = 1;
context->time_base.den = 30;
context->gop_size = 1; // send SPS/PPS headers every packet
context->max_b_frames = 0;
context->pix_fmt = AV_PIX_FMT_YUV420P;

// set encoder parameters to max performance
av_opt_set(context->priv_data, "preset", "ultrafast", 0);
av_opt_set(context->priv_data, "tune", "zerolatency", 0);

// open capture encoder
avcodec_open2(context, codec, NULL);

Эти настройки работают хорошо, но я пытаюсь переключиться на аппаратное кодирование, чтобы снять нагрузку с моего ЦП. В настоящее время у меня есть графический процессор NVIDIA, поэтому я попытался использовать следующие настройки с h264_nvenc:

codec = avcodec_find_encoder_by_name("h264_nvenc");

// allocate and set ffmpeg context
context = avcodec_alloc_context3(encoder->codec);
context->dct_algo = FF_DCT_FASTINT;
context->bit_rate = bitrate;
context->width = out_width;
context->height = out_height;
context->time_base.num = 1;
context->time_base.den = 30;
context->gop_size = 1; // send SPS/PPS headers every packet
context->max_b_frames = 0;
context->pix_fmt = AV_PIX_FMT_YUV420P;

// set encoder parameters to max performancen
av_opt_set(context->priv_data, "preset", "llhq", 0);
av_opt_set(context->priv_data, "tune", "zerolatency", 0);

Проблема в том, что я заметил, что задержка с h264_nvenc значительно больше, чем задержка с AV_CODEC_ID_H264 (программная версия). Я думаю, что мои настройки или настройки h264_nvenc должны быть неправильными, поскольку кодирование на основе графического процессора должно выполняться быстрее, чем кодирование на основе программного обеспечения. Может ли кто-нибудь указать мне правильное направление? Большое спасибо!

...