Here's how I achieved this. My use case is an audio-only stream. The backend service ships MPEG-DASH files to static hosting. I upload the initializing .mp4 segment once, subsequently only uploading each new .m4s segment.
Also, the playlist .mpd is updated every segment, in order to tell a newly arriving listener where to begin playback. The listener will pick up an initializing .mp4 file for the desired bitrate, followed by the current and following .m4s segments.
- My source material is a series of 10-second media segments in uncompressed .wav format.
- I'll run ffmpeg once per each new media segment
- I've specified a segment size of 11 seconds, to ensure that ffmpeg generates exactly 1 output .m4s segment for each source media segment.
ffmpeg \
-i pelicans-1234.wav \
-f hls \
-ac 2 \
-c:a aac \
-b:a 128k \
-minrate 128k \
-maxrate 128k \
-start_number 1234 \
-hls_fmp4_init_filename pelicans-128k-IS.mp4 \
-hls_segment_filename pelicans-128k-%d.m4s \
-hls_segment_type fmp4 \
-hls_time 11 \
temp.m3u8