[Libav-user] Remuxing single MPEG-2 TS to multiple outputs (MPEG2 PS).

wl2776 wl2776 at gmail.com
Mon May 16 13:11:52 CEST 2011


Hi all.

My program remuxes MPEG-2 Transport Stream to several MPEG-2 Program
Streams.
I have a single AVFormatContext for an input data and several
AVFormatContexts (one for each output file). 
Output AVFormatContexts are created and destroyed dynamically during program
execution.

Sometimes one packet should go to several outputs.

Basically, main loop looks like the following


int64_t pkt_pts, pkt_dts;
int pkt_stream_index;

while(!exiting()){
    av_read_frame(input, &pkt);
    pkt_stream_index = pkt.stream_index;
    pkt_pts = pkt.pts;
    pkt_dts = pkt.dts;
    for (< each output stream >) {
        if ( < pkt should go to  the current_output > ) {
          pkt.stream_index = <proper index>;
          pkt.pts = <proper pts>;
          pkt.dts = <proper dts>;

          av_write_frame(current_output, &pkt);

          pkt.stream_index = pkt_stream_index;
          pkt.pts = pkt_pts;
          pkt.dts = pkt_dts;
        }
    }
    av_free_packet(&pkt);
}


This scheme worked successfully for a very long time, since 2008.
However, now I've downloaded recent ffmpeg version from git and observe
crashes.
gdb shows that they are in avformat_free_context();

I've seen the messages here in the list, stating that I should duplicate a
packet before writing it to the output.
It it right?
What else should I correct in the scheme in order to conform to the current
API standards?

--
View this message in context: http://libav-users.943685.n4.nabble.com/Remuxing-single-MPEG-2-TS-to-multiple-outputs-MPEG2-PS-tp3525959p3525959.html
Sent from the libav-users mailing list archive at Nabble.com.


More information about the Libav-user mailing list