[FFmpeg-user] Generating HLS chunks on demand

Vincent Deconinck vdeconinck at gmail.com
Mon Jan 23 19:15:15 EET 2023


Hi,

I performed more tests thinking that maybe the -f mpegts did not create
"hls-compliant" ts chunks (whatever that could mean).
So I tried creating first a full hls with the following command :
ffmpeg -i source.ts -c:v libx264 -b:v 1000k -c:a aac -b:a 128k -g 25 -f hls
-hls_time 4 sample.m3u8
This took a long time to process the full video of course, but the result
plays perfectly fine.
I then created a partial version limited to 12 seconds (=3 chunks of 4
secs) from the same source, as follows:
ffmpeg -i source.ts -c:v libx264 -b:v 1000k -c:a aac -b:a 128k -g 25 -t 12
-f hls -hls_time 4 sample_part.m3u8

I performed a binary diff on the resulting ts files, and the chunks #0 and
#1 are exactly the same.
However, chunk #3 (which is the last of the "partial" version) is different
(375kB vs 392kB) :

  1578 sample.m3u8
   190 sample_part.m3u8
582424 sample_part0.ts
764972 sample_part1.ts
383896 sample_part2.ts
582424 sample0.ts
764972 sample1.ts
401004 sample2.ts
...

What is the reason for that difference, and how can I make sure I generate
a valid segment for those 4 seconds ?

Kind regards,

Vincent

On Fri, Jan 20, 2023 at 5:44 PM Vincent Deconinck <vdeconinck at gmail.com>
wrote:

> Hi,
> I have thousands of files that I would like to serve as HLS streams to a
> very small number of users (3-5), without having to process them all
> upfront. So I'm looking for a way to generate single HLS chunks (as opposed
> to a full HLS package) only when they are requested.
> My problem is the resulting stream is choppy and basically unusable.
> Here are the commands I'm using::
>
> ffmpeg -i source.ts -c:v libx264 -b:v 1000k -c:a aac -b:a 128k -g 25 -ss 0
> -t 4 -f mpegts cache\sample-0.ts
> ffmpeg -i source.ts -c:v libx264 -b:v 1000k -c:a aac -b:a 128k -g 25 -ss 4
> -t 4 -f mpegts cache\sample-1.ts
> ffmpeg -i source.ts -c:v libx264 -b:v 1000k -c:a aac -b:a 128k -g 25 -ss 8
> -t 4 -f mpegts cache\sample-2.ts
> ffmpeg -i source.ts -c:v libx264 -b:v 1000k -c:a aac -b:a 128k -g 25 -ss
> 12 -t 4 -f mpegts cache\sample-3.ts
> ffmpeg -i source.ts -c:v libx264 -b:v 1000k -c:a aac -b:a 128k -g 25 -ss
> 16 -t 4 -f mpegts cache\sample-4.ts
>
> The m3u8 file is :
>
> #EXTM3U
> #EXT-X-VERSION:3
> #EXT-X-TARGETDURATION:4
> #EXT-X-MEDIA-SEQUENCE:0
> #EXTINF:4.000000,
> sample-0.ts
> #EXTINF:4.000000,
> sample-1.ts
> #EXTINF:4,000000,
> sample-2.ts
> #EXTINF:4,000000,
> sample-3.ts
> #EXTINF:4,000000,
> sample-4.ts
> #EXT-X-ENDLIST
>
> What am I doing wrong ?
>
> Kind Regards,
>
> Vincent
>


More information about the ffmpeg-user mailing list