#2547: -muxrate option doesn't work with stream_segment mpegts output ------------------------------------+-------------------------------------- Reporter: jettoblack | Type: defect Status: new | Priority: important Component: avformat | Version: git-master Keywords: | Blocked By: Blocking: | Reproduced by developer: 0 Analyzed by developer: 0 | ------------------------------------+-------------------------------------- When I use the -muxrate parameter with the mpegts muxer directly, it works fine without any errors and I get the desired muxrate. But it is not working when using the mpegts muxer indirectly via the stream_segment muxer (even after patching segment.c to pass the muxrate parameter to the mpegts muxer and verifying that the right value was passed - see below).
Using mpegts muxer directly: ffmpeg -i lg4test.ts -map 0:0 -vcodec libx264 -s 640x360 -b:v 1M -minrate 1M -maxrate 1M -bufsize 500K -muxrate 1.25M -g 60 -profile:v main -map 0:1 -acodec aac -strict experimental -b:a 128K -ac 2 -ar 48000 -f mpegts -v verbose test.ts Complete console output attached as: mpegts_output.txt Quote from the output: [mpegts @ 0x7fc381829c00] muxrate 1250000, pcr every 16 pkts, sdt every 415, pat/pmt every 83 pkts So, that looks good. Next I want to do the same thing when using mpegts via the stream_segment muxer. First I edited libavformat/segment.c to enable the muxrate option to be passed to the muxer specified by -segment_format, via a new option called -segment_format_muxrate (see patch attached). There may be a better way to accomplish this, but it works for now. If you prefer, I can submit this patch first to ffmpeg-devel and then inquire about this bug. Next, making use of this new option: ffmpeg -i lg4test.ts -map 0:0 -vcodec libx264 -s 640x360 -b:v 1M -minrate 1M -maxrate 1M -bufsize 500K -muxrate 1.25M -g 60 -profile:v main -map 0:1 -acodec aac -strict experimental -b:a 128K -ac 2 -ar 48000 -f ssegment -segment_list test.m3u8 -segment_list_flags +live -segment_time 10 -segment_format mpegts -segment_format_muxrate 1.25M -segment_time_delta 1.0 -v verbose test%05d.ts Complete console output attached as: ssegment_output.txt This message cofirms that the muxrate option was correctly passed to the mpegts muxer: [mpegts @ 0x7fdff3c16800] muxrate 1250000, pcr every 16 pkts, sdt every 415, pat/pmt every 83 pkts However, as you can see in the console output, I now get this error message repeated very often: [mpegts @ 0x7fdff3c16800] dts < pcr, TS is invalid Last message repeated 58 times When this error occurs, I found that the size of each segment file (which should be all roughly the same size, since they are all approx. the same duration) is actually growing by multiples, e.g.: ls -al test0*.ts -rw-r--r-- 1 jasonlivingston admin 1657784 May 8 22:39 test00000.ts -rw-r--r-- 1 jasonlivingston admin 3273268 May 8 22:39 test00001.ts -rw-r--r-- 1 jasonlivingston admin 5023736 May 8 22:39 test00002.ts -rw-r--r-- 1 jasonlivingston admin 6452160 May 8 22:39 test00003.ts -rw-r--r-- 1 jasonlivingston admin 8077796 May 8 22:39 test00004.ts -rw-r--r-- 1 jasonlivingston admin 9741784 May 8 22:39 test00005.ts -rw-r--r-- 1 jasonlivingston admin 11516692 May 8 22:39 test00006.ts -rw-r--r-- 1 jasonlivingston admin 13087244 May 8 22:39 test00007.ts -rw-r--r-- 1 jasonlivingston admin 14500816 May 8 22:39 test00008.ts -rw-r--r-- 1 jasonlivingston admin 16241884 May 8 22:39 test00009.ts Again, these are all the same duration and same CBR, so they should be roughly the same size. Any ideas why this works fine for using mpegts directly, but not when using mpegts via ssegment? -- Ticket URL: <https://ffmpeg.org/trac/ffmpeg/ticket/2547> FFmpeg <http://ffmpeg.org> FFmpeg issue tracker _______________________________________________ FFmpeg-trac mailing list FFmpeg-trac@avcodec.org http://avcodec.org/mailman/listinfo/ffmpeg-trac