diff --git a/README.md b/README.md index ceaaf166d5..5f5e7649c7 100644 --- a/README.md +++ b/README.md @@ -30,13 +30,16 @@ Shaka Packager supports: | VP8 | I / O | I / O | - | - | | VP9 | I / O | I / O | - | - | | AAC | I / O | - | I / O | I | - | Dolby AC3/EAC3 | I / O | - | - | - | + | Dolby AC3/EAC3 | I / O | - | I | - | | DTS | I / O | - | - | - | | Opus | *I / O* | I / O | - | - | | Vorbis | - | I / O | - | - | ** I for input and O for output. ** Opus support in ISO-BMFF is experimental. +- Subtitles + - WebVTT in both text form and embedded in MP4 + - TTML in text form (DASH only) - Platforms - Linux - Mac diff --git a/docs/source/tutorials/dash.rst b/docs/source/tutorials/dash.rst index d358e4f94e..3e27c21881 100644 --- a/docs/source/tutorials/dash.rst +++ b/docs/source/tutorials/dash.rst @@ -6,7 +6,8 @@ technique that enables high quality streaming of media content over HTTP. Shaka Packager supports DASH content packaging. This tutorial covers DASH packaging of VOD content without encryption. For live content packaging, see -:doc:`live`; for content encryption, see :doc:`drm`. +:doc:`live`; for content encryption, see :doc:`drm`; for full documentation, +see :doc:`/documentation`. Synopsis -------- @@ -35,6 +36,7 @@ applied to VP9 in the same way. $ packager \ in=h264_baseline_360p_600.mp4,stream=audio,output=audio.mp4 \ + in=input_text.vtt,stream=text,output=output_text.vtt \ in=h264_baseline_360p_600.mp4,stream=video,output=h264_360p.mp4 \ in=h264_main_480p_1000.mp4,stream=video,output=h264_480p.mp4 \ in=h264_main_720p_3000.mp4,stream=video,output=h264_720p.mp4 \ @@ -47,11 +49,12 @@ The above packaging command creates five single track fragmented mp4 streams * static-live:: $ packager \ - 'in=h264_baseline_360p_600.mp4,stream=audio,init_segment=audio_init.mp4,segment_template=audio_$Number$.m4s' \ - 'in=h264_baseline_360p_600.mp4,stream=video,init_segment=h264_360p_init.mp4,segment_template=h264_360p_$Number$.m4s' \ - 'in=h264_main_480p_1000.mp4,stream=video,init_segment=h264_480p_init.mp4,segment_template=h264_480p_$Number$.m4s' \ - 'in=h264_main_720p_3000.mp4,stream=video,init_segment=h264_720p_init.mp4,segment_template=h264_720p_$Number$.m4s' \ - 'in=h264_main_1080p_6000.mp4,stream=video,init_segment=h264_1080p_init.mp4,segment_template=h264_1080p_$Number$.m4s' \ + 'in=h264_baseline_360p_600.mp4,stream=audio,init_segment=audio/init.mp4,segment_template=audio/$Number$.m4s' \ + 'in=input_text.vtt,stream=text,init_segment=text/init.mp4,segment_template=text/$Number$.m4s' \ + 'in=h264_baseline_360p_600.mp4,stream=video,init_segment=h264_360p/init.mp4,segment_template=h264_360p/$Number$.m4s' \ + 'in=h264_main_480p_1000.mp4,stream=video,init_segment=h264_480p/init.mp4,segment_template=h264_480p/$Number$.m4s' \ + 'in=h264_main_720p_3000.mp4,stream=video,init_segment=h264_720p/init.mp4,segment_template=h264_720p/$Number$.m4s' \ + 'in=h264_main_1080p_6000.mp4,stream=video,init_segment=h264_1080p/init.mp4,segment_template=h264_1080p/$Number$.m4s' \ --generate_static_mpd --mpd_output h264.mpd The above packaging command creates five groups of segments (each with an init diff --git a/docs/source/tutorials/dash_hls_example.rst b/docs/source/tutorials/dash_hls_example.rst index 0519f23490..ab53468ae8 100644 --- a/docs/source/tutorials/dash_hls_example.rst +++ b/docs/source/tutorials/dash_hls_example.rst @@ -2,10 +2,10 @@ $ packager \ in=h264_baseline_360p_600.mp4,stream=audio,output=audio.mp4,playlist_name=audio.m3u8,hls_group_id=audio,hls_name=ENGLISH \ - in=h264_baseline_360p_600.mp4,stream=video,output=h264_360p.mp4,playlist_name=h264_360p.m3u8 \ - in=h264_main_480p_1000.mp4,stream=video,output=h264_480p.mp4,playlist_name=h264_480p.m3u8 \ - in=h264_main_720p_3000.mp4,stream=video,output=h264_720p.mp4,playlist_name=h264_720p.m3u8 \ - in=h264_high_1080p_6000.mp4,stream=video,output=h264_1080p.mp4,playlist_name=h264_1080p.m3u8 \ + in=h264_baseline_360p_600.mp4,stream=video,output=h264_360p.mp4,playlist_name=h264_360p.m3u8,iframe_playlist_name=h264_360p_iframe.m3u8 \ + in=h264_main_480p_1000.mp4,stream=video,output=h264_480p.mp4,playlist_name=h264_480p.m3u8,iframe_playlist_name=h264_480p_iframe.m3u8 \ + in=h264_main_720p_3000.mp4,stream=video,output=h264_720p.mp4,playlist_name=h264_720p.m3u8,iframe_playlist_name=h264_720p_iframe.m3u8 \ + in=h264_high_1080p_6000.mp4,stream=video,output=h264_1080p.mp4,playlist_name=h264_1080p.m3u8,iframe_playlist_name=h264_1080p_iframe.m3u8 \ --hls_master_playlist_output h264_master.m3u8 \ --mpd_output h264.mpd diff --git a/docs/source/tutorials/hls.rst b/docs/source/tutorials/hls.rst index f11e8ac839..7f7244695b 100644 --- a/docs/source/tutorials/hls.rst +++ b/docs/source/tutorials/hls.rst @@ -15,7 +15,8 @@ available. Shaka Packager supports HLS content packaging. This tutorial covers HLS packaging of VOD content without encryption. For live content packaging, see -:doc:`live`; for content encryption, see :doc:`drm`. +:doc:`live`; for content encryption, see :doc:`drm`; for full documentation, +see :doc:`/documentation`. Synopsis -------- @@ -46,11 +47,12 @@ The examples below uses the H264 streams created in :doc:`encoding`. * TS output:: $ packager \ - 'in=h264_baseline_360p_600.mp4,stream=audio,segment_template=audio_$Number$.ts,playlist_name=audio.m3u8,hls_group_id=audio,hls_name=ENGLISH' \ - 'in=h264_baseline_360p_600.mp4,stream=video,segment_template=h264_360p_$Number$.ts,playlist_name=h264_360p.m3u8' \ - 'in=h264_main_480p_1000.mp4,stream=video,segment_template=h264_480p_$Number$.ts,playlist_name=h264_480p.m3u8' \ - 'in=h264_main_720p_3000.mp4,stream=video,segment_template=h264_720p_$Number$.ts,playlist_name=h264_720p.m3u8' \ - 'in=h264_high_1080p_6000.mp4,stream=video,segment_template=h264_1080p_$Number$.ts,playlist_name=h264_1080p.m3u8' \ + 'in=h264_baseline_360p_600.mp4,stream=audio,segment_template=audio/$Number$.ts,playlist_name=audio/main.m3u8,hls_group_id=audio,hls_name=ENGLISH' \ + 'in=input_text.vtt,stream=text,segment_template=text/$Number$.vtt,playlist_name=text/main.m3u8,hls_group_id=text,hls_name=ENGLISH' \ + 'in=h264_baseline_360p_600.mp4,stream=video,segment_template=h264_360p/$Number$.ts,playlist_name=h264_360p/main.m3u8,iframe_playlist_name=h264_360p/iframe.m3u8' \ + 'in=h264_main_480p_1000.mp4,stream=video,segment_template=h264_480p/$Number$.ts,playlist_name=h264_480p/main.m3u8,iframe_playlist_name=h264_480p/iframe.m3u8' \ + 'in=h264_main_720p_3000.mp4,stream=video,segment_template=h264_720p/$Number$.ts,playlist_name=h264_720p/main.m3u8,iframe_playlist_name=h264_720p/iframe.m3u8' \ + 'in=h264_high_1080p_6000.mp4,stream=video,segment_template=h264_1080p/$Number$.ts,playlist_name=h264_1080p/main.m3u8,iframe_playlist_name=h264_1080p/iframe.m3u8' \ --hls_master_playlist_output h264_master.m3u8 The above packaging command creates five single track TS streams @@ -59,11 +61,12 @@ The above packaging command creates five single track TS streams * MP4 output is also supported:: $ packager \ - 'in=h264_baseline_360p_600.mp4,stream=audio,init_segment=audio_init.mp4,segment_template=audio_$Number$.m4s,playlist_name=audio.m3u8,hls_group_id=audio,hls_name=ENGLISH' \ - 'in=h264_baseline_360p_600.mp4,stream=video,init_segment=h264_360p_init.mp4,segment_template=h264_360p_$Number$.m4s,playlist_name=h264_360p.m3u8' \ - 'in=h264_main_480p_1000.mp4,stream=video,init_segment=h264_480p_init.mp4,segment_template=h264_480p_$Number$.m4s,playlist_name=h264_480p.m3u8' \ - 'in=h264_main_720p_3000.mp4,stream=video,init_segment=h264_720p_init.mp4,segment_template=h264_720p_$Number$.m4s,playlist_name=h264_720p.m3u8' \ - 'in=h264_main_1080p_6000.mp4,stream=video,init_segment=h264_1080p_init.mp4,segment_template=h264_1080p_$Number$.m4s,playlist_name=h264_1080p.m3u8' \ + 'in=h264_baseline_360p_600.mp4,stream=audio,init_segment=audio/init.mp4,segment_template=audio/$Number$.m4s,playlist_name=audio/main.m3u8,hls_group_id=audio,hls_name=ENGLISH' \ + 'in=input_text.vtt,stream=text,segment_template=text/$Number$.vtt,playlist_name=text/main.m3u8,hls_group_id=text,hls_name=ENGLISH' \ + 'in=h264_baseline_360p_600.mp4,stream=video,init_segment=h264_360p/init.mp4,segment_template=h264_360p/$Number$.m4s,playlist_name=h264_360p/main.m3u8,iframe_playlist_name=h264_360p/iframe.m3u8' \ + 'in=h264_main_480p_1000.mp4,stream=video,init_segment=h264_480p/init.mp4,segment_template=h264_480p/$Number$.m4s,playlist_name=h264_480p/main.m3u8,iframe_playlist_name=h264_480p/iframe.m3u8' \ + 'in=h264_main_720p_3000.mp4,stream=video,init_segment=h264_720p/init.mp4,segment_template=h264_720p/$Number$.m4s,playlist_name=h264_720p/main.m3u8,iframe_playlist_name=h264_720p/iframe.m3u8' \ + 'in=h264_main_1080p_6000.mp4,stream=video,init_segment=h264_1080p/init.mp4,segment_template=h264_1080p/$Number$.m4s,playlist_name=h264_1080p/main.m3u8,iframe_playlist_name=h264_1080p/iframe.m3u8' \ --hls_master_playlist_output h264_master.m3u8 The above packaging command creates five groups of streams (each with an init