2017-09-06 20:57:07 +00:00
|
|
|
Stream descriptors
|
|
|
|
^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
There can be multiple *stream_descriptor* with input from the same "file" or
|
|
|
|
multiple different "files".
|
|
|
|
|
2017-10-17 22:47:43 +00:00
|
|
|
Stream descriptor is of the form::
|
2017-09-06 20:57:07 +00:00
|
|
|
|
2018-05-02 17:55:51 +00:00
|
|
|
<field>=<value>[,<field>=<value>]...
|
2017-09-06 20:57:07 +00:00
|
|
|
|
|
|
|
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):
|
|
|
|
|
2018-05-31 21:27:21 +00:00
|
|
|
Optional value which contains a user-specified maximum bit rate for the
|
2017-09-06 20:57:07 +00:00
|
|
|
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.
|
|
|
|
|
2021-01-21 21:42:10 +00:00
|
|
|
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.
|
|
|
|
|
2017-09-06 20:57:07 +00:00
|
|
|
: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.
|
|
|
|
|
2020-12-11 20:58:26 +00:00
|
|
|
: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.
|
|
|
|
|
2024-02-15 04:27:57 +00:00
|
|
|
: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.
|
|
|
|
|
|
|
|
|
2017-10-17 22:47:43 +00:00
|
|
|
.. include:: /options/drm_stream_descriptors.rst
|
2018-12-10 22:12:01 +00:00
|
|
|
.. include:: /options/dash_stream_descriptors.rst
|
2017-09-06 20:57:07 +00:00
|
|
|
.. include:: /options/hls_stream_descriptors.rst
|