Hello,

I have a code in which I am receiving H264 sps, pps and frame packets and want to mux them into matroska, using libav*.

As instructed in the sample codes, I am doing roughly the following:

AVFormatContext *oc;
AVCodec *codec;
AVCodecContext *ctx;
AVStream *stream;
AVPacket *avpkt;

avformat_alloc_output_context2(&oc, NULL, NULL, "output.mkv");

codec = avcodec_find_decoder(AV_CODEC_ID_H264); // AVCodec = possible parameters for a codec ctx = avcodec_alloc_context3(codec); // reserve memory for codec related thingies.. AVCodecContext = defines codec parameters (as per AVCodec) stream = avformat_new_stream(oc,ctx->codec); // add new stream to AVFormatContext ctx->codec is "AVCodec"

avcodec_copy_context(stream->codec,ctx); // stream.codec == AVCodecContext (we populate the codec parameters for stream "stream")

// THE QUESTION: How do we populate stream->codec, i.e. AVCodecContext instance, correctly for the stream? (***)

avio_open(&oc->pb, filename, AVIO_FLAG_WRITE); // open the matroska file ..
ret = avformat_write_header(oc, NULL);

...

av_interleaved_write_frame(oc,avpkt);           // pass packets to the muxer


The problem is, that prior to opening the matroska file, stream->codec has no information about picture dimensions (matroska header requires pic dimensions). I can solve this by passing sps, pps and an i-frame to a decoder (with avcodec_decode_video2), which populates an AVCodecContext with correct picture information, and then use that AVCodecContext. However, this seems to be an overkill.. I do not want to decode anything, just to get the codec parameters from sps and pps. Is there a simpler way to achieve this?

In fact, for files (AVFormatContext), there is the routine "avformat_find_stream_info" for such task. At the present case, however, I only have raw sps, pps and frame packets.

One observation more: the sps, pps and I-frame (nal unit types 7,8 & 5), must the aggregated into a single packet in order for the matroska muxer to work.

Regards,

Sampsa

_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to