[FFmpeg-trac] #10247(ffmpeg:new): ffmpeg webm dash live
FFmpeg
trac at avcodec.org
Fri Mar 10 12:25:26 EET 2023
#10247: ffmpeg webm dash live
-------------------------------------+-------------------------------------
Reporter: razvan | Type: defect
Status: new | Priority: normal
Component: ffmpeg | Version: git-
Keywords: webm dash | master
live | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
I'm following the instructions from here
http://wiki.webmproject.org/adaptive-streaming/instructions-to-do-
webm-live-streaming-via-dash
to create a dash live stream.
I want an audio only stream so I removed from above the video.
Ubuntu 22.04, latest ffmpeg,ffplay compiled from git, lighttpd and latest
shaka player from git (in firefox/chrome)
These are the ffmpeg commands I used and their output
*** to create the chunks
{{{
ffmpeg \
-stream_loop -1 -re -i $HOME/.stream-dash/test.flac \
-map 0:0 \
-c:a libvorbis \
-b:a 128k -ar 44100 -ac 2 -dash 1 \
-f webm_chunk \
-audio_chunk_duration 2000 \
-header /dev/shm/dash/sunet_5.hdr \
-chunk_start_index 1 \
/dev/shm/dash/sunet_5_%d.chk
}}}
{{{
ffmpeg version N-109970-g7dc0944ce2-09.mar.2023 Copyright (c) 2000-2023
the FFmpeg developers
built with gcc 11 (Ubuntu 11.3.0-1ubuntu1~22.04)
configuration: --prefix=/dev/shm/ffmpeg/build --pkg-config-
flags=--static --extra-cflags=-I/dev/shm/ffmpeg/build/include --extra-
ldflags=-L/dev/shm/ffmpeg/build/lib --extra-ldflags=-L/usr/lib/x86_64
-linux-gnu --extra-libs='-lpthread -lm' --ld=g++
--bindir=/dev/shm/ffmpeg/bin --extra-version=09.mar.2023 --arch=x86_64
--enable-gpl --enable-version3 --enable-gnutls --enable-libass --enable-
libfreetype --enable-libfontconfig --enable-libcaca --enable-libcodec2
--enable-libmp3lame --enable-libvorbis --enable-opengl --enable-libpulse
--enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-libopus
--enable-libvpx --enable-libdav1d --enable-libvmaf --enable-libxvid
--enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-
libtheora --enable-libvidstab --enable-libxml2 --enable-lv2 --enable-
libxcb --enable-libxcb-shm --enable-libzmq --enable-libzimg --enable-
nonfree
libavutil 58. 3.100 / 58. 3.100
libavcodec 60. 6.100 / 60. 6.100
libavformat 60. 4.100 / 60. 4.100
libavdevice 60. 2.100 / 60. 2.100
libavfilter 9. 4.100 / 9. 4.100
libswscale 7. 2.100 / 7. 2.100
libswresample 4. 11.100 / 4. 11.100
libpostproc 57. 2.100 / 57. 2.100
Input #0, flac, from '/home/raz/.stream-dash/test.flac':
Duration: 00:06:41.59, start: 0.000000, bitrate: 379 kb/s
Stream #0:0: Audio: flac, 44100 Hz, mono, s16
Stream mapping:
Stream #0:0 -> #0:0 (flac (native) -> vorbis (libvorbis))
Press [q] to stop, [?] for help
[webm_chunk @ 0x564b178b2bc0] Opening '/dev/shm/dash/sunet_5.hdr' for
writing
Output #0, webm_chunk, to '/dev/shm/dash/sunet_5_%d.chk':
Metadata:
encoder : Lavf60.4.100
Stream #0:0: Audio: vorbis, 44100 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc60.6.100 libvorbis
[webm_chunk @ 0x564b178b2bc0] Opening '/dev/shm/dash/sunet_5_1.chk' for
writing
[webm_chunk @ 0x564b178b2bc0] Opening '/dev/shm/dash/sunet_5_2.chk' for
writing
[webm_chunk @ 0x564b178b2bc0] Opening '/dev/shm/dash/sunet_5_3.chk' for
writing
[webm_chunk @ 0x564b178b2bc0] Opening '/dev/shm/dash/sunet_5_4.chk' for
writing
[webm_chunk @ 0x564b178b2bc0] Opening '/dev/shm/dash/sunet_5_5.chk' for
writing
[webm_chunk @ 0x564b178b2bc0] Opening '/dev/shm/dash/sunet_5_6.chk' for
writing
....
....
}}}
*** to create the manifest
{{{
ffmpeg \
-f webm_dash_manifest -live 1 \
-i /dev/shm/dash/sunet_5.hdr \
-c copy \
-map 0 \
-f webm_dash_manifest -live 1 \
-adaptation_sets "id=0,streams=0" \
-chunk_start_index 1 \
-chunk_duration_ms 2000 \
-time_shift_buffer_depth 10 \
-minimum_update_period 7200 \
-utc_timing_url "http://192.168.1.2:5050/time.php" \
/dev/shm/dash/sunet.mpd
}}}
{{{
ffmpeg version N-109970-g7dc0944ce2-09.mar.2023 Copyright (c) 2000-2023
the FFmpeg developers
built with gcc 11 (Ubuntu 11.3.0-1ubuntu1~22.04)
configuration: --prefix=/dev/shm/ffmpeg/build --pkg-config-
flags=--static --extra-cflags=-I/dev/shm/ffmpeg/build/include --extra-
ldflags=-L/dev/shm/ffmpeg/build/lib --extra-ldflags=-L/usr/lib/x86_64
-linux-gnu --extra-libs='-lpthread -lm' --ld=g++
--bindir=/dev/shm/ffmpeg/bin --extra-version=09.mar.2023 --arch=x86_64
--enable-gpl --enable-version3 --enable-gnutls --enable-libass --enable-
libfreetype --enable-libfontconfig --enable-libcaca --enable-libcodec2
--enable-libmp3lame --enable-libvorbis --enable-opengl --enable-libpulse
--enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-libopus
--enable-libvpx --enable-libdav1d --enable-libvmaf --enable-libxvid
--enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-
libtheora --enable-libvidstab --enable-libxml2 --enable-lv2 --enable-
libxcb --enable-libxcb-shm --enable-libzmq --enable-libzimg --enable-
nonfree
libavutil 58. 3.100 / 58. 3.100
libavcodec 60. 6.100 / 60. 6.100
libavformat 60. 4.100 / 60. 4.100
libavdevice 60. 2.100 / 60. 2.100
libavfilter 9. 4.100 / 9. 4.100
libswscale 7. 2.100 / 7. 2.100
libswresample 4. 11.100 / 4. 11.100
libpostproc 57. 2.100 / 57. 2.100
Input #0, webm_dash_manifest, from '/dev/shm/dash/sunet_5.hdr':
Metadata:
ENCODER : Lavf60.4.100
Duration: N/A, bitrate: N/A
Stream #0:0: Audio: vorbis, 44100 Hz, stereo, fltp
Metadata:
ENCODER : Lavc60.6.100 libvorbis
webm_dash_manifest_file_name: sunet_5.hdr
webm_dash_manifest_track_number: 1
Output #0, webm_dash_manifest, to '/dev/shm/dash/sunet.mpd':
Metadata:
encoder : Lavf60.4.100
Stream #0:0: Audio: vorbis, 44100 Hz, stereo, fltp
Metadata:
ENCODER : Lavc60.6.100 libvorbis
webm_dash_manifest_file_name: sunet_5.hdr
webm_dash_manifest_track_number: 1
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
size= 1kB time=-577014:32:22.77 bitrate=N/A speed=N/A ed=N/A
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:4kB
muxing overhead: unknown
}}}
In the script that start ffmpeg I have:
- start ffmpeg webm_chunk creation in background
- sleep 2
- run ffmpeg webm_dash_manifest
** Use shaka player to play the stream
If I start the play right after starting stream creation with ffmpeg,
shaka play the stream with no errors in browser console
But after 1 minute, these shaka report these errors in browser console:
{{{
media_source_engine.js:850
Possible encoding problem detected! Unexpected buffered range for
reference shaka.media.SegmentReference
{startTime: 104, endTime: 106, trueEndTime: 106, startByte: 0,
getUrisInner: ƒ, …}
from URIs ['https://xxx/dash/sunet_5_54.chk'] should be {start: 104, end:
106} but got {start: 104.986, end: 107.006}
...
...
media_source_engine.js:850
Possible encoding problem detected! Unexpected buffered range for
reference shaka.media.SegmentReference
{startTime: 322, endTime: 324, trueEndTime: 324, startByte: 0,
getUrisInner: ƒ, …} f
rom URIs ['https://xxx/dash/sunet_5_162.chk'] should be {start: 322, end:
324} but got {start: 324.852, end: 326.858}
...
...
media_source_engine.js:850 Possible encoding problem detected! Unexpected
buffered range for reference
shaka.media.SegmentReference {startTime: 394, endTime: 396, trueEndTime:
396, startByte: 0, getUrisInner: ƒ, …}
from URIs ['https://xxx/dash/sunet_5_198.chk'] should be {start: 394, end:
396} but got {start: 397.225, end: 399.256}
}}}
every time the issue start with the same chunk , sunet_5_54.chk
and are reported for every chunk after that.
Start, End discrepancy increase from chunk to chunk.
Shaka continue to play smoothly for a while even if these errors are
reported.
But if I try to play the stream around 1 minute after I started ffmpeg,
some different errors are reported,
(I think shaka is asking for chunks not created yet) and no play is
possible.
** Use ffplay to play the stream,
ffplay request from the lighttpd chunks in future, that are not yet
created, like 3-4 number in the future
ffplay http://192.168.1.2:5050/dash/sunet.mpd
{{{
ffplay version N-109970-g7dc0944ce2-09.mar.2023 Copyright (c) 2003-2023
the FFmpeg developers
built with gcc 11 (Ubuntu 11.3.0-1ubuntu1~22.04)
configuration: --prefix=/dev/shm/ffmpeg/build --pkg-config-
flags=--static --extra-cflags=-I/dev/shm/ffmpeg/build/include --extra-
ldflags=-L/dev/shm/ffmpeg/build/lib --extra-ldflags=-L/usr/lib/x86_64
-linux-gnu --extra-libs='-lpthread -lm' --ld=g++
--bindir=/dev/shm/ffmpeg/bin --extra-version=09.mar.2023 --arch=x86_64
--enable-gpl --enable-version3 --enable-gnutls --enable-libass --enable-
libfreetype --enable-libfontconfig --enable-libcaca --enable-libcodec2
--enable-libmp3lame --enable-libvorbis --enable-opengl --enable-libpulse
--enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-libopus
--enable-libvpx --enable-libdav1d --enable-libvmaf --enable-libxvid
--enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-
libtheora --enable-libvidstab --enable-libxml2 --enable-lv2 --enable-
libxcb --enable-libxcb-shm --enable-libzmq --enable-libzimg --enable-
nonfree
libavutil 58. 3.100 / 58. 3.100
libavcodec 60. 6.100 / 60. 6.100
libavformat 60. 4.100 / 60. 4.100
libavdevice 60. 2.100 / 60. 2.100
libavfilter 9. 4.100 / 9. 4.100
libswscale 7. 2.100 / 7. 2.100
libswresample 4. 11.100 / 4. 11.100
libpostproc 57. 2.100 / 57. 2.100
[http @ 0x7f9b2400a480] HTTP error 404 Not FoundB sq= 0B f=0/0
[dash @ 0x7f9b24000c80] Failed to open fragment of playlist
[http @ 0x7f9b240099c0] HTTP error 404 Not Found
[dash @ 0x7f9b24000c80] Failed to open fragment of playlist
[http @ 0x7f9b24008580] HTTP error 404 Not Found
[dash @ 0x7f9b24000c80] Failed to open fragment of playlist
[http @ 0x7f9b24008640] HTTP error 404 Not Found
[dash @ 0x7f9b24000c80] Failed to open fragment of playlist
...
...
}}}
from lighttpd access log, when ffplay asked for sunet_5_29.chk, ffmpeg
created sunet_5_26.chk
{{{
11:58:35 - "GET /dash/sunet.mpd HTTP/1.1" 206 1047 "-"
"Lavf/60.4.100"
11:58:35 - "GET /dash/sunet_5.hdr HTTP/1.1" 200 4688 "-"
"Lavf/60.4.100"
11:58:35 - "GET /dash/sunet_5_29.chk HTTP/1.1" 404 341 "-"
"Lavf/60.4.100"
11:58:35 - "GET /dash/sunet_5_30.chk HTTP/1.1" 404 341 "-"
"Lavf/60.4.100"
11:58:35 - "GET /dash/sunet_5_31.chk HTTP/1.1" 404 341 "-"
"Lavf/60.4.100"
11:58:35 - "GET /dash/sunet_5_32.chk HTTP/1.1" 404 341 "-"
"Lavf/60.4.100"
}}}
If I increase the sleep to 5 seconds between ffmpeg chunk creation and mpd
creation,
then ffplay can play the stream (it seems it ask for the right chunk).
After some 2 minutes playing I stop/start ffplay and it is again asking
for chunk in the future.
I think either is something incorrect with the manifest, or the chunks
created, or something I don't know and don't use correctly.
Thanks
--
Ticket URL: <https://trac.ffmpeg.org/ticket/10247>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list