如何使用libav *将KLV数据包编码为H.264视频

时间:2013-01-03 14:14:17

标签: c++ ffmpeg 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);

任何人都知道我可以使用的任何例子吗?

1 个答案:

答案 0 :(得分:0)

KLV元数据旨在成为与视频分离的流。您可以使用自己的PID将流复制到MPEG-2传输流中。

另一种实现方式是将KLV作为单独的流发送。也就是说,在一个IP /端口上播放您的视频,在另一个IP /端口上播放您的KLV。

无论哪种方式,您最大的问题都是将KLV数据与视频同步。我还没有找到一个开源库,可以将KLV中的多路复用技术很好地用于视频。您可以支付几个库,但我还没有使用其中任何一个。