GSTREAMER NVV4L2H264ENC производит слишком много буферов и поврежденных результатов после поиска между двумя видеоC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 GSTREAMER NVV4L2H264ENC производит слишком много буферов и поврежденных результатов после поиска между двумя видео

Сообщение Anonymous »

Я работаю над приложением C ++, используя GSTREAMER на платформе NVIDIA Jetson. У меня есть конвейер, в котором я декодирует и повторно кодирует видео с использованием NVV4L2H264ENC, затем отправляю его по сети, используя RTPH264PAY и UDPSINK. /> [*] В любой момент я хочу прервать воспроизведение и воспроизводить короткое видео (например, реклама). < /p>
< /li>
Когда короткое видео заканчивается (на EOS), я ищу обратно на предыдущую позицию в длинной видео и воспроизведении. Проблема
Это работает в основном, как и ожидалось, но при переходе с короткого видео на длинное видео с помощью поиска я получаю сломанное или поврежденное изображение в течение 2–3 секунд. После этого воспроизведение возвращается к нормальному.

Код: Выделить всё

v4l2videoenc gstv4l2videoenc.c:1257:gst_v4l2_video_enc_loop: Encoder is producing too many buffers

Интересно, что если я просто ищу в длинном видео, не воспроизводя короткое видео между ними, все работает нормально. Проблема возникает только после EOS короткого видео и возобновления длинного.

Код: Выделить всё

filesrc -> qtdemux -> queue -> h264parse -> nvv4l2decoder -> nvv4l2enc -> rtph264pay -> udpsink

функция поиска:

Код: Выделить всё

void Sender::seek(gint64 time)
{
QMutexLocker locker(&pipelineMutex);
if (pipelineElement){

GstState state;
gst_element_get_state(pipelineElement, &state, nullptr, GST_CLOCK_TIME_NONE);
qDebug() changePipeline(tempConf);
if(self->senderStatus.mediaTime){
qDebug().noquote() senderStatus.mediaTime);
}
}
break;
case GST_MESSAGE_ASYNC_DONE: {
qDebug() pipelineElement, GST_STATE_PLAYING);
});
break;
}
}
return TRUE;
}

< /code>
 что я попробовал < /strong> < /p>
[list]
  Настройка состояния трубопровода для готового и обратно перед поиском < /p>
< /li>
  intermediate elements like videorate, identity, and queue

[*]Delaying the seek slightly after switching the pipeline

[*]Use omxh264enc alternative of the nvv4l2h264enc

[/list]
Ни одна из этих попыток не решила проблему. Энкодер по -прежнему производит всплеск неожиданных буферов после перехода обратно на длинное видео, а приемник показывает поврежденные кадра в течение этого времени.
Мои вопросы < /p>

  Каков правильный способ переключения между двумя видео и возобновляемым оригинальным поиском при использовании nvv4l2h264enc? />   Почему энкодер генерирует слишком много буферов и поврежденных рам после перехода с одного видео на другое? Информация < /p>

  jetson < /p>
< /li>
  gstreamer версия: 1.14.5 < /p>
< /li>
  через rtph264pay to udpsink multicast < /p>
< /li>
< /ul>
Я бы признателен за любые идеи или предложения от других, которые обрабатывали аналогичные воспроизведения видео и сценарии переключения, используя Gstreamer на Jetson. Заранее спасибо.  

Подробнее здесь: [url]https://stackoverflow.com/questions/79700915/gstreamer-nvv4l2h264enc-produces-too-many-buffers-and-corrupted-output-after-see[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»