shaka-packager/docs/source/options/stream_descriptors.rst

102 lines
3.6 KiB
ReStructuredText
Raw Normal View History

Stream descriptors
^^^^^^^^^^^^^^^^^^
There can be multiple *stream_descriptor* with input from the same "file" or
multiple different "files".
Stream descriptor is of the form::
<field>=<value>[,<field>=<value>]...
These are the available fields:
:input (in):
input/source media "file" path, which can be regular files, pipes, udp
streams. See :doc:`/options/udp_file_options` on additional options for UDP
files.
:stream_selector (stream):
Required field with value 'audio', 'video', 'text' or stream number (zero
based).
:output (out):
Required output file path (single file).
:init_segment:
initialization segment path (multiple file).
:segment_template (segment):
Optional value which specifies the naming pattern for the segment files,
and that the stream should be split into multiple files. Its presence should
be consistent across streams. See
:doc:`/options/segment_template_formatting`.
:bandwidth (bw):
Optional value which contains a user-specified maximum bit rate for the
stream, in bits/sec. If specified, this value is propagated to (HLS)
EXT-X-STREAM-INF:BANDWIDTH or (DASH) Representation@bandwidth and the
$Bandwidth$ template parameter for segment names. If not specified, the
bandwidth value is estimated from content bitrate. Note that it only affects
the generated manifests/playlists; it has no effect on the media content
itself.
:language (lang):
Optional value which contains a user-specified language tag. If specified,
this value overrides any language metadata in the input stream.
:output_format (format):
Optional value which specifies the format of the output files (MP4 or WebM).
If not specified, it will be derived from the file extension of the output
file.
For subtitles in MP4, you can specify 'vtt+mp4' or 'ttml+mp4' to control
which text format is used.
feat: Allow LIVE UDP WebVTT input (#1349) An updated version of PR #1027 That previous PR was done using 2021 code, and there were many changes in the codebase from there, so a rebase was needed and also some minor tweak here and there. But it's the same code, just reimplemented on a newer codebase. If you want to take a look at this in action, after building shaka packager with this PR's code included, try this commands in 3 different simultaneous bash sessions: 1. Video UDP input: `ffmpeg -f lavfi -re -i "testsrc=s=320x240:r=30,format=yuv420p" -c:v h264 -sc_threshold 0 -g 30 -keyint_min 30 -r 30 -a53cc 1 -b:v 150k -preset ultrafast -r 30 -f mpegts "udp://127.0.0.1:10000?pkt_size=1316"` 2. WebVTT UDP input: `for sec in $(seq 0 9999) ; do printf "%02d:%02d.000 --> %02d:%02d.000\ntest second ${sec}\n\n" "$(( ${sec} / 60 ))" "$(( ${sec} % 60 ))" "$(( (${sec} + 1) / 60 ))" "$(( (${sec} + 1) % 60 ))" ; sleep 1 ; done > /dev/udp/127.0.0.1/12345` 3. shaka packager command line: `timeout 60 path/to/build/packager/packager 'in=udp://127.0.0.1:10000?timeout=8000000,stream_selector=0,init_segment=240_init.m4s,segment_template=240_$Number%09d$.m4s,bandwidth=150000' 'in=udp://127.0.0.1:12345?timeout=8000000,stream_selector=0,input_format=webvtt,format=webvtt+mp4,init_segment=text_init.m4s,segment_template=text_$Number%09d$.m4s,language=eng,dash_roles=subtitle' --mpd_output ./manifest.mpd --segment_duration 3.2 --suggested_presentation_delay 3.2 --min_buffer_time 3.2 --minimum_update_period 3.2 --time_shift_buffer_depth 60 --preserved_segments_outside_live_window 1 --default_language=eng --dump_stream_info 2>&1` Note the added `input_format=webvtt` to the shaka packager command's second selector. That's new from this PR. If you don't use that, shaka's format autodetection will not detect the webvtt format from the input, as explained in https://github.com/shaka-project/shaka-packager/issues/685#issuecomment-1029407191. Try the command without it if you want to. Fixes #685 Fixes #1017 --------- Co-authored-by: Daniel Cantarín <canta@canta.com.ar>
2024-02-24 00:02:19 +00:00
:input_format (format):
Optional value which specifies the format of the input files or
streams. If not specified, it will be autodetected, which in some
cases may fail.
For example, a live UDP WebVTT input stream may be up and streaming
long before a shaka packager instance consumes it, and therefore
shaka packager never gets the initial "WEBVTT" header string. In
such a case, shaka packager can't properly autodetect the stream
format as WebVTT, and thus doesn't process it. But stating
'input_format=webvtt' as selector parameter will tell shaka packager
to omit autodetection and consider WebVTT format for that stream.
:trick_play_factor (tpf):
Optional value which specifies the trick play, a.k.a. trick mode, stream
sampling rate among key frames. If specified, the output is a trick play
stream.
:cc_index:
Optional value which specifies the index/ID of the subtitle stream to use
for formats where multiple exist within the same stream. For example,
CEA allows specifying up to 4 streams within a single video stream. If not
specified, all subtitles will be merged together.
:forced_subtitle:
Optional boolean value (0|1). If set to 1 indicates that this stream is a
Forced Narrative subtitle that should be displayed when subtitles are otherwise
off, for example used to caption short portions of the audio that might be in
a foreign language. For DASH this will set role to **forced_subtitle**, for HLS
it will set FORCED=YES and AUTOSELECT=YES. Only valid for subtitles.
.. include:: /options/drm_stream_descriptors.rst
.. include:: /options/dash_stream_descriptors.rst
.. include:: /options/hls_stream_descriptors.rst