Декодирование отдельных конечных единиц H.264

В настоящее время я отправляю отдельные блоки NAL по сети. Эти блоки NAL генерируются x264. Теперь можно ли подавать эти блоки NAL по отдельности в avcodec_decode_video2?

Или мне нужно конкатенировать последние единицы, пока они не будут представлять один и тот же кадр? Если это так, то как это делается?

Я также читал, что могу получать пакеты SPS и PPS. Затем дождитесь хотя бы одного пакета и попытайтесь его декодировать. Это правильно?

Любой совет, который может быть предложен, будет принят с благодарностью


person madprogrammer2015    schedule 31.05.2015    source источник


Ответы (2)


Да, мы можем передавать блоки NAL в декодер по отдельности. H264 имеет возможность разбиения на несколько сегментов с несколькими блоками NAL на кадр. пл. обратитесь к руководству, в котором приведены шаги для декодирования с использованием ffmpeg. http://dranger.com/ffmpeg/tutorial01.html.

Также проверьте вывод вызова av_read_frame, чтобы понять, как поступают данные кадра. Предлагаем вам пл. обратитесь к приведенной ниже ссылке переполнения стека, которая также объясняет проблему с декодированием NAL H264 : декодировать серию конечных единиц с помощью ffmpeg

person shri    schedule 01.06.2015
comment
В учебнике используется av_read_frame(), но я не читаю из файла. Этот метод все еще работает с модулями NAL, проходящими через сеть? SPS и PPS — это все отдельные пакеты, которые я отправляю в сеть, x264 дает мне фрагменты по 1300 байт. Таким образом, ни одна из моих длин NAL не превышает этого размера. - person madprogrammer2015; 01.06.2015
comment
int av_read_packet (AVFormatContext * s,AVPacket * pkt) использовался раньше для чтения данных пакета, но теперь он устарел. И мы должны использовать av_read_frame(). пл. перейдите по ссылке ниже ffmpeg.sourcearchive.com/documentation/0.6/ - person shri; 05.06.2015

У меня была аналогичная проблема: установка ключевого кадра в пакете решила любые проблемы с NAL. Также убедитесь, что вы установили дополнительные данные в контексте кодека.

person Jimmy Bhakthavatsalam    schedule 24.09.2018
comment
Привет, не могли бы вы уточнить, как это отвечает на вопрос, пожалуйста? Спасибо. - person MandyShaw; 25.09.2018
comment
Проверьте, был ли ваш пакет ключевым кадром, если это так, установите флаг как package-›flags = != AV_PKT_FLAG_KEY или очистите его как package-›flags &= ~AV_PKT_FLAG_KEY - person Jimmy Bhakthavatsalam; 25.09.2018