From e5aaf3b1c2d705fc9717772a8013361c5670c3a2 Mon Sep 17 00:00:00 2001 From: KongQun Yang Date: Tue, 19 Sep 2017 19:35:05 -0700 Subject: [PATCH] Generate documents for commit 21b0ca6ea5a232646f3bb8bd59e46ab46aac71f5 --- _sources/build_instructions.md.txt | 314 + _sources/docker_instructions.md.txt | 43 + _sources/documentation.rst.txt | 80 + _sources/index.rst.txt | 33 + _sources/library.rst.txt | 37 + _sources/library_details.rst.txt | 44 + _sources/options/chunking_options.rst.txt | 23 + _sources/options/dash_options.rst.txt | 45 + .../general_encryption_options.rst.txt | 15 + _sources/options/hls_options.rst.txt | 18 + .../options/hls_stream_descriptors.rst.txt | 18 + _sources/options/mp4_output_options.rst.txt | 20 + .../playready_encryption_options.rst.txt | 39 + .../raw_key_encryption_options.rst.txt | 30 + .../segment_template_formatting.rst.txt | 51 + _sources/options/stream_descriptors.rst.txt | 71 + _sources/options/udp_file_options.rst.txt | 18 + .../widevine_encryption_options.rst.txt | 75 + _sources/tutorials/basic_usage.md.txt | 61 + _sources/tutorials/dash.rst.txt | 63 + _sources/tutorials/drm.rst.txt | 9 + _sources/tutorials/encoding.rst.txt | 124 + _sources/tutorials/ffmpeg_piping.rst.txt | 56 + _sources/tutorials/hls.rst.txt | 87 + _sources/tutorials/live.rst.txt | 46 + _sources/tutorials/playready.rst.txt | 4 + _sources/tutorials/raw_key.rst.txt | 86 + _sources/tutorials/tutorials.rst.txt | 11 + _sources/tutorials/widevine.rst.txt | 87 + _static/ajax-loader.gif | Bin 0 -> 673 bytes _static/basic.css | 632 + _static/comment-bright.png | Bin 0 -> 756 bytes _static/comment-close.png | Bin 0 -> 829 bytes _static/comment.png | Bin 0 -> 641 bytes _static/contents.png | Bin 0 -> 107 bytes _static/doctools.js | 287 + _static/down-pressed.png | Bin 0 -> 222 bytes _static/down.png | Bin 0 -> 202 bytes _static/file.png | Bin 0 -> 286 bytes _static/jquery-3.1.0.js | 10074 ++++++++++++++++ _static/jquery.js | 4 + _static/minus.png | Bin 0 -> 90 bytes _static/navigation.png | Bin 0 -> 120 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 69 + _static/searchtools.js | 758 ++ _static/sphinxdoc.css | 345 + _static/sphinxdoc_new.css | 17 + _static/table_styling.css | 18 + _static/underscore-1.3.1.js | 999 ++ _static/underscore.js | 31 + _static/up-pressed.png | Bin 0 -> 214 bytes _static/up.png | Bin 0 -> 203 bytes _static/websupport.js | 808 ++ build_instructions.html | 419 + docker_instructions.html | 154 + docs/annotated.html | 626 +- docs/classes.html | 177 +- ...ia_1_1mp4_1_1HandlerReference-members.html | 8 +- ..._1_1media_1_1RsaRequestSigner-members.html | 8 +- docs/d0/d06/mpd__flags_8cc_source.html | 10 +- ...ka_1_1media_1_1HttpKeyFetcher-members.html | 8 +- ...oder__configuration__record_8h_source.html | 10 +- docs/d0/d0e/muxer__options_8h_source.html | 10 +- ...media_1_1mp2t_1_1TsSectionPmt-members.html | 8 +- .../structshaka_1_1media_1_1VPxFrameInfo.html | 10 +- ...aka_1_1RawKeyDecryptionParams-members.html | 8 +- ...tshaka_1_1media_1_1StreamData-members.html | 14 +- docs/d0/d1a/text__sample_8h_source.html | 14 +- ...H265ByteToUnitStreamConverter-members.html | 8 +- ..._1_1media_1_1mp4_1_1VTTCueBox-members.html | 8 +- ...haka_1_1media_1_1mp2t_1_1TsSectionPat.html | 12 +- .../structshaka_1_1media_1_1MuxerOptions.html | 12 +- .../d0/d30/mock__mpd__notifier_8h_source.html | 10 +- docs/d0/d32/mp2t__common_8h_source.html | 10 +- .../d33/classshaka_1_1MockRepresentation.html | 12 +- docs/d0/d35/es__descriptor_8cc_source.html | 10 +- ...1_1EncryptedStreamAttributes_1_1OneOf.html | 10 +- ...s__notify__muxer__listener_8cc_source.html | 30 +- docs/d0/d3a/webm__constants_8h_source.html | 10 +- ...mp4_1_1ProtectionSystemSpecificHeader.html | 12 +- docs/d0/d42/aes__cryptor_8h_source.html | 10 +- ...idevine__encryption__flags_8cc_source.html | 16 +- .../d43/structshaka_1_1Mp4OutputParams.html | 10 +- docs/d0/d46/fourccs_8h_source.html | 10 +- ...shaka_1_1media_1_1SegmentInfo-members.html | 8 +- ...nfo__dump__muxer__listener_8cc_source.html | 24 +- ...ia_1_1mp4_1_1MediaInformation-members.html | 8 +- .../structshaka_1_1media_1_1StreamData.html | 76 +- ...haka_1_1media_1_1AudioTimestampHelper.html | 12 +- .../d4e/libcrypto__threading_8cc_source.html | 10 +- ...a_1_1media_1_1mp2t_1_1TsMuxer-members.html | 20 +- ...dia_1_1MpdNotifyMuxerListener-members.html | 8 +- ...structshaka_1_1RawKeyEncryptionParams.html | 10 +- ...a_1_1media_1_1mp4_1_1VideoSampleEntry.html | 12 +- ...haka_1_1media_1_1mp4_1_1SampleToGroup.html | 12 +- docs/d0/d7d/decryptor__source_8h_source.html | 10 +- ...a_1_1media_1_1AesCbcEncryptor-members.html | 8 +- .../structshaka_1_1media_1_1mp4_1_1Movie.html | 12 +- ...ka_1_1media_1_1AACAudioSpecificConfig.html | 12 +- ...aka_1_1media_1_1RequestSigner-members.html | 8 +- ...uctshaka_1_1xml_1_1XmlDeleter-members.html | 8 +- .../d0/da6/stream__descriptor_8cc_source.html | 49 +- docs/d0/da8/structshaka_1_1HlsParams.html | 163 + ...edia_1_1mp4_1_1SingleSegmentSegmenter.html | 26 +- ...1_1media_1_1EncryptionHandler-members.html | 20 +- ...classshaka_1_1media_1_1FixedKeySource.html | 28 +- docs/d0/dae/file__util_8h_source.html | 112 + ...webm_1_1MultiSegmentSegmenter-members.html | 30 +- .../structshaka_1_1media_1_1SegmentInfo.html | 10 +- ...edia_1_1mp4_1_1VTTEmptyCueBox-members.html | 8 +- ..._1xml_1_1AdaptationSetXmlNode-members.html | 8 +- .../classshaka_1_1media_1_1RsaPrivateKey.html | 12 +- ...aka_1_1media_1_1mp4_1_1CueSettingsBox.html | 12 +- ...media_1_1ProtectionSystemSpecificInfo.html | 12 +- .../dd6/webm__crypto__helpers_8cc_source.html | 10 +- ...lassshaka_1_1media_1_1AesCtrEncryptor.html | 12 +- .../dee/segmenter__test__base_8h_source.html | 18 +- docs/d0/df3/packager__util_8cc_source.html | 13 +- ...haka_1_1hls_1_1MasterPlaylist-members.html | 108 + ...ia_1_1mp4_1_1AudioSampleEntry-members.html | 8 +- ...media_1_1MuxerListener_1_1MediaRanges.html | 10 +- .../d0a/classshaka_1_1media_1_1MkvWriter.html | 48 +- .../d0a/structshaka_1_1media_1_1H264Sps.html | 12 +- ...der__configuration__record_8cc_source.html | 10 +- ...media_1_1mp2t_1_1EsParserH264-members.html | 8 +- docs/d1/d12/range_8h_source.html | 10 +- docs/d1/d13/status_8h_source.html | 280 + ...a_1_1WidevineDecryptionParams-members.html | 8 +- ...single__segment__segmenter_8cc_source.html | 21 +- docs/d1/d1d/muxer__flags_8cc_source.html | 10 +- docs/d1/d1e/hls__notifier_8h_source.html | 165 + .../d1f/classshaka_1_1media_1_1KeySource.html | 28 +- ...1media_1_1mp4_1_1DecodingTimeIterator.html | 12 +- ...media_1_1MediaHandlerTestBase-members.html | 31 +- docs/d1/d27/key__fetcher_8h_source.html | 13 +- ..._1media_1_1mp2t_1_1AdtsHeader-members.html | 8 +- docs/d1/d2a/decryptor__source_8cc_source.html | 10 +- docs/d1/d2b/file__util_8cc_source.html | 146 + ...media_1_1mp4_1_1DataReference-members.html | 8 +- .../structshaka_1_1media_1_1mp4_1_1Box.html | 12 +- .../d2f/webvtt__media__parser_8cc_source.html | 10 +- ...haka_1_1media_1_1mp2t_1_1TsSectionPes.html | 12 +- docs/d1/d31/classshaka_1_1xml_1_1XmlNode.html | 12 +- ...tructshaka_1_1media_1_1SubsampleEntry.html | 10 +- ...assshaka_1_1media_1_1FakeMediaHandler.html | 82 +- docs/d1/d37/es__parser__h264_8h_source.html | 10 +- .../d3b/mpd__generator__flags_8h_source.html | 10 +- ...shaka_1_1media_1_1mp4_1_1MovieExtends.html | 12 +- .../d40/classshaka_1_1MpdWriter-members.html | 8 +- ..._1hls_1_1MediaPlaylistFactory-members.html | 106 + .../decoding__time__iterator_8cc_source.html | 10 +- .../d1/d48/text__track__config_8h_source.html | 10 +- ...a_1_1media_1_1OffsetByteQueue-members.html | 8 +- .../d4f/structshaka_1_1DecryptionParams.html | 10 +- ...aka_1_1media_1_1EncryptionKey-members.html | 8 +- ..._1media_1_1mp4_1_1TrackFragmentHeader.html | 12 +- docs/d1/d70/vp8__parser_8cc_source.html | 10 +- docs/d1/d72/language__utils_8cc_source.html | 10 +- .../d74/mp2t__media__parser_8cc_source.html | 10 +- ..._1media_1_1H265VideoSliceHeaderParser.html | 12 +- .../d7d/webm__video__client_8cc_source.html | 10 +- ...ia_1_1H265ReferencePictureSet-members.html | 8 +- docs/d1/d82/adts__constants_8h_source.html | 10 +- ..._1_1media_1_1WebMParserClient-members.html | 8 +- .../classshaka_1_1hls_1_1MasterPlaylist.html | 236 + .../d8e/webm__audio__client_8cc_source.html | 12 +- docs/d1/d8f/retired__flags_8h_source.html | 10 +- ...aka_1_1media_1_1H26xBitReader-members.html | 8 +- ...a_1_1WidevineEncryptionParams-members.html | 8 +- ...ssshaka_1_1media_1_1ByteQueue-members.html | 8 +- docs/d1/d9d/tracks__builder_8h_source.html | 10 +- ..._1_1mp4_1_1CodecConfiguration-members.html | 8 +- ...assshaka_1_1media_1_1mp4_1_1BoxBuffer.html | 10 +- ...ia_1_1wvm_1_1DemuxStreamIdMediaSample.html | 12 +- ...1NalUnitToByteStreamConverter-members.html | 8 +- ..._1media_1_1VPCodecConfigurationRecord.html | 12 +- ...lassshaka_1_1media_1_1Demuxer-members.html | 20 +- ...a_1_1media_1_1mp4_1_1VideoMediaHeader.html | 12 +- ...oder__configuration__record_8h_source.html | 10 +- ..._1media_1_1PlayReadyKeySource-members.html | 8 +- docs/d1/dc2/h26x__bit__reader_8h_source.html | 10 +- .../dd5/classshaka_1_1media_1_1Cluster.html | 12 +- ...dia_1_1mp4_1_1DataInformation-members.html | 8 +- ...tructshaka_1_1PackagingParams-members.html | 114 + ..._1_1media_1_1EncryptionConfig-members.html | 8 +- ...a_1_1media_1_1VideoStreamInfo-members.html | 95 +- ...position__offset__iterator_8cc_source.html | 10 +- ...sshaka_1_1media_1_1KeyFetcher-members.html | 8 +- ...sshaka_1_1xml_1_1AdaptationSetXmlNode.html | 12 +- ...rencePictureListModifications-members.html | 8 +- ..._1_1media_1_1ProgressListener-members.html | 8 +- ...assshaka_1_1media_1_1mp4_1_1BoxReader.html | 12 +- ...tshaka_1_1media_1_1mp4_1_1SampleTable.html | 12 +- docs/d1/df0/aes__encryptor_8h_source.html | 10 +- docs/d1/df3/structshaka_1_1MpdOptions.html | 10 +- docs/d1/df5/nalu__reader_8cc_source.html | 10 +- ...ia_1_1mp4_1_1VideoMediaHeader-members.html | 8 +- docs/d2/d02/timestamp_8h_source.html | 10 +- ...assshaka_1_1media_1_1SeekHead-members.html | 8 +- .../d0f/classshaka_1_1MpdBuilder-members.html | 8 +- ...aka_1_1media_1_1wvm_1_1PrevSampleData.html | 12 +- ...aka_1_1media_1_1MuxerListener-members.html | 8 +- docs/d2/d17/ts__section__pat_8cc_source.html | 10 +- .../d2/d1f/structshaka_1_1ChunkingParams.html | 10 +- docs/d2/d20/classshaka_1_1Status.html | 310 + .../d2/d23/threaded__io__file_8cc_source.html | 334 + docs/d2/d24/packager__util_8h_source.html | 10 +- .../d2/d2a/classshaka_1_1IoCache-members.html | 115 + docs/d2/d30/tracks__builder_8cc_source.html | 10 +- ...ideo__slice__header__parser_8h_source.html | 10 +- ...1_1media_1_1WidevineKeySource-members.html | 8 +- ...1_1mp4_1_1TrackFragmentHeader-members.html | 8 +- ...rogram__map__table__writer_8cc_source.html | 10 +- ...o__byte__stream__converter_8cc_source.html | 10 +- docs/d2/d4d/file_8h_source.html | 222 + .../d4f/structshaka_1_1Element-members.html | 8 +- ...classshaka_1_1MockMpdNotifier-members.html | 8 +- docs/d2/d57/master__playlist_8h_source.html | 148 + ...ructshaka_1_1media_1_1H264SliceHeader.html | 12 +- ...ssshaka_1_1media_1_1KeySource-members.html | 8 +- ...assshaka_1_1SimpleMpdNotifier-members.html | 8 +- ...a_1_1H264ModificationOfPicNum-members.html | 8 +- .../d62/simple__mpd__notifier_8h_source.html | 10 +- ...haka_1_1media_1_1mp4_1_1Movie-members.html | 8 +- ...sshaka_1_1media_1_1AesCryptor-members.html | 8 +- docs/d2/d6f/classBandwidthEstimator.html | 12 +- ...ctshaka_1_1media_1_1mp4_1_1SchemeInfo.html | 12 +- ...edia_1_1CombinedMuxerListener-members.html | 36 +- ...ssshaka_1_1DashIopMpdNotifier-members.html | 8 +- .../d7b/simple__mpd__notifier_8cc_source.html | 12 +- .../d7b/structshaka_1_1StreamDescriptor.html | 299 + ...ac__audio__specific__config_8h_source.html | 10 +- ...haka_1_1media_1_1mp4_1_1CuePayloadBox.html | 12 +- ...shaka_1_1BufferCallbackParams-members.html | 106 + ...ls__notify__muxer__listener_8h_source.html | 17 +- ...media_1_1mp4_1_1CuePayloadBox-members.html | 8 +- docs/d2/d92/box__reader_8h_source.html | 10 +- ...ssshaka_1_1media_1_1mp2t_1_1PesPacket.html | 12 +- .../structshaka_1_1FileCloser-members.html | 105 + ..._1_1media_1_1TrickPlayHandler-members.html | 20 +- docs/d2/da6/threaded__io__file_8h_source.html | 175 + docs/d2/da8/mp4_2segmenter_8cc_source.html | 394 +- ...haka_1_1media_1_1BufferWriter-members.html | 8 +- ...assshaka_1_1MockAdaptationSet-members.html | 8 +- docs/d2/dae/webm__muxer_8cc_source.html | 156 +- docs/d2/db1/master__playlist_8cc_source.html | 276 + ...media_1_1mp4_1_1SampleToGroup-members.html | 8 +- ...a_1_1media_1_1mp4_1_1FileType-members.html | 8 +- ...edia_1_1mp4_1_1CueSourceIDBox-members.html | 8 +- ...lassshaka_1_1media_1_1SegmentTestBase.html | 20 +- ...haka_1_1media_1_1mp4_1_1Track-members.html | 8 +- ...media__handler__test__base_8cc_source.html | 216 +- .../structshaka_1_1MpdOptions-members.html | 8 +- ...program__map__table__writer_8h_source.html | 10 +- ...a_1_1media_1_1mp4_1_1EditList-members.html | 8 +- ...structshaka_1_1WidevineSigner-members.html | 8 +- ...edia_1_1webm_1_1MultiSegmentSegmenter.html | 38 +- docs/d2/dd6/mkv__writer_8h_source.html | 32 +- ...a_1_1media_1_1ChunkingHandler-members.html | 20 +- ...lassshaka_1_1media_1_1WebMMediaParser.html | 12 +- docs/d2/de1/webvtt__timestamp_8h_source.html | 10 +- ...haka_1_1media_1_1mp2t_1_1TsSectionPmt.html | 12 +- docs/d2/de6/packager__main_8cc_source.html | 24 +- ...ka_1_1media_1_1TextStreamInfo-members.html | 65 +- ...shaka_1_1media_1_1mp4_1_1Edit-members.html | 8 +- docs/d2/de9/media__handler_8cc_source.html | 35 +- .../de9/mock__muxer__listener_8h_source.html | 12 +- docs/d2/deb/es__parser_8h_source.html | 10 +- ...media_1_1mp2t_1_1TsSectionPes-members.html | 8 +- .../pes__packet__generator_8cc_source.html | 31 +- ...a_1_1SegmentTestBase_1_1ClusterParser.html | 12 +- ...ssshaka_1_1media_1_1MkvWriter-members.html | 8 +- docs/d2/dfd/adts__header_8h_source.html | 10 +- ..._1_1media_1_1mp4_1_1BoxReader-members.html | 8 +- docs/d3/d07/mpd__params_8h_source.html | 10 +- ..._1_1mp4_1_1SyncSampleIterator-members.html | 8 +- .../classshaka_1_1media_1_1MediaParser.html | 10 +- ...sshaka_1_1media_1_1mp2t_1_1AdtsHeader.html | 12 +- ..._1media_1_1LibcryptoThreading-members.html | 8 +- ...media_1_1mp2t_1_1TsSectionPat-members.html | 8 +- docs/d3/d19/io__cache_8h_source.html | 168 + ...deo__slice__header__parser_8cc_source.html | 10 +- ...uctshaka_1_1media_1_1mp4_1_1PrivFrame.html | 12 +- docs/d3/d48/packager_8cc_source.html | 963 ++ ...sshaka_1_1media_1_1LibcryptoThreading.html | 12 +- docs/d3/d56/decrypt__config_8cc_source.html | 10 +- .../d3/d62/continuity__counter_8h_source.html | 10 +- docs/d3/d62/rcheck_8h_source.html | 10 +- ...1media_1_1mp4_1_1DataEntryUrl-members.html | 8 +- ...lassshaka_1_1media_1_1WebMVideoClient.html | 12 +- .../d3/d6b/fixed__key__source_8cc_source.html | 21 +- ...lassshaka_1_1media_1_1mp2t_1_1TsMuxer.html | 85 +- docs/d3/d72/fixed__key__source_8h_source.html | 19 +- docs/d3/d73/classshaka_1_1File.html | 1014 ++ docs/d3/d73/classshaka_1_1File.png | Bin 0 -> 1523 bytes ...ssshaka_1_1media_1_1webm_1_1WebMMuxer.html | 85 +- .../classshaka_1_1media_1_1AesEncryptor.html | 12 +- ...a_1_1mp4_1_1ChunkInfoIterator-members.html | 8 +- docs/d3/d76/muxer__flags_8h_source.html | 10 +- ...dia_1_1mp4_1_1TextSampleEntry-members.html | 8 +- ...haka_1_1media_1_1RsaPublicKey-members.html | 8 +- ...lassshaka_1_1media_1_1WebMAudioClient.html | 12 +- docs/d3/d80/muxer__util_8h_source.html | 14 +- ...haka_1_1media_1_1mp4_1_1SampleToChunk.html | 12 +- .../d87/trick__play__handler_8cc_source.html | 365 +- .../d3/d8d/webm__audio__client_8h_source.html | 10 +- docs/d3/d90/ec3__audio__util_8cc_source.html | 10 +- .../classshaka_1_1media_1_1H264Parser.html | 12 +- docs/d3/d93/media__handler_8h_source.html | 297 +- ...lassshaka_1_1hls_1_1MockMediaPlaylist.html | 214 + ...classshaka_1_1hls_1_1MockMediaPlaylist.png | Bin 0 -> 744 bytes .../d9c/encryption__handler_8cc_source.html | 1043 +- docs/d3/da0/ec3__audio__util_8h_source.html | 10 +- ...dia_1_1webm_1_1SingleSegmentSegmenter.html | 38 +- ...ctshaka_1_1media_1_1mp4_1_1SchemeType.html | 12 +- .../structshaka_1_1media_1_1mp4_1_1ID3v2.html | 12 +- ..._1_1media_1_1WebMWebVTTParser-members.html | 8 +- .../structshaka_1_1media_1_1mp4_1_1Track.html | 12 +- docs/d3/db6/webm__parser_8cc_source.html | 10 +- docs/d3/dbc/seek__head_8cc_source.html | 10 +- docs/d3/dbe/demuxer_8cc_source.html | 52 +- ...ructshaka_1_1media_1_1mp4_1_1EditList.html | 12 +- ...ructshaka_1_1DecryptionParams-members.html | 8 +- ...a_1_1media_1_1mp2t_1_1Mp2tMediaParser.html | 12 +- docs/d3/dd0/classshaka_1_1MpdNotifier.html | 10 +- ...tshaka_1_1media_1_1mp4_1_1SegmentType.html | 12 +- docs/d3/de2/structshaka_1_1FileCloser.html | 120 + docs/d3/de4/seek__head_8h_source.html | 10 +- ..._1_1media_1_1mp4_1_1BoxBuffer-members.html | 8 +- ...mp4_1_1SampleGroupDescription-members.html | 8 +- docs/d3/df1/box__reader_8cc_source.html | 10 +- ...uctshaka_1_1PlayreadyEncryptionParams.html | 10 +- ...ssshaka_1_1media_1_1AesPatternCryptor.html | 12 +- ...2multi__segment__segmenter_8cc_source.html | 32 +- ...edia_1_1mp4_1_1MP4MediaParser-members.html | 8 +- .../d0b/classshaka_1_1media_1_1TextTrack.html | 10 +- ...1_1media_1_1WebVttMediaParser-members.html | 8 +- .../d4/d15/gflags__hex__bytes_8cc_source.html | 10 +- ...haka_1_1media_1_1mp4_1_1EditListEntry.html | 10 +- ...lassshaka_1_1media_1_1AesCbcEncryptor.html | 12 +- ...ia_1_1mp4_1_1ChunkLargeOffset-members.html | 8 +- ...haka_1_1media_1_1mp4_1_1ID3v2-members.html | 8 +- ...1media_1_1mp4_1_1WebVTTSourceLabelBox.html | 12 +- docs/d4/d37/io__cache_8cc_source.html | 251 + ...ructshaka_1_1media_1_1H264Sps-members.html | 8 +- ...lassshaka_1_1media_1_1ChunkingHandler.html | 82 +- ...pleAuxiliaryInformationOffset-members.html | 8 +- ...haka_1_1media_1_1H264WeightingFactors.html | 10 +- .../classshaka_1_1media_1_1Nalu-members.html | 8 +- ...assshaka_1_1media_1_1WebMWebVTTParser.html | 12 +- ...aka_1_1media_1_1DecryptConfig-members.html | 8 +- .../d70/classshaka_1_1DashIopMpdNotifier.html | 12 +- .../structshaka_1_1SegmentInfo-members.html | 8 +- docs/d4/d83/cue_8cc_source.html | 10 +- docs/d4/d87/nalu__reader_8h_source.html | 10 +- docs/d4/d87/text__sample_8cc_source.html | 29 +- ...dia_1_1HEVCDecoderConfigurationRecord.html | 12 +- ...tshaka_1_1media_1_1mp4_1_1EC3Specific.html | 12 +- ...haka_1_1media_1_1MediaHandlerTestBase.html | 249 +- ...sshaka_1_1media_1_1PlayReadyKeySource.html | 30 +- .../da7/segmenter__test__base_8cc_source.html | 18 +- ...a_1_1media_1_1mp4_1_1SampleEncryption.html | 12 +- ...a_1_1mp4_1_1CompactSampleSize-members.html | 8 +- docs/d4/db2/cluster__builder_8h_source.html | 10 +- .../db4/classshaka_1_1MpdNotifierFactory.html | 10 +- ...tshaka_1_1media_1_1mp4_1_1MediaHeader.html | 12 +- ...a_1_1mp2t_1_1AacProgramMapTableWriter.html | 12 +- docs/d4/dcb/classshaka_1_1UdpFile.html | 478 + docs/d4/dcb/classshaka_1_1UdpFile.png | Bin 0 -> 484 bytes docs/d4/dd3/bit__reader_8h_source.html | 10 +- ...ka_1_1media_1_1mp4_1_1FullBox-members.html | 8 +- docs/d4/dde/webvtt__util_8h_source.html | 10 +- ...haka_1_1media_1_1mp4_1_1DataReference.html | 12 +- ...assshaka_1_1media_1_1ProgressListener.html | 10 +- ...VodMediaInfoDumpMuxerListener-members.html | 8 +- docs/d4/dec/hls__flags_8h_source.html | 10 +- docs/d4/df5/request__signer_8cc_source.html | 10 +- .../webvtt__sample__converter_8cc_source.html | 10 +- ...shaka_1_1media_1_1mp4_1_1SegmentIndex.html | 12 +- ...tshaka_1_1media_1_1mp4_1_1AC3Specific.html | 12 +- .../dfd/structshaka_1_1media_1_1H265Sps.html | 12 +- .../dff/webm__media__parser_8cc_source.html | 10 +- ...ructshaka_1_1media_1_1mp4_1_1FileType.html | 12 +- ...aka_1_1media_1_1mp4_1_1OriginalFormat.html | 12 +- ...ructshaka_1_1media_1_1mp4_1_1CueIDBox.html | 12 +- ..._1_1EncryptedStreamAttributes-members.html | 8 +- ...ka_1_1media_1_1WebMInfoParser-members.html | 8 +- ..._1_1mp4_1_1ElementaryStreamDescriptor.html | 12 +- .../classshaka_1_1media_1_1ESDescriptor.html | 12 +- .../producer__consumer__queue_8h_source.html | 39 +- .../d1a/classshaka_1_1Packager-members.html | 111 + docs/d5/d1a/ts__section_8h_source.html | 10 +- ...ia_1_1mp4_1_1TrackRunIterator-members.html | 8 +- docs/d5/d27/key__fetcher_8cc_source.html | 10 +- ...aka_1_1media_1_1ProducerConsumerQueue.html | 22 +- ...haka_1_1media_1_1mp4_1_1Media-members.html | 8 +- ...2single__segment__segmenter_8h_source.html | 19 +- ...media_1_1mp2t_1_1TsSectionPsi-members.html | 8 +- docs/d5/d4d/box_8cc_source.html | 10 +- docs/d5/d52/ts__section__pes_8h_source.html | 10 +- ...ampleAuxiliaryInformationSize-members.html | 8 +- ...esentationStateChangeListener-members.html | 8 +- ...ssshaka_1_1MockRepresentation-members.html | 8 +- docs/d5/d5a/webvtt__timestamp_8cc_source.html | 10 +- .../d5c/continuity__counter_8cc_source.html | 10 +- ...haka_1_1media_1_1mp2t_1_1EsParserH265.html | 12 +- docs/d5/d63/network__util_8cc_source.html | 10 +- ...media_1_1NalUnitToByteStreamConverter.html | 12 +- docs/d5/d6f/vlog__flags_8cc_source.html | 10 +- ...der__configuration__record_8cc_source.html | 10 +- .../d5/d76/classshaka_1_1hls_1_1HlsEntry.html | 137 + docs/d5/d7b/box__definitions_8h_source.html | 10 +- ...a_1_1media_1_1mp4_1_1MediaInformation.html | 12 +- .../d89/widevine__key__source_8cc_source.html | 37 +- ..._1_1media_1_1mp4_1_1CompositionOffset.html | 10 +- .../d8f/webm__cluster__parser_8cc_source.html | 10 +- docs/d5/d91/es__parser__adts_8cc_source.html | 12 +- ...media_1_1mp4_1_1EditListEntry-members.html | 8 +- docs/d5/d98/encryptor_8cc_source.html | 10 +- ...odec__configuration__record_8h_source.html | 10 +- ...H265ReferencePictureListModifications.html | 12 +- docs/d5/da4/aes__encryptor_8cc_source.html | 10 +- ...a_1_1media_1_1H265ReferencePictureSet.html | 10 +- .../classshaka_1_1media_1_1StreamInfo.html | 43 +- ...haka_1_1media_1_1mp2t_1_1EsParserH264.html | 12 +- docs/d5/dba/ts__packet_8cc_source.html | 10 +- .../dc1/webm__webvtt__parser_8cc_source.html | 10 +- ...media_1_1mp4_1_1TrackFragment-members.html | 8 +- ...4_1_1SampleAuxiliaryInformationOffset.html | 12 +- docs/d5/dcf/rsa__key_8h_source.html | 10 +- docs/d5/dda/ts__section__psi_8h_source.html | 10 +- docs/d5/de0/bit__reader_8cc_source.html | 10 +- ..._1media_1_1mp2t_1_1PesPacketGenerator.html | 22 +- .../de3/structshaka_1_1PackagingParams.html | 172 + ...assshaka_1_1media_1_1WebMParserClient.html | 12 +- ...der__configuration__record_8cc_source.html | 10 +- ...mp4_1_1WebVTTConfigurationBox-members.html | 8 +- docs/d5/def/ts__section__pmt_8h_source.html | 10 +- docs/d5/df2/media__playlist_8cc_source.html | 626 + ...ka_1_1media_1_1HlsNotifyMuxerListener.html | 16 +- ...shaka_1_1media_1_1MediaParser-members.html | 8 +- docs/d5/dfc/file_8cc_source.html | 502 + docs/d5/dfe/classshaka_1_1File-members.html | 128 + ...ady__key__encryption__flags_8h_source.html | 10 +- ...a_1_1media_1_1AesCbcDecryptor-members.html | 8 +- .../d09/aes__pattern__cryptor_8h_source.html | 10 +- .../d6/d16/text__stream__info_8cc_source.html | 21 +- docs/d6/d17/es__parser__h264_8cc_source.html | 10 +- ...tshaka_1_1media_1_1mp4_1_1MovieHeader.html | 12 +- .../ts__packet__writer__util_8cc_source.html | 10 +- ...1_1media_1_1VideoStreamInfoParameters.html | 12 +- .../d2e/mpd__notifier__util_8cc_source.html | 15 +- ...ssshaka_1_1media_1_1TextTrack-members.html | 8 +- .../webm__content__encodings_8cc_source.html | 10 +- .../combined__muxer__listener_8cc_source.html | 135 +- .../d3b/chunk__info__iterator_8cc_source.html | 10 +- docs/d6/d47/hls__params_8h_source.html | 133 + ...ssshaka_1_1media_1_1EncryptionHandler.html | 86 +- ...2multi__segment__segmenter_8cc_source.html | 25 +- docs/d6/d55/aes__cryptor_8cc_source.html | 10 +- ...edia_1_1AVCDecoderConfigurationRecord.html | 12 +- ...ion__system__specific__info_8h_source.html | 10 +- docs/d6/d5b/classshaka_1_1Status-members.html | 120 + ...1_1VPCodecConfigurationRecord-members.html | 8 +- docs/d6/d62/structshaka_1_1TestParams.html | 159 + docs/d6/d6a/cue_8h_source.html | 10 +- docs/d6/d6c/h26x__bit__reader_8cc_source.html | 10 +- docs/d6/d6e/ts__section__pes_8cc_source.html | 10 +- docs/d6/d71/scoped__xml__ptr_8h_source.html | 10 +- .../d74/classshaka_1_1UdpOptions-members.html | 111 + .../dash__iop__mpd__notifier_8h_source.html | 10 +- ...1media_1_1mp4_1_1VTTAdditionalTextBox.html | 12 +- .../d7b/webm__tracks__parser_8h_source.html | 10 +- ..._1media_1_1mp4_1_1AC3Specific-members.html | 8 +- .../d86/bandwidth__estimator_8cc_source.html | 10 +- ..._1_1media_1_1FakeMediaHandler-members.html | 20 +- docs/d6/d8a/vp9__parser_8cc_source.html | 10 +- ..._1_1RepresentationBaseXmlNode-members.html | 8 +- docs/d6/d9b/h264__parser_8h_source.html | 10 +- docs/d6/d9f/hls__flags_8cc_source.html | 10 +- docs/d6/da0/ts__section__pat_8h_source.html | 10 +- docs/d6/da3/mpd__builder_8h_source.html | 58 +- ...AVCDecoderConfigurationRecord-members.html | 8 +- ...iceHeader_1_1LongTermPicsInfo-members.html | 8 +- .../da9/classshaka_1_1media_1_1BitReader.html | 12 +- ...uctshaka_1_1media_1_1mp4_1_1VTTCueBox.html | 12 +- ...lassshaka_1_1media_1_1VideoStreamInfo.html | 46 +- ..._1_1VideoStreamInfoParameters-members.html | 8 +- .../d6/dbe/mp4__output__params_8h_source.html | 10 +- ...classshaka_1_1hls_1_1HlsEntry-members.html | 109 + ...sParserH26x_1_1VideoSliceInfo-members.html | 8 +- ...media_1_1mp2t_1_1EsParserH26x-members.html | 8 +- docs/d6/dc8/mkv__writer_8cc_source.html | 151 +- ...media_1_1mp4_1_1SampleEncryptionEntry.html | 12 +- ...ssshaka_1_1media_1_1VP9Parser-members.html | 8 +- ...ia_1_1mp4_1_1SegmentReference-members.html | 8 +- ...haka_1_1media_1_1mp2t_1_1EsParserAdts.html | 12 +- ...tructshaka_1_1media_1_1H264SEIMessage.html | 12 +- ...tructshaka_1_1Mp4OutputParams-members.html | 8 +- ...1_1media_1_1H265VuiParameters-members.html | 8 +- ...1_1media_1_1mp4_1_1CueTimeBox-members.html | 8 +- ...haka_1_1media_1_1VPxFrameInfo-members.html | 8 +- docs/d6/de8/local__file_8cc_source.html | 227 + docs/d6/de8/network__util_8h_source.html | 10 +- docs/d6/de9/ts__segmenter_8cc_source.html | 55 +- docs/d6/ded/ts__packet_8h_source.html | 10 +- .../sync__sample__iterator_8cc_source.html | 10 +- ...ructshaka_1_1StreamDescriptor-members.html | 116 + docs/d6/dff/classshaka_1_1media_1_1Nalu.html | 12 +- ...edia_1_1mp4_1_1SampleGroupDescription.html | 12 +- ...a_1_1media_1_1mp4_1_1SoundMediaHeader.html | 12 +- ...xer__listener__test__helper_8h_source.html | 10 +- docs/d7/d12/media__parser_8h_source.html | 10 +- docs/d7/d15/mpd__notifier_8h_source.html | 10 +- ...ia_1_1mp4_1_1VideoSampleEntry-members.html | 8 +- .../d22/libcrypto__threading_8h_source.html | 10 +- ...1_1media_1_1mp4_1_1SyncSampleIterator.html | 12 +- ...ructshaka_1_1media_1_1H265Sps-members.html | 8 +- ...p4_1_1CompositionTimeToSample-members.html | 8 +- ...uctshaka_1_1media_1_1EncryptionConfig.html | 10 +- ...a_1_1media_1_1ContentEncoding-members.html | 8 +- ...on__system__specific__info_8cc_source.html | 10 +- ...ctshaka_1_1media_1_1mp4_1_1SampleSize.html | 12 +- ...ia_1_1mp4_1_1SampleEncryption-members.html | 8 +- ...ka_1_1media_1_1WebMListParser-members.html | 8 +- ...H26xByteToUnitStreamConverter-members.html | 8 +- .../structshaka_1_1media_1_1PeriodInfo.html | 10 +- ...lassshaka_1_1media_1_1DecryptorSource.html | 12 +- ...lassshaka_1_1hls_1_1SimpleHlsNotifier.html | 479 + ...classshaka_1_1hls_1_1SimpleHlsNotifier.png | Bin 0 -> 710 bytes .../d6c/structshaka_1_1HlsParams-members.html | 108 + .../classshaka_1_1media_1_1MediaSample.html | 12 +- ...onParams_1_1EncryptedStreamAttributes.html | 10 +- docs/d7/d75/callback__file_8h_source.html | 148 + ..._1media_1_1mp4_1_1MediaHeader-members.html | 8 +- ...ka_1_1media_1_1H264SEIMessage-members.html | 8 +- docs/d7/d79/chunking__handler_8h_source.html | 27 +- docs/d7/d7c/vlog__flags_8h_source.html | 10 +- .../d7/d87/video__stream__info_8h_source.html | 154 +- ..._1H265SliceHeader_1_1LongTermPicsInfo.html | 10 +- docs/d7/d9d/progress__listener_8h_source.html | 10 +- .../da4/track__run__iterator_8h_source.html | 10 +- .../dad/simple__hls__notifier_8cc_source.html | 539 + ...uctshaka_1_1media_1_1mp4_1_1MediaData.html | 12 +- docs/d7/db0/mpd__writer_8h_source.html | 10 +- ...media_1_1mp4_1_1SampleToChunk-members.html | 8 +- docs/d7/dbd/classshaka_1_1LocalFile.html | 518 + docs/d7/dbd/classshaka_1_1LocalFile.png | Bin 0 -> 496 bytes ...ka_1_1media_1_1mp4_1_1TextSampleEntry.html | 12 +- docs/d7/dc6/byte__queue_8h_source.html | 10 +- .../d7/dd0/mpd__notifier__util_8h_source.html | 10 +- docs/d7/dd4/request__signer_8h_source.html | 10 +- ...aka_1_1media_1_1mp4_1_1MP4MediaParser.html | 12 +- docs/d7/dd6/key__source_8cc_source.html | 10 +- .../dda/classshaka_1_1media_1_1ByteQueue.html | 12 +- ...assshaka_1_1media_1_1RsaRequestSigner.html | 12 +- ...classshaka_1_1media_1_1HttpKeyFetcher.html | 24 +- ...1_1media_1_1mp4_1_1SampleToGroupEntry.html | 10 +- ...to__unit__stream__converter_8h_source.html | 10 +- docs/d7/dee/mpd__generator_8cc_source.html | 10 +- .../d7/def/mp4__media__parser_8cc_source.html | 15 +- docs/d7/df9/byte__queue_8cc_source.html | 10 +- ..._1_1PlayreadyEncryptionParams-members.html | 8 +- ...edia_1_1H264ByteToUnitStreamConverter.html | 12 +- ...1_1media_1_1WebMClusterParser-members.html | 8 +- ..._1_1media_1_1mp2t_1_1TsWriter-members.html | 8 +- ..._1media_1_1mp4_1_1MovieHeader-members.html | 8 +- docs/d8/d0d/media__sample_8cc_source.html | 10 +- ...shaka_1_1media_1_1mp4_1_1DecodingTime.html | 10 +- ..._1_1media_1_1mp4_1_1PrivFrame-members.html | 8 +- ...ssshaka_1_1media_1_1BitReader-members.html | 8 +- .../d14/classshaka_1_1media_1_1VP8Parser.html | 12 +- ...haka_1_1media_1_1MuxerOptions-members.html | 8 +- .../d19/bandwidth__estimator_8h_source.html | 10 +- docs/d8/d1c/crypto__flags_8cc_source.html | 10 +- ...edia_1_1mp4_1_1WebVTTConfigurationBox.html | 12 +- ...ka_1_1media_1_1SubsampleEntry-members.html | 8 +- docs/d8/d28/es__parser__h265_8h_source.html | 10 +- ..._content__encodings__client_8h_source.html | 10 +- ...ructshaka_1_1WidevineDecryptionParams.html | 10 +- docs/d8/d4d/aes__decryptor_8h_source.html | 10 +- ...sshaka_1_1media_1_1TextSample-members.html | 20 +- docs/d8/d53/crypto__flags_8h_source.html | 10 +- ...a_1_1media_1_1mp4_1_1AudioSampleEntry.html | 12 +- .../d8/d66/classshaka_1_1UdpFile-members.html | 129 + ...ka_1_1media_1_1ClusterBuilder-members.html | 8 +- ...ka_1_1media_1_1mp4_1_1DataInformation.html | 12 +- docs/d8/d6f/origin__handler_8h_source.html | 17 +- ...a_1_1media_1_1mp4_1_1Metadata-members.html | 8 +- .../classshaka_1_1media_1_1TracksBuilder.html | 12 +- ...eyEncryptionParams_1_1KeyPair-members.html | 8 +- .../d81/classshaka_1_1LocalFile-members.html | 129 + ...assshaka_1_1media_1_1WebMTracksParser.html | 12 +- ...1media_1_1mp4_1_1MovieExtends-members.html | 8 +- ..._1_1RawKeyDecryptionParams_1_1KeyPair.html | 10 +- docs/d8/d8e/classshaka_1_1AdaptationSet.html | 34 +- ...a_1_1media_1_1AesCtrEncryptor-members.html | 8 +- ..._1_1media_1_1AesRequestSigner-members.html | 8 +- ...media_1_1H264DecRefPicMarking-members.html | 8 +- ...1_1mp4_1_1SubtitleMediaHeader-members.html | 8 +- docs/d8/d94/adts__constants_8cc_source.html | 10 +- docs/d8/d94/pes__packet_8h_source.html | 10 +- ..._1mp4_1_1VTTAdditionalTextBox-members.html | 8 +- docs/d8/d9a/fragmenter_8cc_source.html | 471 +- .../d9c/webm__tracks__parser_8cc_source.html | 10 +- docs/d8/d9f/udp__file_8h_source.html | 159 + ...a_1_1media_1_1DecryptorSource-members.html | 8 +- ...1_1media_1_1mp4_1_1SampleSize-members.html | 8 +- ...sshaka_1_1media_1_1NaluReader-members.html | 8 +- docs/d8/daa/stream__info_8h_source.html | 258 +- docs/d8/daf/namespaceshaka.html | 146 +- ...media_1_1mp4_1_1MultiSegmentSegmenter.html | 26 +- ...1_1WebMContentEncodingsClient-members.html | 8 +- ...p2t_1_1EsParserH26x_1_1VideoSliceInfo.html | 10 +- ...ctshaka_1_1media_1_1mp4_1_1CueTimeBox.html | 12 +- docs/d8/dca/ts__writer_8h_source.html | 12 +- ...1media_1_1mp4_1_1DecodingTime-members.html | 8 +- ...1media_1_1mp4_1_1TrackExtends-members.html | 8 +- ...1_1media_1_1mp2t_1_1ContinuityCounter.html | 12 +- ...1mp4_1_1CencSampleEncryptionInfoEntry.html | 12 +- .../de1/classshaka_1_1SimpleMpdNotifier.html | 12 +- .../de6/webm__crypto__helpers_8h_source.html | 10 +- ..._1_1media_1_1mp2t_1_1EsParser-members.html | 8 +- docs/d8/deb/retired__flags_8cc_source.html | 10 +- ...media_1_1AudioTimestampHelper-members.html | 8 +- ...ssshaka_1_1media_1_1VPxParser-members.html | 8 +- ...single__segment__segmenter_8cc_source.html | 19 +- ...a_1_1media_1_1SegmentTestBase-members.html | 10 +- ...to__byte__stream__converter_8h_source.html | 10 +- ...media_1_1OnMediaEndParameters-members.html | 8 +- ...2single__segment__segmenter_8h_source.html | 17 +- docs/d9/d08/mock__mpd__builder_8h_source.html | 34 +- ...dia_1_1HlsNotifyMuxerListener-members.html | 8 +- .../classshaka_1_1media_1_1RsaPublicKey.html | 12 +- docs/d9/d12/chunking__handler_8cc_source.html | 39 +- .../classshaka_1_1media_1_1BufferReader.html | 12 +- ...haka_1_1media_1_1mp4_1_1MovieFragment.html | 12 +- ...haka_1_1media_1_1AesEncryptor-members.html | 8 +- ...assshaka_1_1media_1_1mp4_1_1Segmenter.html | 50 +- ...aka_1_1media_1_1TracksBuilder-members.html | 8 +- .../webm__content__encodings_8h_source.html | 10 +- ...aka_1_1media_1_1mp4_1_1VTTEmptyCueBox.html | 12 +- ...aka_1_1media_1_1mp4_1_1CueSourceIDBox.html | 12 +- ..._1_1media_1_1mp4_1_1ChunkInfoIterator.html | 12 +- ...1MuxerListener_1_1MediaRanges-members.html | 8 +- ...media_1_1mp2t_1_1EsParserAdts-members.html | 8 +- ...ctshaka_1_1media_1_1H265VuiParameters.html | 10 +- ...aka_1_1media_1_1CombinedMuxerListener.html | 30 +- ...a_1_1media_1_1H264SliceHeader-members.html | 8 +- docs/d9/d76/ts__muxer_8cc_source.html | 79 +- ...aka_1_1media_1_1ClosureThread-members.html | 8 +- docs/d9/d86/limits_8h_source.html | 10 +- ..._1media_1_1WebMContentEncodingsClient.html | 12 +- ...assshaka_1_1media_1_1AesRequestSigner.html | 12 +- ...1ProtectionSystemSpecificInfo-members.html | 8 +- docs/d9/d90/text__track_8h_source.html | 10 +- ...sshaka_1_1hls_1_1MediaPlaylistFactory.html | 122 + docs/d9/da4/stream__descriptor_8h_source.html | 10 +- ...ka_1_1media_1_1MpdNotifyMuxerListener.html | 12 +- .../structshaka_1_1media_1_1Cue-members.html | 8 +- ..._1_1media_1_1mp4_1_1Segmenter-members.html | 14 +- .../structshaka_1_1BufferCallbackParams.html | 159 + ...structshaka_1_1RawKeyDecryptionParams.html | 10 +- ..._1_1CompositionOffsetIterator-members.html | 8 +- ...ntent__protection__element_8cc_source.html | 10 +- docs/d9/db9/muxer_8cc_source.html | 54 +- ...haka_1_1media_1_1BufferReader-members.html | 8 +- ...1mp4_1_1SampleEncryptionEntry-members.html | 8 +- docs/d9/dc8/webm__constants_8cc_source.html | 10 +- .../d9/dcc/webm__video__client_8h_source.html | 10 +- ...ructshaka_1_1WidevineEncryptionParams.html | 10 +- .../d9/de0/structshaka_1_1media_1_1Range.html | 10 +- .../de2/mock__media__playlist_8cc_source.html | 119 + .../muxer__listener__internal_8cc_source.html | 10 +- ...ka_1_1media_1_1FixedKeySource-members.html | 8 +- .../deb/classshaka_1_1hls_1_1HlsNotifier.html | 419 + .../deb/classshaka_1_1hls_1_1HlsNotifier.png | Bin 0 -> 711 bytes ...c__audio__specific__config_8cc_source.html | 10 +- ...p4_1_1TrackFragmentDecodeTime-members.html | 8 +- ...lassshaka_1_1media_1_1OffsetByteQueue.html | 12 +- docs/d9/dfe/classshaka_1_1UdpOptions.html | 178 + ..._1_1media_1_1H264ModificationOfPicNum.html | 10 +- .../d04/audio__stream__info_8cc_source.html | 85 +- ...shaka_1_1hls_1_1MediaPlaylist-members.html | 124 + ...assshaka_1_1media_1_1mp2t_1_1EsParser.html | 10 +- ...ructshaka_1_1media_1_1mp4_1_1Language.html | 12 +- ...ssshaka_1_1media_1_1mp2t_1_1TsSection.html | 10 +- docs/da/d1d/udp__options_8cc_source.html | 231 + ...haka_1_1media_1_1mp2t_1_1EsParserH26x.html | 12 +- docs/da/d23/ts__muxer_8h_source.html | 25 +- docs/da/d24/h265__parser_8h_source.html | 10 +- docs/da/d2a/text__stream__info_8h_source.html | 43 +- ...1_1media_1_1webm_1_1WebMMuxer-members.html | 20 +- ...ia_1_1mp4_1_1PixelAspectRatio-members.html | 8 +- ..._2multi__segment__segmenter_8h_source.html | 19 +- ...ructshaka_1_1ContentProtectionElement.html | 12 +- docs/da/d4a/media__playlist_8h_source.html | 255 + ...lassshaka_1_1media_1_1AudioStreamInfo.html | 44 +- ...1_1media_1_1mp4_1_1MovieExtendsHeader.html | 12 +- docs/da/d53/es__parser__h265_8cc_source.html | 10 +- .../d55/simple__hls__notifier_8h_source.html | 204 + ..._1_1media_1_1mp4_1_1CompactSampleSize.html | 12 +- .../d5c/widevine__key__source_8h_source.html | 29 +- ...1_1H264VideoSliceHeaderParser-members.html | 8 +- ...mp4_1_1SingleSegmentSegmenter-members.html | 14 +- ..._1_1H264ProgramMapTableWriter-members.html | 8 +- ...edia_1_1mp4_1_1AudioRollRecoveryEntry.html | 12 +- ...xed__key__encryption__flags_8h_source.html | 10 +- ...1media_1_1mp2t_1_1TsSegmenter-members.html | 10 +- docs/da/d88/mp4__muxer_8cc_source.html | 650 +- ...a_1_1media_1_1WebMMediaParser-members.html | 8 +- docs/da/d8e/container__names_8cc_source.html | 10 +- docs/da/d93/origin__handler_8cc_source.html | 10 +- ...a_1_1mp4_1_1CompositionOffset-members.html | 8 +- ..._1media_1_1mp4_1_1EC3Specific-members.html | 8 +- ...ssshaka_1_1MpdNotifierFactory-members.html | 8 +- ...1_1media_1_1MockMuxerListener-members.html | 8 +- ...assshaka_1_1media_1_1mp2t_1_1TsPacket.html | 12 +- .../classshaka_1_1Representation-members.html | 8 +- ...a_1_1media_1_1mp4_1_1HandlerReference.html | 12 +- docs/da/dc3/status_8cc_source.html | 182 + ...tshaka_1_1media_1_1mp4_1_1TrackHeader.html | 12 +- ...aka_1_1media_1_1OriginHandler-members.html | 20 +- docs/da/dcb/es__descriptor_8h_source.html | 10 +- .../playready__key__source_8cc_source.html | 30 +- .../structshaka_1_1media_1_1mp4_1_1Edit.html | 12 +- docs/da/dd0/webm__info__parser_8h_source.html | 10 +- docs/da/dd1/fragmenter_8h_source.html | 36 +- ..._1_1media_1_1mp2t_1_1TsPacket-members.html | 8 +- ...H264ByteToUnitStreamConverter-members.html | 8 +- ...ia_1_1mp2t_1_1Mp2tMediaParser-members.html | 8 +- ...media_1_1H264SEIRecoveryPoint-members.html | 8 +- ...ssshaka_1_1media_1_1WidevineKeySource.html | 32 +- ...a_1_1mp4_1_1SampleDescription-members.html | 8 +- .../da/de2/mock__mpd__builder_8cc_source.html | 10 +- ...ssshaka_1_1media_1_1WebMClusterParser.html | 12 +- ...1_1media_1_1mp4_1_1SchemeType-members.html | 8 +- ...a_1_1media_1_1AudioStreamInfo-members.html | 77 +- ...1media_1_1mp4_1_1ProtectionSchemeInfo.html | 12 +- ..._1media_1_1H264VideoSliceHeaderParser.html | 12 +- docs/da/df4/aes__decryptor_8cc_source.html | 10 +- ..._1_1media_1_1mp4_1_1SampleDescription.html | 12 +- ...1_1media_1_1AesPatternCryptor-members.html | 8 +- .../classshaka_1_1media_1_1MediaHandler.html | 88 +- ...ructshaka_1_1media_1_1H265SliceHeader.html | 12 +- .../webvtt__sample__converter_8h_source.html | 10 +- ...1_1media_1_1mp4_1_1CodecConfiguration.html | 12 +- ...sshaka_1_1media_1_1H265Parser-members.html | 8 +- ...media_1_1H264WeightingFactors-members.html | 8 +- .../d1b/classshaka_1_1MemoryFile-members.html | 131 + .../classshaka_1_1media_1_1TextSample.html | 18 +- ..._1media_1_1mp4_1_1SubtitleMediaHeader.html | 12 +- ...lassshaka_1_1media_1_1mp4_1_1MP4Muxer.html | 85 +- ...to__unit__stream__converter_8h_source.html | 10 +- .../d31/track__run__iterator_8cc_source.html | 10 +- ...1_1mp2t_1_1PesPacketGenerator-members.html | 10 +- ...dia_1_1VideoSliceHeaderParser-members.html | 8 +- ...pd__notify__muxer__listener_8h_source.html | 12 +- .../d4b/classshaka_1_1MockAdaptationSet.html | 12 +- ...a_1_1mp4_1_1CompositionOffsetIterator.html | 12 +- .../db/d51/mp2t__media__parser_8h_source.html | 10 +- ..._single__segment__segmenter_8h_source.html | 18 +- .../media__handler__test__base_8h_source.html | 145 +- .../d5a/classshaka_1_1media_1_1VP9Parser.html | 12 +- docs/db/d60/mpd__options_8h_source.html | 10 +- .../d64/webvtt__media__parser_8h_source.html | 10 +- ..._1media_1_1mp4_1_1SegmentType-members.html | 8 +- docs/db/d66/udp__file_8cc_source.html | 370 + .../d6b/structshaka_1_1MpdParams-members.html | 8 +- docs/db/d71/http__key__fetcher_8h_source.html | 19 +- ...EVCDecoderConfigurationRecord-members.html | 8 +- ...TwoPassSingleSegmentSegmenter-members.html | 30 +- ..._1_1mp2t_1_1ContinuityCounter-members.html | 8 +- docs/db/d79/chunking__params_8h_source.html | 10 +- docs/db/d7e/muxer__options_8cc_source.html | 10 +- ...dia_1_1AACAudioSpecificConfig-members.html | 8 +- .../classshaka_1_1media_1_1NaluReader.html | 12 +- docs/db/d8f/mp4__muxer_8h_source.html | 102 +- ...classshaka_1_1media_1_1ClusterBuilder.html | 12 +- ...ssshaka_1_1media_1_1mp4_1_1Fragmenter.html | 38 +- ...a_1_1media_1_1mp4_1_1ChunkLargeOffset.html | 12 +- docs/db/d96/wvm__media__parser_8h_source.html | 10 +- .../da4/classBandwidthEstimator-members.html | 8 +- docs/db/da6/memory__file_8h_source.html | 159 + ...edia_1_1WebVttSampleConverter-members.html | 8 +- ...classshaka_1_1media_1_1TextStreamInfo.html | 42 +- ...classshaka_1_1media_1_1WebMInfoParser.html | 12 +- ...ia_1_1mp4_1_1SoundMediaHeader-members.html | 8 +- ...CencSampleEncryptionInfoEntry-members.html | 8 +- ...haka_1_1media_1_1OnMediaEndParameters.html | 10 +- ...ka_1_1media_1_1mp4_1_1TrackEncryption.html | 12 +- .../dcb/classshaka_1_1media_1_1VPxParser.html | 10 +- docs/db/dcd/classshaka_1_1MpdWriter.html | 12 +- ..._1media_1_1mp4_1_1DTSSpecific-members.html | 8 +- docs/db/dd0/classshaka_1_1Packager.html | 273 + ...edia_1_1VodMediaInfoDumpMuxerListener.html | 12 +- .../dd2/chunk__info__iterator_8h_source.html | 10 +- .../dd9/sync__sample__iterator_8h_source.html | 10 +- docs/db/dde/h265__parser_8cc_source.html | 10 +- ...assshaka_1_1media_1_1TrickPlayHandler.html | 82 +- .../audio__timestamp__helper_8cc_source.html | 10 +- docs/db/dee/pes__packet_8cc_source.html | 10 +- ...a_1_1media_1_1H265SliceHeader-members.html | 8 +- ...lassshaka_1_1media_1_1Cluster-members.html | 8 +- docs/db/df6/muxer_8h_source.html | 73 +- ...edia_1_1H265ByteToUnitStreamConverter.html | 12 +- docs/db/dfb/mpd__utils_8cc_source.html | 10 +- ...d__notify__muxer__listener_8cc_source.html | 12 +- ..._1_1media_1_1mp4_1_1ChunkInfo-members.html | 8 +- ...edia_1_1mp2t_1_1ProgramMapTableWriter.html | 12 +- ...sshaka_1_1media_1_1StreamInfo-members.html | 57 +- ...haka_1_1media_1_1ESDescriptor-members.html | 8 +- .../d16/classshaka_1_1media_1_1SeekHead.html | 12 +- docs/dc/d17/status__test__util_8h_source.html | 115 + ...aka_1_1media_1_1wvm_1_1WvmMediaParser.html | 12 +- ..._1mp4_1_1ProtectionSchemeInfo-members.html | 8 +- docs/dc/d19/box_8h_source.html | 10 +- .../dash__iop__mpd__notifier_8cc_source.html | 18 +- ...ructshaka_1_1EncryptionParams-members.html | 8 +- ...ed__key__encryption__flags_8cc_source.html | 10 +- .../d3c/webm__cluster__parser_8h_source.html | 10 +- docs/dc/d3f/key__source_8h_source.html | 19 +- ...ssshaka_1_1hls_1_1HlsNotifier-members.html | 112 + .../classshaka_1_1xml_1_1XmlNode-members.html | 8 +- .../classshaka_1_1media_1_1BufferWriter.html | 18 +- ...rotectionSystemSpecificHeader-members.html | 8 +- ..._1media_1_1mp4_1_1TrackHeader-members.html | 8 +- ...o__unit__stream__converter_8cc_source.html | 10 +- .../decoding__time__iterator_8h_source.html | 10 +- docs/dc/d53/webm_2segmenter_8cc_source.html | 724 +- ...haka_1_1media_1_1H264DecRefPicMarking.html | 10 +- .../dc/d58/webm__media__parser_8h_source.html | 10 +- .../dc/d5c/classshaka_1_1MockMpdNotifier.html | 12 +- ...edia_1_1mp4_1_1CueSettingsBox-members.html | 8 +- ...1_1media_1_1webm_1_1Segmenter-members.html | 30 +- ...1_1media_1_1mp2t_1_1TsSection-members.html | 8 +- ...ssshaka_1_1media_1_1MockMuxerListener.html | 12 +- docs/dc/d7b/closure__thread_8cc_source.html | 10 +- docs/dc/d7b/h264__parser_8cc_source.html | 10 +- ...1_1ElementaryStreamDescriptor-members.html | 8 +- ..._1media_1_1mp4_1_1MovieFragmentHeader.html | 12 +- ...structshaka_1_1media_1_1Range-members.html | 8 +- .../da0/structshaka_1_1EncryptionParams.html | 10 +- ...tshaka_1_1media_1_1mp4_1_1DTSSpecific.html | 12 +- docs/dc/da1/classshaka_1_1MpdBuilder.html | 22 +- .../buffer__callback__params_8h_source.html | 125 + ...lassshaka_1_1media_1_1ContentEncoding.html | 12 +- docs/dc/dbf/box__buffer_8h_source.html | 10 +- ...1xml_1_1RepresentationXmlNode-members.html | 8 +- ...classshaka_1_1media_1_1WebMListParser.html | 12 +- ...eyDecryptionParams_1_1KeyPair-members.html | 8 +- docs/dc/dd9/rsa__key_8cc_source.html | 10 +- .../structshaka_1_1media_1_1mp4_1_1Media.html | 12 +- docs/dc/de1/structshaka_1_1SegmentInfo.html | 10 +- ...1_1media_1_1mp4_1_1Fragmenter-members.html | 12 +- ...to__unit__stream__converter_8h_source.html | 10 +- docs/dc/dec/ts__section__pmt_8cc_source.html | 10 +- .../classshaka_1_1media_1_1ClosureThread.html | 12 +- .../structshaka_1_1TestParams-members.html | 107 + ...ssshaka_1_1media_1_1WebVttMediaParser.html | 12 +- ...ebm_1_1SingleSegmentSegmenter-members.html | 30 +- ...ia_1_1mp4_1_1TrackFragmentRun-members.html | 8 +- docs/dc/df8/closure__thread_8h_source.html | 10 +- docs/dd/d05/encryption__config_8h_source.html | 10 +- ...tshaka_1_1media_1_1mp4_1_1ChunkOffset.html | 12 +- docs/dd/d0c/classshaka_1_1ThreadedIoFile.html | 454 + docs/dd/d0c/classshaka_1_1ThreadedIoFile.png | Bin 0 -> 571 bytes docs/dd/d11/mpd__builder_8cc_source.html | 2409 ++-- docs/dd/d12/mpd__writer_8cc_source.html | 15 +- ...mp4_1_1SampleAuxiliaryInformationSize.html | 12 +- .../d17/classshaka_1_1media_1_1Demuxer.html | 92 +- docs/dd/d18/es__parser__adts_8h_source.html | 10 +- .../d19/video__stream__info_8cc_source.html | 22 +- .../classshaka_1_1hls_1_1MediaPlaylist.html | 600 + .../classshaka_1_1hls_1_1MediaPlaylist.png | Bin 0 -> 746 bytes .../dd/d30/wvm__media__parser_8cc_source.html | 12 +- docs/dd/d3a/gflags__hex__bytes_8h_source.html | 10 +- docs/dd/d3b/mp4_2segmenter_8h_source.html | 45 +- docs/dd/d3e/callback__file_8cc_source.html | 180 + ...ctshaka_1_1media_1_1mp4_1_1SyncSample.html | 12 +- docs/dd/d40/classshaka_1_1CallbackFile.html | 478 + docs/dd/d40/classshaka_1_1CallbackFile.png | Bin 0 -> 540 bytes docs/dd/d42/encryptor_8h_source.html | 10 +- docs/dd/d46/webm__parser_8h_source.html | 10 +- ...media_1_1mp4_1_1MovieFragment-members.html | 8 +- ...a_1_1hls_1_1SimpleHlsNotifier-members.html | 115 + ...m_1_1DemuxStreamIdMediaSample-members.html | 8 +- ...widevine__encryption__flags_8h_source.html | 10 +- docs/dd/d58/crypto__params_8h_source.html | 10 +- ...media_1_1mp2t_1_1EsParserH265-members.html | 8 +- ...1_1media_1_1mp4_1_1SchemeInfo-members.html | 8 +- ...1_1media_1_1mp4_1_1SyncSample-members.html | 8 +- docs/dd/d65/vp8__parser_8h_source.html | 10 +- ...o__unit__stream__converter_8cc_source.html | 10 +- ...1_1H265VideoSliceHeaderParser-members.html | 8 +- ...a_1_1media_1_1mp4_1_1PixelAspectRatio.html | 12 +- .../classshaka_1_1media_1_1MuxerListener.html | 10 +- docs/dd/d80/media__sample_8h_source.html | 10 +- docs/dd/d87/memory__file_8cc_source.html | 247 + .../d88/pes__packet__generator_8h_source.html | 17 +- docs/dd/d8c/file__test__util_8h_source.html | 143 + ...1media_1_1mp4_1_1SegmentIndex-members.html | 8 +- .../classshaka_1_1ThreadedIoFile-members.html | 132 + .../ts__packet__writer__util_8h_source.html | 10 +- .../audio__timestamp__helper_8h_source.html | 10 +- ...a_1_1media_1_1mp4_1_1SegmentReference.html | 10 +- .../classshaka_1_1MpdNotifier-members.html | 8 +- .../da4/structshaka_1_1xml_1_1XmlDeleter.html | 10 +- ...webm_1_1TwoPassSingleSegmentSegmenter.html | 38 +- ...info__dump__muxer__listener_8h_source.html | 12 +- docs/dd/dab/webm__muxer_8h_source.html | 52 +- ..._1mp4_1_1WebVTTSourceLabelBox-members.html | 8 +- ...a_1_1media_1_1WebMAudioClient-members.html | 8 +- ..._1media_1_1mp4_1_1SampleTable-members.html | 8 +- docs/dd/db5/packager_8h_source.html | 231 + ...a_1_1xml_1_1RepresentationBaseXmlNode.html | 12 +- docs/dd/dbc/buffer__reader_8cc_source.html | 10 +- .../dd/dbc/encryption__handler_8h_source.html | 128 +- ...structshaka_1_1media_1_1EncryptionKey.html | 12 +- ...dia_1_1mp4_1_1TrackEncryption-members.html | 8 +- .../dbf/webm__webvtt__parser_8h_source.html | 10 +- ...tructshaka_1_1media_1_1mp4_1_1FullBox.html | 12 +- ...edia_1_1ProducerConsumerQueue-members.html | 8 +- ...ssshaka_1_1media_1_1webm_1_1Segmenter.html | 58 +- ...edia_1_1mp4_1_1OriginalFormat-members.html | 8 +- docs/dd/dce/structshaka_1_1media_1_1Cue.html | 12 +- docs/dd/dd2/buffer__writer_8h_source.html | 14 +- docs/dd/dd3/buffer__writer_8cc_source.html | 19 +- ...a_1_1media_1_1WebMVideoClient-members.html | 8 +- .../dd8/mock__muxer__listener_8cc_source.html | 10 +- ...tshaka_1_1media_1_1mp4_1_1Box-members.html | 8 +- .../ddc/trick__play__handler_8h_source.html | 111 +- ...ka_1_1media_1_1VideoSliceHeaderParser.html | 10 +- ...ructshaka_1_1media_1_1H265Pps-members.html | 8 +- docs/dd/de7/xml__node_8h_source.html | 10 +- ...haka_1_1media_1_1MediaHandler-members.html | 20 +- ...structshaka_1_1ChunkingParams-members.html | 8 +- docs/dd/dee/box__definitions_8cc_source.html | 10 +- ..._2multi__segment__segmenter_8h_source.html | 19 +- ...a_1_1media_1_1mp4_1_1TrackFragmentRun.html | 12 +- ...ructshaka_1_1media_1_1mp4_1_1Metadata.html | 12 +- docs/de/d0f/local__file_8h_source.html | 158 + docs/de/d12/container__names_8h_source.html | 10 +- docs/de/d13/ts__writer_8cc_source.html | 15 +- ...a_1_1media_1_1TextTrackConfig-members.html | 8 +- docs/de/d17/cluster__builder_8cc_source.html | 10 +- ...edia_1_1wvm_1_1WvmMediaParser-members.html | 8 +- ...single__segment__segmenter_8cc_source.html | 306 +- .../d22/aes__pattern__cryptor_8cc_source.html | 10 +- ..._1_1mp2t_1_1H264ProgramMapTableWriter.html | 12 +- ...shaka_1_1media_1_1mp4_1_1TrackExtends.html | 12 +- ..._1_1media_1_1WebMTracksParser-members.html | 8 +- .../d33/structshaka_1_1media_1_1H265Pps.html | 12 +- .../de/d34/offset__byte__queue_8h_source.html | 10 +- ...o__unit__stream__converter_8cc_source.html | 10 +- docs/de/d3c/macros_8h_source.html | 10 +- docs/de/d3e/buffer__reader_8h_source.html | 10 +- ...sshaka_1_1media_1_1H264Parser-members.html | 8 +- ...1_1media_1_1mp2t_1_1PesPacket-members.html | 8 +- .../classshaka_1_1media_1_1DecryptConfig.html | 12 +- .../muxer__listener__internal_8h_source.html | 10 +- docs/de/d52/classshaka_1_1Representation.html | 28 +- ...a_1_1media_1_1mp4_1_1Language-members.html | 8 +- docs/de/d5b/adts__header_8cc_source.html | 10 +- docs/de/d5c/mpd__flags_8h_source.html | 10 +- ...mp2t_1_1ProgramMapTableWriter-members.html | 8 +- ...assshaka_1_1media_1_1mp2t_1_1TsWriter.html | 12 +- .../d6c/mock__media__playlist_8h_source.html | 163 + ..._1_1mp4_1_1SampleToGroupEntry-members.html | 8 +- docs/de/d6e/language__utils_8h_source.html | 10 +- .../de/d70/http__key__fetcher_8cc_source.html | 21 +- ...content__encodings__client_8cc_source.html | 10 +- docs/de/d7b/mp4__media__parser_8h_source.html | 10 +- ...haka_1_1media_1_1mp2t_1_1TsSectionPsi.html | 12 +- ...ptedStreamAttributes_1_1OneOf-members.html | 8 +- ...ox__definitions__comparison_8h_source.html | 10 +- ...aka_1_1RawKeyEncryptionParams-members.html | 8 +- .../classshaka_1_1media_1_1OriginHandler.html | 78 +- ...edia_1_1wvm_1_1PrevSampleData-members.html | 8 +- ...1_1mp4_1_1MovieFragmentHeader-members.html | 8 +- ...ssshaka_1_1media_1_1VP8Parser-members.html | 8 +- docs/de/da9/structshaka_1_1Element.html | 12 +- docs/de/dab/es__parser__h26x_8cc_source.html | 10 +- docs/de/dad/classshaka_1_1MemoryFile.html | 501 + docs/de/dad/classshaka_1_1MemoryFile.png | Bin 0 -> 546 bytes docs/de/dad/validate__flag_8cc_source.html | 10 +- ...lassshaka_1_1media_1_1TextTrackConfig.html | 12 +- .../classshaka_1_1media_1_1H26xBitReader.html | 12 +- docs/de/dbf/udp__options_8h_source.html | 137 + docs/de/dc1/demuxer_8h_source.html | 30 +- .../classshaka_1_1media_1_1H265Parser.html | 12 +- ..._1mp4_1_1DecodingTimeToSample-members.html | 8 +- docs/de/dcb/ts__segmenter_8h_source.html | 28 +- .../dcc/mock__mpd__notifier_8cc_source.html | 10 +- docs/de/dcf/file__closer_8h_source.html | 130 + ...ontent__protection__element_8h_source.html | 10 +- ...er__listener__test__helper_8cc_source.html | 10 +- .../classshaka_1_1media_1_1Muxer-members.html | 20 +- ...aka_1_1media_1_1WebVttSampleConverter.html | 12 +- ...shaka_1_1media_1_1mp2t_1_1TsSegmenter.html | 34 +- ..._1_1media_1_1mp4_1_1MediaData-members.html | 8 +- ..._1media_1_1DecoderConfigurationRecord.html | 12 +- ...a_1_1media_1_1mp4_1_1MP4Muxer-members.html | 20 +- .../de4/structshaka_1_1media_1_1H264Pps.html | 12 +- ...edia_1_1H26xByteToUnitStreamConverter.html | 12 +- ...1media_1_1mp4_1_1DecodingTimeToSample.html | 12 +- .../combined__muxer__listener_8h_source.html | 30 +- ...a_1_1media_1_1mp4_1_1TrackRunIterator.html | 12 +- docs/de/dfa/muxer__listener_8h_source.html | 12 +- ...shaka_1_1media_1_1mp4_1_1OpusSpecific.html | 12 +- docs/de/dfd/stream__info_8cc_source.html | 10 +- .../d00/playready__key__source_8h_source.html | 25 +- ...dec__configuration__record_8cc_source.html | 10 +- .../d1a/offset__byte__queue_8cc_source.html | 10 +- ...shaka_1_1media_1_1MediaSample-members.html | 8 +- ...mposition__offset__iterator_8h_source.html | 10 +- ...mentTestBase_1_1ClusterParser-members.html | 8 +- .../df/d22/structshaka_1_1WidevineSigner.html | 10 +- docs/df/d22/validate__flag_8h_source.html | 10 +- ..._1mp4_1_1DecodingTimeIterator-members.html | 8 +- ...lassshaka_1_1media_1_1AesCbcDecryptor.html | 12 +- docs/df/d31/muxer__util_8cc_source.html | 291 +- .../df/d32/audio__stream__info_8h_source.html | 90 +- .../classshaka_1_1AdaptationSet-members.html | 8 +- ...uctshaka_1_1media_1_1mp4_1_1ChunkInfo.html | 10 +- ..._1_1mp4_1_1MovieExtendsHeader-members.html | 8 +- .../classshaka_1_1media_1_1RequestSigner.html | 12 +- docs/df/d46/classshaka_1_1media_1_1Muxer.html | 89 +- docs/df/d4e/classshaka_1_1IoCache.html | 305 + ...t_1_1AacProgramMapTableWriter-members.html | 8 +- ...aka_1_1media_1_1RsaPrivateKey-members.html | 8 +- .../classshaka_1_1CallbackFile-members.html | 129 + ..._1_1RawKeyEncryptionParams_1_1KeyPair.html | 10 +- docs/df/d60/classshaka_1_1MockMpdBuilder.html | 12 +- ...mp4_1_1AudioRollRecoveryEntry-members.html | 8 +- .../classshaka_1_1media_1_1KeyFetcher.html | 16 +- .../classshaka_1_1MockMpdBuilder-members.html | 8 +- ...1media_1_1mp4_1_1OpusSpecific-members.html | 8 +- ...dia_1_1mp4_1_1CompositionTimeToSample.html | 12 +- ...haka_1_1media_1_1mp4_1_1TrackFragment.html | 12 +- .../df/d7d/webm__info__parser_8cc_source.html | 10 +- ...1_1DecoderConfigurationRecord-members.html | 8 +- .../classshaka_1_1media_1_1AesCryptor.html | 12 +- ...shaka_1_1media_1_1mp4_1_1DataEntryUrl.html | 12 +- docs/df/d8a/vp9__parser_8h_source.html | 10 +- docs/df/d8a/vpx__parser_8h_source.html | 10 +- ...1mp4_1_1MultiSegmentSegmenter-members.html | 14 +- docs/df/d8d/es__parser__h26x_8h_source.html | 10 +- ..._1_1RepresentationStateChangeListener.html | 10 +- docs/df/d96/xml__node_8cc_source.html | 10 +- ...dia_1_1mp4_1_1TrackFragmentDecodeTime.html | 12 +- ...shaka_1_1xml_1_1RepresentationXmlNode.html | 12 +- ..._1media_1_1mp4_1_1ChunkOffset-members.html | 8 +- ...a_1_1media_1_1mp4_1_1CueIDBox-members.html | 8 +- docs/df/dad/decrypt__config_8h_source.html | 10 +- ...oder__configuration__record_8h_source.html | 10 +- ...a_1_1hls_1_1MockMediaPlaylist-members.html | 135 + docs/df/dd2/mpd__utils_8h_source.html | 10 +- ...ructshaka_1_1media_1_1H264Pps-members.html | 8 +- .../structshaka_1_1media_1_1MediaEvent.html | 10 +- docs/df/ddc/structshaka_1_1MpdParams.html | 10 +- docs/df/ddc/webm_2segmenter_8h_source.html | 145 +- docs/df/dde/ts__section__psi_8cc_source.html | 10 +- ...haka_1_1media_1_1H264SEIRecoveryPoint.html | 10 +- .../de3/text__track__config_8cc_source.html | 10 +- docs/df/de9/segment__info_8h_source.html | 10 +- ...a_1_1ContentProtectionElement-members.html | 8 +- ...dy__key__encryption__flags_8cc_source.html | 10 +- ...dir_0ff8490546c67558c1586a7b16b2189f.html} | 10 +- ...dir_1338cd99faf71b6cb1609e99e3340e45.html} | 10 +- ...dir_35c1fdffcdd4ade6d7f948073ab165de.html} | 10 +- ...dir_375ba2cfd8fd5b05c50b92d996b9d386.html} | 22 +- .../dir_3f8eec2fc361645de4b1ec14c19fffc7.html | 120 + ...dir_48fdaa95ed78e499807eaa909d50b2cd.html} | 10 +- ...dir_588b87f799233a7c3afc1168633bb252.html} | 10 +- ...dir_64597db6ac7a9160e951a4226a03f10e.html} | 10 +- .../dir_65bafb41b3669ba481c8da543a696a08.html | 115 + ...dir_6fe4b0529cd3ec97045d3314254a0cce.html} | 12 +- ...dir_7053349436b45d276056de3c928a6fc6.html} | 10 +- ...dir_7fa7c3de4a91b9652697b9f1c2d38e70.html} | 10 +- ...dir_83c56f445d5c796bd14e4ebf939c29ad.html} | 10 +- .../dir_880f0837661bea0e588ff6a42c226fba.html | 99 + ...dir_933242dc2ed3ec7a82c146e98110781e.html} | 10 +- ...dir_aa847bee70cdde822696c7e33a504139.html} | 10 +- ...dir_ae142483ff91a68c468a97c037f98d4d.html} | 10 +- ...dir_b23f8e22c8c095d1c8c0cb8f88104a00.html} | 10 +- .../dir_b7f276137d53b05d7f6b34219adc0a31.html | 101 + ...dir_b885194e7131202a9b4650a8967e838c.html} | 16 +- ...dir_b8a35a7f00287a46b0da66a108ec1239.html} | 10 +- ...dir_bf7f1d16febc509cca62cff27fb88644.html} | 10 +- ...dir_c41da90e13af52a77978e497cf9cac63.html} | 10 +- .../dir_d258fb6e36cbaad69b44b6c9489b2bbb.html | 142 + ...dir_e329e4913ca1adf6e112c00fbb0d634f.html} | 10 +- ...dir_e3bda0bde998a4d5063328245b9909be.html} | 10 +- ...dir_f74090996960c752a82246b98a23aa62.html} | 10 +- ...dir_f99dae54fe7170f791f339b952d5067a.html} | 30 +- .../dir_ffb529e2a1792bf603304ea6ff9bf092.html | 99 + docs/files.html | 774 +- docs/functions.html | 30 +- docs/functions_b.html | 25 +- docs/functions_c.html | 48 +- docs/functions_d.html | 35 +- docs/functions_e.html | 12 +- docs/functions_enum.html | 9 +- docs/functions_eval.html | 9 +- docs/functions_f.html | 26 +- docs/functions_func.html | 30 +- docs/functions_func_b.html | 20 +- docs/functions_func_c.html | 45 +- docs/functions_func_d.html | 32 +- docs/functions_func_e.html | 9 +- docs/functions_func_f.html | 26 +- docs/functions_func_g.html | 45 +- docs/functions_func_h.html | 9 +- docs/functions_func_i.html | 16 +- docs/functions_func_l.html | 12 +- docs/functions_func_m.html | 21 +- docs/functions_func_n.html | 17 +- docs/functions_func_o.html | 20 +- docs/functions_func_p.html | 24 +- docs/functions_func_r.html | 25 +- docs/functions_func_s.html | 46 +- docs/functions_func_t.html | 18 +- docs/functions_func_u.html | 15 +- docs/functions_func_v.html | 9 +- docs/functions_func_w.html | 33 +- docs/functions_func_x.html | 9 +- docs/functions_func_~.html | 12 +- docs/functions_g.html | 41 +- docs/functions_h.html | 23 +- docs/functions_i.html | 25 +- docs/functions_k.html | 9 +- docs/functions_l.html | 15 +- docs/functions_m.html | 30 +- docs/functions_n.html | 17 +- docs/functions_o.html | 29 +- docs/functions_p.html | 23 +- docs/functions_r.html | 28 +- docs/functions_rela.html | 109 + docs/functions_s.html | 56 +- docs/functions_t.html | 25 +- docs/functions_type.html | 9 +- docs/functions_u.html | 15 +- docs/functions_v.html | 9 +- docs/functions_vars.html | 117 +- docs/functions_w.html | 36 +- docs/functions_x.html | 9 +- docs/functions_~.html | 12 +- docs/hierarchy.html | 441 +- docs/index.html | 10 +- docs/namespacemembers.html | 14 +- docs/namespacemembers_enum.html | 11 +- docs/namespacemembers_func.html | 11 +- docs/namespaces.html | 8 +- docs/search/all_0.js | 7 +- docs/search/all_1.js | 10 +- docs/search/all_10.js | 20 +- docs/search/all_11.js | 15 +- docs/search/all_12.js | 4 + docs/search/all_14.js | 9 +- docs/search/all_16.js | 3 +- docs/search/all_2.js | 14 +- docs/search/all_3.js | 18 +- docs/search/all_4.js | 1 + docs/search/all_5.js | 9 +- docs/search/all_6.js | 10 +- docs/search/all_7.js | 12 +- docs/search/all_8.js | 8 +- docs/search/all_a.js | 3 + docs/search/all_b.js | 18 +- docs/search/all_c.js | 5 +- docs/search/all_d.js | 6 +- docs/search/all_e.js | 7 +- docs/search/all_f.js | 8 +- docs/search/classes_1.js | 1 + docs/search/classes_10.js | 2 + docs/search/classes_11.js | 17 +- docs/search/classes_12.js | 35 +- docs/search/classes_13.js | 22 +- docs/search/classes_14.html | 26 + docs/search/classes_14.js | 5 + docs/search/classes_2.js | 1 + docs/search/classes_5.js | 2 + docs/search/classes_6.js | 3 + docs/search/classes_7.js | 3 +- docs/search/classes_9.js | 1 + docs/search/classes_a.js | 7 +- docs/search/classes_d.js | 2 + docs/search/classes_f.js | 7 +- docs/search/enums_0.js | 2 +- docs/search/enums_1.js | 2 +- docs/search/enums_2.html | 26 + docs/search/enums_2.js | 4 + docs/search/functions_0.js | 5 +- docs/search/functions_1.js | 3 + docs/search/functions_10.js | 4 +- docs/search/functions_11.js | 2 + docs/search/functions_13.js | 8 +- docs/search/functions_15.js | 3 +- docs/search/functions_2.js | 12 +- docs/search/functions_3.js | 15 +- docs/search/functions_5.js | 7 +- docs/search/functions_6.js | 10 +- docs/search/functions_8.js | 4 +- docs/search/functions_9.js | 3 +- docs/search/functions_a.js | 4 + docs/search/functions_b.js | 5 +- docs/search/functions_c.js | 3 +- docs/search/functions_d.js | 5 +- docs/search/functions_e.js | 5 +- docs/search/functions_f.js | 10 +- docs/search/related_0.html | 26 + docs/search/related_0.js | 4 + docs/search/search.js | 12 +- docs/search/variables_0.js | 6 +- docs/search/variables_1.js | 1 + docs/search/variables_10.html | 26 + docs/search/variables_10.js | 4 + docs/search/variables_11.html | 26 + docs/search/variables_11.js | 4 + docs/search/variables_2.js | 3 +- docs/search/variables_3.js | 4 +- docs/search/variables_4.js | 7 +- docs/search/variables_5.js | 16 +- docs/search/variables_6.js | 11 +- docs/search/variables_7.js | 13 +- docs/search/variables_8.js | 5 +- docs/search/variables_9.js | 18 +- docs/search/variables_a.js | 6 +- docs/search/variables_b.js | 6 +- docs/search/variables_c.js | 2 +- docs/search/variables_d.html | 26 + docs/search/variables_d.js | 16 + docs/search/variables_e.html | 26 + docs/search/variables_e.js | 6 + docs/search/variables_f.html | 26 + docs/search/variables_f.js | 4 + documentation.html | 591 + genindex.html | 370 + index.html | 140 + library.html | 214 + library_details.html | 926 ++ objects.inv | Bin 0 -> 5799 bytes options/chunking_options.html | 120 + options/dash_options.html | 142 + options/general_encryption_options.html | 112 + options/hls_options.html | 115 + options/hls_stream_descriptors.html | 109 + options/mp4_output_options.html | 117 + options/playready_encryption_options.html | 136 + options/raw_key_encryption_options.html | 127 + options/segment_template_formatting.html | 161 + options/stream_descriptors.html | 175 + options/udp_file_options.html | 110 + options/widevine_encryption_options.html | 172 + search.html | 103 + searchindex.js | 1 + tutorials/basic_usage.html | 179 + tutorials/dash.html | 307 + tutorials/drm.html | 131 + tutorials/encoding.html | 257 + tutorials/ffmpeg_piping.html | 163 + tutorials/hls.html | 322 + tutorials/live.html | 188 + tutorials/playready.html | 118 + tutorials/raw_key.html | 242 + tutorials/tutorials.html | 143 + tutorials/widevine.html | 287 + 1269 files changed, 56094 insertions(+), 11989 deletions(-) create mode 100644 _sources/build_instructions.md.txt create mode 100644 _sources/docker_instructions.md.txt create mode 100644 _sources/documentation.rst.txt create mode 100644 _sources/index.rst.txt create mode 100644 _sources/library.rst.txt create mode 100644 _sources/library_details.rst.txt create mode 100644 _sources/options/chunking_options.rst.txt create mode 100644 _sources/options/dash_options.rst.txt create mode 100644 _sources/options/general_encryption_options.rst.txt create mode 100644 _sources/options/hls_options.rst.txt create mode 100644 _sources/options/hls_stream_descriptors.rst.txt create mode 100644 _sources/options/mp4_output_options.rst.txt create mode 100644 _sources/options/playready_encryption_options.rst.txt create mode 100644 _sources/options/raw_key_encryption_options.rst.txt create mode 100644 _sources/options/segment_template_formatting.rst.txt create mode 100644 _sources/options/stream_descriptors.rst.txt create mode 100644 _sources/options/udp_file_options.rst.txt create mode 100644 _sources/options/widevine_encryption_options.rst.txt create mode 100644 _sources/tutorials/basic_usage.md.txt create mode 100644 _sources/tutorials/dash.rst.txt create mode 100644 _sources/tutorials/drm.rst.txt create mode 100644 _sources/tutorials/encoding.rst.txt create mode 100644 _sources/tutorials/ffmpeg_piping.rst.txt create mode 100644 _sources/tutorials/hls.rst.txt create mode 100644 _sources/tutorials/live.rst.txt create mode 100644 _sources/tutorials/playready.rst.txt create mode 100644 _sources/tutorials/raw_key.rst.txt create mode 100644 _sources/tutorials/tutorials.rst.txt create mode 100644 _sources/tutorials/widevine.rst.txt create mode 100644 _static/ajax-loader.gif create mode 100644 _static/basic.css create mode 100644 _static/comment-bright.png create mode 100644 _static/comment-close.png create mode 100644 _static/comment.png create mode 100644 _static/contents.png create mode 100644 _static/doctools.js create mode 100644 _static/down-pressed.png create mode 100644 _static/down.png create mode 100644 _static/file.png create mode 100644 _static/jquery-3.1.0.js create mode 100644 _static/jquery.js create mode 100644 _static/minus.png create mode 100644 _static/navigation.png create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/searchtools.js create mode 100644 _static/sphinxdoc.css create mode 100644 _static/sphinxdoc_new.css create mode 100644 _static/table_styling.css create mode 100644 _static/underscore-1.3.1.js create mode 100644 _static/underscore.js create mode 100644 _static/up-pressed.png create mode 100644 _static/up.png create mode 100644 _static/websupport.js create mode 100644 build_instructions.html create mode 100644 docker_instructions.html create mode 100644 docs/d0/da8/structshaka_1_1HlsParams.html create mode 100644 docs/d0/dae/file__util_8h_source.html create mode 100644 docs/d0/df4/classshaka_1_1hls_1_1MasterPlaylist-members.html create mode 100644 docs/d1/d13/status_8h_source.html create mode 100644 docs/d1/d1e/hls__notifier_8h_source.html create mode 100644 docs/d1/d2b/file__util_8cc_source.html create mode 100644 docs/d1/d45/classshaka_1_1hls_1_1MediaPlaylistFactory-members.html create mode 100644 docs/d1/d87/classshaka_1_1hls_1_1MasterPlaylist.html create mode 100644 docs/d1/dd8/structshaka_1_1PackagingParams-members.html create mode 100644 docs/d2/d20/classshaka_1_1Status.html create mode 100644 docs/d2/d23/threaded__io__file_8cc_source.html create mode 100644 docs/d2/d2a/classshaka_1_1IoCache-members.html create mode 100644 docs/d2/d4d/file_8h_source.html create mode 100644 docs/d2/d57/master__playlist_8h_source.html create mode 100644 docs/d2/d7b/structshaka_1_1StreamDescriptor.html create mode 100644 docs/d2/d82/structshaka_1_1BufferCallbackParams-members.html create mode 100644 docs/d2/d9d/structshaka_1_1FileCloser-members.html create mode 100644 docs/d2/da6/threaded__io__file_8h_source.html create mode 100644 docs/d2/db1/master__playlist_8cc_source.html create mode 100644 docs/d3/d19/io__cache_8h_source.html create mode 100644 docs/d3/d48/packager_8cc_source.html create mode 100644 docs/d3/d73/classshaka_1_1File.html create mode 100644 docs/d3/d73/classshaka_1_1File.png create mode 100644 docs/d3/d95/classshaka_1_1hls_1_1MockMediaPlaylist.html create mode 100644 docs/d3/d95/classshaka_1_1hls_1_1MockMediaPlaylist.png create mode 100644 docs/d3/de2/structshaka_1_1FileCloser.html create mode 100644 docs/d4/d37/io__cache_8cc_source.html create mode 100644 docs/d4/dcb/classshaka_1_1UdpFile.html create mode 100644 docs/d4/dcb/classshaka_1_1UdpFile.png create mode 100644 docs/d5/d1a/classshaka_1_1Packager-members.html create mode 100644 docs/d5/d76/classshaka_1_1hls_1_1HlsEntry.html create mode 100644 docs/d5/de3/structshaka_1_1PackagingParams.html create mode 100644 docs/d5/df2/media__playlist_8cc_source.html create mode 100644 docs/d5/dfc/file_8cc_source.html create mode 100644 docs/d5/dfe/classshaka_1_1File-members.html create mode 100644 docs/d6/d47/hls__params_8h_source.html create mode 100644 docs/d6/d5b/classshaka_1_1Status-members.html create mode 100644 docs/d6/d62/structshaka_1_1TestParams.html create mode 100644 docs/d6/d74/classshaka_1_1UdpOptions-members.html create mode 100644 docs/d6/dc0/classshaka_1_1hls_1_1HlsEntry-members.html create mode 100644 docs/d6/de8/local__file_8cc_source.html create mode 100644 docs/d6/df8/structshaka_1_1StreamDescriptor-members.html create mode 100644 docs/d7/d5c/classshaka_1_1hls_1_1SimpleHlsNotifier.html create mode 100644 docs/d7/d5c/classshaka_1_1hls_1_1SimpleHlsNotifier.png create mode 100644 docs/d7/d6c/structshaka_1_1HlsParams-members.html create mode 100644 docs/d7/d75/callback__file_8h_source.html create mode 100644 docs/d7/dad/simple__hls__notifier_8cc_source.html create mode 100644 docs/d7/dbd/classshaka_1_1LocalFile.html create mode 100644 docs/d7/dbd/classshaka_1_1LocalFile.png create mode 100644 docs/d8/d66/classshaka_1_1UdpFile-members.html create mode 100644 docs/d8/d81/classshaka_1_1LocalFile-members.html create mode 100644 docs/d8/d9f/udp__file_8h_source.html create mode 100644 docs/d9/d9b/classshaka_1_1hls_1_1MediaPlaylistFactory.html create mode 100644 docs/d9/da8/structshaka_1_1BufferCallbackParams.html create mode 100644 docs/d9/de2/mock__media__playlist_8cc_source.html create mode 100644 docs/d9/deb/classshaka_1_1hls_1_1HlsNotifier.html create mode 100644 docs/d9/deb/classshaka_1_1hls_1_1HlsNotifier.png create mode 100644 docs/d9/dfe/classshaka_1_1UdpOptions.html create mode 100644 docs/da/d05/classshaka_1_1hls_1_1MediaPlaylist-members.html create mode 100644 docs/da/d1d/udp__options_8cc_source.html create mode 100644 docs/da/d4a/media__playlist_8h_source.html create mode 100644 docs/da/d55/simple__hls__notifier_8h_source.html create mode 100644 docs/da/dc3/status_8cc_source.html create mode 100644 docs/db/d1b/classshaka_1_1MemoryFile-members.html create mode 100644 docs/db/d66/udp__file_8cc_source.html create mode 100644 docs/db/da6/memory__file_8h_source.html create mode 100644 docs/db/dd0/classshaka_1_1Packager.html create mode 100644 docs/dc/d17/status__test__util_8h_source.html create mode 100644 docs/dc/d40/classshaka_1_1hls_1_1HlsNotifier-members.html create mode 100644 docs/dc/da3/buffer__callback__params_8h_source.html create mode 100644 docs/dc/df0/structshaka_1_1TestParams-members.html create mode 100644 docs/dd/d0c/classshaka_1_1ThreadedIoFile.html create mode 100644 docs/dd/d0c/classshaka_1_1ThreadedIoFile.png create mode 100644 docs/dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.html create mode 100644 docs/dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.png create mode 100644 docs/dd/d3e/callback__file_8cc_source.html create mode 100644 docs/dd/d40/classshaka_1_1CallbackFile.html create mode 100644 docs/dd/d40/classshaka_1_1CallbackFile.png create mode 100644 docs/dd/d4f/classshaka_1_1hls_1_1SimpleHlsNotifier-members.html create mode 100644 docs/dd/d87/memory__file_8cc_source.html create mode 100644 docs/dd/d8c/file__test__util_8h_source.html create mode 100644 docs/dd/d95/classshaka_1_1ThreadedIoFile-members.html create mode 100644 docs/dd/db5/packager_8h_source.html create mode 100644 docs/de/d0f/local__file_8h_source.html create mode 100644 docs/de/d6c/mock__media__playlist_8h_source.html create mode 100644 docs/de/dad/classshaka_1_1MemoryFile.html create mode 100644 docs/de/dad/classshaka_1_1MemoryFile.png create mode 100644 docs/de/dbf/udp__options_8h_source.html create mode 100644 docs/de/dcf/file__closer_8h_source.html create mode 100644 docs/df/d4e/classshaka_1_1IoCache.html create mode 100644 docs/df/d5b/classshaka_1_1CallbackFile-members.html create mode 100644 docs/df/dce/classshaka_1_1hls_1_1MockMediaPlaylist-members.html rename docs/{dir_7f5e01ba7faf319a30cabd201b6ef121.html => dir_0ff8490546c67558c1586a7b16b2189f.html} (86%) rename docs/{dir_b0da65f92a9541ef8f345654d4bd88fd.html => dir_1338cd99faf71b6cb1609e99e3340e45.html} (88%) rename docs/{dir_f7dcbe7025bbacfc4b9a7dff6ad41d72.html => dir_35c1fdffcdd4ade6d7f948073ab165de.html} (95%) rename docs/{dir_65f7acfa8cf3a5f1edc11faa2428b914.html => dir_375ba2cfd8fd5b05c50b92d996b9d386.html} (80%) create mode 100644 docs/dir_3f8eec2fc361645de4b1ec14c19fffc7.html rename docs/{dir_eeaeb49ac3913fcfb450d3ce9cc0141b.html => dir_48fdaa95ed78e499807eaa909d50b2cd.html} (86%) rename docs/{dir_3702507ddbf3daed2728028eabf9f597.html => dir_588b87f799233a7c3afc1168633bb252.html} (88%) rename docs/{dir_0494b8c96e3190a776d2b97ade9c8ddf.html => dir_64597db6ac7a9160e951a4226a03f10e.html} (96%) create mode 100644 docs/dir_65bafb41b3669ba481c8da543a696a08.html rename docs/{dir_2618cd273dea54f184e42d7a562af818.html => dir_6fe4b0529cd3ec97045d3314254a0cce.html} (93%) rename docs/{dir_6ca5d7200b4f75a249572dffb9651898.html => dir_7053349436b45d276056de3c928a6fc6.html} (88%) rename docs/{dir_2eceb70145328c029a5f43350007537a.html => dir_7fa7c3de4a91b9652697b9f1c2d38e70.html} (89%) rename docs/{dir_679a6f4e9fa092b388fc986148018f2a.html => dir_83c56f445d5c796bd14e4ebf939c29ad.html} (87%) create mode 100644 docs/dir_880f0837661bea0e588ff6a42c226fba.html rename docs/{dir_40ba5f08173034b639e202b47df1cb13.html => dir_933242dc2ed3ec7a82c146e98110781e.html} (87%) rename docs/{dir_ba94ecd487194410fd7c4b70c530929c.html => dir_aa847bee70cdde822696c7e33a504139.html} (88%) rename docs/{dir_3e9291fd7a18fdecc763294cb2628910.html => dir_ae142483ff91a68c468a97c037f98d4d.html} (94%) rename docs/{dir_5039d854a18988ed1f1dbebc120ffbf7.html => dir_b23f8e22c8c095d1c8c0cb8f88104a00.html} (96%) create mode 100644 docs/dir_b7f276137d53b05d7f6b34219adc0a31.html rename docs/{dir_89dd766eb2df7d7257dbe806a34404af.html => dir_b885194e7131202a9b4650a8967e838c.html} (84%) rename docs/{dir_263e692158cf359dd655c259558153d6.html => dir_b8a35a7f00287a46b0da66a108ec1239.html} (88%) rename docs/{dir_d422163b96683743ed3963d4aac17747.html => dir_bf7f1d16febc509cca62cff27fb88644.html} (96%) rename docs/{dir_49627ef5ef0630f6cf11dd06344c4cf0.html => dir_c41da90e13af52a77978e497cf9cac63.html} (88%) create mode 100644 docs/dir_d258fb6e36cbaad69b44b6c9489b2bbb.html rename docs/{dir_aa73376d632f252584a1c0dfbefab2c4.html => dir_e329e4913ca1adf6e112c00fbb0d634f.html} (93%) rename docs/{dir_c6ada2450b25ab5438a4dba6c9b890af.html => dir_e3bda0bde998a4d5063328245b9909be.html} (97%) rename docs/{dir_ebd49ab0652c2e9158bbb57c55382729.html => dir_f74090996960c752a82246b98a23aa62.html} (88%) rename docs/{dir_39dc0668bd5a501998f94e8b4e546c71.html => dir_f99dae54fe7170f791f339b952d5067a.html} (78%) create mode 100644 docs/dir_ffb529e2a1792bf603304ea6ff9bf092.html create mode 100644 docs/functions_rela.html create mode 100644 docs/search/classes_14.html create mode 100644 docs/search/classes_14.js create mode 100644 docs/search/enums_2.html create mode 100644 docs/search/enums_2.js create mode 100644 docs/search/related_0.html create mode 100644 docs/search/related_0.js create mode 100644 docs/search/variables_10.html create mode 100644 docs/search/variables_10.js create mode 100644 docs/search/variables_11.html create mode 100644 docs/search/variables_11.js create mode 100644 docs/search/variables_d.html create mode 100644 docs/search/variables_d.js create mode 100644 docs/search/variables_e.html create mode 100644 docs/search/variables_e.js create mode 100644 docs/search/variables_f.html create mode 100644 docs/search/variables_f.js create mode 100644 documentation.html create mode 100644 genindex.html create mode 100644 index.html create mode 100644 library.html create mode 100644 library_details.html create mode 100644 objects.inv create mode 100644 options/chunking_options.html create mode 100644 options/dash_options.html create mode 100644 options/general_encryption_options.html create mode 100644 options/hls_options.html create mode 100644 options/hls_stream_descriptors.html create mode 100644 options/mp4_output_options.html create mode 100644 options/playready_encryption_options.html create mode 100644 options/raw_key_encryption_options.html create mode 100644 options/segment_template_formatting.html create mode 100644 options/stream_descriptors.html create mode 100644 options/udp_file_options.html create mode 100644 options/widevine_encryption_options.html create mode 100644 search.html create mode 100644 searchindex.js create mode 100644 tutorials/basic_usage.html create mode 100644 tutorials/dash.html create mode 100644 tutorials/drm.html create mode 100644 tutorials/encoding.html create mode 100644 tutorials/ffmpeg_piping.html create mode 100644 tutorials/hls.html create mode 100644 tutorials/live.html create mode 100644 tutorials/playready.html create mode 100644 tutorials/raw_key.html create mode 100644 tutorials/tutorials.html create mode 100644 tutorials/widevine.html diff --git a/_sources/build_instructions.md.txt b/_sources/build_instructions.md.txt new file mode 100644 index 0000000000..b160b233b8 --- /dev/null +++ b/_sources/build_instructions.md.txt @@ -0,0 +1,314 @@ +# Build Instructions + +Shaka Packager supports building on Windows, Mac and Linux host systems. + +## Linux build dependencies + +Most development is done on Ubuntu (currently 14.04, Trusty Tahr). The +dependencies mentioned here are only for Ubuntu. There are some instructions +for [other distros below](#notes-for-other-linux-distros). + +```shell +sudo apt-get update +sudo apt-get install build-essential curl git python +``` + +Note that `Git` must be v1.7.5 or above. + +## Mac system requirements + +* [Xcode](https://developer.apple.com/xcode) 7.3+. +* The OS X 10.10 SDK or later. Run + + ```shell + $ ls `xcode-select -p`/Platforms/MacOSX.platform/Developer/SDKs + ``` + + to check whether you have it. + +## Windows system requirements + +* Visual Studio 2015 Update 3, see below (no other version is supported). +* Windows 7 or newer. + +Install Visual Studio 2015 Update 3 or later - Community Edition should work if +its license is appropriate for you. Use the Custom Install option and select: + +- Visual C++, which will select three sub-categories including MFC +- Universal Windows Apps Development Tools > Tools (1.4.1) and Windows 10 SDK + (10.0.14393) + +## Install `depot_tools` + +### Linux and Mac + +Clone the `depot_tools` repository from Chromium: + +```shell +$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git +``` + +Add `depot_tools` to the end of your PATH (you will probably want to put this +in your `~/.bashrc` or `~/.zshrc`). Assuming you cloned `depot_tools` to +`/path/to/depot_tools`: + +```shell +$ export PATH="$PATH:/path/to/depot_tools" +``` + +### Windows + +Download the +[depot_tools bundle](https://storage.googleapis.com/chrome-infra/depot_tools.zip) +and extract it somewhere. + +*** note +**Warning:** **DO NOT** use drag-n-drop or copy-n-paste extract from Explorer, +this will not extract the hidden “.git” folder which is necessary for +depot_tools to autoupdate itself. You can use “Extract all…” from the context +menu though. +*** + +Add depot_tools to the start of your PATH (must be ahead of any installs of +Python). Assuming you unzipped the bundle to C:\src\depot_tools, open: + +Control Panel → System and Security → System → Advanced system settings + +If you have Administrator access, Modify the PATH system variable and +put `C:\src\depot_tools` at the front (or at least in front of any directory +that might already have a copy of Python or Git). + +If you don't have Administrator access, you can add a user-level PATH +environment variable and put `C:\src\depot_tools` at the front, but +if your system PATH has a Python in it, you will be out of luck. + +Also, add a DEPOT_TOOLS_WIN_TOOLCHAIN system variable in the same way, and set +it to 0. This tells depot_tools to use your locally installed version of Visual +Studio (by default, depot_tools will try to use a google-internal version). + +From a cmd.exe shell, run the command gclient (without arguments). On first +run, gclient will install all the Windows-specific bits needed to work with +the code, including msysgit and python. + +* If you run gclient from a non-cmd shell (e.g., cygwin, PowerShell), + it may appear to run properly, but msysgit, python, and other tools + may not get installed correctly. +* If you see strange errors with the file system on the first run of gclient, + you may want to + [disable Windows Indexing](http://tortoisesvn.tigris.org/faq.html#cantmove2). + +## Get the code + +Create a `shaka_packager` directory for the checkout and change to it (you can +call this whatever you like and put it wherever you like, as long as the full +path has no spaces): + +```shell +$ mkdir shaka_packager && cd shaka_packager +``` + +Run the `gclient` tool from `depot_tools` to check out the code and its +dependencies. + +```shell +$ gclient config https://www.github.com/google/shaka-packager.git --name=src --unmanaged +$ gclient sync +``` + +To sync to a particular commit or version, add the '-r \' flag to +`gclient sync`, e.g. + +```shell +$ gclient sync -r 4cb5326355e1559d60b46167740e04624d0d2f51 +``` + +```shell +$ gclient sync -r v1.2.0 +``` + +If you don't want the full repo history, you can save some time by adding the +`--no-history` flag to `gclient sync`. + +When the above commands completes, it will have created a hidden `.gclient` file +and a directory called `src` in the working directory. The remaining +instructions assume you have switched to the `src` directory: + +```shell +$ cd src +``` + +### Build Shaka Packager + +#### Linux and Mac + +Shaka Packager uses [Ninja](https://ninja-build.org) as its main build tool, +which is bundled in depot_tools. + +To build the code, run `ninja` command: + +```shell +$ ninja -C out/Release +``` + +If you want to build debug code, replace `Release` above with `Debug`. + +We also provide a mechanism to change build settings, for example, +you can change build system to `make` by overriding `GYP_GENERATORS`: + +```shell +$ GYP_GENERATORS='make' gclient runhooks +``` + +Another example, you can also disable clang by overriding `GYP_DEFINES`: + +```shell +$ GYP_DEFINES='clang=0' gclient runhooks +``` + +#### Windows + +The instructions are similar, except that Windows allows using either `/` or `\` +as path separator: + +```shell +$ ninja -C out/Release +$ ninja -C out\Release +``` + +Also, unlike Linux / Mac, 32-bit is chosen by default even if the system is +64-bit. 64-bit has to be enabled explicitly and the output directory is +configured to `out/%CONFIGURATION%_x64`, i.e.: + +```shell +$ GYP_DEFINES='target_arch=x64' gclient runhooks +$ ninja -C out/Release_x64 +``` + +### Build artifacts + +After a successful build, you can find build artifacts including the main +`packager` binary in build output directory (`out/Release` or `out/Release_x64` +for release build). + +See [Shaka Packager Documentation](https://google.github.io/shaka-packager/) +on how to use `Shaka Packager`. + +### Update your checkout + +To update an existing checkout, you can run + +```shell +$ git pull origin master --rebase +$ gclient sync +``` + +The first command updates the primary Packager source repository and rebases on +top of tip-of-tree (aka the Git branch `origin/master`). You can also use other +common Git commands to update the repo. + +The second command syncs dependencies to the appropriate versions and re-runs +hooks as needed. + +## Cross compiling for ARM on Ubuntu host + +The install-build-deps script can be used to install all the compiler +and library dependencies directly from Ubuntu: + +```shell +$ ./pacakger/build/install-build-deps.sh +``` + +Install sysroot image and others using `gclient`: + +```shell +$ GYP_CROSSCOMPILE=1 GYP_DEFINES="target_arch=arm" gclient runhooks +``` + +The build command is the same as in Ubuntu: + +```shell +$ ninja -C out/Release +``` + +## Notes for other linux distros + +### Arch Linux + +Instead of running `sudo apt-get install` to install build dependencies, run: + +```shell +$ sudo pacman -S --needed python2 git curl gcc gcc-libs make +$ sudo ln -sf python2 /usr/bin/python +``` + +Clang requires libtinfo.so.5 which is not available by default on Arch Linux. +You can get libtinfo from ncurses5-compat-libs in AUR: + +```shell +$ git clone https://aur.archlinux.org/ncurses5-compat-libs.git +$ cd ncurses5-compat-libs +$ gpg --keyserver pgp.mit.edu --recv-keys F7E48EDB +$ makepkg -si +``` + +### Debian + +Same as Ubuntu. + +### Fedora + +Instead of running `sudo apt-get install` to install build dependencies, run: + +```shell +$ su -c 'yum install -y git python git curl gcc-c++ findutils bzip2 \ + ncurses-compat-libs' +``` + +### OpenSUSE + +Use `zypper` command to install dependencies: + +```shell +sudo zypper in git python python-xml git curl gcc-c++ tar +``` + +## Tips, tricks, and troubleshooting + +### Xcode license agreement + +If you're getting the error + +> Agreeing to the Xcode/iOS license requires admin privileges, please re-run as +> root via sudo. + +the Xcode license hasn't been accepted yet which (contrary to the message) any +user can do by running: + +```shell +$ xcodebuild -license +``` + +Only accepting for all users of the machine requires root: + +```shell +$ sudo xcodebuild -license +``` + +## Contributing + +If you have improvements or fixes, we would love to have your contributions. +See https://github.com/google/shaka-packager/blob/master/CONTRIBUTING.md for +details. + +We have continue integration tests setup on pull requests. You can also verify +locally by running the tests manually. + +If you know which tests are affected by your change, you can limit which tests +are run using the `--gtest_filter` arg, e.g.: + +```shell +$ out/Debug/mp4_unittest --gtest_filter="MP4MediaParserTest.*" +``` + +You can find out more about GoogleTest at its +[GitHub page](https://github.com/google/googletest). diff --git a/_sources/docker_instructions.md.txt b/_sources/docker_instructions.md.txt new file mode 100644 index 0000000000..c1f73b6ced --- /dev/null +++ b/_sources/docker_instructions.md.txt @@ -0,0 +1,43 @@ +# Using Docker + +[Docker](https://www.docker.com/whatisdocker) is a tool that can package an +application and its dependencies in a virtual container to run on different +host operating systems. + +## Get Shaka Packager from Dockerhub + +To pull latest Shaka Packager: + +```shell +$ docker pull google/shaka-packager +``` + +You can pull a specific version, e.g. v1.6.2: + +```shell +$ docker pull google/shaka-packager:release-v1.6.2 +``` + +The full list of tags is available +[here](https://hub.docker.com/r/google/shaka-packager/tags/). + +## Run the container + +Assume you have your media files stored in `host_media_path` in the host +machine. + +This runs the container and maps `host_media_path` to `media` in the container: + +```shell +$ docker run -v /host_media_path/:/media -it --rm google/shaka-packager +``` + +Then in the container, run the packager command, e.g.: + +```shell +$ packager input=/media/example.mp4,stream=audio,output=/media/audio.mp4 \ + input=/media/example.mp4,stream=video,output=/media/video.mp4 \ + --mpd_output /media/example.mpd +``` + +Outputs are available in the host's media folder `host_media_path`. diff --git a/_sources/documentation.rst.txt b/_sources/documentation.rst.txt new file mode 100644 index 0000000000..aa7a087fc9 --- /dev/null +++ b/_sources/documentation.rst.txt @@ -0,0 +1,80 @@ +Packager Documentation +====================== + +Shaka Packager is a tool and a media packaging SDK for DASH and HLS packaging +and encryption. It can transmux input media files from one container to another +container. + +.. note:: + + Shaka Packager does not do transcoding. Content must be pre-encoded before + passing to packager. + +Packager operates in *streams*, described by *stream_descriptor*. The streams +can be read from the same "file" or different "files", which can be regular +files, pipes, udp streams, etc. + +This page is the documentation on using the *packager* tool. If you are +interested in integrating *packager* library into your own tool, please see +:doc:`library`. + +Getting Shaka Packager +---------------------- + +There are several ways you can get Shaka Packager. + +- Using `Docker `_. + Instructions are available at :doc:`docker_instructions`. +- Get prebuilt binaries from + `release `_. +- Built from source, see :doc:`build_instructions` for details. + +Synopsis +-------- + +:: + + $ packager {stream_descriptor} [{stream_descriptor}] ... \ + [--dump_stream_info] \ + [Chunking Options] \ + [MP4 Output Options] \ + [encryption / decryption options] \ + [DASH options] \ + [HLS options] + +.. include:: /options/stream_descriptors.rst + +.. include:: /options/chunking_options.rst + +.. include:: /options/mp4_output_options.rst + +.. include:: /options/dash_options.rst + +.. include:: /options/hls_options.rst + +Encryption / decryption options +------------------------------- + +Shaka Packager supports three different types of key providers: + +- Raw key (fixed key): keys are provided in command line +- Widevine: fetches keys from Widevine key server +- Playready: fetches keys from Playready key server + +Different key providers cannot be specified at the same time. + +:: + + [--enable_widevine_encryption {Widevine Encryption Options}] \ + [--enable_widevine_decryption {Widevine Decryption Options}] \ + [--enable_fixed_key_encryption {Fixed Key Encryption Options}] \ + [--enable_fixed_key_decryption {Fixed Key Decryption Options}] \ + [--enable_playready_encryption {Playready Encryption Options}] + +.. include:: /options/general_encryption_options.rst + +.. include:: /options/raw_key_encryption_options.rst + +.. include:: /options/widevine_encryption_options.rst + +.. include:: /options/playready_encryption_options.rst diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 0000000000..1dd070ed8f --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,33 @@ +.. Shaka Packager documentation master file, created by + sphinx-quickstart on Wed Aug 2 12:38:50 2017. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to Shaka Packager's documentation! +========================================== + +source code repository: https://github.com/google/shaka-packager + +.. toctree:: + :maxdepth: 2 + + documentation.rst + tutorials/tutorials.rst + library.rst + +.. include a hidden TOC to avoid sphinx complaint. +.. toctree:: + :hidden: + + build_instructions.md + design.rst + docker_instructions.md + library_details.rst + tutorials/encoding.rst + tutorials/ffmpeg_piping.rst + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`search` diff --git a/_sources/library.rst.txt b/_sources/library.rst.txt new file mode 100644 index 0000000000..1cffb4abb2 --- /dev/null +++ b/_sources/library.rst.txt @@ -0,0 +1,37 @@ +Shaka Packager Library +====================== + +Documentation for the top level Shaka packager library. See +`Internal API `_ for +documentation on internal APIs. + +.. doxygenclass:: shaka::Packager + +Sample code: + +.. code-block:: c++ + + shaka::Packager packager; + + // Setup packaging parameters. + shaka::PackagingParams packaging_params; + // Use default parameters here. + + // Setup stream descriptors. + std::vector stream_descriptors; + shaka::StreamDescriptor stream_descriptor; + stream_descriptor.input = "input.mp4"; + stream_descriptor.stream_selector = "video"; + stream_descriptor.output = "output_video.mp4"; + stream_descriptors.push_back(stream_descriptor); + shaka::StreamDescriptor stream_descriptor; + stream_descriptor.input = "input.mp4"; + stream_descriptor.stream_selector = "audio"; + stream_descriptor.output = "output_audio.mp4"; + stream_descriptors.push_back(stream_descriptor); + + shaka::Status status = packager.Initialize(packaging_params, + stream_descriptors); + if (!status.ok()) { ... } + status = packager.Run(); + if (!status.ok()) { ... } diff --git a/_sources/library_details.rst.txt b/_sources/library_details.rst.txt new file mode 100644 index 0000000000..06f3d6024f --- /dev/null +++ b/_sources/library_details.rst.txt @@ -0,0 +1,44 @@ +Shaka Packager Library (Continued) +================================== + +.. doxygenstruct:: shaka::PackagingParams + +.. doxygenstruct:: shaka::StreamDescriptor + +.. doxygenstruct:: shaka::Mp4OutputParams + +.. doxygenstruct:: shaka::ChunkingParams + +.. doxygenstruct:: shaka::MpdParams + +.. doxygenstruct:: shaka::HlsParams + +.. doxygenenum:: shaka::HlsPlaylistType + +.. doxygenenum:: shaka::KeyProvider + +.. doxygenstruct:: shaka::WidevineSigner + +.. doxygenenum:: shaka::WidevineSigner::SigningKeyType + +.. doxygenstruct:: shaka::WidevineEncryptionParams + +.. doxygenstruct:: shaka::PlayreadyEncryptionParams + +.. doxygenstruct:: shaka::RawKeyEncryptionParams + +.. doxygenstruct:: shaka::RawKeyEncryptionParams::KeyPair + +.. doxygenstruct:: shaka::EncryptionParams + +.. doxygenstruct:: shaka::WidevineDecryptionParams + +.. doxygenstruct:: shaka::RawKeyDecryptionParams + +.. doxygenstruct:: shaka::RawKeyDecryptionParams::KeyPair + +.. doxygenstruct:: shaka::DecryptionParams + +.. doxygenclass:: shaka::Status + +.. doxygenenum:: shaka::error::Code diff --git a/_sources/options/chunking_options.rst.txt b/_sources/options/chunking_options.rst.txt new file mode 100644 index 0000000000..560a2a7cc8 --- /dev/null +++ b/_sources/options/chunking_options.rst.txt @@ -0,0 +1,23 @@ +Chunking options +^^^^^^^^^^^^^^^^ + +--segment_duration + + Segment duration in seconds. If single_segment is specified, this parameter + sets the duration of a subsegment; otherwise, this parameter sets the + duration of a segment. Actual segment durations may not be exactly as + requested. + +--fragment_duration + + Fragment duration in seconds. Should not be larger than the segment + duration. Actual fragment durations may not be exactly as requested. + +--segment_sap_aligned + + Force segments to begin with stream access points. Default enabled. + +--fragment_sap_aligned + + Force fragments to begin with stream access points. This flag implies + *segment_sap_aligned*. Default enabled. diff --git a/_sources/options/dash_options.rst.txt b/_sources/options/dash_options.rst.txt new file mode 100644 index 0000000000..749e68def4 --- /dev/null +++ b/_sources/options/dash_options.rst.txt @@ -0,0 +1,45 @@ +DASH options +^^^^^^^^^^^^ + +--generate_static_mpd + + If enabled, generates static mpd. If segment_template is specified in + stream descriptors, shaka-packager generates dynamic mpd by default; if + this flag is enabled, shaka-packager generates static mpd instead. Note + that if segment_template is not specified, shaka-packager always generates + static mpd regardless of the value of this flag. + +--mpd_output + + MPD output file name. + +--base_urls + + Comma separated BaseURLs for the MPD. The values will be added as + element(s) immediately under the element. + +--min_buffer_time + + Specifies, in seconds, a common duration used in the definition of the MPD + Representation data rate. + +--minimum_update_period + + Indicates to the player how often to refresh the media presentation + description in seconds. This value is used for dynamic MPD only. + +--time_shift_buffer_depth + + Guaranteed duration of the time shifting buffer for dynamic media + presentations, in seconds. + +--suggested_presentation_delay + + Specifies a delay, in seconds, to be added to the media presentation time. + This value is used for dynamic MPD only. + +--default_language + + Any tracks tagged with this language will have + in the manifest. This allows the player to choose the correct default + language for the content. diff --git a/_sources/options/general_encryption_options.rst.txt b/_sources/options/general_encryption_options.rst.txt new file mode 100644 index 0000000000..654b2a163c --- /dev/null +++ b/_sources/options/general_encryption_options.rst.txt @@ -0,0 +1,15 @@ +General encryption options +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +--protection_scheme + + Specify a protection scheme, 'cenc' or 'cbc1' or pattern-based protection + schemes 'cens' or 'cbcs'. + +--vp9_subsample_encryption, --novp9_subsample_encryption + + Enable / disable VP9 subsample encryption. Enabled by default. + +--clear_lead + + Clear lead in seconds if encryption is enabled. diff --git a/_sources/options/hls_options.rst.txt b/_sources/options/hls_options.rst.txt new file mode 100644 index 0000000000..d36e28dc85 --- /dev/null +++ b/_sources/options/hls_options.rst.txt @@ -0,0 +1,18 @@ +HLS options +^^^^^^^^^^^ + +--hls_master_playlist_output + + Output path for the master playlist for HLS. This flag must be used to + output HLS. + +--hls_base_url + + The base URL for the Media Playlists and media files listed in the + playlists. This is the prefix for the files. + +--hls_playlist_type + + VOD, EVENT, or LIVE. This defines the EXT-X-PLAYLIST-TYPE in the HLS + specification. For hls_playlist_type of LIVE, EXT-X-PLAYLIST-TYPE tag is + omitted. diff --git a/_sources/options/hls_stream_descriptors.rst.txt b/_sources/options/hls_stream_descriptors.rst.txt new file mode 100644 index 0000000000..384df1d1cb --- /dev/null +++ b/_sources/options/hls_stream_descriptors.rst.txt @@ -0,0 +1,18 @@ +HLS specific stream descriptor fields +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +:hls_name: + + Required for audio when outputting HLS. name of the output stream. This is + not (necessarily) the same as output. This is used as the NAME attribute for + EXT-X-MEDIA. + +:hls_group_id: + + Required for audio when outputting HLS. The group ID for the output stream. + This is used as the GROUP-ID attribute for EXT-X-MEDIA. + +:playlist_name: + + Required for HLS output. Name of the playlist for the stream. Usually ends + with '.m3u8'. diff --git a/_sources/options/mp4_output_options.rst.txt b/_sources/options/mp4_output_options.rst.txt new file mode 100644 index 0000000000..7b9ad64715 --- /dev/null +++ b/_sources/options/mp4_output_options.rst.txt @@ -0,0 +1,20 @@ +MP4 output options +^^^^^^^^^^^^^^^^^^ + +--mp4_include_pssh_in_stream + + MP4 only: include pssh in the encrypted stream. Default enabled. + +--mp4_use_decoding_timestamp_in_timeline + + If set, decoding timestamp instead of presentation timestamp will be used + when generating media timeline, e.g. timestamps in sidx and mpd. This is + to workaround a Chromium bug that decoding timestamp is used in buffered + range, https://crbug.com/398130. Default false. + +--num_subsegments_per_sidx + + Set the number of subsegments in each SIDX box. If 0, a single SIDX box is + used per segment; if -1, no SIDX box is used; Otherwise, the muxer packs N + subsegments in the root SIDX of the segment, with + segment_duration/N/fragment_duration fragments per subsegment. diff --git a/_sources/options/playready_encryption_options.rst.txt b/_sources/options/playready_encryption_options.rst.txt new file mode 100644 index 0000000000..78b5740b20 --- /dev/null +++ b/_sources/options/playready_encryption_options.rst.txt @@ -0,0 +1,39 @@ +Playready encryption options +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +--enable_playready_encryption + + Enable encryption with playready key. + +--playready_server_url + + Playready packaging server url. + +--program_identifier + + Program identifier for packaging request. + +--playready_key_id + + Playready key id in hex. + +--playready_key + + Playready key in hex. + +--ca_file + + Absolute path to the certificate authority file for the server cert. + PEM format. + +--client_cert_file + + Absolute path to client certificate file. + +--client_cert_private_key_file + + Absolute path to the private key file. + +--client_cert_private_key_password + + Password to the private key file. diff --git a/_sources/options/raw_key_encryption_options.rst.txt b/_sources/options/raw_key_encryption_options.rst.txt new file mode 100644 index 0000000000..2e34d1d6c8 --- /dev/null +++ b/_sources/options/raw_key_encryption_options.rst.txt @@ -0,0 +1,30 @@ +Raw key encryption options +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +--enable_fixed_key_encryption + + Enable encryption with fixed key. + +--enable_fixed_key_decryption + + Enable decryption with fixed key. + +--key_id <32-digit hex string> + + The key id in hex string format. + HEX. + +--key <32-digit hex string> + + The key in hex string format. + +--iv <16-digit or 32-digit hex string> + + IV in hex string format. If not specified, a random IV will be generated. + This flag should only be used for testing. IV must be either 8 bytes + (16 digits HEX) or 16 bytes (32 digits in HEX). + +--pssh + + One or more concatenated PSSH boxes in hex string format. If not specified, + a `v1 common PSSH box `_ will be generated. diff --git a/_sources/options/segment_template_formatting.rst.txt b/_sources/options/segment_template_formatting.rst.txt new file mode 100644 index 0000000000..0f05c2efb1 --- /dev/null +++ b/_sources/options/segment_template_formatting.rst.txt @@ -0,0 +1,51 @@ +Segment template formatting +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The implementation is based on *Template-based Segment URL construction* +described in ISO/IEC 23009-1:2014. + +.. table:: Supported identifiers + + ============== ============================== ============================== + $$ Substitution parameter Format + ============== ============================== ============================== + $$ is an escape sequence, i.e. Not applicable. + "$$" is replaced with a single + "$". + $Number$ This identifier is substitued The format tag may be present. + with the *number* of the + corresponding Segment. If no format tag is present, a + default format tag with + *width*\=1 shall be used. + $Time$ This identifier is substituted The format tag may be present. + with the value of the + **SegmentTimeline@t** If no format tag is present, a + attribute for the Segment default format tag with + being accessed. Either *width*\=1 shall be used. + $Number$ or $Time$ may be used + but not both at the same time. + ============== ============================== ============================== + +.. note:: + + Identifiers $RepresentationID$ and $Bandwidth$ are not supported in this + version. Please file an `issue + `_ if you want it to be + supported. + +In each URL, the identifiers shall be replaced by the substitution parameter +per the definition in the above table. Identifier matching is case-sensitive. + +Each identifier may be suffixed, within the enclosing '$' characters, with an +additional format tag aligned with the *printf* format tag as defined in IEEE +1003.1-2008 following this prototype:: + + %0[width]d + +The *width* parameter is an unsigned integer that provides the minimum number +of characters to be printed. If the value to be printed is shorter than this +number, the result shall be padded with zeros. The value is not truncated even +if the result is larger. + +Strings outside identifiers shall only contain characters that are permitted +within URLs according to RFC 3986. diff --git a/_sources/options/stream_descriptors.rst.txt b/_sources/options/stream_descriptors.rst.txt new file mode 100644 index 0000000000..ad0fcc6305 --- /dev/null +++ b/_sources/options/stream_descriptors.rst.txt @@ -0,0 +1,71 @@ +Stream descriptors +^^^^^^^^^^^^^^^^^^ + +There can be multiple *stream_descriptor* with input from the same "file" or +multiple different "files". + +Stream 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 content 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. + +:skip_encryption=0|1: + + Optional. Defaults to 0 if not specified. If it is set to 1, no encryption + of the stream will be made. + +: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. + +.. include:: /options/hls_stream_descriptors.rst diff --git a/_sources/options/udp_file_options.rst.txt b/_sources/options/udp_file_options.rst.txt new file mode 100644 index 0000000000..05de7102dd --- /dev/null +++ b/_sources/options/udp_file_options.rst.txt @@ -0,0 +1,18 @@ +UDP file options +^^^^^^^^^^^^^^^^ + +UDP file is of the form udp://ip:port[?options]. Here is the list of supported +options: + +:reuse=0|1: + + Allow or disallow reusing UDP sockets. + +:interface=, source=: + + Multicast group interface address. Only the packets sent to this address is + received. + +:timeout=: + + UDP timeout in microseconds. diff --git a/_sources/options/widevine_encryption_options.rst.txt b/_sources/options/widevine_encryption_options.rst.txt new file mode 100644 index 0000000000..78b9a3a8dd --- /dev/null +++ b/_sources/options/widevine_encryption_options.rst.txt @@ -0,0 +1,75 @@ +Widevine encryption options +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +--enable_widevine_encryption + + Enable encryption with Widevine key server. User should provide either + AES signing key (--aes_signing_key, --aes_signing_iv) or RSA signing key + (--rsa_signing_key_path). + +--enable_widevine_decryption + + Enable decryption with Widevine key server. User should provide either + AES signing key (--aes_signing_key, --aes_signing_iv) or RSA signing key + (--rsa_signing_key_path). + +--include_common_pssh + + When using Widevine encryption, include an additional v1 PSSH box for the + common system ID that includes the key IDs. See https://goo.gl/s8RIhr. + +--key_server_url + + Key server url. Required for Widevine encryption and decryption. + +--content_id + + Content identifier that uniquely identifies the content. + +--policy + + The name of a stored policy, which specifies DRM content rights. + +--max_sd_pixels + + The video track is considered SD if its max pixels per frame is no higher + than *max_sd_pixels*. Default: 442368 (768 x 576). + +--max_hd_pixels + + The video track is considered HD if its max pixels per frame is higher than + *max_sd_pixels*, but no higher than *max_hd_pixels*. Default: 2073600 + (1920 x 1080). + +--max_uhd1_pixels + + The video track is considered UHD1 if its max pixels per frame is higher + than *max_hd_pixels*, but no higher than *max_uhd1_pixels*. Otherwise it is + UHD2. Default: 8847360 (4096 x 2160). + +--signer + + The name of the signer. + +--aes_signing_key + + AES signing key in hex string. *aes_signing_iv* is required if + *aes_signing_key* is specified. This option is exclusive with + *rsa_signing_key_path*. + +--aes_signing_iv + + AES signing iv in hex string. + +--rsa_signing_key_path + + Path to the file containing PKCS#1 RSA private key for request signing. + This option is exclusive with *aes_signing_key*. + +--crypto_period_duration + + Defines how often key rotates. If it is non-zero, key rotation is enabled. + +--group_id + + Identifier for a group of licenses. diff --git a/_sources/tutorials/basic_usage.md.txt b/_sources/tutorials/basic_usage.md.txt new file mode 100644 index 0000000000..259df894e8 --- /dev/null +++ b/_sources/tutorials/basic_usage.md.txt @@ -0,0 +1,61 @@ +# Basic Usage + +## Getting help + +```shell +$ packager --help +``` + +## Media file analysis + +Shaka Packager can be used to inspect the content of a media file and dump basic +stream information. + +```shell +$ packager input=some_content.mp4 --dump_stream_info +``` + +The output looks like: + +```shell +File "some_content.mp4": +Found 2 stream(s). +Stream [0] type: Video + codec_string: avc1.4d001e + time_scale: 24000 + duration: 3002000 (125.1 seconds) + is_encrypted: false + codec: H264 + width: 720 + height: 360 + pixel_aspect_ratio: 8:9 + trick_play_factor: 0 + nalu_length_size: 4 + +Stream [1] type: Audio + codec_string: mp4a.40.2 + time_scale: 44100 + duration: 5517311 (125.1 seconds) + is_encrypted: false + codec: AAC + sample_bits: 16 + num_channels: 2 + sampling_frequency: 44100 + language: eng +``` + +## Basic transmuxing + +Shaka Packager can be used to extract streams, optionally transmuxes the streams +from one container format to another container format. + +Here is a simple command that extracts video and audio from the input file: + +```shell +$ packager in=some_content.mp4,stream=video,out=video.mp4 \ + in=some_content.mp4,stream=audio,out=audio.mp4 +``` + +Shaka Packager is also capable of more complex tasks, such as applying +encryption, packaging contents to DASH or HLS formats, etc. Refer +:doc:`tutorials`. diff --git a/_sources/tutorials/dash.rst.txt b/_sources/tutorials/dash.rst.txt new file mode 100644 index 0000000000..92f1e86a74 --- /dev/null +++ b/_sources/tutorials/dash.rst.txt @@ -0,0 +1,63 @@ +DASH +==== + +Dynamic Adaptive Streaming over HTTP (DASH) is an adaptive bitrate streaming +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`. + +Synopsis +-------- + +:: + + $ packager {stream_descriptor} [stream_descriptor] ... \ + --mpd_output {manifest output path} \ + [Other DASH options] \ + [Other options, e.g. DRM options, HLS options] + +See `DASH options`_ for the available DASH related options. + +.. note:: + + DASH and HLS options can both be specified to output DASH and HLS manifests + at the same time. Note that it works only for MP4 outputs. + +Examples +-------- + +The examples below uses the H264 streams created in :doc:`encoding`. It can be +applied to VP9 in the same way. + +* on-demand:: + + $ packager \ + in=h264_baseline_360p_600.mp4,stream=audio,output=audio.mp4 \ + 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 \ + in=h264_high_1080p_6000.mp4,stream=video,output=h264_1080p.mp4 \ + --mpd_output h264.mpd + +The above packaging command creates five single track fragmented mp4 streams +(4 video, 1 audio) and a manifest, which describes the 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' \ + --generate_static_mpd --mpd_output h264.mpd + +The above packaging command creates five groups of segments (each with an init +segment and a series of media segments) for the five streams and a manifest, +which describes the streams. + +.. include:: /options/dash_options.rst + +.. include:: /options/segment_template_formatting.rst diff --git a/_sources/tutorials/drm.rst.txt b/_sources/tutorials/drm.rst.txt new file mode 100644 index 0000000000..c3b2d971b4 --- /dev/null +++ b/_sources/tutorials/drm.rst.txt @@ -0,0 +1,9 @@ +DRM +=== + +.. toctree:: + :maxdepth: 2 + + /tutorials/raw_key.rst + /tutorials/widevine.rst + /tutorials/playready.rst diff --git a/_sources/tutorials/encoding.rst.txt b/_sources/tutorials/encoding.rst.txt new file mode 100644 index 0000000000..c25e5a5fbb --- /dev/null +++ b/_sources/tutorials/encoding.rst.txt @@ -0,0 +1,124 @@ +Media Encoding +-------------- + +Shaka Packager does not do transcoding internally. The contents need to be +pre-encoded before passing to Shaka Packager. + +General guidelines of how contents should be encoded +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- Encode multiple bitrates or resolutions of the same content. Shaka Packager + can then package the content into DASH / HLS formats, allowing different + bitrates of the content to be served for different network conditions, + achieving adaptive bitrate streaming. +- Not a must, but the multibirate content is recommended to have aligned GOPs + across the different bitrate streams. This makes bitrate switching easier and + smoother. +- We recommend setting GOP size to 5s or less. The streams are usually + switchable only at GOP boundaries. A smaller GOP size results in faster + switching when network condition changes. +- In the same stream, the bitrate should be more or less the same in the + inter-GOP level. + +Sample commands to generate multi-bitrate content +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Let us say we have a 1080p original content `original.mp4` containing an audio +track in `AAC` and a video track in `H264`. The frame rate is 24. We want to +encode the contents into four resolutions: 360p, 480p, 720p and 1080p with GOP +size 72, i.e. 3 seconds. + +We use `ffmpeg `_ here, which is a common tool used for +transcoding. + +H264 encoding +""""""""""""" + +* 360p:: + + $ ffmpeg -i original.mp4 -c:a copy \ + -vf "scale=-2:360" \ + -c:v libx264 -profile:v baseline -level:v 3.0 \ + -x264opts scenecut=0:open_gop=0:min-keyint=72:keyint=72 \ + -minrate 600k -maxrate 600k -bufsize 600k -b:v 600k \ + -y h264_baseline_360p_600.mp4 + +* 480p:: + + $ ffmpeg -i original.mp4 -c:a copy \ + -vf "scale=-2:480" \ + -c:v libx264 -profile:v main -level:v 3.1 \ + -x264opts scenecut=0:open_gop=0:min-keyint=72:keyint=72 \ + -minrate 1000k -maxrate 1000k -bufsize 1000k -b:v 1000k \ + -y h264_main_480p_1000.mp4 + +* 720p:: + + $ ffmpeg -i original.mp4 -c:a copy \ + -vf "scale=-2:720" \ + -c:v libx264 -profile:v main -level:v 4.0 \ + -x264opts scenecut=0:open_gop=0:min-keyint=72:keyint=72 \ + -minrate 3000k -maxrate 3000k -bufsize 3000k -b:v 3000k \ + -y h264_main_720p_3000.mp4 + +* 1080p:: + + $ ffmpeg -i original.mp4 -c:a copy \ + -vf "scale=-2:1080" \ + -c:v libx264 -profile:v main -level:v 4.2 \ + -x264opts scenecut=0:open_gop=0:min-keyint=72:keyint=72 \ + -minrate 6000k -maxrate 6000k -bufsize 6000k -b:v 6000k \ + -y h264_main_1080p_6000.mp4 + +VP9 encoding +"""""""""""" + +The audio is encoded into `opus`. + +* 360p:: + + $ ffmpeg -i original.mp4 \ + -strict -2 -c:a opus \ + -vf "scale=-2:360" \ + -c:v libvpx-vp9 -profile:v 0 \ + -keyint_min 72 -g 72 \ + -tile-columns 4 -frame-parallel 1 -speed 1 \ + -auto-alt-ref 1 -lag-in-frames 25 \ + -b:v 300k \ + -y vp9_360p_300.webm + +* 480p:: + + $ ffmpeg -i original.mp4 \ + -strict -2 -c:a opus \ + -vf "scale=-2:480" \ + -c:v libvpx-vp9 -profile:v 0 \ + -keyint_min 72 -g 72 \ + -tile-columns 4 -frame-parallel 1 -speed 1 \ + -auto-alt-ref 1 -lag-in-frames 25 \ + -b:v 500k \ + -y vp9_480p_500.webm + +* 720p:: + + $ ffmpeg -i original.mp4 \ + -strict -2 -c:a opus \ + -vf "scale=-2:720" \ + -c:v libvpx-vp9 -profile:v 0 \ + -keyint_min 72 -g 72 \ + -tile-columns 4 -frame-parallel 1 -speed 1 \ + -auto-alt-ref 1 -lag-in-frames 25 \ + -b:v 1500k \ + -y vp9_720p_1500.webm + +* 1080p:: + + $ ffmpeg -i original.mp4 \ + -strict -2 -c:a opus \ + -vf "scale=-2:1080" \ + -c:v libvpx-vp9 -profile:v 0 \ + -keyint_min 72 -g 72 \ + -tile-columns 4 -frame-parallel 1 -speed 1 \ + -auto-alt-ref 1 -lag-in-frames 25 \ + -b:v 3000k \ + -y vp9_1080p_3000.webm diff --git a/_sources/tutorials/ffmpeg_piping.rst.txt b/_sources/tutorials/ffmpeg_piping.rst.txt new file mode 100644 index 0000000000..2625f8d943 --- /dev/null +++ b/_sources/tutorials/ffmpeg_piping.rst.txt @@ -0,0 +1,56 @@ +ffmpeg piping +============= + +We can use *ffmpeg* to redirect / pipe input not supported by *packager* +to *packager*, for example, input from webcam devices. The example below uses +webcam input device. The concept depicted here can be applied to +other *ffmpeg* supported capture device. + +ffmpeg camera capture +--------------------- + +Refer to `ffmpeg Capture/Webcam `_ +on how to use *ffmpeg* to capture webmcam inputs. + +The examples below assumes Mac OS X 10.7 (Lion) or later. It is similar on +other platforms. Refer to the above link for details. + +Create pipe +----------- + +We use pipe to connect *ffmpeg* and *packager*:: + + $ mkfifo pipe1 + +Encoding / capture command +-------------------------- + +The below command captures from the default audio / video devices on the +machine:: + + $ ffmpeg -f avfoundation -i "default" -f mpegts pipe: > pipe1 + +The command starts only after packager starts. + +.. note:: + + After encoding starts, monitor encoding speed carefully. It should always be + 1x and above. If not, adjust the encoding parameters to recude it. + +Packaging command (DASH) +------------------------ + +:: + + $ packager \ + 'in=pipe1,stream=audio,init_segment=live_cam_audio.mp4,segment_template=live_cam_audio_$Number$.m4s' \ + 'in=pipe1,stream=video,init_segment=live_cam_video.mp4,segment_template=live_cam_video_$Number$.m4s' \ + --mpd_output live_cam.mpd \ + --io_block_size 65536 + +.. note:: + + Option -io_block_size 65536 tells packager to use an io_block_size of 65K + for threaded io file. This is necessary as reading from pipe blocks until + the specified number of bytes, which is specified in io_block_size for + threaded io file, thus the value of io_block_size cannot be too large. diff --git a/_sources/tutorials/hls.rst.txt b/_sources/tutorials/hls.rst.txt new file mode 100644 index 0000000000..4baba4672c --- /dev/null +++ b/_sources/tutorials/hls.rst.txt @@ -0,0 +1,87 @@ +HLS +=== + +HTTP Live Streaming (also known as HLS) is an HTTP-based media streaming +communications protocol implemented by Apple Inc. as part of its QuickTime, +Safari, OS X, and iOS software. It resembles MPEG-DASH in that it works by +breaking the overall stream into a sequence of small HTTP-based file downloads, +each download loading one short chunk of an overall potentially unbounded +transport stream. As the stream is played, the client may select from a number +of different alternate streams containing the same material encoded at a variety +of data rates, allowing the streaming session to adapt to the available data +rate. At the start of the streaming session, HLS downloads an extended M3U +playlist containing the metadata for the various sub-streams which are +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`. + +Synopsis +-------- + +:: + + $ packager {stream_descriptor with HLS specific descriptors} \ + [stream_descriptor with HLS specific descriptors] ... \ + --hls_master_playlist_output {master playlist output path} \ + [Other HLS options] \ + [Other options, e.g. DRM options, DASH options] + +See `HLS specific stream descriptor fields`_ for the available HLS specific +stream descriptor fields. + +See `HLS options`_ for the available HLS related options. + +.. note:: + + DASH and HLS options can both be specified to output DASH and HLS manifests + at the same time. Note that it works only for MP4 outputs. + +Examples +--------- + +The examples below uses the H264 streams created in :doc:`encoding`. + +* TS output:: + + $ packager \ + 'in=h264_baseline_360p_600.mp4,stream=audio,output=audio_$Number$.ts,playlist_name=audio.m3u8,hls_group_id=audio,hls_name=ENGLISH' \ + 'in=h264_baseline_360p_600.mp4,stream=video,output=h264_360p_$Number$.ts,playlist_name=h264_360p.m3u8' \ + 'in=h264_main_480p_1000.mp4,stream=video,output=h264_480p_$Number$.ts,playlist_name=h264_480p.m3u8' \ + 'in=h264_main_720p_3000.mp4,stream=video,output=h264_720p_$Number$.ts,playlist_name=h264_720p.m3u8' \ + 'in=h264_high_1080p_6000.mp4,stream=video,output=h264_1080p_$Number$.ts,playlist_name=h264_1080p.m3u8' \ + --hls_master_playlist_output h264_master.m3u8 + +The above packaging command creates five single track TS streams +(4 video, 1 audio) and a manifest, which describes the 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' \ + --hls_master_playlist_output h264_master.m3u8 + +* Single file MP4 output is also supported:: + + $ 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 \ + --hls_master_playlist_output h264_master.m3u8 + +The above packaging command creates five groups of streams (each with an init +segment and a series of media segments) and a manifest, which describes the +streams. + +.. include:: /options/hls_stream_descriptors.rst + +.. include:: /options/hls_options.rst + +.. include:: /options/segment_template_formatting.rst diff --git a/_sources/tutorials/live.rst.txt b/_sources/tutorials/live.rst.txt new file mode 100644 index 0000000000..d38f013904 --- /dev/null +++ b/_sources/tutorials/live.rst.txt @@ -0,0 +1,46 @@ +Live +==== + +A typical live source is UDP multicast, which is the only live protocol +packager supports directly right now. + +.. include:: /options/udp_file_options.rst + +Pipe through FFmpeg +------------------- + +For other unsupported protocols, you can use FFmpeg to pipe the input. +See :doc:`ffmpeg_piping` for details. + +Examples +-------- + +The command is similar to the on-demand, see :doc:`dash` and :doc:`hls`. + +Here are some examples. + +* DASH:: + + $ packager \ + 'in=udp://225.1.1.8:8001?interface=172.29.46.122,stream=audio,init_segment=audio_init.mp4,segment_template=audio_$Number$.m4s' \ + 'in=udp://225.1.1.8:8001?interface=172.29.46.122,stream=video,init_segment=h264_360p_init.mp4,segment_template=h264_360p_$Number$.m4s' \ + 'in=udp://225.1.1.8:8002?interface=172.29.46.122,stream=video,init_segment=h264_480p_init.mp4,segment_template=h264_480p_$Number$.m4s' \ + 'in=udp://225.1.1.8:8003?interface=172.29.46.122,stream=video,init_segment=h264_720p_init.mp4,segment_template=h264_720p_$Number$.m4s' \ + 'in=udp://225.1.1.8:8004?interface=172.29.46.122,stream=video,init_segment=h264_1080p_init.mp4,segment_template=h264_1080p_$Number$.m4s' \ + --mpd_output h264.mpd + + +* HLS:: + + $ packager \ + 'in=udp://225.1.1.8:8001?interface=172.29.46.122,stream=audio,init_segment=audio_init.mp4,segment_template=audio_$Number$.m4s,playlist_name=audio.m3u8,hls_group_id=audio,hls_name=ENGLISH' \ + 'in=udp://225.1.1.8:8001?interface=172.29.46.122,stream=video,init_segment=h264_360p_init.mp4,segment_template=h264_360p_$Number$.m4s,playlist_name=h264_360p.m3u8' \ + 'in=udp://225.1.1.8:8002?interface=172.29.46.122,stream=video,init_segment=h264_480p_init.mp4,segment_template=h264_480p_$Number$.m4s,playlist_name=h264_480p.m3u8' \ + 'in=udp://225.1.1.8:8003?interface=172.29.46.122,stream=video,init_segment=h264_720p_init.mp4,segment_template=h264_720p_$Number$.m4s,playlist_name=h264_720p.m3u8' \ + 'in=udp://225.1.1.8:8004?interface=172.29.46.122,stream=video,init_segment=h264_1080p_init.mp4,segment_template=h264_1080p_$Number$.m4s,playlist_name=h264_1080p.m3u8' \ + --hls_master_playlist_output h264_master.m3u8 + +.. note:: + + Packager does not support removing old segments internally. The user is + resposible for setting up a cron job to do so. diff --git a/_sources/tutorials/playready.rst.txt b/_sources/tutorials/playready.rst.txt new file mode 100644 index 0000000000..59eaa6dfc9 --- /dev/null +++ b/_sources/tutorials/playready.rst.txt @@ -0,0 +1,4 @@ +Playready +========= + +To be completed. diff --git a/_sources/tutorials/raw_key.rst.txt b/_sources/tutorials/raw_key.rst.txt new file mode 100644 index 0000000000..a477d04d58 --- /dev/null +++ b/_sources/tutorials/raw_key.rst.txt @@ -0,0 +1,86 @@ +Raw key +======= + +*Packager* allows encrypting contents with raw key. + +Synopsis +-------- + +:: + + $ packager {stream_descriptor} [stream_descriptor] ... \ + --enable_fixed_key_encryption \ + --key_id --key \ + [--pssh ] \ + [Other options, e.g. DASH options, HLS options] + +Custom PSSH(s) can be provided in *--pssh*. If absent, +`v1 common PSSH box `_ is generated. + +Examples +-------- + +The examples below uses the H264 streams created in :doc:`encoding`. Here are examples with DASH. It can be applied to HLS in a similar way. + +Common PSSH:: + + $ packager \ + in=h264_baseline_360p_600.mp4,stream=audio,output=audio.mp4 \ + 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 \ + in=h264_high_1080p_6000.mp4,stream=video,output=h264_1080p.mp4 \ + --enable_fixed_key_encryption \ + --key_id abba271e8bcf552bbd2e86a434a9a5d9 \ + --key 69eaa802a6763af979e8d1940fb88392 \ + --mpd_output h264.mpd + +Widevine PSSH:: + + $ packager \ + in=h264_baseline_360p_600.mp4,stream=audio,output=audio.mp4 \ + 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 \ + in=h264_high_1080p_6000.mp4,stream=video,output=h264_1080p.mp4 \ + --enable_fixed_key_encryption \ + --key_id abba271e8bcf552bbd2e86a434a9a5d9 \ + --key 69eaa802a6763af979e8d1940fb88392 \ + --pssh 000000407073736800000000edef8ba979d64acea3c827dcd51d21ed000000201a0d7769646576696e655f74657374220f7465737420636f6e74656e74206964 \ + --mpd_output h264.mpd + +Refer to +`player setup `_ +on how to config the DRM in Shaka Player. + +Test vectors used in this tutorial +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Key ID + + abba271e8bcf552bbd2e86a434a9a5d9 + + Key ID must be 16 bytes or 32 digits in HEX. + +Key + + 69eaa802a6763af979e8d1940fb88392 + + Key must be 16 bytes or 32 digits in HEX. + +Widevine PSSH + + 000000407073736800000000edef8ba979d64acea3c827dcd51d21ed000000201a0d7769646576696e655f74657374220f7465737420636f6e74656e74206964 + + The PSSH is generated using + `pssh-box script `_:: + + $ pssh-box.py --widevine-system-id \ + --content-id 7465737420636f6e74656e74206964 --provider widevine_test + +.. include:: /options/raw_key_encryption_options.rst + +pssh-box (Utility to generate PSSH boxes) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +https://github.com/google/shaka-packager/tree/master/packager/tools/pssh diff --git a/_sources/tutorials/tutorials.rst.txt b/_sources/tutorials/tutorials.rst.txt new file mode 100644 index 0000000000..5ce31569ee --- /dev/null +++ b/_sources/tutorials/tutorials.rst.txt @@ -0,0 +1,11 @@ +Tutorials +==================== + +.. toctree:: + :maxdepth: 2 + + basic_usage.md + dash.rst + hls.md + live.md + drm.rst diff --git a/_sources/tutorials/widevine.rst.txt b/_sources/tutorials/widevine.rst.txt new file mode 100644 index 0000000000..e8f2861be1 --- /dev/null +++ b/_sources/tutorials/widevine.rst.txt @@ -0,0 +1,87 @@ +Widevine +======== + +There are two options to package a Widevine DRM encrypted content: + +1. If you know the encryption keys and have the associated Widevine PSSH at + hand, you can provide them in clear text to *packager* directly. Refer to + :doc:`/tutorials/raw_key` for details. + +2. Provide *key_server_url* and associated credentials to *packager*. + *Packager* will fetch encryption keys from Widevine key server. + +Synopsis +-------- + +AES signing:: + + $ packager {stream_descriptor} [stream_descriptor] ... \ + --enable_widevine_encryption \ + --key_server_url \ + --content_id \ + --signer --aes_signing_key \ + --aes_signing_iv \ + [Other options, e.g. DASH options, HLS options] + +RSA signing:: + + $ packager {stream_descriptor} [stream_descriptor] ... \ + --enable_widevine_encryption \ + --key_server_url \ + --content_id \ + --signer --rsa_signing_key_path \ + [Other options, e.g. DASH options, HLS options] + +Examples +-------- + +The examples below uses the H264 streams created in :doc:`encoding`. + +Here is an example with DASH. It can be applied to HLS in a similar way:: + + $ packager \ + in=h264_baseline_360p_600.mp4,stream=audio,output=audio.mp4 \ + 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 \ + in=h264_high_1080p_6000.mp4,stream=video,output=h264_1080p.mp4 \ + --mpd_output h264.mpd \ + --enable_widevine_encryption \ + --key_server_url https://license.uat.widevine.com/cenc/getcontentkey/widevine_test \ + --content_id 7465737420636f6e74656e74206964 \ + --signer widevine_test \ + --aes_signing_key 1ae8ccd0e7985cc0b6203a55855a1034afc252980e970ca90e5202689f947ab9 \ + --aes_signing_iv d58ce954203b7c9a9a9d467f59839249 + +Refer to +`player setup `_ +on how to config the DRM in Shaka Player. + +Widevine test credential +------------------------ + +Here is the test crendential used in this tutorial. + +key_server_url + + https://license.uat.widevine.com/cenc/getcontentkey/widevine_test + +signer + + widevine_test + +aes_signing_key + + 1ae8ccd0e7985cc0b6203a55855a1034afc252980e970ca90e5202689f947ab9 + +aes_signing_iv + + d58ce954203b7c9a9a9d467f59839249 + +.. note:: + + The test credential is only meant for development. Please reach out to + `Widevine `_ if + you need something for production use. + +.. include:: /options/widevine_encryption_options.rst diff --git a/_static/ajax-loader.gif b/_static/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..61faf8cab23993bd3e1560bff0668bd628642330 GIT binary patch literal 673 zcmZ?wbhEHb6krfw_{6~Q|Nno%(3)e{?)x>&1u}A`t?OF7Z|1gRivOgXi&7IyQd1Pl zGfOfQ60;I3a`F>X^fL3(@);C=vM_KlFfb_o=k{|A33hf2a5d61U}gjg=>Rd%XaNQW zW@Cw{|b%Y*pl8F?4B9 zlo4Fz*0kZGJabY|>}Okf0}CCg{u4`zEPY^pV?j2@h+|igy0+Kz6p;@SpM4s6)XEMg z#3Y4GX>Hjlml5ftdH$4x0JGdn8~MX(U~_^d!Hi)=HU{V%g+mi8#UGbE-*ao8f#h+S z2a0-5+vc7MU$e-NhmBjLIC1v|)9+Im8x1yacJ7{^tLX(ZhYi^rpmXm0`@ku9b53aN zEXH@Y3JaztblgpxbJt{AtE1ad1Ca>{v$rwwvK(>{m~Gf_=-Ro7Fk{#;i~+{{>QtvI yb2P8Zac~?~=sRA>$6{!(^3;ZP0TPFR(G_-UDU(8Jl0?(IXu$~#4A!880|o%~Al1tN literal 0 HcmV?d00001 diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 0000000000..7ed0e58edb --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,632 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox input[type="text"] { + width: 170px; +} + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, .highlighted { + background-color: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/comment-bright.png b/_static/comment-bright.png new file mode 100644 index 0000000000000000000000000000000000000000..15e27edb12ac25701ac0ac21b97b52bb4e45415e GIT binary patch literal 756 zcmVgfIX78 z$8Pzv({A~p%??+>KickCb#0FM1rYN=mBmQ&Nwp<#JXUhU;{|)}%&s>suq6lXw*~s{ zvHx}3C%<;wE5CH!BR{p5@ml9ws}y)=QN-kL2?#`S5d*6j zk`h<}j1>tD$b?4D^N9w}-k)bxXxFg>+#kme^xx#qg6FI-%iv2U{0h(Y)cs%5a|m%Pn_K3X_bDJ>EH#(Fb73Z zfUt2Q3B>N+ot3qb*DqbTZpFIn4a!#_R-}{?-~Hs=xSS6p&$sZ-k1zDdtqU`Y@`#qL z&zv-~)Q#JCU(dI)Hf;$CEnK=6CK50}q7~wdbI->?E07bJ0R;!GSQTs5Am`#;*WHjvHRvY?&$Lm-vq1a_BzocI^ULXV!lbMd%|^B#fY;XX)n<&R^L z=84u1e_3ziq;Hz-*k5~zwY3*oDKt0;bM@M@@89;@m*4RFgvvM_4;5LB!@OB@^WbVT zjl{t;a8_>od-~P4 m{5|DvB&z#xT;*OnJqG}gk~_7HcNkCr0000W zanA~u9RIXo;n7c96&U)YLgs-FGlx~*_c{Jgvesu1E5(8YEf&5wF=YFPcRe@1=MJmi zag(L*xc2r0(slpcN!vC5CUju;vHJkHc*&70_n2OZsK%O~A=!+YIw z7zLLl7~Z+~RgWOQ=MI6$#0pvpu$Q43 zP@36QAmu6!_9NPM?o<1_!+stoVRRZbW9#SPe!n;#A_6m8f}|xN1;H{`0RoXQ2LM47 zt(g;iZ6|pCb@h2xk&(}S3=EVBUO0e90m2Lp5CB<(SPIaB;n4))3JB87Or#XPOPcum z?<^(g+m9}VNn4Y&B`g8h{t_$+RB1%HKRY6fjtd-<7&EsU;vs0GM(Lmbhi%Gwcfs0FTF}T zL{_M6Go&E0Eg8FuB*(Yn+Z*RVTBE@10eIOb3El^MhO`GabDll(V0&FlJi2k^;q8af zkENdk2}x2)_KVp`5OAwXZM;dG0?M-S)xE1IKDi6BY@5%Or?#aZ9$gcX)dPZ&wA1a< z$rFXHPn|TBf`e?>Are8sKtKrKcjF$i^lp!zkL?C|y^vlHr1HXeVJd;1I~g&Ob-q)& z(fn7s-KI}G{wnKzg_U5G(V%bX6uk zIa+<@>rdmZYd!9Y=C0cuchrbIjuRB_Wq{-RXlic?flu1*_ux}x%(HDH&nT`k^xCeC ziHi1!ChH*sQ6|UqJpTTzX$aw8e(UfcS^f;6yBWd+(1-70zU(rtxtqR%j z-lsH|CKQJXqD{+F7V0OTv8@{~(wp(`oIP^ZykMWgR>&|RsklFMCnOo&Bd{le} zV5F6424Qzl;o2G%oVvmHgRDP9!=rK8fy^!yV8y*4p=??uIRrrr0?>O!(z*g5AvL2!4z0{sq%vhG*Po}`a<6%kTK5TNhtC8}rXNu&h^QH4A&Sk~Autm*s~45(H7+0bi^MraaRVzr05hQ3iK?j` zR#U@^i0WhkIHTg29u~|ypU?sXCQEQgXfObPW;+0YAF;|5XyaMAEM0sQ@4-xCZe=0e z7r$ofiAxn@O5#RodD8rh5D@nKQ;?lcf@tg4o+Wp44aMl~c47azN_(im0N)7OqdPBC zGw;353_o$DqGRDhuhU$Eaj!@m000000NkvXXu0mjfjZ7Z_ literal 0 HcmV?d00001 diff --git a/_static/contents.png b/_static/contents.png new file mode 100644 index 0000000000000000000000000000000000000000..6c59aa1f9c8c3b754b258b8ab4f6b95971c99109 GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfx!2~2XTwzxLQbwLGjv*C{Q@c%>8XN?UO#1VG zcLb|!+10i0Jzf{Gv>fyFaQYL)bKk!I{mJd!3^2Uu$-u=wds-dX_E&EV= 0 && !jQuery(node.parentNode).hasClass(className)) { + var span = document.createElement("span"); + span.className = className; + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this); + }); + } + } + return this.each(function() { + highlight(this); + }); +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated == 'undefined') + return string; + return (typeof translated == 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated == 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) == 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this == '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); \ No newline at end of file diff --git a/_static/down-pressed.png b/_static/down-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..5756c8cad8854722893dc70b9eb4bb0400343a39 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`OFdm2Ln;`PZ^+1>KjR?B@S0W7 z%OS_REiHONoJ6{+Ks@6k3590|7k9F+ddB6!zw3#&!aw#S`x}3V3&=A(a#84O-&F7T z^k3tZB;&iR9siw0|F|E|DAL<8r-F4!1H-;1{e*~yAKZN5f0|Ei6yUmR#Is)EM(Po_ zi`qJR6|P<~+)N+kSDgL7AjdIC_!O7Q?eGb+L+qOjm{~LLinM4NHn7U%HcK%uoMYO5 VJ~8zD2B3o(JYD@<);T3K0RV0%P>BEl literal 0 HcmV?d00001 diff --git a/_static/down.png b/_static/down.png new file mode 100644 index 0000000000000000000000000000000000000000..1b3bdad2ceffae91cee61b32f3295f9bbe646e48 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6CVIL!hEy=F?b*7pIY7kW{q%Rg zx!yQ<9v8bmJwa`TQk7YSw}WVQ()mRdQ;TC;* literal 0 HcmV?d00001 diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_static/jquery-3.1.0.js b/_static/jquery-3.1.0.js new file mode 100644 index 0000000000..f2fc274787 --- /dev/null +++ b/_static/jquery-3.1.0.js @@ -0,0 +1,10074 @@ +/*eslint-disable no-unused-vars*/ +/*! + * jQuery JavaScript Library v3.1.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2016-07-07T21:44Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.1.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.0 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-01-04 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + // Known :disabled false positives: + // IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset) + // not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Check form elements and option elements for explicit disabling + return "label" in elem && elem.disabled === disabled || + "form" in elem && elem.disabled === disabled || + + // Check non-disabled form elements for fieldset[disabled] ancestors + "form" in elem && elem.disabled === false && ( + // Support: IE6-11+ + // Ancestry is covered for us + elem.isDisabled === disabled || + + // Otherwise, assume any non-