Как мне кодировать пакеты KLV в видео H.264, используя libav *

В настоящее время я использую libav * для кодирования видео H.264. Я хочу добавить KLVPackets в поток битов, но не знаю, где это реализовать.

В avcodec есть структура, но я не уверен, как записать ее в метаданные фрейма

typedef struct {
UID key;
int64_t offset;
uint64_t length;
} KLVPacket;

Текущий код FFMPEG (оставлен только соответствующий код):

av_register_all();

pOutputFormat = av_guess_format(NULL, fileName, NULL);
pFormatCtx=avformat_alloc_context();
pVideoStream = av_new_stream(pFormatCtx,0);
pCodecCtx=pVideoStream->codec;
...
av_dump_format(pFormatCtx, 0, fileName,1);
pCodec = avcodec_find_encoder(pCodecCtx->codec_id);
avio_open(&pFormatCtx->pb, fileName, AVIO_FLAG_READ_WRITE)
avformat_write_header(pFormatCtx, &pDict);
...
avcodec_encode_video(pCodecCtx,outbuf,outbuf_size,ppicture);
...
int ret = av_interleaved_write_frame(pFormatCtx, &pkt);

Кто-нибудь знает примеры, на которых я могу работать?

4

Решение

Метаданные KLV предназначены для отдельного потока видео. Вы смешиваете поток в транспортный поток MPEG-2 со своим собственным PID.

Альтернативной реализацией является отправка KLV в виде отдельного потока. То есть транслируйте свое видео на один IP / порт, а ваше KLV на другой IP / порт.

В любом случае, вашей самой большой проблемой будет синхронизация данных KLV с видео. Мне еще предстоит найти библиотеку с открытым исходным кодом, которая хорошо транслирует видео в KLV. Есть несколько библиотек, за которые вы можете заплатить, но я еще не использовал ни одну из них.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]