1
votes

I have following doubts in ffmpeg.Please clarify.

1.I am reading mp4 file using ffmpeg and after doing av_read_frame i am getting video(stream_index = 0),audio(stream_index = 1) packets First there is no order of coming of video/audio packets.Is it the standard case.

2.Video packets are coming of various sizes from the minimum of 14 to the maximum of 21824.Please point why the video packet size varies,somewhere it is written that for video one packet means one frame,so if for video pkt->size = 14 also equals one frame of video.(pkt is of type AVPacket).

3.If we demux the incoming mp4 stream in Probe function while parsing it and store the info in some buffer or calling av_read_frame demuxes it.

4.Is it possible in ffmpeg to demux the mp4 file and then assign both a/v in one stream of packets where video packet has stream_index = 1,and for audio = 0. or it has to be in separate stream.

5.Diff between ffmpeg processing for transport stream and mp4 file. if both are demuxed,decoded in same way or is it different.

Regards Mayank

1

1 Answers

3
votes

A media file is created from mutipule streams. A stream can be of mnay types. Audio, video, captions, metadata etc. But a stream can NOT be of multiple types.

1) av_read_frame will (usually) return the frames in the order they are written to the file. If the software that created the file did not mux them monotonically, you can not read it monotonically.

2) This is precisely how video compression works. The codec stores only the changes between frames. If there is very little motion, then one frame may be very similar to the previous frame, so the delta is very small.

3) This is not a question.

4) No.

5) Largely, no. But there is some difference in the file types. mp4 requires random access, while TS does not.