Проверьте этот урок.Он должен иметь возможность декодировать любой тип видео, включая H.264:
http://dranger.com/ffmpeg/
Я не знаю точно, что вызывает проблему, но я подозреваю, что это как-то связано стот факт, что вы не используете av_read_frame
из libavformat для анализа данных за один раз.H.264 имеет возможность разбивать кадр на несколько фрагментов и, следовательно, несколько блоков NAL.
Я уверен, что кодер x264 не делает этого по умолчанию и выдает один блок NAL на кадр.Однако существуют блоки NAL с другой информацией о потоке, которые необходимо подавать в декодер.Я экспериментировал с этим в прошлом, и когда av_read_frame
анализирует фреймы данных, он иногда содержит несколько блоков NAL.Я бы посоветовал внимательно изучить руководство и посмотреть, работает ли он.
Другое дело, что я думаю, что вам нужно передать первые 4 байта блока NAL в avcodec_decode_video
, если вы используете этот стартовый кодговорить о (0x00000001
).Изучив выходные данные из av_read_frame
, стартовые коды все еще находятся в данных при передаче в декодер.