2013-01-03 117 views
4

目前,我正在使用libav *編碼H.264視頻。我想將KLVPackets添加到比特流中,但不知道在哪裏實現它。如何使用libav將KLV數據包編碼爲H.264視頻*

有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); 

任何人知道我能工作的任何例子嗎?

回答

0

KLV元數據意味着獨立於視頻的流。您使用自己的PID將數據流複合到MPEG-2傳輸流中。

另一種實施方式是將KLV作爲單獨的流發送。也就是說,在一個IP /端口上播放你的視頻,在另一個IP /端口上播放你的KLV。

無論採用哪種方式,您最大的問題都是將KLV數據同步到視頻。我還沒有找到一個開源的庫,它可以很好地將KLV複製到視頻中。有幾個圖書館可以支付,但我還沒有使用其中的任何一個。

相關問題