2013-01-03 6 views
4

을 사용하여 H.264 비디오에 KLV 패킷을 인코딩하는 방법 현재 libav *를 사용하여 H.264 비디오를 인코딩하고 있습니다. 비트 스트림에 KLVPackets를 추가하고 싶지만 어디에서 구현해야하는지 모르겠습니다.libav *

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

사람 :이 avcodec 내에서 구조체는,하지만 난 (단지 관련 코드를 왼쪽) 프레임 메타 데이터

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

현재 FFMPEG 코드를 그것을 작성하는 방법이 확실하지

내가 일할 수있는 모든 예를 알고 있습니까?

답변

0

KLV 메타 데이터는 비디오와 별개의 스트림을 의미합니다. 스트림에서 자체 PID가있는 MPEG-2 전송 스트림으로 멀티플렉싱합니다.

대안 구현은 KLV를 별도의 스트림으로 전송하는 것입니다. 즉, 한 IP/포트에서 비디오를 브로드 캐스트하고 다른 IP/포트에서 KLV를 브로드 캐스트합니다.

어느 쪽이든, 가장 큰 문제는 KLV 데이터를 동영상과 동기화하는 것입니다. 아직 KLV에서 비디오에 잘 섞여있는 오픈 소스 라이브러리를 찾지 못했습니다. 비용을 지불 할 수있는 라이브러리가 몇 개 있지만, 아직 그 라이브러리 중 하나를 사용해야합니다.