Замена устаревшего параметра кодека Avstream в LibavC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Замена устаревшего параметра кодека Avstream в Libav

Сообщение Anonymous »

Давным -давно я внедрил класс C ++ для создания видеофайлов MP4 из массива изображений. Код работает довольно хорошо, тем не менее, я обнаружил предупреждение о том, что я хочу избавиться. Параметр « Codec » из структуры avstream устарел, и я хочу ее заменить.
Вот мой текущий рабочий код:

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

AVOutputFormat *outputFormat = av_guess_format("ffh264", movieFile.toLocal8Bit().data(), nullptr);
if (!outputFormat)
return false;

enum AVCodecID videoCodecID = outputFormat->video_codec;

AVCodec *videoCodec = avcodec_find_encoder(videoCodecID);
if (!videoCodec)
return false;

AVStream *stream = avformat_new_stream(formatContext, videoCodec);
if (!stream)
return false;

AVCodecContext *videoCodecContext = stream->codec; // width = videoW;
videoCodecContext->height = videoH;
Теперь, чтобы заменить параметр « Codec », команда разработчиков LIBAV рекомендует использовать параметр « CodeCpar » ( avcodecParameters ), который был включен в структуру AVSTREAM. Пример, который они используют, чтобы поделиться этим: < /p>

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

if (avcodec_parameters_to_context(videoCodecContext, stream->codecpar) < 0)
return nullptr;
Примечание: codecpar ( avcodecparameters ) является самой структурой данных.
К сожалению, когда я пытаюсь использовать этот код, я получал эту проблему: обычно вся информация, хранящаяся в кодовом параметре , возникает из предыдущего видео -файла. Другими словами, информация уже существует. In my case, the situation is different because I am creating an MP4 file from scratch so there is no previous codecpar record to use, therefore I have to create a new instance of AVCodecParameters structure by myself, setting every variable manually.
As far, I was able to set all the variables from the codecpar structure, except for two:

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

uint8_t * extradata
int       extradata_size
< /code>
Примечание: в настоящее время я могу создать файл MP4 «успешно» без установки этих переменных, но файл неполный, и когда я пытаюсь воспроизвести его, используя «MPLAYER», я получил это сообщение об ошибке: < /p>
[extract_extradata @ 0x55b5bb7e45c0] No start code is found.
Я исследовал эти две поля, и кажется, что они хранят какую -то информацию, связанную с кодеком, которая в моем случае состоит extradata и extradata_size правильно для кодека H264?

Подробнее здесь: https://stackoverflow.com/questions/715 ... r-in-libav
Ответить

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

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

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

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

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