Solution 1
You can use -hls_flags single_file to store all segments in a single ts file. The resulting playlist will contain the lengths and offsets of each segment, and the client will request them independently.
Example for 6s segments:
ffmpeg -i input -c:v libx264 -r 25 -g 75 -sc_threshold 0 -c:a libfdk_aac -hls_time 6 -hls_playlist_type vod -hls_flags single_file out.m3u8 #EXTM3U #EXT-X-VERSION:4 #EXT-X-TARGETDURATION:6 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:6.000000, #EXT-X-BYTERANGE: 1397404@0 out.ts #EXTINF:6.000000, #EXT-X-BYTERANGE: 1049416@1397404 out.ts #EXTINF:6.000000, #EXT-X-BYTERANGE: 1423348@2446820 out.ts [...] #EXT-X-ENDLIST
EXT-X-BYTERANGE supported in version 4 . If you need version 3 , you need to convert this playlist to version 3 one and make a handler to return the correct range with the correct MIME type:
Decision 2
Use nginx with nginx-vod-module , which can also execute DASH and others
source share