У меня есть куча растровых изображений, и мне нужно сделать их закодированными в h.264 во фрагментированном .mp4. Я использую C ++. Что может привести к тому, что мой профиль AV C установлен в 0, SPS [], PPS [] и код c строка в avc1.000000?
Вывод из mp4info:
Файл:
вспомогательная версия: 200
совместимая марка: iso6
совместимая марка: mp41
быстрый запуск: да
Mov ie:
длительность: 0 мс
масштаб времени: 1000
фрагменты: да
Найдено 1 треков
Трек 1:
флаги: 3 ENABLED IN-MOV IE
id: 1
тип: Видео
длительность: 0 мс
язык: und
медиа:
отсчет выборки: 0
шкала времени: 90000
длительность: 0 (единицы шкалы времени мультимедиа)
длительность: 0 (мс)
битрейт (вычисляется): 412,672 Кбит / с
выборка с фрагментами: 35
длительность с фрагментами: 540000
длительность с фрагментами: 6000 (мс)
ширина экрана: 1280.000000
высота экрана: 720.000000
Пример описания 0
C oding: avc1 (H.264)
Ширина: n 1280
Высота: 720
Глубина: 24
AV C Профиль: 0
AV C Профиль Compat: 0
AV C Уровень: 0
AV C NALU Длина Размер: 0
AV C SPS: []
AV C PPS: []
Строка кодеков: avc1. 000000
Я использую такие вещи, как
if (stream->codecpar->codec_id == AVCodecID.AV_CODEC_ID_H264)
{
err = ffmpeg.av_opt_set(cctx->priv_data, "preset", "ultrafast", 0);
err = ffmpeg.av_opt_set(cctx->priv_data, "tune", "zerolatency", 0);
err = ffmpeg.av_opt_set(cctx->priv_data, "profile", "high", 0);
}
...
AVDictionary* opts = null;
ffmpeg.av_dict_set(&opts, "movflags", "default_base_moof+frag_keyframe+empty_moov", 0);
...
AVPacket* pPacket = ffmpeg.av_packet_alloc();
try
{
int error;
do
{
ffmpeg.avcodec_send_frame(cctx, &convertedFrame).ThrowExceptionIfError();
error = ffmpeg.avcodec_receive_packet(cctx, pPacket);
} while (error == ffmpeg.AVERROR(ffmpeg.EAGAIN));
error.ThrowExceptionIfError();
}
finally
{
ffmpeg.av_packet_rescale_ts(pPacket, cctx->time_base, stream->time_base);
pPacket->stream_index = stream->index;
ffmpeg.av_interleaved_write_frame(ofctx, pPacket);
ffmpeg.av_packet_unref(pPacket);
}
Чего мне не хватает? Я использую примеры из inte rnet. Думал, что если AVFrame кодируется (send_frame) с H264 с профилями и пресетами и принимается как AVPacket. Это должно быть сделано автоматически.
Это мой первый пост, пожалуйста, будьте любезны. Заранее спасибо за помощь.