Вот мой текущий рабочий код:
Код: Выделить всё
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;
Код: Выделить всё
if (avcodec_parameters_to_context(videoCodecContext, stream->codecpar) < 0)
return nullptr;
К сожалению, когда я пытаюсь использовать этот код, я получал эту проблему: обычно вся информация, хранящаяся в кодовом параметре , возникает из предыдущего видео -файла. Другими словами, информация уже существует. 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.
Подробнее здесь: https://stackoverflow.com/questions/715 ... r-in-libav
Мобильная версия