diff --git a/docs/annotated.html b/docs/annotated.html index caa956e2c0..3181ec1a51 100644 --- a/docs/annotated.html +++ b/docs/annotated.html @@ -249,112 +249,116 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); ||oCDecryptConfig ||oCDecryptorSourceDecryptorSource wraps KeySource and is responsible for decryptor management ||oCEncryptionConfig -||oCFixedKeySourceA key source that uses fixed keys for encryption -||oCHttpKeyFetcher -||oCKeyFetcherBase class for fetching keys from the license service -||oCEncryptionKey -||oCKeySourceKeySource is responsible for encryption key acquisition -||oCPeriodInfo -||oCMediaEvent -||oCSegmentInfo -||oCStreamData -||oCMediaHandler -||oCFakeMediaHandler -||oCMediaHandlerTestBase -||oCMediaParser -||oCMediaSampleClass to hold a media sample -||oCMuxer -||oCMuxerOptionsThis structure contains the list of configuration options for Muxer -||oCOffsetByteQueue -||oCPlayReadyKeySourceA key source that uses playready for encryption -||oCProducerConsumerQueue -||oCProtectionSystemSpecificInfo -||oCRange -||oCRequestSignerAbstract class used for signature generation -||oCAesRequestSignerAesRequestSigner uses AES-CBC signing -||oCRsaRequestSignerRsaRequestSigner uses RSA-PSS signing -||oCRsaPrivateKeyRsa private key, used for message signing and decryption -||oCRsaPublicKeyRsa public key, used for signature verification and encryption -||oCStreamInfoAbstract class holds stream information -||oCTextSample -||oCTextStreamInfo -||oCTextTrack -||oCTextTrackConfig -||oCVideoStreamInfoHolds video stream information -||oCWidevineKeySource -||oCChunkingHandler -||oCAACAudioSpecificConfig -||oCAVCDecoderConfigurationRecordClass for parsing AVC decoder configuration record -||oCDecoderConfigurationRecord -||oCESDescriptor -||oCH264ByteToUnitStreamConverter -||oCH264Sps -||oCH264Pps -||oCH264ModificationOfPicNum -||oCH264WeightingFactors -||oCH264DecRefPicMarking -||oCH264SliceHeader -||oCH264SEIRecoveryPoint -||oCH264SEIMessage -||oCH264Parser -||oCH265ByteToUnitStreamConverter -||oCH265ReferencePictureSet -||oCH265VuiParameters -||oCH265Pps -||oCH265Sps -||oCH265ReferencePictureListModifications -||oCH265SliceHeader -|||\CLongTermPicsInfo -||oCH265Parser -||oCH26xBitReader -||oCH26xByteToUnitStreamConverterA base class that is used to convert H.26x byte streams to NAL unit streams -||oCHEVCDecoderConfigurationRecordClass for parsing HEVC decoder configuration record -||oCNalUnitToByteStreamConverter -||oCNalu -||oCNaluReader -||oCVideoSliceHeaderParser -||oCH264VideoSliceHeaderParser -||oCH265VideoSliceHeaderParser -||oCVP8Parser -||oCVP9ParserClass to parse a vp9 bit stream -||oCVPCodecConfigurationRecordClass for parsing or writing VP codec configuration record -||oCVPxFrameInfo -||oCVPxParser -||oCEncryptionHandler -||oCDemuxer -||oCCombinedMuxerListener -||oCHlsNotifyMuxerListenerMuxerListener that uses HlsNotifier -||oCMockMuxerListener -||oCMpdNotifyMuxerListener -||oCMuxerListener -|||\CMediaRanges -||oCVideoStreamInfoParameters -||oCOnMediaEndParameters -||oCProgressListenerThis class listens to progress updates events -||oCVodMediaInfoDumpMuxerListener -||oCCluster -||oCClusterBuilder -||oCMkvWriterAn implementation of IMkvWriter using our File type -||oCSeekHead -||oCSegmentTestBase -|||\CClusterParser -||oCTracksBuilder -||oCWebMAudioClientHelper class used to parse an Audio element inside a TrackEntry element -||oCWebMClusterParser -||oCContentEncoding -||oCWebMContentEncodingsClientParser for WebM ContentEncodings element -||oCWebMInfoParserParser for WebM Info element -||oCWebMMediaParser -||oCWebMParserClient -||oCWebMListParser -||oCWebMTracksParserParser for WebM Tracks element -||oCWebMVideoClientHelper class used to parse a Video element inside a TrackEntry element -||oCWebMWebVTTParser -||oCCue -||oCWebVttMediaParser -||oCWebVttSampleConverter -||oCOriginHandler -||\CTrickPlayHandler +||oCHttpKeyFetcher +||oCKeyFetcherBase class for fetching keys from the license service +||oCEncryptionKey +||oCKeySourceKeySource is responsible for encryption key acquisition +||oCPeriodInfo +||oCMediaEvent +||oCSegmentInfo +||oCStreamData +||oCMediaHandler +||oCFakeInputMediaHandler +||oCMockOutputMediaHandler +||oCFakeMediaHandler +||oCMediaHandlerTestBase +||oCMediaHandlerGraphTestBase +||oCMediaParser +||oCMediaSampleClass to hold a media sample +||oCMuxer +||oCMuxerOptionsThis structure contains the list of configuration options for Muxer +||oCOffsetByteQueue +||oCPlayReadyKeySourceA key source that uses playready for encryption +||oCProducerConsumerQueue +||oCProtectionSystemSpecificInfo +||oCRange +||oCRawKeySourceA key source that uses raw keys for encryption +||oCRequestSignerAbstract class used for signature generation +||oCAesRequestSignerAesRequestSigner uses AES-CBC signing +||oCRsaRequestSignerRsaRequestSigner uses RSA-PSS signing +||oCRsaPrivateKeyRsa private key, used for message signing and decryption +||oCRsaPublicKeyRsa public key, used for signature verification and encryption +||oCStreamInfoAbstract class holds stream information +||oCTextSample +||oCTextStreamInfo +||oCTextTrack +||oCTextTrackConfig +||oCVideoStreamInfoHolds video stream information +||oCWidevineKeySource +||oCChunkingHandler +||oCAACAudioSpecificConfig +||oCAVCDecoderConfigurationRecordClass for parsing AVC decoder configuration record +||oCDecoderConfigurationRecord +||oCESDescriptor +||oCH264ByteToUnitStreamConverter +||oCH264Sps +||oCH264Pps +||oCH264ModificationOfPicNum +||oCH264WeightingFactors +||oCH264DecRefPicMarking +||oCH264SliceHeader +||oCH264SEIRecoveryPoint +||oCH264SEIMessage +||oCH264Parser +||oCH265ByteToUnitStreamConverter +||oCH265ReferencePictureSet +||oCH265VuiParameters +||oCH265Pps +||oCH265Sps +||oCH265ReferencePictureListModifications +||oCH265SliceHeader +|||\CLongTermPicsInfo +||oCH265Parser +||oCH26xBitReader +||oCH26xByteToUnitStreamConverterA base class that is used to convert H.26x byte streams to NAL unit streams +||oCHEVCDecoderConfigurationRecordClass for parsing HEVC decoder configuration record +||oCNalUnitToByteStreamConverter +||oCNalu +||oCNaluReader +||oCVideoSliceHeaderParser +||oCH264VideoSliceHeaderParser +||oCH265VideoSliceHeaderParser +||oCVP8Parser +||oCVP9ParserClass to parse a vp9 bit stream +||oCVPCodecConfigurationRecordClass for parsing or writing VP codec configuration record +||oCVPxFrameInfo +||oCVPxParser +||oCEncryptionHandler +||oCDemuxer +||oCCombinedMuxerListener +||oCHlsNotifyMuxerListenerMuxerListener that uses HlsNotifier +||oCMockMuxerListener +||oCMpdNotifyMuxerListener +||oCMuxerListener +|||\CMediaRanges +||oCVideoStreamInfoParameters +||oCOnMediaEndParameters +||oCProgressListenerThis class listens to progress updates events +||oCVodMediaInfoDumpMuxerListener +||oCCluster +||oCClusterBuilder +||oCMkvWriterAn implementation of IMkvWriter using our File type +||oCSeekHead +||oCSegmentTestBase +|||\CClusterParser +||oCTracksBuilder +||oCWebMAudioClientHelper class used to parse an Audio element inside a TrackEntry element +||oCWebMClusterParser +||oCContentEncoding +||oCWebMContentEncodingsClientParser for WebM ContentEncodings element +||oCWebMInfoParserParser for WebM Info element +||oCWebMMediaParser +||oCWebMParserClient +||oCWebMListParser +||oCWebMTracksParserParser for WebM Tracks element +||oCWebMVideoClientHelper class used to parse a Video element inside a TrackEntry element +||oCWebMWebVTTParser +||oCCue +||oCWebVttMediaParser +||oCWebVttSampleConverter +||oCOriginHandler +||oCReplicator +||\CTrickPlayHandler |oNxml ||oCXmlDeleter ||oCXmlNode @@ -376,46 +380,44 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); |oCWidevineSignerSigner credential for Widevine license server |oCWidevineEncryptionParamsWidevine encryption parameters |oCPlayreadyEncryptionParams -|oCRawKeyEncryptionParamsRaw key encryption parameters, i.e. with key parameters provided -||\CKeyPair +|oCRawKeyParamsRaw key encryption/decryption parameters, i.e. with key parameters provided +||\CKeyInfo |oCEncryptionParamsEncryption parameters ||\CEncryptedStreamAttributesEncrypted stream information that is used to determine stream label || \COneOf |oCWidevineDecryptionParamsWidevine decryption parameters -|oCRawKeyDecryptionParamsRaw key decryption parameters, i.e. with key parameters provided -||\CKeyPair -|oCDecryptionParamsDecryption parameters -|oCMp4OutputParamsMP4 (ISO-BMFF) output related parameters -|oCElement -|oCContentProtectionElement -|oCDashIopMpdNotifier -|oCMockMpdBuilder -|oCMockAdaptationSet -|oCMockRepresentation -|oCMockMpdNotifier -|oCMpdBuilderThis class generates DASH MPDs (Media Presentation Descriptions) -|oCAdaptationSet -|oCRepresentationStateChangeListener -|oCRepresentation -|oCMpdNotifier -|oCMpdOptionsDefines Mpd Options -|oCSegmentInfo -|oCSimpleMpdNotifier -|oCMpdParamsDASH MPD related parameters -|oCMpdNotifierFactory -|oCMpdWriter -|oCTestParamsParameters used for testing -|oCPackagingParamsPackaging parameters -|oCStreamDescriptorDefines a single input/output stream -|oCPackager -|\CStatus -\CBandwidthEstimator +|oCDecryptionParamsDecryption parameters +|oCMp4OutputParamsMP4 (ISO-BMFF) output related parameters +|oCElement +|oCContentProtectionElement +|oCDashIopMpdNotifier +|oCMockMpdBuilder +|oCMockAdaptationSet +|oCMockRepresentation +|oCMockMpdNotifier +|oCMpdBuilderThis class generates DASH MPDs (Media Presentation Descriptions) +|oCAdaptationSet +|oCRepresentationStateChangeListener +|oCRepresentation +|oCMpdNotifier +|oCMpdOptionsDefines Mpd Options +|oCSegmentInfo +|oCSimpleMpdNotifier +|oCMpdParamsDASH MPD related parameters +|oCMpdNotifierFactory +|oCMpdWriter +|oCTestParamsParameters used for testing +|oCPackagingParamsPackaging parameters +|oCStreamDescriptorDefines a single input/output stream +|oCPackager +|\CStatus +\CBandwidthEstimator diff --git a/docs/classes.html b/docs/classes.html index 75eb3907cb..8c05467f24 100644 --- a/docs/classes.html +++ b/docs/classes.html @@ -89,105 +89,105 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
A | B | C | D | E | F | H | I | K | L | M | N | O | P | R | S | T | U | V | W | X
- - - + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + + - - - + + + - - - - + + + + - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - + + + + + + - - - + - - - + + + +
  A  
-
DecryptorSource (shaka::media)   RawKeyDecryptionParams::KeyPair (shaka)   PesPacket (shaka::media::mp2t)   Track (shaka::media::mp4)   
Demuxer (shaka::media)   KeySource (shaka::media)   PesPacketGenerator (shaka::media::mp2t)   TrackEncryption (shaka::media::mp4)   
AACAudioSpecificConfig (shaka::media)   DemuxStreamIdMediaSample (shaka::media::wvm)   
  L  
-
PixelAspectRatio (shaka::media::mp4)   TrackExtends (shaka::media::mp4)   
AacProgramMapTableWriter (shaka::media::mp2t)   DTSSpecific (shaka::media::mp4)   PlayreadyEncryptionParams (shaka)   TrackFragment (shaka::media::mp4)   
DecryptorSource (shaka::media)   KeySource (shaka::media)   PeriodInfo (shaka::media)   TextTrackConfig (shaka::media)   
Demuxer (shaka::media)   
  L  
+
PesPacket (shaka::media::mp2t)   ThreadedIoFile (shaka)   
AACAudioSpecificConfig (shaka::media)   DemuxStreamIdMediaSample (shaka::media::wvm)   PesPacketGenerator (shaka::media::mp2t)   Track (shaka::media::mp4)   
AacProgramMapTableWriter (shaka::media::mp2t)   DTSSpecific (shaka::media::mp4)   Language (shaka::media::mp4)   PixelAspectRatio (shaka::media::mp4)   TrackEncryption (shaka::media::mp4)   
AC3Specific (shaka::media::mp4)   
  E  
-
Language (shaka::media::mp4)   PlayReadyKeySource (shaka::media)   TrackFragmentDecodeTime (shaka::media::mp4)   
AdaptationSet (shaka)   LibcryptoThreading (shaka::media)   PrevSampleData (shaka::media::wvm)   TrackFragmentHeader (shaka::media::mp4)   
AdaptationSetXmlNode (shaka::xml)   EC3Specific (shaka::media::mp4)   LocalFile (shaka)   PrivFrame (shaka::media::mp4)   TrackFragmentRun (shaka::media::mp4)   
AdtsHeader (shaka::media::mp2t)   Edit (shaka::media::mp4)   H265SliceHeader::LongTermPicsInfo (shaka::media)   ProducerConsumerQueue (shaka::media)   TrackHeader (shaka::media::mp4)   
AesCbcDecryptor (shaka::media)   EditList (shaka::media::mp4)   
  M  
-
ProgramMapTableWriter (shaka::media::mp2t)   TrackRunIterator (shaka::media::mp4)   
AesCbcEncryptor (shaka::media)   EditListEntry (shaka::media::mp4)   ProgressListener (shaka::media)   TracksBuilder (shaka::media)   
AesCryptor (shaka::media)   Element (shaka)   MasterPlaylist (shaka::hls)   ProtectionSchemeInfo (shaka::media::mp4)   TrickPlayHandler (shaka::media)   
AesCtrEncryptor (shaka::media)   ElementaryStreamDescriptor (shaka::media::mp4)   Media (shaka::media::mp4)   ProtectionSystemSpecificHeader (shaka::media::mp4)   TsMuxer (shaka::media::mp2t)   
AesEncryptor (shaka::media)   EncryptionParams::EncryptedStreamAttributes (shaka)   MediaData (shaka::media::mp4)   ProtectionSystemSpecificInfo (shaka::media)   TsPacket (shaka::media::mp2t)   
AesPatternCryptor (shaka::media)   EncryptionConfig (shaka::media)   MediaEvent (shaka::media)   
  R  
-
TsSection (shaka::media::mp2t)   
AesRequestSigner (shaka::media)   EncryptionHandler (shaka::media)   MediaHandler (shaka::media)   TsSectionPat (shaka::media::mp2t)   
AudioRollRecoveryEntry (shaka::media::mp4)   EncryptionKey (shaka::media)   MediaHandlerTestBase (shaka::media)   Range (shaka::media)   TsSectionPes (shaka::media::mp2t)   
AudioSampleEntry (shaka::media::mp4)   EncryptionParams (shaka)   MediaHeader (shaka::media::mp4)   RawKeyDecryptionParams (shaka)   TsSectionPmt (shaka::media::mp2t)   
AudioStreamInfo (shaka::media)   ESDescriptor (shaka::media)   MediaInformation (shaka::media::mp4)   RawKeyEncryptionParams (shaka)   TsSectionPsi (shaka::media::mp2t)   
AudioTimestampHelper (shaka::media)   EsParser (shaka::media::mp2t)   MediaParser (shaka::media)   Representation (shaka)   TsSegmenter (shaka::media::mp2t)   
AVCDecoderConfigurationRecord (shaka::media)   EsParserAdts (shaka::media::mp2t)   MediaPlaylist (shaka::hls)   RepresentationBaseXmlNode (shaka::xml)   TsWriter (shaka::media::mp2t)   
LibcryptoThreading (shaka::media)   PlayreadyEncryptionParams (shaka)   TrackExtends (shaka::media::mp4)   
AdaptationSet (shaka)   LocalFile (shaka)   PlayReadyKeySource (shaka::media)   TrackFragment (shaka::media::mp4)   
AdaptationSetXmlNode (shaka::xml)   EC3Specific (shaka::media::mp4)   H265SliceHeader::LongTermPicsInfo (shaka::media)   PrevSampleData (shaka::media::wvm)   TrackFragmentDecodeTime (shaka::media::mp4)   
AdtsHeader (shaka::media::mp2t)   Edit (shaka::media::mp4)   
  M  
+
PrivFrame (shaka::media::mp4)   TrackFragmentHeader (shaka::media::mp4)   
AesCbcDecryptor (shaka::media)   EditList (shaka::media::mp4)   ProducerConsumerQueue (shaka::media)   TrackFragmentRun (shaka::media::mp4)   
AesCbcEncryptor (shaka::media)   EditListEntry (shaka::media::mp4)   MasterPlaylist (shaka::hls)   ProgramMapTableWriter (shaka::media::mp2t)   TrackHeader (shaka::media::mp4)   
AesCryptor (shaka::media)   Element (shaka)   Media (shaka::media::mp4)   ProgressListener (shaka::media)   TrackRunIterator (shaka::media::mp4)   
AesCtrEncryptor (shaka::media)   ElementaryStreamDescriptor (shaka::media::mp4)   MediaData (shaka::media::mp4)   ProtectionSchemeInfo (shaka::media::mp4)   TracksBuilder (shaka::media)   
AesEncryptor (shaka::media)   EncryptionParams::EncryptedStreamAttributes (shaka)   MediaEvent (shaka::media)   ProtectionSystemSpecificHeader (shaka::media::mp4)   TrickPlayHandler (shaka::media)   
AesPatternCryptor (shaka::media)   EncryptionConfig (shaka::media)   MediaHandler (shaka::media)   ProtectionSystemSpecificInfo (shaka::media)   TsMuxer (shaka::media::mp2t)   
AesRequestSigner (shaka::media)   EncryptionHandler (shaka::media)   MediaHandlerGraphTestBase (shaka::media)   
  R  
+
TsPacket (shaka::media::mp2t)   
AudioRollRecoveryEntry (shaka::media::mp4)   EncryptionKey (shaka::media)   MediaHandlerTestBase (shaka::media)   TsSection (shaka::media::mp2t)   
AudioSampleEntry (shaka::media::mp4)   EncryptionParams (shaka)   MediaHeader (shaka::media::mp4)   Range (shaka::media)   TsSectionPat (shaka::media::mp2t)   
AudioStreamInfo (shaka::media)   ESDescriptor (shaka::media)   MediaInformation (shaka::media::mp4)   RawKeyParams (shaka)   TsSectionPes (shaka::media::mp2t)   
AudioTimestampHelper (shaka::media)   EsParser (shaka::media::mp2t)   MediaParser (shaka::media)   RawKeySource (shaka::media)   TsSectionPmt (shaka::media::mp2t)   
AVCDecoderConfigurationRecord (shaka::media)   EsParserAdts (shaka::media::mp2t)   MediaPlaylist (shaka::hls)   Replicator (shaka::media)   TsSectionPsi (shaka::media::mp2t)   
  B  
-
EsParserH264 (shaka::media::mp2t)   MediaPlaylistFactory (shaka::hls)   RepresentationStateChangeListener (shaka)   TwoPassSingleSegmentSegmenter (shaka::media::webm)   
EsParserH265 (shaka::media::mp2t)   MuxerListener::MediaRanges (shaka::media)   RepresentationXmlNode (shaka::xml)   
  U  
-
BandwidthEstimator   EsParserH26x (shaka::media::mp2t)   MediaSample (shaka::media)   RequestSigner (shaka::media)   
EsParserH264 (shaka::media::mp2t)   MediaPlaylistFactory (shaka::hls)   Representation (shaka)   TsSegmenter (shaka::media::mp2t)   
EsParserH265 (shaka::media::mp2t)   MuxerListener::MediaRanges (shaka::media)   RepresentationBaseXmlNode (shaka::xml)   TsWriter (shaka::media::mp2t)   
BandwidthEstimator   EsParserH26x (shaka::media::mp2t)   MediaSample (shaka::media)   RepresentationStateChangeListener (shaka)   TwoPassSingleSegmentSegmenter (shaka::media::webm)   
BitReader (shaka::media)   
  F  
-
MemoryFile (shaka)   RsaPrivateKey (shaka::media)   UdpFile (shaka)   
Box (shaka::media::mp4)   Metadata (shaka::media::mp4)   RsaPublicKey (shaka::media)   UdpOptions (shaka)   
BoxBuffer (shaka::media::mp4)   FakeMediaHandler (shaka::media)   MkvWriter (shaka::media)   RsaRequestSigner (shaka::media)   
  V  
+
MemoryFile (shaka)   RepresentationXmlNode (shaka::xml)   
  U  
BoxReader (shaka::media::mp4)   File (shaka)   MockAdaptationSet (shaka)   
  S  
+
Box (shaka::media::mp4)   Metadata (shaka::media::mp4)   RequestSigner (shaka::media)   
BoxBuffer (shaka::media::mp4)   FakeInputMediaHandler (shaka::media)   MkvWriter (shaka::media)   RsaPrivateKey (shaka::media)   UdpFile (shaka)   
BoxReader (shaka::media::mp4)   FakeMediaHandler (shaka::media)   MockAdaptationSet (shaka)   RsaPublicKey (shaka::media)   UdpOptions (shaka)   
BufferCallbackParams (shaka)   File (shaka)   MockMediaPlaylist (shaka::hls)   RsaRequestSigner (shaka::media)   
  V  
BufferCallbackParams (shaka)   FileCloser (shaka)   MockMediaPlaylist (shaka::hls)   VideoMediaHeader (shaka::media::mp4)   
BufferReader (shaka::media)   FileType (shaka::media::mp4)   MockMpdBuilder (shaka)   SampleAuxiliaryInformationOffset (shaka::media::mp4)   VideoSampleEntry (shaka::media::mp4)   
BufferWriter (shaka::media)   FixedKeySource (shaka::media)   MockMpdNotifier (shaka)   SampleAuxiliaryInformationSize (shaka::media::mp4)   VideoSliceHeaderParser (shaka::media)   
ByteQueue (shaka::media)   Fragmenter (shaka::media::mp4)   MockMuxerListener (shaka::media)   SampleDescription (shaka::media::mp4)   EsParserH26x::VideoSliceInfo (shaka::media::mp2t)   
BufferReader (shaka::media)   FileCloser (shaka)   MockMpdBuilder (shaka)   
  S  
+
BufferWriter (shaka::media)   FileType (shaka::media::mp4)   MockMpdNotifier (shaka)   VideoMediaHeader (shaka::media::mp4)   
ByteQueue (shaka::media)   Fragmenter (shaka::media::mp4)   MockMuxerListener (shaka::media)   SampleAuxiliaryInformationOffset (shaka::media::mp4)   VideoSampleEntry (shaka::media::mp4)   
  C  
-
FullBox (shaka::media::mp4)   MockRepresentation (shaka)   SampleEncryption (shaka::media::mp4)   VideoStreamInfo (shaka::media)   
FullBox (shaka::media::mp4)   MockOutputMediaHandler (shaka::media)   SampleAuxiliaryInformationSize (shaka::media::mp4)   VideoSliceHeaderParser (shaka::media)   
  H  
-
Movie (shaka::media::mp4)   SampleEncryptionEntry (shaka::media::mp4)   VideoStreamInfoParameters (shaka::media)   
CallbackFile (shaka)   MovieExtends (shaka::media::mp4)   SampleGroupDescription (shaka::media::mp4)   VodMediaInfoDumpMuxerListener (shaka::media)   
CencSampleEncryptionInfoEntry (shaka::media::mp4)   H264ByteToUnitStreamConverter (shaka::media)   MovieExtendsHeader (shaka::media::mp4)   SampleSize (shaka::media::mp4)   VP8Parser (shaka::media)   
ChunkInfo (shaka::media::mp4)   H264DecRefPicMarking (shaka::media)   MovieFragment (shaka::media::mp4)   SampleTable (shaka::media::mp4)   VP9Parser (shaka::media)   
ChunkInfoIterator (shaka::media::mp4)   H264ModificationOfPicNum (shaka::media)   MovieFragmentHeader (shaka::media::mp4)   SampleToChunk (shaka::media::mp4)   VPCodecConfigurationRecord (shaka::media)   
ChunkingHandler (shaka::media)   H264Parser (shaka::media)   MovieHeader (shaka::media::mp4)   SampleToGroup (shaka::media::mp4)   VPxFrameInfo (shaka::media)   
ChunkingParams (shaka)   H264Pps (shaka::media)   Mp2tMediaParser (shaka::media::mp2t)   SampleToGroupEntry (shaka::media::mp4)   VPxParser (shaka::media)   
ChunkLargeOffset (shaka::media::mp4)   H264ProgramMapTableWriter (shaka::media::mp2t)   MP4MediaParser (shaka::media::mp4)   SchemeInfo (shaka::media::mp4)   VTTAdditionalTextBox (shaka::media::mp4)   
ChunkOffset (shaka::media::mp4)   H264SEIMessage (shaka::media)   MP4Muxer (shaka::media::mp4)   SchemeType (shaka::media::mp4)   VTTCueBox (shaka::media::mp4)   
ClosureThread (shaka::media)   H264SEIRecoveryPoint (shaka::media)   Mp4OutputParams (shaka)   SeekHead (shaka::media)   VTTEmptyCueBox (shaka::media::mp4)   
Cluster (shaka::media)   H264SliceHeader (shaka::media)   MpdBuilder (shaka)   Segmenter (shaka::media::webm)   
  W  
+
MockRepresentation (shaka)   SampleDescription (shaka::media::mp4)   EsParserH26x::VideoSliceInfo (shaka::media::mp2t)   
CallbackFile (shaka)   Movie (shaka::media::mp4)   SampleEncryption (shaka::media::mp4)   VideoStreamInfo (shaka::media)   
CencSampleEncryptionInfoEntry (shaka::media::mp4)   H264ByteToUnitStreamConverter (shaka::media)   MovieExtends (shaka::media::mp4)   SampleEncryptionEntry (shaka::media::mp4)   VideoStreamInfoParameters (shaka::media)   
ChunkInfo (shaka::media::mp4)   H264DecRefPicMarking (shaka::media)   MovieExtendsHeader (shaka::media::mp4)   SampleGroupDescription (shaka::media::mp4)   VodMediaInfoDumpMuxerListener (shaka::media)   
ChunkInfoIterator (shaka::media::mp4)   H264ModificationOfPicNum (shaka::media)   MovieFragment (shaka::media::mp4)   SampleSize (shaka::media::mp4)   VP8Parser (shaka::media)   
ChunkingHandler (shaka::media)   H264Parser (shaka::media)   MovieFragmentHeader (shaka::media::mp4)   SampleTable (shaka::media::mp4)   VP9Parser (shaka::media)   
ChunkingParams (shaka)   H264Pps (shaka::media)   MovieHeader (shaka::media::mp4)   SampleToChunk (shaka::media::mp4)   VPCodecConfigurationRecord (shaka::media)   
ChunkLargeOffset (shaka::media::mp4)   H264ProgramMapTableWriter (shaka::media::mp2t)   Mp2tMediaParser (shaka::media::mp2t)   SampleToGroup (shaka::media::mp4)   VPxFrameInfo (shaka::media)   
ChunkOffset (shaka::media::mp4)   H264SEIMessage (shaka::media)   MP4MediaParser (shaka::media::mp4)   SampleToGroupEntry (shaka::media::mp4)   VPxParser (shaka::media)   
ClosureThread (shaka::media)   H264SEIRecoveryPoint (shaka::media)   MP4Muxer (shaka::media::mp4)   SchemeInfo (shaka::media::mp4)   VTTAdditionalTextBox (shaka::media::mp4)   
Cluster (shaka::media)   H264SliceHeader (shaka::media)   Mp4OutputParams (shaka)   SchemeType (shaka::media::mp4)   VTTCueBox (shaka::media::mp4)   
ClusterBuilder (shaka::media)   H264Sps (shaka::media)   MpdBuilder (shaka)   SeekHead (shaka::media)   VTTEmptyCueBox (shaka::media::mp4)   
SegmentTestBase::ClusterParser (shaka::media)   H264VideoSliceHeaderParser (shaka::media)   MpdNotifier (shaka)   Segmenter (shaka::media::mp4)   
  W  
ClusterBuilder (shaka::media)   H264Sps (shaka::media)   MpdNotifier (shaka)   Segmenter (shaka::media::mp4)   
SegmentTestBase::ClusterParser (shaka::media)   H264VideoSliceHeaderParser (shaka::media)   MpdNotifierFactory (shaka)   SegmentIndex (shaka::media::mp4)   WebMAudioClient (shaka::media)   
CodecConfiguration (shaka::media::mp4)   H264WeightingFactors (shaka::media)   MpdNotifyMuxerListener (shaka::media)   SegmentInfo (shaka::media)   WebMClusterParser (shaka::media)   
CombinedMuxerListener (shaka::media)   H265ByteToUnitStreamConverter (shaka::media)   MpdOptions (shaka)   SegmentInfo (shaka)   WebMContentEncodingsClient (shaka::media)   
CompactSampleSize (shaka::media::mp4)   H265Parser (shaka::media)   MpdParams (shaka)   SegmentReference (shaka::media::mp4)   WebMInfoParser (shaka::media)   
CompositionOffset (shaka::media::mp4)   H265Pps (shaka::media)   MpdWriter (shaka)   SegmentTestBase (shaka::media)   WebMListParser (shaka::media)   
CompositionOffsetIterator (shaka::media::mp4)   H265ReferencePictureListModifications (shaka::media)   MultiSegmentSegmenter (shaka::media::mp4)   SegmentType (shaka::media::mp4)   WebMMediaParser (shaka::media)   
CompositionTimeToSample (shaka::media::mp4)   H265ReferencePictureSet (shaka::media)   MultiSegmentSegmenter (shaka::media::webm)   SimpleHlsNotifier (shaka::hls)   WebMMuxer (shaka::media::webm)   
ContentEncoding (shaka::media)   H265SliceHeader (shaka::media)   Muxer (shaka::media)   SimpleMpdNotifier (shaka)   WebMParserClient (shaka::media)   
ContentProtectionElement (shaka)   H265Sps (shaka::media)   MuxerListener (shaka::media)   SingleSegmentSegmenter (shaka::media::webm)   WebMTracksParser (shaka::media)   
ContinuityCounter (shaka::media::mp2t)   H265VideoSliceHeaderParser (shaka::media)   MuxerOptions (shaka::media)   SingleSegmentSegmenter (shaka::media::mp4)   WebMVideoClient (shaka::media)   
Cue (shaka::media)   H265VuiParameters (shaka::media)   
  N  
-
SoundMediaHeader (shaka::media::mp4)   WebMWebVTTParser (shaka::media)   
CueIDBox (shaka::media::mp4)   H26xBitReader (shaka::media)   Status (shaka)   WebVTTConfigurationBox (shaka::media::mp4)   
CuePayloadBox (shaka::media::mp4)   H26xByteToUnitStreamConverter (shaka::media)   Nalu (shaka::media)   StreamData (shaka::media)   WebVttMediaParser (shaka::media)   
CueSettingsBox (shaka::media::mp4)   HandlerReference (shaka::media::mp4)   NalUnitToByteStreamConverter (shaka::media)   StreamDescriptor (shaka)   WebVttSampleConverter (shaka::media)   
CueSourceIDBox (shaka::media::mp4)   HEVCDecoderConfigurationRecord (shaka::media)   NaluReader (shaka::media)   StreamInfo (shaka::media)   WebVTTSourceLabelBox (shaka::media::mp4)   
CueTimeBox (shaka::media::mp4)   HlsEntry (shaka::hls)   
  O  
-
SubsampleEntry (shaka::media)   WidevineDecryptionParams (shaka)   
CodecConfiguration (shaka::media::mp4)   H264WeightingFactors (shaka::media)   MpdNotifierFactory (shaka)   Segmenter (shaka::media::webm)   
CombinedMuxerListener (shaka::media)   H265ByteToUnitStreamConverter (shaka::media)   MpdNotifyMuxerListener (shaka::media)   SegmentIndex (shaka::media::mp4)   WebMAudioClient (shaka::media)   
CompactSampleSize (shaka::media::mp4)   H265Parser (shaka::media)   MpdOptions (shaka)   SegmentInfo (shaka::media)   WebMClusterParser (shaka::media)   
CompositionOffset (shaka::media::mp4)   H265Pps (shaka::media)   MpdParams (shaka)   SegmentInfo (shaka)   WebMContentEncodingsClient (shaka::media)   
CompositionOffsetIterator (shaka::media::mp4)   H265ReferencePictureListModifications (shaka::media)   MpdWriter (shaka)   SegmentReference (shaka::media::mp4)   WebMInfoParser (shaka::media)   
CompositionTimeToSample (shaka::media::mp4)   H265ReferencePictureSet (shaka::media)   MultiSegmentSegmenter (shaka::media::mp4)   SegmentTestBase (shaka::media)   WebMListParser (shaka::media)   
ContentEncoding (shaka::media)   H265SliceHeader (shaka::media)   MultiSegmentSegmenter (shaka::media::webm)   SegmentType (shaka::media::mp4)   WebMMediaParser (shaka::media)   
ContentProtectionElement (shaka)   H265Sps (shaka::media)   Muxer (shaka::media)   SimpleHlsNotifier (shaka::hls)   WebMMuxer (shaka::media::webm)   
ContinuityCounter (shaka::media::mp2t)   H265VideoSliceHeaderParser (shaka::media)   MuxerListener (shaka::media)   SimpleMpdNotifier (shaka)   WebMParserClient (shaka::media)   
Cue (shaka::media)   H265VuiParameters (shaka::media)   MuxerOptions (shaka::media)   SingleSegmentSegmenter (shaka::media::webm)   WebMTracksParser (shaka::media)   
CueIDBox (shaka::media::mp4)   H26xBitReader (shaka::media)   
  N  
+
SingleSegmentSegmenter (shaka::media::mp4)   WebMVideoClient (shaka::media)   
CuePayloadBox (shaka::media::mp4)   H26xByteToUnitStreamConverter (shaka::media)   SoundMediaHeader (shaka::media::mp4)   WebMWebVTTParser (shaka::media)   
CueSettingsBox (shaka::media::mp4)   HandlerReference (shaka::media::mp4)   Nalu (shaka::media)   Status (shaka)   WebVTTConfigurationBox (shaka::media::mp4)   
CueSourceIDBox (shaka::media::mp4)   HEVCDecoderConfigurationRecord (shaka::media)   NalUnitToByteStreamConverter (shaka::media)   StreamData (shaka::media)   WebVttMediaParser (shaka::media)   
CueTimeBox (shaka::media::mp4)   HlsEntry (shaka::hls)   NaluReader (shaka::media)   StreamDescriptor (shaka)   WebVttSampleConverter (shaka::media)   
  D  
-
HlsNotifier (shaka::hls)   SubtitleMediaHeader (shaka::media::mp4)   WidevineEncryptionParams (shaka)   
HlsNotifyMuxerListener (shaka::media)   OffsetByteQueue (shaka::media)   SyncSample (shaka::media::mp4)   WidevineKeySource (shaka::media)   
DashIopMpdNotifier (shaka)   HlsParams (shaka)   EncryptionParams::EncryptedStreamAttributes::OneOf (shaka)   SyncSampleIterator (shaka::media::mp4)   WidevineSigner (shaka)   
DataEntryUrl (shaka::media::mp4)   HttpKeyFetcher (shaka::media)   OnMediaEndParameters (shaka::media)   
  T  
-
WvmMediaParser (shaka::media::wvm)   
HlsNotifier (shaka::hls)   
  O  
+
StreamInfo (shaka::media)   WebVTTSourceLabelBox (shaka::media::mp4)   
HlsNotifyMuxerListener (shaka::media)   SubsampleEntry (shaka::media)   WidevineDecryptionParams (shaka)   
DashIopMpdNotifier (shaka)   HlsParams (shaka)   OffsetByteQueue (shaka::media)   SubtitleMediaHeader (shaka::media::mp4)   WidevineEncryptionParams (shaka)   
DataEntryUrl (shaka::media::mp4)   HttpKeyFetcher (shaka::media)   EncryptionParams::EncryptedStreamAttributes::OneOf (shaka)   SyncSample (shaka::media::mp4)   WidevineKeySource (shaka::media)   
DataInformation (shaka::media::mp4)   
  I  
-
OpusSpecific (shaka::media::mp4)   
  X  
+
OnMediaEndParameters (shaka::media)   SyncSampleIterator (shaka::media::mp4)   WidevineSigner (shaka)   
DataReference (shaka::media::mp4)   OpusSpecific (shaka::media::mp4)   
  T  
+
WvmMediaParser (shaka::media::wvm)   
DecoderConfigurationRecord (shaka::media)   ID3v2 (shaka::media::mp4)   OriginalFormat (shaka::media::mp4)   
  X  
DataReference (shaka::media::mp4)   OriginalFormat (shaka::media::mp4)   TestParams (shaka)   
DecoderConfigurationRecord (shaka::media)   ID3v2 (shaka::media::mp4)   OriginHandler (shaka::media)   TextSample (shaka::media)   XmlDeleter (shaka::xml)   
DecodingTime (shaka::media::mp4)   IoCache (shaka)   
  P  
-
TextSampleEntry (shaka::media::mp4)   XmlNode (shaka::xml)   
DecodingTime (shaka::media::mp4)   IoCache (shaka)   OriginHandler (shaka::media)   TestParams (shaka)   
DecodingTimeIterator (shaka::media::mp4)   
  K  
-
TextStreamInfo (shaka::media)   
DecodingTimeToSample (shaka::media::mp4)   Packager (shaka)   TextTrack (shaka::media)   
DecryptConfig (shaka::media)   KeyFetcher (shaka::media)   PackagingParams (shaka)   TextTrackConfig (shaka::media)   
DecryptionParams (shaka)   RawKeyEncryptionParams::KeyPair (shaka)   PeriodInfo (shaka::media)   ThreadedIoFile (shaka)   
  P  
+
TextSample (shaka::media)   XmlDeleter (shaka::xml)   
DecodingTimeToSample (shaka::media::mp4)   TextSampleEntry (shaka::media::mp4)   XmlNode (shaka::xml)   
DecryptConfig (shaka::media)   KeyFetcher (shaka::media)   Packager (shaka)   TextStreamInfo (shaka::media)   
DecryptionParams (shaka)   RawKeyParams::KeyInfo (shaka)   PackagingParams (shaka)   TextTrack (shaka::media)   
A | B | C | D | E | F | H | I | K | L | M | N | O | P | R | S | T | U | V | W | X
diff --git a/docs/d0/d00/structshaka_1_1media_1_1mp4_1_1HandlerReference-members.html b/docs/d0/d00/structshaka_1_1media_1_1mp4_1_1HandlerReference-members.html index 8be3c3c517..72770e7273 100644 --- a/docs/d0/d00/structshaka_1_1media_1_1mp4_1_1HandlerReference-members.html +++ b/docs/d0/d00/structshaka_1_1media_1_1mp4_1_1HandlerReference-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d04/classshaka_1_1media_1_1RsaRequestSigner-members.html b/docs/d0/d04/classshaka_1_1media_1_1RsaRequestSigner-members.html index 97cb84646c..b50f89e29b 100644 --- a/docs/d0/d04/classshaka_1_1media_1_1RsaRequestSigner-members.html +++ b/docs/d0/d04/classshaka_1_1media_1_1RsaRequestSigner-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d06/mpd__flags_8cc_source.html b/docs/d0/d06/mpd__flags_8cc_source.html index 111588dea8..d9a35c864c 100644 --- a/docs/d0/d06/mpd__flags_8cc_source.html +++ b/docs/d0/d06/mpd__flags_8cc_source.html @@ -148,7 +148,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d0e/classshaka_1_1media_1_1HttpKeyFetcher-members.html b/docs/d0/d0e/classshaka_1_1media_1_1HttpKeyFetcher-members.html index 9014c1619c..db24ac3fbf 100644 --- a/docs/d0/d0e/classshaka_1_1media_1_1HttpKeyFetcher-members.html +++ b/docs/d0/d0e/classshaka_1_1media_1_1HttpKeyFetcher-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d0e/hevc__decoder__configuration__record_8h_source.html b/docs/d0/d0e/hevc__decoder__configuration__record_8h_source.html index 257904854d..637761db77 100644 --- a/docs/d0/d0e/hevc__decoder__configuration__record_8h_source.html +++ b/docs/d0/d0e/hevc__decoder__configuration__record_8h_source.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d0e/muxer__options_8h_source.html b/docs/d0/d0e/muxer__options_8h_source.html index d5f2fb9148..0d06336f75 100644 --- a/docs/d0/d0e/muxer__options_8h_source.html +++ b/docs/d0/d0e/muxer__options_8h_source.html @@ -134,7 +134,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d0f/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt-members.html b/docs/d0/d0f/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt-members.html index 0ddd47c2b3..5c1160ff05 100644 --- a/docs/d0/d0f/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt-members.html +++ b/docs/d0/d0f/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d11/structshaka_1_1media_1_1VPxFrameInfo.html b/docs/d0/d11/structshaka_1_1media_1_1VPxFrameInfo.html index c8be51abff..9b2f65a796 100644 --- a/docs/d0/d11/structshaka_1_1media_1_1VPxFrameInfo.html +++ b/docs/d0/d11/structshaka_1_1media_1_1VPxFrameInfo.html @@ -121,7 +121,7 @@ uint32_t height diff --git a/docs/d0/d17/structshaka_1_1media_1_1StreamData-members.html b/docs/d0/d17/structshaka_1_1media_1_1StreamData-members.html index 4a92123eaf..10c631495f 100644 --- a/docs/d0/d17/structshaka_1_1media_1_1StreamData-members.html +++ b/docs/d0/d17/structshaka_1_1media_1_1StreamData-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d1a/text__sample_8h_source.html b/docs/d0/d1a/text__sample_8h_source.html index 69d1f7760b..4273600447 100644 --- a/docs/d0/d1a/text__sample_8h_source.html +++ b/docs/d0/d1a/text__sample_8h_source.html @@ -138,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d1e/classshaka_1_1media_1_1H265ByteToUnitStreamConverter-members.html b/docs/d0/d1e/classshaka_1_1media_1_1H265ByteToUnitStreamConverter-members.html index fa3f3f1c05..aca3df1703 100644 --- a/docs/d0/d1e/classshaka_1_1media_1_1H265ByteToUnitStreamConverter-members.html +++ b/docs/d0/d1e/classshaka_1_1media_1_1H265ByteToUnitStreamConverter-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d1f/structshaka_1_1media_1_1mp4_1_1VTTCueBox-members.html b/docs/d0/d1f/structshaka_1_1media_1_1mp4_1_1VTTCueBox-members.html index 76c2c4f227..c7ea79746c 100644 --- a/docs/d0/d1f/structshaka_1_1media_1_1mp4_1_1VTTCueBox-members.html +++ b/docs/d0/d1f/structshaka_1_1media_1_1mp4_1_1VTTCueBox-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d26/classshaka_1_1media_1_1mp2t_1_1TsSectionPat.html b/docs/d0/d26/classshaka_1_1media_1_1mp2t_1_1TsSectionPat.html index 5a521cf7c7..c1a1d37850 100644 --- a/docs/d0/d26/classshaka_1_1media_1_1mp2t_1_1TsSectionPat.html +++ b/docs/d0/d26/classshaka_1_1media_1_1mp2t_1_1TsSectionPat.html @@ -155,7 +155,7 @@ void Reset () override diff --git a/docs/d0/d27/structshaka_1_1media_1_1MuxerOptions.html b/docs/d0/d27/structshaka_1_1media_1_1MuxerOptions.html index 65adacdc29..af45071a0a 100644 --- a/docs/d0/d27/structshaka_1_1media_1_1MuxerOptions.html +++ b/docs/d0/d27/structshaka_1_1media_1_1MuxerOptions.html @@ -173,7 +173,7 @@ std::string  diff --git a/docs/d0/d30/mock__mpd__notifier_8h_source.html b/docs/d0/d30/mock__mpd__notifier_8h_source.html index f2970e151e..f1e739f7ff 100644 --- a/docs/d0/d30/mock__mpd__notifier_8h_source.html +++ b/docs/d0/d30/mock__mpd__notifier_8h_source.html @@ -149,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d32/mp2t__common_8h_source.html b/docs/d0/d32/mp2t__common_8h_source.html index d5de6e535a..ec7fcf18fd 100644 --- a/docs/d0/d32/mp2t__common_8h_source.html +++ b/docs/d0/d32/mp2t__common_8h_source.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d33/classshaka_1_1MockRepresentation.html b/docs/d0/d33/classshaka_1_1MockRepresentation.html index 04b830e52a..6a40f257b2 100644 --- a/docs/d0/d33/classshaka_1_1MockRepresentation.html +++ b/docs/d0/d33/classshaka_1_1MockRepresentation.html @@ -160,7 +160,7 @@ Additional Inherited Members diff --git a/docs/d0/d35/es__descriptor_8cc_source.html b/docs/d0/d35/es__descriptor_8cc_source.html index 292ba7ff13..6eb671d5ee 100644 --- a/docs/d0/d35/es__descriptor_8cc_source.html +++ b/docs/d0/d35/es__descriptor_8cc_source.html @@ -285,7 +285,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d37/unionshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes_1_1OneOf.html b/docs/d0/d37/unionshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes_1_1OneOf.html index 1fccbbed72..22f9faaaa9 100644 --- a/docs/d0/d37/unionshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes_1_1OneOf.html +++ b/docs/d0/d37/unionshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes_1_1OneOf.html @@ -122,14 +122,14 @@ struct {

Detailed Description

-

Definition at line 153 of file crypto_params.h.

+

Definition at line 155 of file crypto_params.h.


The documentation for this union was generated from the following file: diff --git a/docs/d0/d3a/hls__notify__muxer__listener_8cc_source.html b/docs/d0/d3a/hls__notify__muxer__listener_8cc_source.html index e9a266b25b..9a1da73a67 100644 --- a/docs/d0/d3a/hls__notify__muxer__listener_8cc_source.html +++ b/docs/d0/d3a/hls__notify__muxer__listener_8cc_source.html @@ -305,7 +305,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d3a/webm__constants_8h_source.html b/docs/d0/d3a/webm__constants_8h_source.html index 9b30723618..bd2e00b2d0 100644 --- a/docs/d0/d3a/webm__constants_8h_source.html +++ b/docs/d0/d3a/webm__constants_8h_source.html @@ -333,7 +333,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d3c/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html b/docs/d0/d3c/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html index 13c10e049a..b3433f5aea 100644 --- a/docs/d0/d3c/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html +++ b/docs/d0/d3c/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d0/d42/aes__cryptor_8h_source.html b/docs/d0/d42/aes__cryptor_8h_source.html index d259876422..c03dcd393f 100644 --- a/docs/d0/d42/aes__cryptor_8h_source.html +++ b/docs/d0/d42/aes__cryptor_8h_source.html @@ -215,7 +215,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d42/widevine__encryption__flags_8cc_source.html b/docs/d0/d42/widevine__encryption__flags_8cc_source.html index c18d2797b1..b95eee3735 100644 --- a/docs/d0/d42/widevine__encryption__flags_8cc_source.html +++ b/docs/d0/d42/widevine__encryption__flags_8cc_source.html @@ -269,12 +269,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
180 
181 } // namespace shaka
shaka::PrintError
void PrintError(const std::string &error_message)
Definition: validate_flag.cc:15
-
shaka::ValidateFlag
bool ValidateFlag(const char *flag_name, const FlagType &flag_value, bool condition, bool optional, const char *label)
Definition: validate_flag.h:33
+
shaka::ValidateFlag
bool ValidateFlag(const char *flag_name, const FlagType &flag_value, bool condition, bool optional, const char *label)
Definition: validate_flag.h:37
shaka::ValidateWidevineCryptoFlags
bool ValidateWidevineCryptoFlags()
Definition: widevine_encryption_flags.cc:73
diff --git a/docs/d0/d43/structshaka_1_1Mp4OutputParams.html b/docs/d0/d43/structshaka_1_1Mp4OutputParams.html index cb6dae6b72..11497df0fc 100644 --- a/docs/d0/d43/structshaka_1_1Mp4OutputParams.html +++ b/docs/d0/d43/structshaka_1_1Mp4OutputParams.html @@ -168,7 +168,7 @@ static constexpr int kSing diff --git a/docs/d0/d46/fourccs_8h_source.html b/docs/d0/d46/fourccs_8h_source.html index 15dfd69bec..a55edb1caa 100644 --- a/docs/d0/d46/fourccs_8h_source.html +++ b/docs/d0/d46/fourccs_8h_source.html @@ -257,7 +257,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d48/structshaka_1_1media_1_1SegmentInfo-members.html b/docs/d0/d48/structshaka_1_1media_1_1SegmentInfo-members.html index d960871d1e..c408ab449a 100644 --- a/docs/d0/d48/structshaka_1_1media_1_1SegmentInfo-members.html +++ b/docs/d0/d48/structshaka_1_1media_1_1SegmentInfo-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d49/vod__media__info__dump__muxer__listener_8cc_source.html b/docs/d0/d49/vod__media__info__dump__muxer__listener_8cc_source.html index 8cfb923470..aaa5866be6 100644 --- a/docs/d0/d49/vod__media__info__dump__muxer__listener_8cc_source.html +++ b/docs/d0/d49/vod__media__info__dump__muxer__listener_8cc_source.html @@ -225,7 +225,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d4b/structshaka_1_1media_1_1mp4_1_1MediaInformation-members.html b/docs/d0/d4b/structshaka_1_1media_1_1mp4_1_1MediaInformation-members.html index d1c1450601..1d499b6484 100644 --- a/docs/d0/d4b/structshaka_1_1media_1_1mp4_1_1MediaInformation-members.html +++ b/docs/d0/d4b/structshaka_1_1media_1_1mp4_1_1MediaInformation-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d4c/structshaka_1_1media_1_1StreamData.html b/docs/d0/d4c/structshaka_1_1media_1_1StreamData.html index 79f935687e..ea9e4294de 100644 --- a/docs/d0/d4c/structshaka_1_1media_1_1StreamData.html +++ b/docs/d0/d4c/structshaka_1_1media_1_1StreamData.html @@ -160,7 +160,7 @@ std::shared_ptr< const
diff --git a/docs/d0/d4d/classshaka_1_1media_1_1AudioTimestampHelper.html b/docs/d0/d4d/classshaka_1_1media_1_1AudioTimestampHelper.html index fce113abb0..b2842023e0 100644 --- a/docs/d0/d4d/classshaka_1_1media_1_1AudioTimestampHelper.html +++ b/docs/d0/d4d/classshaka_1_1media_1_1AudioTimestampHelper.html @@ -131,7 +131,7 @@ int64_t GetFramesToTarget< diff --git a/docs/d0/d4e/libcrypto__threading_8cc_source.html b/docs/d0/d4e/libcrypto__threading_8cc_source.html index 642030c3e6..2c2f5d5c46 100644 --- a/docs/d0/d4e/libcrypto__threading_8cc_source.html +++ b/docs/d0/d4e/libcrypto__threading_8cc_source.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d53/classshaka_1_1media_1_1mp2t_1_1TsMuxer-members.html b/docs/d0/d53/classshaka_1_1media_1_1mp2t_1_1TsMuxer-members.html index a0800eaf0c..79aef164c5 100644 --- a/docs/d0/d53/classshaka_1_1media_1_1mp2t_1_1TsMuxer-members.html +++ b/docs/d0/d53/classshaka_1_1media_1_1mp2t_1_1TsMuxer-members.html @@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d5b/classshaka_1_1media_1_1MpdNotifyMuxerListener-members.html b/docs/d0/d5b/classshaka_1_1media_1_1MpdNotifyMuxerListener-members.html index 4b3cbfaecb..7a7f490dbc 100644 --- a/docs/d0/d5b/classshaka_1_1media_1_1MpdNotifyMuxerListener-members.html +++ b/docs/d0/d5b/classshaka_1_1media_1_1MpdNotifyMuxerListener-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d73/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry.html b/docs/d0/d73/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry.html index ee435a62f9..5a22290123 100644 --- a/docs/d0/d73/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry.html +++ b/docs/d0/d73/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry.html @@ -197,7 +197,7 @@ Additional Inherited Members diff --git a/docs/d0/d7c/structshaka_1_1media_1_1mp4_1_1SampleToGroup.html b/docs/d0/d7c/structshaka_1_1media_1_1mp4_1_1SampleToGroup.html index 73c21db2b0..2b009fe6b1 100644 --- a/docs/d0/d7c/structshaka_1_1media_1_1mp4_1_1SampleToGroup.html +++ b/docs/d0/d7c/structshaka_1_1media_1_1mp4_1_1SampleToGroup.html @@ -188,7 +188,7 @@ Additional Inherited Members diff --git a/docs/d0/d7d/decryptor__source_8h_source.html b/docs/d0/d7d/decryptor__source_8h_source.html index 0da27cdcde..eea5dcbb00 100644 --- a/docs/d0/d7d/decryptor__source_8h_source.html +++ b/docs/d0/d7d/decryptor__source_8h_source.html @@ -109,31 +109,34 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
20 
23  public:
-
24  explicit DecryptorSource(KeySource* key_source);
-
25  ~DecryptorSource();
-
26 
-
27  bool DecryptSampleBuffer(const DecryptConfig* decrypt_config,
-
28  uint8_t* buffer,
-
29  size_t buffer_size);
-
30 
-
31  private:
-
32  KeySource* key_source_;
-
33  std::map<std::vector<uint8_t>, std::unique_ptr<AesCryptor>> decryptor_map_;
-
34 
-
35  DISALLOW_COPY_AND_ASSIGN(DecryptorSource);
-
36 };
-
37 
-
38 } // namespace media
-
39 } // namespace shaka
-
40 
-
41 #endif // MEDIA_BASE_DECRYPTOR_SOURCE_H_
+
26  explicit DecryptorSource(KeySource* key_source);
+
27  ~DecryptorSource();
+
28 
+
38  bool DecryptSampleBuffer(const DecryptConfig* decrypt_config,
+
39  const uint8_t* encrypted_buffer,
+
40  size_t buffer_size,
+
41  uint8_t* decrypted_buffer);
+
42 
+
43  private:
+
44  KeySource* key_source_;
+
45  std::map<std::vector<uint8_t>, std::unique_ptr<AesCryptor>> decryptor_map_;
+
46 
+
47  DISALLOW_COPY_AND_ASSIGN(DecryptorSource);
+
48 };
+
49 
+
50 } // namespace media
+
51 } // namespace shaka
+
52 
+
53 #endif // MEDIA_BASE_DECRYPTOR_SOURCE_H_
+
DecryptorSource(KeySource *key_source)
+
bool DecryptSampleBuffer(const DecryptConfig *decrypt_config, const uint8_t *encrypted_buffer, size_t buffer_size, uint8_t *decrypted_buffer)
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:45
DecryptorSource wraps KeySource and is responsible for decryptor management.
diff --git a/docs/d0/d80/classshaka_1_1media_1_1AesCbcEncryptor-members.html b/docs/d0/d80/classshaka_1_1media_1_1AesCbcEncryptor-members.html index 4706654430..97e51fbae5 100644 --- a/docs/d0/d80/classshaka_1_1media_1_1AesCbcEncryptor-members.html +++ b/docs/d0/d80/classshaka_1_1media_1_1AesCbcEncryptor-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d9a/structshaka_1_1media_1_1mp4_1_1Movie.html b/docs/d0/d9a/structshaka_1_1media_1_1mp4_1_1Movie.html index caecc34a38..13c44f0b57 100644 --- a/docs/d0/d9a/structshaka_1_1media_1_1mp4_1_1Movie.html +++ b/docs/d0/d9a/structshaka_1_1media_1_1mp4_1_1Movie.html @@ -186,7 +186,7 @@ Additional Inherited Members diff --git a/docs/d0/da2/classshaka_1_1media_1_1AACAudioSpecificConfig.html b/docs/d0/da2/classshaka_1_1media_1_1AACAudioSpecificConfig.html index 97f55af0ae..e95a28a368 100644 --- a/docs/d0/da2/classshaka_1_1media_1_1AACAudioSpecificConfig.html +++ b/docs/d0/da2/classshaka_1_1media_1_1AACAudioSpecificConfig.html @@ -344,7 +344,7 @@ static const size_t  diff --git a/docs/d0/da2/classshaka_1_1media_1_1RequestSigner-members.html b/docs/d0/da2/classshaka_1_1media_1_1RequestSigner-members.html index b1cb91805e..d08387d367 100644 --- a/docs/d0/da2/classshaka_1_1media_1_1RequestSigner-members.html +++ b/docs/d0/da2/classshaka_1_1media_1_1RequestSigner-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/da2/structshaka_1_1xml_1_1XmlDeleter-members.html b/docs/d0/da2/structshaka_1_1xml_1_1XmlDeleter-members.html index aec41a2b45..b16c70f5d5 100644 --- a/docs/d0/da2/structshaka_1_1xml_1_1XmlDeleter-members.html +++ b/docs/d0/da2/structshaka_1_1xml_1_1XmlDeleter-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/da6/stream__descriptor_8cc_source.html b/docs/d0/da6/stream__descriptor_8cc_source.html index 4326772d0f..04329a1ec9 100644 --- a/docs/d0/da6/stream__descriptor_8cc_source.html +++ b/docs/d0/da6/stream__descriptor_8cc_source.html @@ -98,26 +98,26 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
9 #include "packager/base/logging.h"
10 #include "packager/base/strings/string_number_conversions.h"
11 #include "packager/base/strings/string_split.h"
-
12 #include "packager/media/base/language_utils.h"
-
13 
-
14 namespace shaka {
-
15 
-
16 namespace {
-
17 
-
18 enum FieldType {
-
19  kUnknownField = 0,
-
20  kStreamSelectorField,
-
21  kInputField,
-
22  kOutputField,
-
23  kSegmentTemplateField,
-
24  kBandwidthField,
-
25  kLanguageField,
-
26  kOutputFormatField,
-
27  kHlsNameField,
-
28  kHlsGroupIdField,
-
29  kHlsPlaylistNameField,
-
30  kTrickPlayFactorField,
-
31  kSkipEncryptionField,
+
12 
+
13 namespace shaka {
+
14 
+
15 namespace {
+
16 
+
17 enum FieldType {
+
18  kUnknownField = 0,
+
19  kStreamSelectorField,
+
20  kInputField,
+
21  kOutputField,
+
22  kSegmentTemplateField,
+
23  kBandwidthField,
+
24  kLanguageField,
+
25  kOutputFormatField,
+
26  kHlsNameField,
+
27  kHlsGroupIdField,
+
28  kHlsPlaylistNameField,
+
29  kTrickPlayFactorField,
+
30  kSkipEncryptionField,
+
31  kDrmStreamLabelField,
32 };
33 
34 struct FieldNameToTypeMapping {
@@ -148,106 +148,106 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
59  {"trick_play_factor", kTrickPlayFactorField},
60  {"tpf", kTrickPlayFactorField},
61  {"skip_encryption", kSkipEncryptionField},
-
62 };
-
63 
-
64 FieldType GetFieldType(const std::string& field_name) {
-
65  for (size_t idx = 0; idx < arraysize(kFieldNameTypeMappings); ++idx) {
-
66  if (field_name == kFieldNameTypeMappings[idx].field_name)
-
67  return kFieldNameTypeMappings[idx].field_type;
-
68  }
-
69  return kUnknownField;
-
70 }
-
71 
-
72 } // anonymous namespace
+
62  {"drm_stream_label", kDrmStreamLabelField},
+
63  {"drm_label", kDrmStreamLabelField},
+
64 };
+
65 
+
66 FieldType GetFieldType(const std::string& field_name) {
+
67  for (size_t idx = 0; idx < arraysize(kFieldNameTypeMappings); ++idx) {
+
68  if (field_name == kFieldNameTypeMappings[idx].field_name)
+
69  return kFieldNameTypeMappings[idx].field_type;
+
70  }
+
71  return kUnknownField;
+
72 }
73 
-
74 base::Optional<StreamDescriptor> ParseStreamDescriptor(
-
75  const std::string& descriptor_string) {
-
76  StreamDescriptor descriptor;
-
77 
-
78  // Split descriptor string into name/value pairs.
-
79  base::StringPairs pairs;
-
80  if (!base::SplitStringIntoKeyValuePairs(descriptor_string, '=', ',',
-
81  &pairs)) {
-
82  LOG(ERROR) << "Invalid stream descriptors name/value pairs.";
-
83  return base::nullopt;
-
84  }
-
85  for (base::StringPairs::const_iterator iter = pairs.begin();
-
86  iter != pairs.end(); ++iter) {
-
87  switch (GetFieldType(iter->first)) {
-
88  case kStreamSelectorField:
-
89  descriptor.stream_selector = iter->second;
-
90  break;
-
91  case kInputField:
-
92  descriptor.input = iter->second;
-
93  break;
-
94  case kOutputField:
-
95  descriptor.output = iter->second;
-
96  break;
-
97  case kSegmentTemplateField:
-
98  descriptor.segment_template = iter->second;
-
99  break;
-
100  case kBandwidthField: {
-
101  unsigned bw;
-
102  if (!base::StringToUint(iter->second, &bw)) {
-
103  LOG(ERROR) << "Non-numeric bandwidth specified.";
-
104  return base::nullopt;
-
105  }
-
106  descriptor.bandwidth = bw;
-
107  break;
-
108  }
-
109  case kLanguageField: {
-
110  // TODO(kqyang): Move to packager.cc.
-
111  std::string language = LanguageToISO_639_2(iter->second);
-
112  if (language == "und") {
-
113  LOG(ERROR) << "Unknown/invalid language specified: " << iter->second;
-
114  return base::nullopt;
-
115  }
-
116  descriptor.language = language;
+
74 } // anonymous namespace
+
75 
+
76 base::Optional<StreamDescriptor> ParseStreamDescriptor(
+
77  const std::string& descriptor_string) {
+
78  StreamDescriptor descriptor;
+
79 
+
80  // Split descriptor string into name/value pairs.
+
81  base::StringPairs pairs;
+
82  if (!base::SplitStringIntoKeyValuePairs(descriptor_string, '=', ',',
+
83  &pairs)) {
+
84  LOG(ERROR) << "Invalid stream descriptors name/value pairs.";
+
85  return base::nullopt;
+
86  }
+
87  for (base::StringPairs::const_iterator iter = pairs.begin();
+
88  iter != pairs.end(); ++iter) {
+
89  switch (GetFieldType(iter->first)) {
+
90  case kStreamSelectorField:
+
91  descriptor.stream_selector = iter->second;
+
92  break;
+
93  case kInputField:
+
94  descriptor.input = iter->second;
+
95  break;
+
96  case kOutputField:
+
97  descriptor.output = iter->second;
+
98  break;
+
99  case kSegmentTemplateField:
+
100  descriptor.segment_template = iter->second;
+
101  break;
+
102  case kBandwidthField: {
+
103  unsigned bw;
+
104  if (!base::StringToUint(iter->second, &bw)) {
+
105  LOG(ERROR) << "Non-numeric bandwidth specified.";
+
106  return base::nullopt;
+
107  }
+
108  descriptor.bandwidth = bw;
+
109  break;
+
110  }
+
111  case kLanguageField: {
+
112  descriptor.language = iter->second;
+
113  break;
+
114  }
+
115  case kOutputFormatField: {
+
116  descriptor.output_format = iter->second;
117  break;
118  }
-
119  case kOutputFormatField: {
-
120  descriptor.output_format = iter->second;
+
119  case kHlsNameField: {
+
120  descriptor.hls_name = iter->second;
121  break;
122  }
-
123  case kHlsNameField: {
-
124  descriptor.hls_name = iter->second;
+
123  case kHlsGroupIdField: {
+
124  descriptor.hls_group_id = iter->second;
125  break;
126  }
-
127  case kHlsGroupIdField: {
-
128  descriptor.hls_group_id = iter->second;
+
127  case kHlsPlaylistNameField: {
+
128  descriptor.hls_playlist_name = iter->second;
129  break;
130  }
-
131  case kHlsPlaylistNameField: {
-
132  descriptor.hls_playlist_name = iter->second;
-
133  break;
-
134  }
-
135  case kTrickPlayFactorField: {
-
136  unsigned factor;
-
137  if (!base::StringToUint(iter->second, &factor)) {
-
138  LOG(ERROR) << "Non-numeric trick play factor " << iter->second
-
139  << " specified.";
+
131  case kTrickPlayFactorField: {
+
132  unsigned factor;
+
133  if (!base::StringToUint(iter->second, &factor)) {
+
134  LOG(ERROR) << "Non-numeric trick play factor " << iter->second
+
135  << " specified.";
+
136  return base::nullopt;
+
137  }
+
138  if (factor == 0) {
+
139  LOG(ERROR) << "Stream trick_play_factor should be > 0.";
140  return base::nullopt;
141  }
-
142  if (factor == 0) {
-
143  LOG(ERROR) << "Stream trick_play_factor should be > 0.";
-
144  return base::nullopt;
-
145  }
-
146  descriptor.trick_play_factor = factor;
-
147  break;
-
148  }
-
149  case kSkipEncryptionField: {
-
150  unsigned skip_encryption_value;
-
151  if (!base::StringToUint(iter->second, &skip_encryption_value)) {
-
152  LOG(ERROR) << "Non-numeric option for skip encryption field "
-
153  "specified (" << iter->second << ").";
+
142  descriptor.trick_play_factor = factor;
+
143  break;
+
144  }
+
145  case kSkipEncryptionField: {
+
146  unsigned skip_encryption_value;
+
147  if (!base::StringToUint(iter->second, &skip_encryption_value)) {
+
148  LOG(ERROR) << "Non-numeric option for skip encryption field "
+
149  "specified (" << iter->second << ").";
+
150  return base::nullopt;
+
151  }
+
152  if (skip_encryption_value > 1) {
+
153  LOG(ERROR) << "skip_encryption should be either 0 or 1.";
154  return base::nullopt;
155  }
-
156  if (skip_encryption_value > 1) {
-
157  LOG(ERROR) << "skip_encryption should be either 0 or 1.";
-
158  return base::nullopt;
-
159  }
-
160 
-
161  descriptor.skip_encryption = skip_encryption_value > 0;
+
156 
+
157  descriptor.skip_encryption = skip_encryption_value > 0;
+
158  break;
+
159  }
+
160  case kDrmStreamLabelField: {
+
161  descriptor.drm_label = iter->second;
162  break;
163  }
164  default:
@@ -260,25 +260,25 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
171 }
172 
173 } // namespace shaka
-
std::string stream_selector
Definition: packager.h:73
-
Defines a single input/output stream.
Definition: packager.h:67
-
std::string input
Input/source media file path or network stream URL. Required.
Definition: packager.h:69
-
std::string hls_playlist_name
Definition: packager.h:107
-
std::string hls_name
Definition: packager.h:101
-
base::Optional< StreamDescriptor > ParseStreamDescriptor(const std::string &descriptor_string)
-
std::string segment_template
Specifies segment template. Can be empty.
Definition: packager.h:79
-
std::string output_format
Definition: packager.h:83
-
std::string LanguageToISO_639_2(const std::string &language)
-
uint32_t trick_play_factor
Definition: packager.h:90
-
std::string output
Definition: packager.h:77
- - -
std::string language
Definition: packager.h:97
-
std::string hls_group_id
Definition: packager.h:104
+
std::string stream_selector
Definition: packager.h:71
+
Defines a single input/output stream.
Definition: packager.h:65
+
std::string input
Input/source media file path or network stream URL. Required.
Definition: packager.h:67
+
std::string hls_playlist_name
Definition: packager.h:110
+
std::string hls_name
Definition: packager.h:104
+
base::Optional< StreamDescriptor > ParseStreamDescriptor(const std::string &descriptor_string)
+
std::string segment_template
Specifies segment template. Can be empty.
Definition: packager.h:77
+
std::string output_format
Definition: packager.h:81
+
std::string drm_label
Definition: packager.h:89
+
uint32_t trick_play_factor
Definition: packager.h:93
+
std::string output
Definition: packager.h:75
+ + +
std::string language
Definition: packager.h:100
+
std::string hls_group_id
Definition: packager.h:107
diff --git a/docs/d0/da8/structshaka_1_1HlsParams.html b/docs/d0/da8/structshaka_1_1HlsParams.html index 7ca089bd91..c024071c7e 100644 --- a/docs/d0/da8/structshaka_1_1HlsParams.html +++ b/docs/d0/da8/structshaka_1_1HlsParams.html @@ -155,7 +155,7 @@ std::string  diff --git a/docs/d0/dab/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html b/docs/d0/dab/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html index dcc8935eae..4cca42596f 100644 --- a/docs/d0/dab/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html +++ b/docs/d0/dab/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html @@ -264,7 +264,7 @@ void set_progress_target diff --git a/docs/d0/dac/classshaka_1_1media_1_1EncryptionHandler-members.html b/docs/d0/dac/classshaka_1_1media_1_1EncryptionHandler-members.html index 6bb566ec71..62b99291e7 100644 --- a/docs/d0/dac/classshaka_1_1media_1_1EncryptionHandler-members.html +++ b/docs/d0/dac/classshaka_1_1media_1_1EncryptionHandler-members.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dac/classshaka_1_1media_1_1FixedKeySource.png b/docs/d0/dac/classshaka_1_1media_1_1FixedKeySource.png deleted file mode 100644 index b99506a04c..0000000000 Binary files a/docs/d0/dac/classshaka_1_1media_1_1FixedKeySource.png and /dev/null differ diff --git a/docs/d0/dae/file__util_8h_source.html b/docs/d0/dae/file__util_8h_source.html index 64ebd8b47b..2960d82cdf 100644 --- a/docs/d0/dae/file__util_8h_source.html +++ b/docs/d0/dae/file__util_8h_source.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d5d/structshaka_1_1RawKeyEncryptionParams.html b/docs/d0/db4/structshaka_1_1RawKeyParams.html similarity index 74% rename from docs/d0/d5d/structshaka_1_1RawKeyEncryptionParams.html rename to docs/d0/db4/structshaka_1_1RawKeyParams.html index 9ed8862471..ee400bd172 100644 --- a/docs/d0/d5d/structshaka_1_1RawKeyEncryptionParams.html +++ b/docs/d0/db4/structshaka_1_1RawKeyParams.html @@ -4,7 +4,7 @@ -Shaka Packager SDK: shaka::RawKeyEncryptionParams Struct Reference +Shaka Packager SDK: shaka::RawKeyParams Struct Reference @@ -82,7 +82,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
@@ -90,84 +90,84 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); Classes | Public Types | Public Attributes | -List of all members
+List of all members
-
shaka::RawKeyEncryptionParams Struct Reference
+
shaka::RawKeyParams Struct Reference
-

Raw key encryption parameters, i.e. with key parameters provided. - More...

+

Raw key encryption/decryption parameters, i.e. with key parameters provided. + More...

#include <crypto_params.h>

- +

Classes

struct  KeyPair
struct  KeyInfo
 
- - +

Public Types

+
using StreamLabel = std::string
 
 
- - - - - - + + + + + +

Public Attributes

std::vector< uint8_t > iv
 
std::vector< uint8_t > pssh
 
std::map< StreamLabel, KeyPairkey_map
 
std::vector< uint8_t > iv
 
std::vector< uint8_t > pssh
 
std::map< StreamLabel, KeyInfokey_map
 

Detailed Description

-

Raw key encryption parameters, i.e. with key parameters provided.

+

Raw key encryption/decryption parameters, i.e. with key parameters provided.

Definition at line 99 of file crypto_params.h.

Member Data Documentation

- +
- +
std::vector<uint8_t> shaka::RawKeyEncryptionParams::ivstd::vector<uint8_t> shaka::RawKeyParams::iv
-

An optional initialization vector. If not provided, a random iv will be generated. Note that this parameter should only be used during testing.

+

An optional initialization vector. If not provided, a random iv will be generated. Note that this parameter should only be used during testing. Not needed for decryption.

-

Definition at line 102 of file crypto_params.h.

+

Definition at line 103 of file crypto_params.h.

- +
- +
std::map<StreamLabel, KeyPair> shaka::RawKeyEncryptionParams::key_mapstd::map<StreamLabel, KeyInfo> shaka::RawKeyParams::key_map
-

Defines the KeyPair for the streams. An empty StreamLabel indicates the default KeyPair, which applies to all the StreamLabels not present in key_map.

+

Defines the KeyInfo for the streams. An empty StreamLabel indicates the default KeyInfo, which applies to all the StreamLabels not present in key_map.

-

Definition at line 115 of file crypto_params.h.

+

Definition at line 117 of file crypto_params.h.

- +
- +
std::vector<uint8_t> shaka::RawKeyEncryptionParams::psshstd::vector<uint8_t> shaka::RawKeyParams::pssh
-

Inject a custom pssh or multiple concatenated psshs. If not provided, a common system pssh will be generated.

+

Inject a custom pssh or multiple concatenated psshs. If not provided, a common system pssh will be generated. Not needed for decryption.

-

Definition at line 105 of file crypto_params.h.

+

Definition at line 107 of file crypto_params.h.

@@ -177,7 +177,7 @@ Public Attributes
diff --git a/docs/d0/dbd/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter-members.html b/docs/d0/dbd/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter-members.html index db8edd7672..4d4764c71c 100644 --- a/docs/d0/dbd/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter-members.html +++ b/docs/d0/dbd/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter-members.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
diff --git a/docs/df/d5d/structshaka_1_1RawKeyEncryptionParams_1_1KeyPair.html b/docs/d0/dbe/structshaka_1_1RawKeyParams_1_1KeyInfo.html similarity index 86% rename from docs/df/d5d/structshaka_1_1RawKeyEncryptionParams_1_1KeyPair.html rename to docs/d0/dbe/structshaka_1_1RawKeyParams_1_1KeyInfo.html index d286d8c520..29deb5be61 100644 --- a/docs/df/d5d/structshaka_1_1RawKeyEncryptionParams_1_1KeyPair.html +++ b/docs/d0/dbe/structshaka_1_1RawKeyParams_1_1KeyInfo.html @@ -4,7 +4,7 @@ -Shaka Packager SDK: shaka::RawKeyEncryptionParams::KeyPair Struct Reference +Shaka Packager SDK: shaka::RawKeyParams::KeyInfo Struct Reference @@ -82,37 +82,37 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
-
shaka::RawKeyEncryptionParams::KeyPair Struct Reference
+
shaka::RawKeyParams::KeyInfo Struct Reference
- - - + - +

Public Attributes

+
std::vector< uint8_t > key_id
 
+
 
std::vector< uint8_t > key
 
 

Detailed Description

-

Definition at line 108 of file crypto_params.h.

+

Definition at line 110 of file crypto_params.h.


The documentation for this struct was generated from the following file:
diff --git a/docs/d0/dc0/structshaka_1_1media_1_1SegmentInfo.html b/docs/d0/dc0/structshaka_1_1media_1_1SegmentInfo.html index a1e5cadc70..cdc394212c 100644 --- a/docs/d0/dc0/structshaka_1_1media_1_1SegmentInfo.html +++ b/docs/d0/dc0/structshaka_1_1media_1_1SegmentInfo.html @@ -121,7 +121,7 @@ std::shared_ptr< diff --git a/docs/d0/dc1/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox-members.html b/docs/d0/dc1/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox-members.html index 6bb0f00966..528f23fab6 100644 --- a/docs/d0/dc1/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox-members.html +++ b/docs/d0/dc1/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dc8/classshaka_1_1xml_1_1AdaptationSetXmlNode-members.html b/docs/d0/dc8/classshaka_1_1xml_1_1AdaptationSetXmlNode-members.html index 9c49acebe7..5924bf40e8 100644 --- a/docs/d0/dc8/classshaka_1_1xml_1_1AdaptationSetXmlNode-members.html +++ b/docs/d0/dc8/classshaka_1_1xml_1_1AdaptationSetXmlNode-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dce/classshaka_1_1media_1_1RsaPrivateKey.html b/docs/d0/dce/classshaka_1_1media_1_1RsaPrivateKey.html index d8e6aab8b9..2f472f949f 100644 --- a/docs/d0/dce/classshaka_1_1media_1_1RsaPrivateKey.html +++ b/docs/d0/dce/classshaka_1_1media_1_1RsaPrivateKey.html @@ -224,7 +224,7 @@ Static Public Member Functions diff --git a/docs/d0/dd0/structshaka_1_1media_1_1mp4_1_1CueSettingsBox.html b/docs/d0/dd0/structshaka_1_1media_1_1mp4_1_1CueSettingsBox.html index dcb72f1112..277cad746f 100644 --- a/docs/d0/dd0/structshaka_1_1media_1_1mp4_1_1CueSettingsBox.html +++ b/docs/d0/dd0/structshaka_1_1media_1_1mp4_1_1CueSettingsBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d0/dd4/classshaka_1_1media_1_1ProtectionSystemSpecificInfo.html b/docs/d0/dd4/classshaka_1_1media_1_1ProtectionSystemSpecificInfo.html index fda54755cf..e45958faec 100644 --- a/docs/d0/dd4/classshaka_1_1media_1_1ProtectionSystemSpecificInfo.html +++ b/docs/d0/dd4/classshaka_1_1media_1_1ProtectionSystemSpecificInfo.html @@ -222,7 +222,7 @@ Static Public Member Functions diff --git a/docs/d0/dd6/webm__crypto__helpers_8cc_source.html b/docs/d0/dd6/webm__crypto__helpers_8cc_source.html index 9059b117e0..baa0c459f3 100644 --- a/docs/d0/dd6/webm__crypto__helpers_8cc_source.html +++ b/docs/d0/dd6/webm__crypto__helpers_8cc_source.html @@ -205,7 +205,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dd8/classshaka_1_1media_1_1AesCtrEncryptor.html b/docs/d0/dd8/classshaka_1_1media_1_1AesCtrEncryptor.html index 03474c25c1..432a23847a 100644 --- a/docs/d0/dd8/classshaka_1_1media_1_1AesCtrEncryptor.html +++ b/docs/d0/dd8/classshaka_1_1media_1_1AesCtrEncryptor.html @@ -165,7 +165,7 @@ AES_KEY * mutable_aes_key< diff --git a/docs/d0/dee/segmenter__test__base_8h_source.html b/docs/d0/dee/segmenter__test__base_8h_source.html index a326f45435..d49c4aa65f 100644 --- a/docs/d0/dee/segmenter__test__base_8h_source.html +++ b/docs/d0/dee/segmenter__test__base_8h_source.html @@ -213,7 +213,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/df3/packager__util_8cc_source.html b/docs/d0/df3/packager__util_8cc_source.html index 479590733c..d2da4e93d6 100644 --- a/docs/d0/df3/packager__util_8cc_source.html +++ b/docs/d0/df3/packager__util_8cc_source.html @@ -99,10 +99,10 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
10 #include "packager/base/strings/string_number_conversions.h"
11 #include "packager/base/strings/string_split.h"
12 #include "packager/file/file.h"
-
13 #include "packager/media/base/fixed_key_source.h"
-
14 #include "packager/media/base/media_handler.h"
-
15 #include "packager/media/base/muxer_options.h"
-
16 #include "packager/media/base/playready_key_source.h"
+
13 #include "packager/media/base/media_handler.h"
+
14 #include "packager/media/base/muxer_options.h"
+
15 #include "packager/media/base/playready_key_source.h"
+
16 #include "packager/media/base/raw_key_source.h"
17 #include "packager/media/base/request_signer.h"
18 #include "packager/media/base/widevine_key_source.h"
19 #include "packager/media/chunking/chunking_handler.h"
@@ -144,11 +144,11 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
55  const WidevineEncryptionParams& widevine = encryption_params.widevine;
56  if (widevine.key_server_url.empty()) {
57  LOG(ERROR) << "'key_server_url' should not be empty.";
-
58  return std::unique_ptr<KeySource>();
+
58  return nullptr;
59  }
60  if (widevine.content_id.empty()) {
61  LOG(ERROR) << "'content_id' should not be empty.";
-
62  return std::unique_ptr<KeySource>();
+
62  return nullptr;
63  }
64  std::unique_ptr<WidevineKeySource> widevine_key_source(
65  new WidevineKeySource(widevine.key_server_url,
@@ -158,7 +158,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
69  std::unique_ptr<RequestSigner> request_signer(
70  CreateSigner(widevine.signer));
71  if (!request_signer)
-
72  return std::unique_ptr<KeySource>();
+
72  return nullptr;
73  widevine_key_source->set_signer(std::move(request_signer));
74  }
75  widevine_key_source->set_group_id(widevine.group_id);
@@ -168,130 +168,126 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
79  if (!status.ok()) {
80  LOG(ERROR) << "Widevine encryption key source failed to fetch keys: "
81  << status.ToString();
-
82  return std::unique_ptr<KeySource>();
+
82  return nullptr;
83  }
84  encryption_key_source = std::move(widevine_key_source);
85  break;
86  }
87  case KeyProvider::kRawKey: {
-
88  const RawKeyEncryptionParams& raw_key = encryption_params.raw_key;
-
89  const std::string kDefaultTrackType;
-
90  // TODO(kqyang): Refactor FixedKeySource.
-
91  encryption_key_source = FixedKeySource::Create(
-
92  raw_key.key_map.find("")->second.key_id,
-
93  raw_key.key_map.find("")->second.key, raw_key.pssh, raw_key.iv);
-
94  break;
-
95  }
-
96  case KeyProvider::kPlayready: {
-
97  const PlayreadyEncryptionParams& playready = encryption_params.playready;
-
98  if (!playready.key_id.empty() && !playready.key.empty()) {
-
99  encryption_key_source = PlayReadyKeySource::CreateFromKeyAndKeyId(
-
100  playready.key_id, playready.key);
-
101  } else if (!playready.key_server_url.empty() &&
-
102  !playready.program_identifier.empty()) {
-
103  std::unique_ptr<PlayReadyKeySource> playready_key_source;
-
104  if (!playready.client_cert_file.empty() &&
-
105  !playready.client_cert_private_key_file.empty() &&
-
106  !playready.client_cert_private_key_password.empty()) {
-
107  playready_key_source.reset(new PlayReadyKeySource(
-
108  playready.key_server_url, playready.client_cert_file,
-
109  playready.client_cert_private_key_file,
-
110  playready.client_cert_private_key_password));
-
111  } else {
-
112  playready_key_source.reset(
-
113  new PlayReadyKeySource(playready.key_server_url));
-
114  }
-
115  if (!playready.ca_file.empty()) {
-
116  playready_key_source->SetCaFile(playready.ca_file);
-
117  }
-
118  playready_key_source->FetchKeysWithProgramIdentifier(
-
119  playready.program_identifier);
-
120  encryption_key_source = std::move(playready_key_source);
-
121  } else {
-
122  LOG(ERROR) << "Error creating PlayReady key source.";
-
123  return std::unique_ptr<KeySource>();
-
124  }
-
125  break;
-
126  }
-
127  case KeyProvider::kNone:
-
128  break;
-
129  }
-
130  return encryption_key_source;
-
131 }
-
132 
-
133 std::unique_ptr<KeySource> CreateDecryptionKeySource(
-
134  const DecryptionParams& decryption_params) {
-
135  std::unique_ptr<KeySource> decryption_key_source;
-
136  switch (decryption_params.key_provider) {
-
137  case KeyProvider::kWidevine: {
-
138  const WidevineDecryptionParams& widevine = decryption_params.widevine;
-
139  if (widevine.key_server_url.empty()) {
-
140  LOG(ERROR) << "'key_server_url' should not be empty.";
-
141  return std::unique_ptr<KeySource>();
-
142  }
-
143  std::unique_ptr<WidevineKeySource> widevine_key_source(
-
144  new WidevineKeySource(widevine.key_server_url,
-
145  true /* commmon pssh, does not matter here */));
-
146  if (!widevine.signer.signer_name.empty()) {
-
147  std::unique_ptr<RequestSigner> request_signer(
-
148  CreateSigner(widevine.signer));
-
149  if (!request_signer)
-
150  return std::unique_ptr<KeySource>();
-
151  widevine_key_source->set_signer(std::move(request_signer));
-
152  }
-
153 
-
154  decryption_key_source = std::move(widevine_key_source);
-
155  break;
-
156  }
-
157  case KeyProvider::kRawKey: {
-
158  const RawKeyDecryptionParams& raw_key = decryption_params.raw_key;
-
159  const std::vector<uint8_t> kNoPssh;
-
160  const std::vector<uint8_t> kNoIv;
-
161  decryption_key_source = FixedKeySource::Create(
-
162  raw_key.key_map.find("")->second.key_id,
-
163  raw_key.key_map.find("")->second.key, kNoPssh, kNoIv);
-
164  break;
-
165  }
-
166  case KeyProvider::kNone:
-
167  case KeyProvider::kPlayready:
-
168  break;
-
169  }
-
170  return decryption_key_source;
-
171 }
-
172 
-
173 MpdOptions GetMpdOptions(bool on_demand_profile, const MpdParams& mpd_params) {
-
174  MpdOptions mpd_options;
-
175  mpd_options.dash_profile =
-
176  on_demand_profile ? DashProfile::kOnDemand : DashProfile::kLive;
-
177  mpd_options.mpd_type =
-
178  (on_demand_profile || mpd_params.generate_static_live_mpd)
-
179  ? MpdType::kStatic
-
180  : MpdType::kDynamic;
-
181  mpd_options.mpd_params = mpd_params;
-
182  return mpd_options;
-
183 }
-
184 
-
185 Status ConnectHandlers(std::vector<std::shared_ptr<MediaHandler>>& handlers) {
-
186  size_t num_handlers = handlers.size();
-
187  Status status;
-
188  for (size_t i = 1; i < num_handlers; ++i) {
-
189  status.Update(handlers[i - 1]->AddHandler(handlers[i]));
-
190  }
-
191  return status;
-
192 }
-
193 
-
194 } // namespace media
-
195 } // namespace shaka
+
88  encryption_key_source = RawKeySource::Create(encryption_params.raw_key);
+
89  break;
+
90  }
+
91  case KeyProvider::kPlayready: {
+
92  const PlayreadyEncryptionParams& playready = encryption_params.playready;
+
93  if (!playready.key_id.empty() || !playready.key.empty()) {
+
94  if (playready.key_id.empty() || playready.key.empty()) {
+
95  LOG(ERROR) << "Either playready key_id or key is not set.";
+
96  return nullptr;
+
97  }
+
98  encryption_key_source = PlayReadyKeySource::CreateFromKeyAndKeyId(
+
99  playready.key_id, playready.key);
+
100  } else if (!playready.key_server_url.empty() ||
+
101  !playready.program_identifier.empty()) {
+
102  if (playready.key_server_url.empty() ||
+
103  playready.program_identifier.empty()) {
+
104  LOG(ERROR) << "Either playready key_server_url or program_identifier "
+
105  "is not set.";
+
106  return nullptr;
+
107  }
+
108  std::unique_ptr<PlayReadyKeySource> playready_key_source;
+
109  // private_key_password is allowed to be empty for unencrypted key.
+
110  if (!playready.client_cert_file.empty() ||
+
111  !playready.client_cert_private_key_file.empty()) {
+
112  if (playready.client_cert_file.empty() ||
+
113  playready.client_cert_private_key_file.empty()) {
+
114  LOG(ERROR) << "Either playready client_cert_file or "
+
115  "client_cert_private_key_file is not set.";
+
116  return nullptr;
+
117  }
+
118  playready_key_source.reset(new PlayReadyKeySource(
+
119  playready.key_server_url, playready.client_cert_file,
+
120  playready.client_cert_private_key_file,
+
121  playready.client_cert_private_key_password));
+
122  } else {
+
123  playready_key_source.reset(
+
124  new PlayReadyKeySource(playready.key_server_url));
+
125  }
+
126  if (!playready.ca_file.empty()) {
+
127  playready_key_source->SetCaFile(playready.ca_file);
+
128  }
+
129  playready_key_source->FetchKeysWithProgramIdentifier(
+
130  playready.program_identifier);
+
131  encryption_key_source = std::move(playready_key_source);
+
132  } else {
+
133  LOG(ERROR) << "Error creating PlayReady key source.";
+
134  return nullptr;
+
135  }
+
136  break;
+
137  }
+
138  case KeyProvider::kNone:
+
139  break;
+
140  }
+
141  return encryption_key_source;
+
142 }
+
143 
+
144 std::unique_ptr<KeySource> CreateDecryptionKeySource(
+
145  const DecryptionParams& decryption_params) {
+
146  std::unique_ptr<KeySource> decryption_key_source;
+
147  switch (decryption_params.key_provider) {
+
148  case KeyProvider::kWidevine: {
+
149  const WidevineDecryptionParams& widevine = decryption_params.widevine;
+
150  if (widevine.key_server_url.empty()) {
+
151  LOG(ERROR) << "'key_server_url' should not be empty.";
+
152  return std::unique_ptr<KeySource>();
+
153  }
+
154  std::unique_ptr<WidevineKeySource> widevine_key_source(
+
155  new WidevineKeySource(widevine.key_server_url,
+
156  true /* commmon pssh, does not matter here */));
+
157  if (!widevine.signer.signer_name.empty()) {
+
158  std::unique_ptr<RequestSigner> request_signer(
+
159  CreateSigner(widevine.signer));
+
160  if (!request_signer)
+
161  return std::unique_ptr<KeySource>();
+
162  widevine_key_source->set_signer(std::move(request_signer));
+
163  }
+
164 
+
165  decryption_key_source = std::move(widevine_key_source);
+
166  break;
+
167  }
+
168  case KeyProvider::kRawKey: {
+
169  decryption_key_source = RawKeySource::Create(decryption_params.raw_key);
+
170  break;
+
171  }
+
172  case KeyProvider::kNone:
+
173  case KeyProvider::kPlayready:
+
174  break;
+
175  }
+
176  return decryption_key_source;
+
177 }
+
178 
+
179 MpdOptions GetMpdOptions(bool on_demand_profile, const MpdParams& mpd_params) {
+
180  MpdOptions mpd_options;
+
181  mpd_options.dash_profile =
+
182  on_demand_profile ? DashProfile::kOnDemand : DashProfile::kLive;
+
183  mpd_options.mpd_type =
+
184  (on_demand_profile || mpd_params.generate_static_live_mpd)
+
185  ? MpdType::kStatic
+
186  : MpdType::kDynamic;
+
187  mpd_options.mpd_params = mpd_params;
+
188  return mpd_options;
+
189 }
+
190 
+
191 } // namespace media
+
192 } // namespace shaka
static RsaRequestSigner * CreateSigner(const std::string &signer_name, const std::string &pkcs1_rsa_key)
static AesRequestSigner * CreateSigner(const std::string &signer_name, const std::vector< uint8_t > &aes_key, const std::vector< uint8_t > &iv)
-
void Update(const Status &new_status)
Definition: status.h:152
void SetCaFile(const std::string &ca_file)
Sets the Certificate Authority file for validating self-signed certificates.
-
static std::unique_ptr< FixedKeySource > Create(const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &key, const std::vector< uint8_t > &pssh_boxes, const std::vector< uint8_t > &iv)
+
static std::unique_ptr< RawKeySource > Create(const RawKeyParams &raw_key)
static std::unique_ptr< PlayReadyKeySource > CreateFromKeyAndKeyId(const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &key)
diff --git a/docs/d0/df4/classshaka_1_1hls_1_1MasterPlaylist-members.html b/docs/d0/df4/classshaka_1_1hls_1_1MasterPlaylist-members.html index 7ecd1c251b..eca8078ad1 100644 --- a/docs/d0/df4/classshaka_1_1hls_1_1MasterPlaylist-members.html +++ b/docs/d0/df4/classshaka_1_1hls_1_1MasterPlaylist-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dfc/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry-members.html b/docs/d0/dfc/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry-members.html index 999ebefe77..badfad666c 100644 --- a/docs/d0/dfc/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry-members.html +++ b/docs/d0/dfc/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry-members.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d03/structshaka_1_1media_1_1MuxerListener_1_1MediaRanges.html b/docs/d1/d03/structshaka_1_1media_1_1MuxerListener_1_1MediaRanges.html index ecfa70d4d7..1e2a3d90af 100644 --- a/docs/d1/d03/structshaka_1_1media_1_1MuxerListener_1_1MediaRanges.html +++ b/docs/d1/d03/structshaka_1_1media_1_1MuxerListener_1_1MediaRanges.html @@ -135,7 +135,7 @@ base::Optional< diff --git a/docs/d1/d0a/classshaka_1_1media_1_1MkvWriter.html b/docs/d1/d0a/classshaka_1_1media_1_1MkvWriter.html index 06138a80f4..457a7b4bfb 100644 --- a/docs/d1/d0a/classshaka_1_1media_1_1MkvWriter.html +++ b/docs/d1/d0a/classshaka_1_1media_1_1MkvWriter.html @@ -376,7 +376,7 @@ Public Member Functions diff --git a/docs/d1/d0a/structshaka_1_1media_1_1H264Sps.html b/docs/d1/d0a/structshaka_1_1media_1_1H264Sps.html index 954d296dd5..bcb10c20eb 100644 --- a/docs/d1/d0a/structshaka_1_1media_1_1H264Sps.html +++ b/docs/d1/d0a/structshaka_1_1media_1_1H264Sps.html @@ -242,7 +242,7 @@ int chroma_array_type< diff --git a/docs/d1/d0b/hevc__decoder__configuration__record_8cc_source.html b/docs/d1/d0b/hevc__decoder__configuration__record_8cc_source.html index a550855444..3356ab993e 100644 --- a/docs/d1/d0b/hevc__decoder__configuration__record_8cc_source.html +++ b/docs/d1/d0b/hevc__decoder__configuration__record_8cc_source.html @@ -245,7 +245,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d12/classshaka_1_1media_1_1mp2t_1_1EsParserH264-members.html b/docs/d1/d12/classshaka_1_1media_1_1mp2t_1_1EsParserH264-members.html index db55f03836..e99fd2cba3 100644 --- a/docs/d1/d12/classshaka_1_1media_1_1mp2t_1_1EsParserH264-members.html +++ b/docs/d1/d12/classshaka_1_1media_1_1mp2t_1_1EsParserH264-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d12/range_8h_source.html b/docs/d1/d12/range_8h_source.html index bdc7b43528..763e6ae9d4 100644 --- a/docs/d1/d12/range_8h_source.html +++ b/docs/d1/d12/range_8h_source.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d13/status_8h_source.html b/docs/d1/d13/status_8h_source.html index 1fd8e0a18f..5115ec5156 100644 --- a/docs/d1/d13/status_8h_source.html +++ b/docs/d1/d13/status_8h_source.html @@ -272,7 +272,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d17/structshaka_1_1WidevineDecryptionParams-members.html b/docs/d1/d17/structshaka_1_1WidevineDecryptionParams-members.html index 096f727ffc..e7b0cfba82 100644 --- a/docs/d1/d17/structshaka_1_1WidevineDecryptionParams-members.html +++ b/docs/d1/d17/structshaka_1_1WidevineDecryptionParams-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d1c/two__pass__single__segment__segmenter_8cc_source.html b/docs/d1/d1c/two__pass__single__segment__segmenter_8cc_source.html index 5737d74f36..1cbc226e73 100644 --- a/docs/d1/d1c/two__pass__single__segment__segmenter_8cc_source.html +++ b/docs/d1/d1c/two__pass__single__segment__segmenter_8cc_source.html @@ -282,7 +282,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d1d/muxer__flags_8cc_source.html b/docs/d1/d1d/muxer__flags_8cc_source.html index 1407da6c06..f5903f6916 100644 --- a/docs/d1/d1d/muxer__flags_8cc_source.html +++ b/docs/d1/d1d/muxer__flags_8cc_source.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d1e/hls__notifier_8h_source.html b/docs/d1/d1e/hls__notifier_8h_source.html index a5e46f8eec..d228b7f4f2 100644 --- a/docs/d1/d1e/hls__notifier_8h_source.html +++ b/docs/d1/d1e/hls__notifier_8h_source.html @@ -157,7 +157,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d1f/classshaka_1_1media_1_1KeySource.html b/docs/d1/d1f/classshaka_1_1media_1_1KeySource.html index 4df9729fea..77f09b88a3 100644 --- a/docs/d1/d1f/classshaka_1_1media_1_1KeySource.html +++ b/docs/d1/d1f/classshaka_1_1media_1_1KeySource.html @@ -104,8 +104,8 @@ Inheritance diagram for shaka::media::KeySource:
-shaka::media::FixedKeySource -shaka::media::PlayReadyKeySource +shaka::media::PlayReadyKeySource +shaka::media::RawKeySource shaka::media::WidevineKeySource
@@ -167,7 +167,7 @@ Public Member Functions
Returns
OK on success, an error status otherwise.
-

Implemented in shaka::media::PlayReadyKeySource, shaka::media::WidevineKeySource, and shaka::media::FixedKeySource.

+

Implemented in shaka::media::PlayReadyKeySource, shaka::media::RawKeySource, and shaka::media::WidevineKeySource.

@@ -219,7 +219,7 @@ Public Member Functions
Returns
OK on success, an error status otherwise.
-

Implemented in shaka::media::PlayReadyKeySource, shaka::media::WidevineKeySource, and shaka::media::FixedKeySource.

+

Implemented in shaka::media::PlayReadyKeySource, shaka::media::RawKeySource, and shaka::media::WidevineKeySource.

@@ -264,7 +264,7 @@ Public Member Functions
Returns
OK on success, an error status otherwise.
-

Implemented in shaka::media::PlayReadyKeySource, shaka::media::WidevineKeySource, and shaka::media::FixedKeySource.

+

Implemented in shaka::media::PlayReadyKeySource, shaka::media::RawKeySource, and shaka::media::WidevineKeySource.

@@ -309,7 +309,7 @@ Public Member Functions
Returns
OK on success, or an error status otherwise.
-

Implemented in shaka::media::PlayReadyKeySource, shaka::media::WidevineKeySource, and shaka::media::FixedKeySource.

+

Implemented in shaka::media::PlayReadyKeySource, shaka::media::RawKeySource, and shaka::media::WidevineKeySource.

@@ -320,7 +320,7 @@ Public Member Functions diff --git a/docs/d1/d1f/classshaka_1_1media_1_1KeySource.png b/docs/d1/d1f/classshaka_1_1media_1_1KeySource.png index 5c099bc541..ed066ab59c 100644 Binary files a/docs/d1/d1f/classshaka_1_1media_1_1KeySource.png and b/docs/d1/d1f/classshaka_1_1media_1_1KeySource.png differ diff --git a/docs/d1/d20/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator.html b/docs/d1/d20/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator.html index 3cb0242c2e..7f386599f8 100644 --- a/docs/d1/d20/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator.html +++ b/docs/d1/d20/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator.html @@ -235,7 +235,7 @@ Public Member Functions diff --git a/docs/d1/d25/classshaka_1_1media_1_1MediaHandlerTestBase-members.html b/docs/d1/d25/classshaka_1_1media_1_1MediaHandlerTestBase-members.html index ae2c7c931d..17f477711f 100644 --- a/docs/d1/d25/classshaka_1_1media_1_1MediaHandlerTestBase-members.html +++ b/docs/d1/d25/classshaka_1_1media_1_1MediaHandlerTestBase-members.html @@ -93,26 +93,26 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');

This is the complete list of members for shaka::media::MediaHandlerTestBase, including all inherited members.

- - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + +
ClearOutputStreamDataVector()shaka::media::MediaHandlerTestBase
GetAudioStreamInfo(uint32_t time_scale) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBase
GetAudioStreamInfo(uint32_t time_scale, Codec codec) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBase
GetMediaSample(int64_t timestamp, int64_t duration, bool is_keyframe) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBase
GetMediaSample(int64_t timestamp, int64_t duration, bool is_keyframe, const uint8_t *data, size_t data_length) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBase
GetOutputStreamDataVector() const shaka::media::MediaHandlerTestBase
GetSegmentInfo(int64_t start_timestamp, int64_t duration, bool is_subsegment) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBase
GetVideoStreamInfo(uint32_t time_scale) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBase
GetVideoStreamInfo(uint32_t time_scale, uint32_t width, uint64_t height) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBase
GetVideoStreamInfo(uint32_t time_scale, Codec codec) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBase
GetVideoStreamInfo(uint32_t time_scale, Codec codec, uint32_t width, uint64_t height) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBase
IsVideoCodec(Codec codec) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBase
MediaHandlerTestBase() (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBase
next_handler()shaka::media::MediaHandlerTestBaseinline
SetUpGraph(size_t num_inputs, size_t num_outputs, std::shared_ptr< MediaHandler > handler)shaka::media::MediaHandlerTestBase
some_handler()shaka::media::MediaHandlerTestBaseinline
GetAudioStreamInfo(uint32_t time_scale) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetAudioStreamInfo(uint32_t time_scale, Codec codec) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetMediaSample(int64_t timestamp, int64_t duration, bool is_keyframe) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetMediaSample(int64_t timestamp, int64_t duration, bool is_keyframe, const uint8_t *data, size_t data_length) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetSegmentInfo(int64_t start_timestamp, int64_t duration, bool is_subsegment) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetTextSample(const std::string &id, uint64_t start, uint64_t end, const std::string &payload) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetTextStreamInfo() const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetVideoStreamInfo(uint32_t time_scale) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetVideoStreamInfo(uint32_t time_scale, uint32_t width, uint64_t height) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetVideoStreamInfo(uint32_t time_scale, Codec codec) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetVideoStreamInfo(uint32_t time_scale, Codec codec, uint32_t width, uint64_t height) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
Input(size_t index) (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
IsVideoCodec(Codec codec) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
MediaHandlerTestBase()=default (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBase
Output(size_t index) (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
SetUpAndInitializeGraph(std::shared_ptr< MediaHandler > handler, size_t input_count, size_t output_count) (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
diff --git a/docs/d1/d27/key__fetcher_8h_source.html b/docs/d1/d27/key__fetcher_8h_source.html index 46849d6be3..67e3e7cd50 100644 --- a/docs/d1/d27/key__fetcher_8h_source.html +++ b/docs/d1/d27/key__fetcher_8h_source.html @@ -126,7 +126,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d28/classshaka_1_1media_1_1mp2t_1_1AdtsHeader-members.html b/docs/d1/d28/classshaka_1_1media_1_1mp2t_1_1AdtsHeader-members.html index 7f9c4c4bf3..efa511679a 100644 --- a/docs/d1/d28/classshaka_1_1media_1_1mp2t_1_1AdtsHeader-members.html +++ b/docs/d1/d28/classshaka_1_1media_1_1mp2t_1_1AdtsHeader-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d2a/decryptor__source_8cc_source.html b/docs/d1/d2a/decryptor__source_8cc_source.html index 2830ac01cb..d502aaa06c 100644 --- a/docs/d1/d2a/decryptor__source_8cc_source.html +++ b/docs/d1/d2a/decryptor__source_8cc_source.html @@ -99,114 +99,148 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
10 #include "packager/media/base/aes_decryptor.h"
11 #include "packager/media/base/aes_pattern_cryptor.h"
12 
-
13 namespace shaka {
-
14 namespace media {
-
15 
-
16 DecryptorSource::DecryptorSource(KeySource* key_source)
-
17  : key_source_(key_source) {
-
18  CHECK(key_source);
-
19 }
-
20 DecryptorSource::~DecryptorSource() {}
-
21 
-
22 bool DecryptorSource::DecryptSampleBuffer(const DecryptConfig* decrypt_config,
-
23  uint8_t* buffer,
-
24  size_t buffer_size) {
-
25  DCHECK(decrypt_config);
-
26  DCHECK(buffer);
+
13 namespace {
+
14 // Return true if [encrypted_buffer, encrypted_buffer + buffer_size) overlaps
+
15 // with [decrypted_buffer, decrypted_buffer + buffer_size).
+
16 bool CheckMemoryOverlap(const uint8_t* encrypted_buffer,
+
17  size_t buffer_size,
+
18  uint8_t* decrypted_buffer) {
+
19  return (decrypted_buffer < encrypted_buffer)
+
20  ? (encrypted_buffer < decrypted_buffer + buffer_size)
+
21  : (decrypted_buffer < encrypted_buffer + buffer_size);
+
22 }
+
23 } // namespace
+
24 
+
25 namespace shaka {
+
26 namespace media {
27 
-
28  // Get the decryptor object.
-
29  AesCryptor* decryptor = nullptr;
-
30  auto found = decryptor_map_.find(decrypt_config->key_id());
-
31  if (found == decryptor_map_.end()) {
-
32  // Create new AesDecryptor based on decryption mode.
-
33  EncryptionKey key;
-
34  Status status(key_source_->GetKey(decrypt_config->key_id(), &key));
-
35  if (!status.ok()) {
-
36  LOG(ERROR) << "Error retrieving decryption key: " << status;
-
37  return false;
-
38  }
-
39 
-
40  std::unique_ptr<AesCryptor> aes_decryptor;
-
41  switch (decrypt_config->protection_scheme()) {
-
42  case FOURCC_cenc:
-
43  aes_decryptor.reset(new AesCtrDecryptor);
-
44  break;
-
45  case FOURCC_cbc1:
-
46  aes_decryptor.reset(new AesCbcDecryptor(kNoPadding));
-
47  break;
-
48  case FOURCC_cens:
-
49  aes_decryptor.reset(new AesPatternCryptor(
-
50  decrypt_config->crypt_byte_block(),
-
51  decrypt_config->skip_byte_block(),
- -
53  AesCryptor::kDontUseConstantIv,
-
54  std::unique_ptr<AesCryptor>(new AesCtrDecryptor())));
-
55  break;
-
56  case FOURCC_cbcs:
-
57  aes_decryptor.reset(new AesPatternCryptor(
-
58  decrypt_config->crypt_byte_block(),
-
59  decrypt_config->skip_byte_block(),
- -
61  AesCryptor::kUseConstantIv,
-
62  std::unique_ptr<AesCryptor>(new AesCbcDecryptor(kNoPadding))));
+ +
29  : key_source_(key_source) {
+
30  CHECK(key_source);
+
31 }
+
32 DecryptorSource::~DecryptorSource() {}
+
33 
+ +
35  const uint8_t* encrypted_buffer,
+
36  size_t buffer_size,
+
37  uint8_t* decrypted_buffer) {
+
38  DCHECK(decrypt_config);
+
39  DCHECK(encrypted_buffer);
+
40  DCHECK(decrypted_buffer);
+
41 
+
42  if (CheckMemoryOverlap(encrypted_buffer, buffer_size, decrypted_buffer)) {
+
43  LOG(ERROR) << "Encrypted buffer and decrypted buffer cannot overlap.";
+
44  return false;
+
45  }
+
46 
+
47  // Get the decryptor object.
+
48  AesCryptor* decryptor = nullptr;
+
49  auto found = decryptor_map_.find(decrypt_config->key_id());
+
50  if (found == decryptor_map_.end()) {
+
51  // Create new AesDecryptor based on decryption mode.
+
52  EncryptionKey key;
+
53  Status status(key_source_->GetKey(decrypt_config->key_id(), &key));
+
54  if (!status.ok()) {
+
55  LOG(ERROR) << "Error retrieving decryption key: " << status;
+
56  return false;
+
57  }
+
58 
+
59  std::unique_ptr<AesCryptor> aes_decryptor;
+
60  switch (decrypt_config->protection_scheme()) {
+
61  case FOURCC_cenc:
+
62  aes_decryptor.reset(new AesCtrDecryptor);
63  break;
-
64  default:
-
65  LOG(ERROR) << "Unsupported protection scheme: "
-
66  << decrypt_config->protection_scheme();
-
67  return false;
-
68  }
-
69 
-
70  if (!aes_decryptor->InitializeWithIv(key.key, decrypt_config->iv())) {
-
71  LOG(ERROR) << "Failed to initialize AesDecryptor for decryption.";
-
72  return false;
-
73  }
-
74  decryptor = aes_decryptor.get();
-
75  decryptor_map_[decrypt_config->key_id()] = std::move(aes_decryptor);
-
76  } else {
-
77  decryptor = found->second.get();
-
78  }
-
79  if (!decryptor->SetIv(decrypt_config->iv())) {
-
80  LOG(ERROR) << "Invalid initialization vector.";
-
81  return false;
-
82  }
-
83 
-
84  if (decrypt_config->subsamples().empty()) {
-
85  // Sample not encrypted using subsample encryption. Decrypt whole.
-
86  if (!decryptor->Crypt(buffer, buffer_size, buffer)) {
-
87  LOG(ERROR) << "Error during bulk sample decryption.";
-
88  return false;
-
89  }
-
90  return true;
-
91  }
-
92 
-
93  // Subsample decryption.
-
94  const std::vector<SubsampleEntry>& subsamples = decrypt_config->subsamples();
-
95  uint8_t* current_ptr = buffer;
-
96  const uint8_t* const buffer_end = buffer + buffer_size;
-
97  for (const auto& subsample : subsamples) {
-
98  if ((current_ptr + subsample.clear_bytes + subsample.cipher_bytes) >
-
99  buffer_end) {
-
100  LOG(ERROR) << "Subsamples overflow sample buffer.";
-
101  return false;
-
102  }
-
103  current_ptr += subsample.clear_bytes;
-
104  if (!decryptor->Crypt(current_ptr, subsample.cipher_bytes, current_ptr)) {
-
105  LOG(ERROR) << "Error decrypting subsample buffer.";
-
106  return false;
-
107  }
-
108  current_ptr += subsample.cipher_bytes;
-
109  }
-
110  return true;
-
111 }
-
112 
-
113 } // namespace media
-
114 } // namespace shaka
+
64  case FOURCC_cbc1:
+
65  aes_decryptor.reset(new AesCbcDecryptor(kNoPadding));
+
66  break;
+
67  case FOURCC_cens:
+
68  aes_decryptor.reset(new AesPatternCryptor(
+
69  decrypt_config->crypt_byte_block(),
+
70  decrypt_config->skip_byte_block(),
+ +
72  AesCryptor::kDontUseConstantIv,
+
73  std::unique_ptr<AesCryptor>(new AesCtrDecryptor())));
+
74  break;
+
75  case FOURCC_cbcs:
+
76  aes_decryptor.reset(new AesPatternCryptor(
+
77  decrypt_config->crypt_byte_block(),
+
78  decrypt_config->skip_byte_block(),
+ +
80  AesCryptor::kUseConstantIv,
+
81  std::unique_ptr<AesCryptor>(new AesCbcDecryptor(kNoPadding))));
+
82  break;
+
83  default:
+
84  LOG(ERROR) << "Unsupported protection scheme: "
+
85  << decrypt_config->protection_scheme();
+
86  return false;
+
87  }
+
88 
+
89  if (!aes_decryptor->InitializeWithIv(key.key, decrypt_config->iv())) {
+
90  LOG(ERROR) << "Failed to initialize AesDecryptor for decryption.";
+
91  return false;
+
92  }
+
93  decryptor = aes_decryptor.get();
+
94  decryptor_map_[decrypt_config->key_id()] = std::move(aes_decryptor);
+
95  } else {
+
96  decryptor = found->second.get();
+
97  }
+
98  if (!decryptor->SetIv(decrypt_config->iv())) {
+
99  LOG(ERROR) << "Invalid initialization vector.";
+
100  return false;
+
101  }
+
102 
+
103  if (decrypt_config->subsamples().empty()) {
+
104  // Sample not encrypted using subsample encryption. Decrypt whole.
+
105  if (!decryptor->Crypt(encrypted_buffer, buffer_size, decrypted_buffer)) {
+
106  LOG(ERROR) << "Error during bulk sample decryption.";
+
107  return false;
+
108  }
+
109  return true;
+
110  }
+
111 
+
112  // Subsample decryption.
+
113  const std::vector<SubsampleEntry>& subsamples = decrypt_config->subsamples();
+
114  const uint8_t* current_ptr = encrypted_buffer;
+
115  const uint8_t* const buffer_end = encrypted_buffer + buffer_size;
+
116  for (const auto& subsample : subsamples) {
+
117  if ((current_ptr + subsample.clear_bytes + subsample.cipher_bytes) >
+
118  buffer_end) {
+
119  LOG(ERROR) << "Subsamples overflow sample buffer.";
+
120  return false;
+
121  }
+
122  memcpy(decrypted_buffer, current_ptr, subsample.clear_bytes);
+
123  current_ptr += subsample.clear_bytes;
+
124  decrypted_buffer += subsample.clear_bytes;
+
125  if (!decryptor->Crypt(current_ptr, subsample.cipher_bytes,
+
126  decrypted_buffer)) {
+
127  LOG(ERROR) << "Error decrypting subsample buffer.";
+
128  return false;
+
129  }
+
130  current_ptr += subsample.cipher_bytes;
+
131  decrypted_buffer += subsample.cipher_bytes;
+
132  }
+
133  return true;
+
134 }
+
135 
+
136 } // namespace media
+
137 } // namespace shaka
+ +
DecryptorSource(KeySource *key_source)
+
virtual Status GetKey(const std::string &stream_label, EncryptionKey *key)=0
+
Class which implements AES-CBC (Cipher block chaining) decryption.
Definition: aes_decryptor.h:25
+
bool DecryptSampleBuffer(const DecryptConfig *decrypt_config, const uint8_t *encrypted_buffer, size_t buffer_size, uint8_t *decrypted_buffer)
+ + +
Implements pattern-based encryption/decryption.
+ +
bool SetIv(const std::vector< uint8_t > &iv)
Definition: aes_cryptor.cc:67
+
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:45
diff --git a/docs/d1/d2b/file__util_8cc_source.html b/docs/d1/d2b/file__util_8cc_source.html index 553be3ef47..c59db5edad 100644 --- a/docs/d1/d2b/file__util_8cc_source.html +++ b/docs/d1/d2b/file__util_8cc_source.html @@ -138,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d2c/structshaka_1_1media_1_1mp4_1_1DataReference-members.html b/docs/d1/d2c/structshaka_1_1media_1_1mp4_1_1DataReference-members.html index 7ac89e13e3..ac800bd4a0 100644 --- a/docs/d1/d2c/structshaka_1_1media_1_1mp4_1_1DataReference-members.html +++ b/docs/d1/d2c/structshaka_1_1media_1_1mp4_1_1DataReference-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d2d/structshaka_1_1media_1_1mp4_1_1Box.html b/docs/d1/d2d/structshaka_1_1media_1_1mp4_1_1Box.html index d5a06470a0..46375bd7b3 100644 --- a/docs/d1/d2d/structshaka_1_1media_1_1mp4_1_1Box.html +++ b/docs/d1/d2d/structshaka_1_1media_1_1mp4_1_1Box.html @@ -385,7 +385,7 @@ class BoxBuffer diff --git a/docs/d1/d2f/webvtt__media__parser_8cc_source.html b/docs/d1/d2f/webvtt__media__parser_8cc_source.html index 314dcf4797..e0e5fd1566 100644 --- a/docs/d1/d2f/webvtt__media__parser_8cc_source.html +++ b/docs/d1/d2f/webvtt__media__parser_8cc_source.html @@ -408,7 +408,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d30/classshaka_1_1media_1_1mp2t_1_1TsSectionPes.html b/docs/d1/d30/classshaka_1_1media_1_1mp2t_1_1TsSectionPes.html index de213064e8..c885859df5 100644 --- a/docs/d1/d30/classshaka_1_1media_1_1mp2t_1_1TsSectionPes.html +++ b/docs/d1/d30/classshaka_1_1media_1_1mp2t_1_1TsSectionPes.html @@ -142,7 +142,7 @@ Additional Inherited Members diff --git a/docs/d1/d31/classshaka_1_1xml_1_1XmlNode.html b/docs/d1/d31/classshaka_1_1xml_1_1XmlNode.html index ed410edc37..f8ac5d2ade 100644 --- a/docs/d1/d31/classshaka_1_1xml_1_1XmlNode.html +++ b/docs/d1/d31/classshaka_1_1xml_1_1XmlNode.html @@ -419,7 +419,7 @@ bool  diff --git a/docs/d1/d34/structshaka_1_1media_1_1SubsampleEntry.html b/docs/d1/d34/structshaka_1_1media_1_1SubsampleEntry.html index 4e152b5674..8ea4109f3b 100644 --- a/docs/d1/d34/structshaka_1_1media_1_1SubsampleEntry.html +++ b/docs/d1/d34/structshaka_1_1media_1_1SubsampleEntry.html @@ -122,7 +122,7 @@ uint32_t cipher_bytes< diff --git a/docs/d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html b/docs/d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html index 03dc7ddd56..8ed4c7680c 100644 --- a/docs/d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html +++ b/docs/d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html @@ -203,7 +203,7 @@ std::vector< std::unique_ptr

Detailed Description

-

Definition at line 78 of file media_handler_test_base.h.

+

Definition at line 111 of file media_handler_test_base.h.

Member Function Documentation

@@ -229,7 +229,7 @@ std::vector< std::unique_ptr

Implements shaka::media::MediaHandler.

-

Definition at line 62 of file media_handler_test_base.cc.

+

Definition at line 91 of file media_handler_test_base.cc.

@@ -258,7 +258,7 @@ std::vector< std::unique_ptr

Implements shaka::media::MediaHandler.

-

Definition at line 66 of file media_handler_test_base.cc.

+

Definition at line 95 of file media_handler_test_base.cc.

@@ -269,7 +269,7 @@ std::vector< std::unique_ptr
diff --git a/docs/d1/d37/es__parser__h264_8h_source.html b/docs/d1/d37/es__parser__h264_8h_source.html index 7bbd637fcc..bc7763272d 100644 --- a/docs/d1/d37/es__parser__h264_8h_source.html +++ b/docs/d1/d37/es__parser__h264_8h_source.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d3b/mpd__generator__flags_8h_source.html b/docs/d1/d3b/mpd__generator__flags_8h_source.html index cc2d8cf002..9c4adeb037 100644 --- a/docs/d1/d3b/mpd__generator__flags_8h_source.html +++ b/docs/d1/d3b/mpd__generator__flags_8h_source.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d3e/structshaka_1_1media_1_1mp4_1_1MovieExtends.html b/docs/d1/d3e/structshaka_1_1media_1_1mp4_1_1MovieExtends.html index 03f91701b6..ec86e63cf6 100644 --- a/docs/d1/d3e/structshaka_1_1media_1_1mp4_1_1MovieExtends.html +++ b/docs/d1/d3e/structshaka_1_1media_1_1mp4_1_1MovieExtends.html @@ -176,7 +176,7 @@ Additional Inherited Members diff --git a/docs/d1/d40/classshaka_1_1MpdWriter-members.html b/docs/d1/d40/classshaka_1_1MpdWriter-members.html index 3fb4c7770e..a2e67e910a 100644 --- a/docs/d1/d40/classshaka_1_1MpdWriter-members.html +++ b/docs/d1/d40/classshaka_1_1MpdWriter-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d45/classshaka_1_1hls_1_1MediaPlaylistFactory-members.html b/docs/d1/d45/classshaka_1_1hls_1_1MediaPlaylistFactory-members.html index 410df22aa6..d97ec1babd 100644 --- a/docs/d1/d45/classshaka_1_1hls_1_1MediaPlaylistFactory-members.html +++ b/docs/d1/d45/classshaka_1_1hls_1_1MediaPlaylistFactory-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d45/decoding__time__iterator_8cc_source.html b/docs/d1/d45/decoding__time__iterator_8cc_source.html index e58b973864..d54ed3da76 100644 --- a/docs/d1/d45/decoding__time__iterator_8cc_source.html +++ b/docs/d1/d45/decoding__time__iterator_8cc_source.html @@ -168,7 +168,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d48/text__track__config_8h_source.html b/docs/d1/d48/text__track__config_8h_source.html index df55be2a4a..a8ed5c7234 100644 --- a/docs/d1/d48/text__track__config_8h_source.html +++ b/docs/d1/d48/text__track__config_8h_source.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d4f/classshaka_1_1media_1_1OffsetByteQueue-members.html b/docs/d1/d4f/classshaka_1_1media_1_1OffsetByteQueue-members.html index a1cd7ed911..5e299519d0 100644 --- a/docs/d1/d4f/classshaka_1_1media_1_1OffsetByteQueue-members.html +++ b/docs/d1/d4f/classshaka_1_1media_1_1OffsetByteQueue-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d4f/structshaka_1_1DecryptionParams.html b/docs/d1/d4f/structshaka_1_1DecryptionParams.html index 175b3e3ada..691d5f74aa 100644 --- a/docs/d1/d4f/structshaka_1_1DecryptionParams.html +++ b/docs/d1/d4f/structshaka_1_1DecryptionParams.html @@ -106,14 +106,14 @@ Public Attributes WidevineDecryptionParams widevine   - -RawKeyDecryptionParams raw_key -  + +RawKeyParams raw_key

Detailed Description

Decryption parameters.

-

Definition at line 199 of file crypto_params.h.

+

Definition at line 188 of file crypto_params.h.

Member Data Documentation

@@ -126,7 +126,7 @@ Public Attributes

Specifies the key provider, which determines which key provider is used and which encryption params is valid. 'kNone' means not to decrypt the streams.

-

Definition at line 203 of file crypto_params.h.

+

Definition at line 192 of file crypto_params.h.

@@ -136,7 +136,7 @@ Public Attributes diff --git a/docs/d1/d5a/structshaka_1_1media_1_1EncryptionKey-members.html b/docs/d1/d5a/structshaka_1_1media_1_1EncryptionKey-members.html index a9cc805819..f6b99b6ca8 100644 --- a/docs/d1/d5a/structshaka_1_1media_1_1EncryptionKey-members.html +++ b/docs/d1/d5a/structshaka_1_1media_1_1EncryptionKey-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d6e/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader.html b/docs/d1/d6e/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader.html index bf9ef23b1e..bc0a5df13c 100644 --- a/docs/d1/d6e/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader.html +++ b/docs/d1/d6e/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader.html @@ -222,7 +222,7 @@ Additional Inherited Members diff --git a/docs/d1/d70/vp8__parser_8cc_source.html b/docs/d1/d70/vp8__parser_8cc_source.html index 1018d67d17..caede52688 100644 --- a/docs/d1/d70/vp8__parser_8cc_source.html +++ b/docs/d1/d70/vp8__parser_8cc_source.html @@ -289,7 +289,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d72/language__utils_8cc_source.html b/docs/d1/d72/language__utils_8cc_source.html index 25f8a5a260..4918726b2c 100644 --- a/docs/d1/d72/language__utils_8cc_source.html +++ b/docs/d1/d72/language__utils_8cc_source.html @@ -231,7 +231,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d74/mp2t__media__parser_8cc_source.html b/docs/d1/d74/mp2t__media__parser_8cc_source.html index 01e85b3331..0124124bd7 100644 --- a/docs/d1/d74/mp2t__media__parser_8cc_source.html +++ b/docs/d1/d74/mp2t__media__parser_8cc_source.html @@ -535,7 +535,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d79/classshaka_1_1media_1_1H265VideoSliceHeaderParser.html b/docs/d1/d79/classshaka_1_1media_1_1H265VideoSliceHeaderParser.html index 83dc5782c2..9ff42e313d 100644 --- a/docs/d1/d79/classshaka_1_1media_1_1H265VideoSliceHeaderParser.html +++ b/docs/d1/d79/classshaka_1_1media_1_1H265VideoSliceHeaderParser.html @@ -152,7 +152,7 @@ int64_t  diff --git a/docs/d1/d7d/webm__video__client_8cc_source.html b/docs/d1/d7d/webm__video__client_8cc_source.html index 0c21daaaa6..4a33254cb4 100644 --- a/docs/d1/d7d/webm__video__client_8cc_source.html +++ b/docs/d1/d7d/webm__video__client_8cc_source.html @@ -116,225 +116,241 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
27 namespace shaka {
28 namespace media {
29 
-
30 WebMVideoClient::WebMVideoClient() {
-
31  Reset();
-
32 }
+
30 WebMVideoClient::WebMVideoClient() {}
+
31 
+
32 WebMVideoClient::~WebMVideoClient() {}
33 
-
34 WebMVideoClient::~WebMVideoClient() {
-
35 }
-
36 
- -
38  pixel_width_ = -1;
-
39  pixel_height_ = -1;
-
40  crop_bottom_ = -1;
-
41  crop_top_ = -1;
-
42  crop_left_ = -1;
-
43  crop_right_ = -1;
-
44  display_width_ = -1;
-
45  display_height_ = -1;
-
46  display_unit_ = -1;
-
47  alpha_mode_ = -1;
-
48 
-
49  vp_config_ = VPCodecConfigurationRecord();
-
50  chroma_subsampling_horz_ = -1;
-
51  chroma_subsampling_vert_ = -1;
-
52  chroma_siting_horz_ = -1;
-
53  chroma_siting_vert_ = -1;
-
54 }
-
55 
-
56 std::shared_ptr<VideoStreamInfo> WebMVideoClient::GetVideoStreamInfo(
-
57  int64_t track_num,
-
58  const std::string& codec_id,
-
59  bool is_encrypted) {
-
60  Codec video_codec = kUnknownCodec;
-
61  if (codec_id == "V_VP8") {
-
62  video_codec = kCodecVP8;
-
63  } else if (codec_id == "V_VP9") {
-
64  video_codec = kCodecVP9;
-
65  // The codec private data is in WebM format, but needs to be converted to
-
66  // MP4 format. Don't do it yet, it will be handled in
-
67  // webm_cluster_parser.cc
-
68  } else if (codec_id == "V_VP10") {
-
69  video_codec = kCodecVP10;
-
70  } else {
-
71  LOG(ERROR) << "Unsupported video codec_id " << codec_id;
-
72  return std::shared_ptr<VideoStreamInfo>();
-
73  }
-
74 
-
75  if (pixel_width_ <= 0 || pixel_height_ <= 0)
-
76  return std::shared_ptr<VideoStreamInfo>();
-
77 
-
78  // Set crop and display unit defaults if these elements are not present.
-
79  if (crop_bottom_ == -1)
-
80  crop_bottom_ = 0;
-
81 
-
82  if (crop_top_ == -1)
-
83  crop_top_ = 0;
-
84 
-
85  if (crop_left_ == -1)
-
86  crop_left_ = 0;
-
87 
-
88  if (crop_right_ == -1)
-
89  crop_right_ = 0;
-
90 
-
91  if (display_unit_ == -1)
-
92  display_unit_ = 0;
-
93 
-
94  uint16_t width_after_crop = pixel_width_ - (crop_left_ + crop_right_);
-
95  uint16_t height_after_crop = pixel_height_ - (crop_top_ + crop_bottom_);
-
96 
-
97  if (display_unit_ == 0) {
-
98  if (display_width_ <= 0)
-
99  display_width_ = width_after_crop;
-
100  if (display_height_ <= 0)
-
101  display_height_ = height_after_crop;
-
102  } else if (display_unit_ == 3) {
-
103  if (display_width_ <= 0 || display_height_ <= 0)
-
104  return std::shared_ptr<VideoStreamInfo>();
-
105  } else {
-
106  LOG(ERROR) << "Unsupported display unit type " << display_unit_;
-
107  return std::shared_ptr<VideoStreamInfo>();
-
108  }
-
109  // Calculate sample aspect ratio.
-
110  int64_t sar_x = display_width_ * height_after_crop;
-
111  int64_t sar_y = display_height_ * width_after_crop;
-
112  int64_t gcd = GetGreatestCommonDivisor(sar_x, sar_y);
-
113  sar_x /= gcd;
-
114  sar_y /= gcd;
-
115 
-
116  return std::make_shared<VideoStreamInfo>(
-
117  track_num, kWebMTimeScale, 0, video_codec, H26xStreamFormat::kUnSpecified,
-
118  std::string(), nullptr, 0, width_after_crop, height_after_crop, sar_x,
-
119  sar_y, 0, 0, std::string(), is_encrypted);
-
120 }
-
121 
- -
123  const std::vector<uint8_t>& codec_private) {
-
124  vp_config_.ParseWebM(codec_private);
-
125  if (chroma_subsampling_horz_ != -1 && chroma_subsampling_vert_ != -1) {
-
126  vp_config_.SetChromaSubsampling(chroma_subsampling_horz_,
-
127  chroma_subsampling_vert_);
-
128  }
-
129  if (chroma_siting_horz_ != -1 && chroma_siting_vert_ != -1) {
-
130  vp_config_.SetChromaLocation(chroma_siting_horz_, chroma_siting_vert_);
-
131  }
-
132  return vp_config_;
-
133 }
-
134 
-
135 WebMParserClient* WebMVideoClient::OnListStart(int id) {
-
136  return id == kWebMIdColor ? this : WebMParserClient::OnListStart(id);
-
137 }
-
138 
-
139 bool WebMVideoClient::OnListEnd(int id) {
-
140  return id == kWebMIdColor ? true : WebMParserClient::OnListEnd(id);
-
141 }
-
142 
-
143 bool WebMVideoClient::OnUInt(int id, int64_t val) {
-
144  VPCodecConfigurationRecord vp_config;
-
145  int64_t* dst = NULL;
-
146 
-
147  switch (id) {
-
148  case kWebMIdPixelWidth:
-
149  dst = &pixel_width_;
-
150  break;
-
151  case kWebMIdPixelHeight:
-
152  dst = &pixel_height_;
-
153  break;
-
154  case kWebMIdPixelCropTop:
-
155  dst = &crop_top_;
-
156  break;
-
157  case kWebMIdPixelCropBottom:
-
158  dst = &crop_bottom_;
-
159  break;
-
160  case kWebMIdPixelCropLeft:
-
161  dst = &crop_left_;
-
162  break;
-
163  case kWebMIdPixelCropRight:
-
164  dst = &crop_right_;
-
165  break;
-
166  case kWebMIdDisplayWidth:
-
167  dst = &display_width_;
-
168  break;
-
169  case kWebMIdDisplayHeight:
-
170  dst = &display_height_;
-
171  break;
-
172  case kWebMIdDisplayUnit:
-
173  dst = &display_unit_;
-
174  break;
-
175  case kWebMIdAlphaMode:
-
176  dst = &alpha_mode_;
-
177  break;
-
178  case kWebMIdColorMatrixCoefficients:
-
179  vp_config.set_matrix_coefficients(static_cast<uint8_t>(val));
-
180  break;
-
181  case kWebMIdColorBitsPerChannel:
-
182  vp_config.set_bit_depth(static_cast<uint8_t>(val));
-
183  break;
-
184  case kWebMIdColorChromaSubsamplingHorz:
-
185  dst = &chroma_subsampling_horz_;
-
186  break;
-
187  case kWebMIdColorChromaSubsamplingVert:
-
188  dst = &chroma_subsampling_vert_;
-
189  break;
-
190  case kWebMIdColorChromaSitingHorz:
-
191  dst = &chroma_siting_horz_;
-
192  break;
-
193  case kWebMIdColorChromaSitingVert:
-
194  dst = &chroma_siting_vert_;
-
195  break;
-
196  case kWebMIdColorRange:
-
197  if (val == 0)
-
198  vp_config.set_video_full_range_flag(false);
-
199  else if (val == 1)
-
200  vp_config.set_video_full_range_flag(true);
-
201  // Ignore for other values of val.
-
202  break;
-
203  case kWebMIdColorTransferCharacteristics:
-
204  vp_config.set_transfer_characteristics(static_cast<uint8_t>(val));
-
205  break;
-
206  case kWebMIdColorPrimaries:
-
207  vp_config.set_color_primaries(static_cast<uint8_t>(val));
-
208  break;
-
209  case kWebMIdColorMaxCLL:
-
210  case kWebMIdColorMaxFALL:
-
211  NOTIMPLEMENTED() << "HDR is not supported yet.";
-
212  return true;
-
213  default:
-
214  return true;
-
215  }
-
216 
-
217  if (*dst != -1) {
-
218  LOG(ERROR) << "Multiple values for id " << std::hex << id << " specified ("
-
219  << *dst << " and " << val << ")";
-
220  return false;
-
221  }
-
222 
-
223  *dst = val;
-
224  return true;
-
225 }
-
226 
-
227 bool WebMVideoClient::OnBinary(int id, const uint8_t* data, int size) {
-
228  // Accept binary fields we don't care about for now.
-
229  return true;
-
230 }
-
231 
-
232 bool WebMVideoClient::OnFloat(int id, double val) {
-
233  // Accept float fields we don't care about for now.
-
234  return true;
-
235 }
-
236 
-
237 } // namespace media
-
238 } // namespace shaka
-
void Reset()
Reset this object's state so it can process a new video track element.
+ +
35  pixel_width_ = -1;
+
36  pixel_height_ = -1;
+
37  crop_bottom_ = -1;
+
38  crop_top_ = -1;
+
39  crop_left_ = -1;
+
40  crop_right_ = -1;
+
41  display_width_ = -1;
+
42  display_height_ = -1;
+
43  display_unit_ = -1;
+
44  alpha_mode_ = -1;
+
45 
+
46  matrix_coefficients_ = -1;
+
47  bits_per_channel_ = -1;
+
48  chroma_subsampling_horz_ = -1;
+
49  chroma_subsampling_vert_ = -1;
+
50  chroma_siting_horz_ = -1;
+
51  chroma_siting_vert_ = -1;
+
52  color_range_ = -1;
+
53  transfer_characteristics_ = -1;
+
54  color_primaries_ = -1;
+
55 }
+
56 
+
57 std::shared_ptr<VideoStreamInfo> WebMVideoClient::GetVideoStreamInfo(
+
58  int64_t track_num,
+
59  const std::string& codec_id,
+
60  bool is_encrypted) {
+
61  Codec video_codec = kUnknownCodec;
+
62  if (codec_id == "V_VP8") {
+
63  video_codec = kCodecVP8;
+
64  } else if (codec_id == "V_VP9") {
+
65  video_codec = kCodecVP9;
+
66  // The codec private data is in WebM format, but needs to be converted to
+
67  // MP4 format. Don't do it yet, it will be handled in
+
68  // webm_cluster_parser.cc
+
69  } else if (codec_id == "V_VP10") {
+
70  video_codec = kCodecVP10;
+
71  } else {
+
72  LOG(ERROR) << "Unsupported video codec_id " << codec_id;
+
73  return std::shared_ptr<VideoStreamInfo>();
+
74  }
+
75 
+
76  if (pixel_width_ <= 0 || pixel_height_ <= 0)
+
77  return std::shared_ptr<VideoStreamInfo>();
+
78 
+
79  // Set crop and display unit defaults if these elements are not present.
+
80  if (crop_bottom_ == -1)
+
81  crop_bottom_ = 0;
+
82 
+
83  if (crop_top_ == -1)
+
84  crop_top_ = 0;
+
85 
+
86  if (crop_left_ == -1)
+
87  crop_left_ = 0;
+
88 
+
89  if (crop_right_ == -1)
+
90  crop_right_ = 0;
+
91 
+
92  if (display_unit_ == -1)
+
93  display_unit_ = 0;
+
94 
+
95  uint16_t width_after_crop = pixel_width_ - (crop_left_ + crop_right_);
+
96  uint16_t height_after_crop = pixel_height_ - (crop_top_ + crop_bottom_);
+
97 
+
98  if (display_unit_ == 0) {
+
99  if (display_width_ <= 0)
+
100  display_width_ = width_after_crop;
+
101  if (display_height_ <= 0)
+
102  display_height_ = height_after_crop;
+
103  } else if (display_unit_ == 3) {
+
104  if (display_width_ <= 0 || display_height_ <= 0)
+
105  return std::shared_ptr<VideoStreamInfo>();
+
106  } else {
+
107  LOG(ERROR) << "Unsupported display unit type " << display_unit_;
+
108  return std::shared_ptr<VideoStreamInfo>();
+
109  }
+
110  // Calculate sample aspect ratio.
+
111  int64_t sar_x = display_width_ * height_after_crop;
+
112  int64_t sar_y = display_height_ * width_after_crop;
+
113  int64_t gcd = GetGreatestCommonDivisor(sar_x, sar_y);
+
114  sar_x /= gcd;
+
115  sar_y /= gcd;
+
116 
+
117  return std::make_shared<VideoStreamInfo>(
+
118  track_num, kWebMTimeScale, 0, video_codec, H26xStreamFormat::kUnSpecified,
+
119  std::string(), nullptr, 0, width_after_crop, height_after_crop, sar_x,
+
120  sar_y, 0, 0, std::string(), is_encrypted);
+
121 }
+
122 
+ +
124  const std::vector<uint8_t>& codec_private) {
+
125  VPCodecConfigurationRecord vp_config;
+
126  vp_config.ParseWebM(codec_private);
+
127  if (matrix_coefficients_ != -1) {
+
128  vp_config.set_matrix_coefficients(matrix_coefficients_);
+
129  }
+
130  if (bits_per_channel_ != -1) {
+
131  vp_config.set_bit_depth(bits_per_channel_);
+
132  }
+
133  if (chroma_subsampling_horz_ != -1 && chroma_subsampling_vert_ != -1) {
+
134  vp_config.SetChromaSubsampling(chroma_subsampling_horz_,
+
135  chroma_subsampling_vert_);
+
136  }
+
137  if (chroma_siting_horz_ != -1 && chroma_siting_vert_ != -1) {
+
138  vp_config.SetChromaLocation(chroma_siting_horz_, chroma_siting_vert_);
+
139  }
+
140  if (color_range_ != -1) {
+
141  if (color_range_ == 0)
+
142  vp_config.set_video_full_range_flag(false);
+
143  else if (color_range_ == 1)
+
144  vp_config.set_video_full_range_flag(true);
+
145  // Ignore for other values.
+
146  }
+
147  if (transfer_characteristics_ != -1) {
+
148  vp_config.set_transfer_characteristics(transfer_characteristics_);
+
149  }
+
150  if (color_primaries_ != -1) {
+
151  vp_config.set_color_primaries(color_primaries_);
+
152  }
+
153  return vp_config;
+
154 }
+
155 
+
156 WebMParserClient* WebMVideoClient::OnListStart(int id) {
+
157  return id == kWebMIdColor ? this : WebMParserClient::OnListStart(id);
+
158 }
+
159 
+
160 bool WebMVideoClient::OnListEnd(int id) {
+
161  return id == kWebMIdColor ? true : WebMParserClient::OnListEnd(id);
+
162 }
+
163 
+
164 bool WebMVideoClient::OnUInt(int id, int64_t val) {
+
165  int64_t* dst = nullptr;
+
166 
+
167  switch (id) {
+
168  case kWebMIdPixelWidth:
+
169  dst = &pixel_width_;
+
170  break;
+
171  case kWebMIdPixelHeight:
+
172  dst = &pixel_height_;
+
173  break;
+
174  case kWebMIdPixelCropTop:
+
175  dst = &crop_top_;
+
176  break;
+
177  case kWebMIdPixelCropBottom:
+
178  dst = &crop_bottom_;
+
179  break;
+
180  case kWebMIdPixelCropLeft:
+
181  dst = &crop_left_;
+
182  break;
+
183  case kWebMIdPixelCropRight:
+
184  dst = &crop_right_;
+
185  break;
+
186  case kWebMIdDisplayWidth:
+
187  dst = &display_width_;
+
188  break;
+
189  case kWebMIdDisplayHeight:
+
190  dst = &display_height_;
+
191  break;
+
192  case kWebMIdDisplayUnit:
+
193  dst = &display_unit_;
+
194  break;
+
195  case kWebMIdAlphaMode:
+
196  dst = &alpha_mode_;
+
197  break;
+
198  case kWebMIdColorMatrixCoefficients:
+
199  dst = &matrix_coefficients_;
+
200  break;
+
201  case kWebMIdColorBitsPerChannel:
+
202  dst = &bits_per_channel_;
+
203  break;
+
204  case kWebMIdColorChromaSubsamplingHorz:
+
205  dst = &chroma_subsampling_horz_;
+
206  break;
+
207  case kWebMIdColorChromaSubsamplingVert:
+
208  dst = &chroma_subsampling_vert_;
+
209  break;
+
210  case kWebMIdColorChromaSitingHorz:
+
211  dst = &chroma_siting_horz_;
+
212  break;
+
213  case kWebMIdColorChromaSitingVert:
+
214  dst = &chroma_siting_vert_;
+
215  break;
+
216  case kWebMIdColorRange:
+
217  dst = &color_range_;
+
218  break;
+
219  case kWebMIdColorTransferCharacteristics:
+
220  dst = &transfer_characteristics_;
+
221  break;
+
222  case kWebMIdColorPrimaries:
+
223  dst = &color_primaries_;
+
224  break;
+
225  case kWebMIdColorMaxCLL:
+
226  case kWebMIdColorMaxFALL:
+
227  NOTIMPLEMENTED() << "HDR is not supported yet.";
+
228  return true;
+
229  default:
+
230  return true;
+
231  }
+
232 
+
233  if (*dst != -1) {
+
234  LOG(ERROR) << "Multiple values for id " << std::hex << id << " specified ("
+
235  << *dst << " and " << val << ")";
+
236  return false;
+
237  }
+
238 
+
239  *dst = val;
+
240  return true;
+
241 }
+
242 
+
243 bool WebMVideoClient::OnBinary(int id, const uint8_t* data, int size) {
+
244  // Accept binary fields we don't care about for now.
+
245  return true;
+
246 }
+
247 
+
248 bool WebMVideoClient::OnFloat(int id, double val) {
+
249  // Accept float fields we don't care about for now.
+
250  return true;
+
251 }
+
252 
+
253 } // namespace media
+
254 } // namespace shaka
+
VPCodecConfigurationRecord GetVpCodecConfig(const std::vector< uint8_t > &codec_private)
+
void Reset()
Reset this object's state so it can process a new video track element.
Class for parsing or writing VP codec configuration record.
-
std::shared_ptr< VideoStreamInfo > GetVideoStreamInfo(int64_t track_num, const std::string &codec_id, bool is_encrypted)
-
const VPCodecConfigurationRecord & GetVpCodecConfig(const std::vector< uint8_t > &codec_private)
+
std::shared_ptr< VideoStreamInfo > GetVideoStreamInfo(int64_t track_num, const std::string &codec_id, bool is_encrypted)
bool ParseWebM(const std::vector< uint8_t > &data)
diff --git a/docs/d1/d81/structshaka_1_1media_1_1H265ReferencePictureSet-members.html b/docs/d1/d81/structshaka_1_1media_1_1H265ReferencePictureSet-members.html index 59ce1b3d6e..254984d542 100644 --- a/docs/d1/d81/structshaka_1_1media_1_1H265ReferencePictureSet-members.html +++ b/docs/d1/d81/structshaka_1_1media_1_1H265ReferencePictureSet-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d82/adts__constants_8h_source.html b/docs/d1/d82/adts__constants_8h_source.html index a6c5243d70..7e2ba5188d 100644 --- a/docs/d1/d82/adts__constants_8h_source.html +++ b/docs/d1/d82/adts__constants_8h_source.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d82/classshaka_1_1media_1_1WebMParserClient-members.html b/docs/d1/d82/classshaka_1_1media_1_1WebMParserClient-members.html index f968db241e..7b0da1cb7a 100644 --- a/docs/d1/d82/classshaka_1_1media_1_1WebMParserClient-members.html +++ b/docs/d1/d82/classshaka_1_1media_1_1WebMParserClient-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d87/classshaka_1_1hls_1_1MasterPlaylist.html b/docs/d1/d87/classshaka_1_1hls_1_1MasterPlaylist.html index f4a117a105..b084866692 100644 --- a/docs/d1/d87/classshaka_1_1hls_1_1MasterPlaylist.html +++ b/docs/d1/d87/classshaka_1_1hls_1_1MasterPlaylist.html @@ -228,7 +228,7 @@ Public Member Functions diff --git a/docs/d1/d8e/webm__audio__client_8cc_source.html b/docs/d1/d8e/webm__audio__client_8cc_source.html index 4b3c12714b..7a819c4b7d 100644 --- a/docs/d1/d8e/webm__audio__client_8cc_source.html +++ b/docs/d1/d8e/webm__audio__client_8cc_source.html @@ -213,7 +213,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d8f/retired__flags_8h_source.html b/docs/d1/d8f/retired__flags_8h_source.html index 867e4593fa..9c407c8553 100644 --- a/docs/d1/d8f/retired__flags_8h_source.html +++ b/docs/d1/d8f/retired__flags_8h_source.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d91/classshaka_1_1media_1_1H26xBitReader-members.html b/docs/d1/d91/classshaka_1_1media_1_1H26xBitReader-members.html index d6b7c52a5f..62738b8301 100644 --- a/docs/d1/d91/classshaka_1_1media_1_1H26xBitReader-members.html +++ b/docs/d1/d91/classshaka_1_1media_1_1H26xBitReader-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d95/structshaka_1_1WidevineEncryptionParams-members.html b/docs/d1/d95/structshaka_1_1WidevineEncryptionParams-members.html index c921fde624..b11b92b480 100644 --- a/docs/d1/d95/structshaka_1_1WidevineEncryptionParams-members.html +++ b/docs/d1/d95/structshaka_1_1WidevineEncryptionParams-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d9d/classshaka_1_1media_1_1ByteQueue-members.html b/docs/d1/d9d/classshaka_1_1media_1_1ByteQueue-members.html index 1a33a04651..210238af12 100644 --- a/docs/d1/d9d/classshaka_1_1media_1_1ByteQueue-members.html +++ b/docs/d1/d9d/classshaka_1_1media_1_1ByteQueue-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d9d/tracks__builder_8h_source.html b/docs/d1/d9d/tracks__builder_8h_source.html index d38da1ff7c..d17cf92655 100644 --- a/docs/d1/d9d/tracks__builder_8h_source.html +++ b/docs/d1/d9d/tracks__builder_8h_source.html @@ -210,7 +210,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d9e/structshaka_1_1media_1_1mp4_1_1CodecConfiguration-members.html b/docs/d1/d9e/structshaka_1_1media_1_1mp4_1_1CodecConfiguration-members.html index 01db35f002..3680629448 100644 --- a/docs/d1/d9e/structshaka_1_1media_1_1mp4_1_1CodecConfiguration-members.html +++ b/docs/d1/d9e/structshaka_1_1media_1_1mp4_1_1CodecConfiguration-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/da1/classshaka_1_1media_1_1mp4_1_1BoxBuffer.html b/docs/d1/da1/classshaka_1_1media_1_1mp4_1_1BoxBuffer.html index f79be1cfd2..85df4db5ad 100644 --- a/docs/d1/da1/classshaka_1_1media_1_1mp4_1_1BoxBuffer.html +++ b/docs/d1/da1/classshaka_1_1media_1_1mp4_1_1BoxBuffer.html @@ -589,7 +589,7 @@ bool ReadWriteInt64 (i diff --git a/docs/d1/da1/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html b/docs/d1/da1/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html index 15abb6406e..62a38f9109 100644 --- a/docs/d1/da1/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html +++ b/docs/d1/da1/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html @@ -116,7 +116,7 @@ std::shared_ptr< diff --git a/docs/d1/da2/classshaka_1_1media_1_1NalUnitToByteStreamConverter-members.html b/docs/d1/da2/classshaka_1_1media_1_1NalUnitToByteStreamConverter-members.html index 18db7122fa..b3bbf172cf 100644 --- a/docs/d1/da2/classshaka_1_1media_1_1NalUnitToByteStreamConverter-members.html +++ b/docs/d1/da2/classshaka_1_1media_1_1NalUnitToByteStreamConverter-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/da5/classshaka_1_1media_1_1VPCodecConfigurationRecord.html b/docs/d1/da5/classshaka_1_1media_1_1VPCodecConfigurationRecord.html index 37578ac909..ed1f8064c4 100644 --- a/docs/d1/da5/classshaka_1_1media_1_1VPCodecConfigurationRecord.html +++ b/docs/d1/da5/classshaka_1_1media_1_1VPCodecConfigurationRecord.html @@ -359,7 +359,7 @@ uint8_t chroma_location diff --git a/docs/d1/dad/classshaka_1_1media_1_1Demuxer-members.html b/docs/d1/dad/classshaka_1_1media_1_1Demuxer-members.html index 9c426caf63..068b9c349c 100644 --- a/docs/d1/dad/classshaka_1_1media_1_1Demuxer-members.html +++ b/docs/d1/dad/classshaka_1_1media_1_1Demuxer-members.html @@ -129,7 +129,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/db0/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader.html b/docs/d1/db0/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader.html index fbd371b6c9..4cf6aac8b0 100644 --- a/docs/d1/db0/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader.html +++ b/docs/d1/db0/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader.html @@ -191,7 +191,7 @@ Additional Inherited Members diff --git a/docs/d1/db2/decoder__configuration__record_8h_source.html b/docs/d1/db2/decoder__configuration__record_8h_source.html index 42e5de7584..eb4e1a5a29 100644 --- a/docs/d1/db2/decoder__configuration__record_8h_source.html +++ b/docs/d1/db2/decoder__configuration__record_8h_source.html @@ -166,7 +166,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/dbe/classshaka_1_1media_1_1PlayReadyKeySource-members.html b/docs/d1/dbe/classshaka_1_1media_1_1PlayReadyKeySource-members.html index 2d5f8e64df..51662b21f9 100644 --- a/docs/d1/dbe/classshaka_1_1media_1_1PlayReadyKeySource-members.html +++ b/docs/d1/dbe/classshaka_1_1media_1_1PlayReadyKeySource-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/dc2/h26x__bit__reader_8h_source.html b/docs/d1/dc2/h26x__bit__reader_8h_source.html index 2a89b75976..bbcf3fe101 100644 --- a/docs/d1/dc2/h26x__bit__reader_8h_source.html +++ b/docs/d1/dc2/h26x__bit__reader_8h_source.html @@ -192,7 +192,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/dd5/classshaka_1_1media_1_1Cluster.html b/docs/d1/dd5/classshaka_1_1media_1_1Cluster.html index 1852a1914d..61cb41a1fa 100644 --- a/docs/d1/dd5/classshaka_1_1media_1_1Cluster.html +++ b/docs/d1/dd5/classshaka_1_1media_1_1Cluster.html @@ -116,7 +116,7 @@ int size () const diff --git a/docs/d1/dd6/structshaka_1_1media_1_1mp4_1_1DataInformation-members.html b/docs/d1/dd6/structshaka_1_1media_1_1mp4_1_1DataInformation-members.html index a6934b622b..10a28f1416 100644 --- a/docs/d1/dd6/structshaka_1_1media_1_1mp4_1_1DataInformation-members.html +++ b/docs/d1/dd6/structshaka_1_1media_1_1mp4_1_1DataInformation-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/dd8/structshaka_1_1PackagingParams-members.html b/docs/d1/dd8/structshaka_1_1PackagingParams-members.html index ce37b3149b..2c657e3251 100644 --- a/docs/d1/dd8/structshaka_1_1PackagingParams-members.html +++ b/docs/d1/dd8/structshaka_1_1PackagingParams-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/dda/structshaka_1_1media_1_1EncryptionConfig-members.html b/docs/d1/dda/structshaka_1_1media_1_1EncryptionConfig-members.html index bbf4e6fa31..0798fd1378 100644 --- a/docs/d1/dda/structshaka_1_1media_1_1EncryptionConfig-members.html +++ b/docs/d1/dda/structshaka_1_1media_1_1EncryptionConfig-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/de2/classshaka_1_1media_1_1VideoStreamInfo-members.html b/docs/d1/de2/classshaka_1_1media_1_1VideoStreamInfo-members.html index 788bd934f0..b9bcca66ca 100644 --- a/docs/d1/de2/classshaka_1_1media_1_1VideoStreamInfo-members.html +++ b/docs/d1/de2/classshaka_1_1media_1_1VideoStreamInfo-members.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/de2/composition__offset__iterator_8cc_source.html b/docs/d1/de2/composition__offset__iterator_8cc_source.html index bc5fbcb5e0..bf96a9cb36 100644 --- a/docs/d1/de2/composition__offset__iterator_8cc_source.html +++ b/docs/d1/de2/composition__offset__iterator_8cc_source.html @@ -159,7 +159,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/de4/classshaka_1_1media_1_1KeyFetcher-members.html b/docs/d1/de4/classshaka_1_1media_1_1KeyFetcher-members.html index 5cc3b4dd20..e22b1c61e0 100644 --- a/docs/d1/de4/classshaka_1_1media_1_1KeyFetcher-members.html +++ b/docs/d1/de4/classshaka_1_1media_1_1KeyFetcher-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/de7/classshaka_1_1xml_1_1AdaptationSetXmlNode.html b/docs/d1/de7/classshaka_1_1xml_1_1AdaptationSetXmlNode.html index d5cf20bc91..0284cc13e6 100644 --- a/docs/d1/de7/classshaka_1_1xml_1_1AdaptationSetXmlNode.html +++ b/docs/d1/de7/classshaka_1_1xml_1_1AdaptationSetXmlNode.html @@ -201,7 +201,7 @@ Additional Inherited Members diff --git a/docs/d1/de7/structshaka_1_1media_1_1H265ReferencePictureListModifications-members.html b/docs/d1/de7/structshaka_1_1media_1_1H265ReferencePictureListModifications-members.html index b672edc4a9..e6f3eb4d43 100644 --- a/docs/d1/de7/structshaka_1_1media_1_1H265ReferencePictureListModifications-members.html +++ b/docs/d1/de7/structshaka_1_1media_1_1H265ReferencePictureListModifications-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/de9/classshaka_1_1media_1_1ProgressListener-members.html b/docs/d1/de9/classshaka_1_1media_1_1ProgressListener-members.html index b0112677d0..b81ee0481f 100644 --- a/docs/d1/de9/classshaka_1_1media_1_1ProgressListener-members.html +++ b/docs/d1/de9/classshaka_1_1media_1_1ProgressListener-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/dee/classshaka_1_1media_1_1mp4_1_1BoxReader.html b/docs/d1/dee/classshaka_1_1media_1_1mp4_1_1BoxReader.html index bb4b189eed..d2684bc30a 100644 --- a/docs/d1/dee/classshaka_1_1media_1_1mp4_1_1BoxReader.html +++ b/docs/d1/dee/classshaka_1_1media_1_1mp4_1_1BoxReader.html @@ -468,7 +468,7 @@ template<typename T > diff --git a/docs/d1/dee/structshaka_1_1media_1_1mp4_1_1SampleTable.html b/docs/d1/dee/structshaka_1_1media_1_1mp4_1_1SampleTable.html index bd161dd057..fddf21dd8c 100644 --- a/docs/d1/dee/structshaka_1_1media_1_1mp4_1_1SampleTable.html +++ b/docs/d1/dee/structshaka_1_1media_1_1mp4_1_1SampleTable.html @@ -198,7 +198,7 @@ Additional Inherited Members diff --git a/docs/d1/df0/aes__encryptor_8h_source.html b/docs/d1/df0/aes__encryptor_8h_source.html index 5c91a3c7ef..b9cd1166c6 100644 --- a/docs/d1/df0/aes__encryptor_8h_source.html +++ b/docs/d1/df0/aes__encryptor_8h_source.html @@ -194,7 +194,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/df3/structshaka_1_1MpdOptions.html b/docs/d1/df3/structshaka_1_1MpdOptions.html index 41e483fa1d..74ba93799d 100644 --- a/docs/d1/df3/structshaka_1_1MpdOptions.html +++ b/docs/d1/df3/structshaka_1_1MpdOptions.html @@ -121,7 +121,7 @@ MpdType mpd_type = Mpd diff --git a/docs/d1/df5/nalu__reader_8cc_source.html b/docs/d1/df5/nalu__reader_8cc_source.html index ad409d383f..65278733c6 100644 --- a/docs/d1/df5/nalu__reader_8cc_source.html +++ b/docs/d1/df5/nalu__reader_8cc_source.html @@ -574,7 +574,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/df9/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader-members.html b/docs/d1/df9/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader-members.html index 07e0fdb0f1..7b2f1f8b83 100644 --- a/docs/d1/df9/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader-members.html +++ b/docs/d1/df9/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d02/timestamp_8h_source.html b/docs/d2/d02/timestamp_8h_source.html index 0fcc00b159..201b4d2375 100644 --- a/docs/d2/d02/timestamp_8h_source.html +++ b/docs/d2/d02/timestamp_8h_source.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d0b/classshaka_1_1media_1_1SeekHead-members.html b/docs/d2/d0b/classshaka_1_1media_1_1SeekHead-members.html index 9946d8a657..d5fab61242 100644 --- a/docs/d2/d0b/classshaka_1_1media_1_1SeekHead-members.html +++ b/docs/d2/d0b/classshaka_1_1media_1_1SeekHead-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d0f/classshaka_1_1MpdBuilder-members.html b/docs/d2/d0f/classshaka_1_1MpdBuilder-members.html index e3d92336d1..91c760cfb9 100644 --- a/docs/d2/d0f/classshaka_1_1MpdBuilder-members.html +++ b/docs/d2/d0f/classshaka_1_1MpdBuilder-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d0f/structshaka_1_1media_1_1wvm_1_1PrevSampleData.html b/docs/d2/d0f/structshaka_1_1media_1_1wvm_1_1PrevSampleData.html index 0386984db9..f420d977d4 100644 --- a/docs/d2/d0f/structshaka_1_1media_1_1wvm_1_1PrevSampleData.html +++ b/docs/d2/d0f/structshaka_1_1media_1_1wvm_1_1PrevSampleData.html @@ -132,7 +132,7 @@ int64_t video_sample_durat diff --git a/docs/d2/d11/classshaka_1_1media_1_1MuxerListener-members.html b/docs/d2/d11/classshaka_1_1media_1_1MuxerListener-members.html index 000df39381..168b16f04a 100644 --- a/docs/d2/d11/classshaka_1_1media_1_1MuxerListener-members.html +++ b/docs/d2/d11/classshaka_1_1media_1_1MuxerListener-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d17/ts__section__pat_8cc_source.html b/docs/d2/d17/ts__section__pat_8cc_source.html index 9859cbb201..af27f66a18 100644 --- a/docs/d2/d17/ts__section__pat_8cc_source.html +++ b/docs/d2/d17/ts__section__pat_8cc_source.html @@ -214,7 +214,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d1f/structshaka_1_1ChunkingParams.html b/docs/d2/d1f/structshaka_1_1ChunkingParams.html index 57ab3676ef..dde08cd4fc 100644 --- a/docs/d2/d1f/structshaka_1_1ChunkingParams.html +++ b/docs/d2/d1f/structshaka_1_1ChunkingParams.html @@ -168,7 +168,7 @@ double  diff --git a/docs/d2/d20/classshaka_1_1Status.html b/docs/d2/d20/classshaka_1_1Status.html index 964a29877f..1d48437867 100644 --- a/docs/d2/d20/classshaka_1_1Status.html +++ b/docs/d2/d20/classshaka_1_1Status.html @@ -302,7 +302,7 @@ static const Status< diff --git a/docs/d2/d23/threaded__io__file_8cc_source.html b/docs/d2/d23/threaded__io__file_8cc_source.html index 449d9c119d..c46b70892f 100644 --- a/docs/d2/d23/threaded__io__file_8cc_source.html +++ b/docs/d2/d23/threaded__io__file_8cc_source.html @@ -326,7 +326,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d24/packager__util_8h_source.html b/docs/d2/d24/packager__util_8h_source.html index b2c108102a..ca5ca65e2a 100644 --- a/docs/d2/d24/packager__util_8h_source.html +++ b/docs/d2/d24/packager__util_8h_source.html @@ -125,16 +125,14 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
46 
48 MpdOptions GetMpdOptions(bool on_demand_profile, const MpdParams& mpd_params);
49 
-
54 Status ConnectHandlers(std::vector<std::shared_ptr<MediaHandler>>& handlers);
-
55 
-
56 } // namespace media
-
57 } // namespace shaka
-
58 
-
59 #endif // PACKAGER_APP_PACKAGER_UTIL_H_
+
50 } // namespace media
+
51 } // namespace shaka
+
52 
+
53 #endif // PACKAGER_APP_PACKAGER_UTIL_H_
diff --git a/docs/d2/d2a/classshaka_1_1IoCache-members.html b/docs/d2/d2a/classshaka_1_1IoCache-members.html index 85b07b32c2..5be3792a6d 100644 --- a/docs/d2/d2a/classshaka_1_1IoCache-members.html +++ b/docs/d2/d2a/classshaka_1_1IoCache-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d30/tracks__builder_8cc_source.html b/docs/d2/d30/tracks__builder_8cc_source.html index 9f8f56fc90..60599d7510 100644 --- a/docs/d2/d30/tracks__builder_8cc_source.html +++ b/docs/d2/d30/tracks__builder_8cc_source.html @@ -486,7 +486,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d33/video__slice__header__parser_8h_source.html b/docs/d2/d33/video__slice__header__parser_8h_source.html index 49365c809b..6db4254841 100644 --- a/docs/d2/d33/video__slice__header__parser_8h_source.html +++ b/docs/d2/d33/video__slice__header__parser_8h_source.html @@ -167,7 +167,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d35/classshaka_1_1media_1_1WidevineKeySource-members.html b/docs/d2/d35/classshaka_1_1media_1_1WidevineKeySource-members.html index be062bbe87..00ff59d3f4 100644 --- a/docs/d2/d35/classshaka_1_1media_1_1WidevineKeySource-members.html +++ b/docs/d2/d35/classshaka_1_1media_1_1WidevineKeySource-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d3c/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html b/docs/d2/d3c/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html index e49d1c1628..ffc24ce1af 100644 --- a/docs/d2/d3c/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html +++ b/docs/d2/d3c/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html @@ -133,7 +133,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d45/program__map__table__writer_8cc_source.html b/docs/d2/d45/program__map__table__writer_8cc_source.html index 7d186f05b5..f68af66853 100644 --- a/docs/d2/d45/program__map__table__writer_8cc_source.html +++ b/docs/d2/d45/program__map__table__writer_8cc_source.html @@ -495,7 +495,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d4c/nal__unit__to__byte__stream__converter_8cc_source.html b/docs/d2/d4c/nal__unit__to__byte__stream__converter_8cc_source.html index aff44c8ce4..85578f9a07 100644 --- a/docs/d2/d4c/nal__unit__to__byte__stream__converter_8cc_source.html +++ b/docs/d2/d4c/nal__unit__to__byte__stream__converter_8cc_source.html @@ -486,7 +486,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d4d/file_8h_source.html b/docs/d2/d4d/file_8h_source.html index ba85dd3e64..ef5bb1bea5 100644 --- a/docs/d2/d4d/file_8h_source.html +++ b/docs/d2/d4d/file_8h_source.html @@ -214,7 +214,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d4f/structshaka_1_1Element-members.html b/docs/d2/d4f/structshaka_1_1Element-members.html index ed5db4a9f6..9de7ddf5ef 100644 --- a/docs/d2/d4f/structshaka_1_1Element-members.html +++ b/docs/d2/d4f/structshaka_1_1Element-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d51/classshaka_1_1MockMpdNotifier-members.html b/docs/d2/d51/classshaka_1_1MockMpdNotifier-members.html index 0f4e78f69a..75d8842618 100644 --- a/docs/d2/d51/classshaka_1_1MockMpdNotifier-members.html +++ b/docs/d2/d51/classshaka_1_1MockMpdNotifier-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d57/master__playlist_8h_source.html b/docs/d2/d57/master__playlist_8h_source.html index b8bd3fd47b..09272e7a6b 100644 --- a/docs/d2/d57/master__playlist_8h_source.html +++ b/docs/d2/d57/master__playlist_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d59/structshaka_1_1media_1_1H264SliceHeader.html b/docs/d2/d59/structshaka_1_1media_1_1H264SliceHeader.html index 5132e96c04..4298097a9c 100644 --- a/docs/d2/d59/structshaka_1_1media_1_1H264SliceHeader.html +++ b/docs/d2/d59/structshaka_1_1media_1_1H264SliceHeader.html @@ -264,7 +264,7 @@ int slice_beta_offset_div2 diff --git a/docs/d2/d5b/classshaka_1_1media_1_1KeySource-members.html b/docs/d2/d5b/classshaka_1_1media_1_1KeySource-members.html index d493fe8a89..152bd4ffa9 100644 --- a/docs/d2/d5b/classshaka_1_1media_1_1KeySource-members.html +++ b/docs/d2/d5b/classshaka_1_1media_1_1KeySource-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d5c/classshaka_1_1SimpleMpdNotifier-members.html b/docs/d2/d5c/classshaka_1_1SimpleMpdNotifier-members.html index 7eb82226e7..44a106a1e3 100644 --- a/docs/d2/d5c/classshaka_1_1SimpleMpdNotifier-members.html +++ b/docs/d2/d5c/classshaka_1_1SimpleMpdNotifier-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d61/structshaka_1_1media_1_1H264ModificationOfPicNum-members.html b/docs/d2/d61/structshaka_1_1media_1_1H264ModificationOfPicNum-members.html index 3b33b10156..641599d238 100644 --- a/docs/d2/d61/structshaka_1_1media_1_1H264ModificationOfPicNum-members.html +++ b/docs/d2/d61/structshaka_1_1media_1_1H264ModificationOfPicNum-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d62/simple__mpd__notifier_8h_source.html b/docs/d2/d62/simple__mpd__notifier_8h_source.html index 3611213a6c..facda662ef 100644 --- a/docs/d2/d62/simple__mpd__notifier_8h_source.html +++ b/docs/d2/d62/simple__mpd__notifier_8h_source.html @@ -182,7 +182,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d62/structshaka_1_1media_1_1mp4_1_1Movie-members.html b/docs/d2/d62/structshaka_1_1media_1_1mp4_1_1Movie-members.html index 0a7ec42363..c09c2a4eac 100644 --- a/docs/d2/d62/structshaka_1_1media_1_1mp4_1_1Movie-members.html +++ b/docs/d2/d62/structshaka_1_1media_1_1mp4_1_1Movie-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d6a/classshaka_1_1media_1_1AesCryptor-members.html b/docs/d2/d6a/classshaka_1_1media_1_1AesCryptor-members.html index cc3ec2c7bf..c2fa6b6f0b 100644 --- a/docs/d2/d6a/classshaka_1_1media_1_1AesCryptor-members.html +++ b/docs/d2/d6a/classshaka_1_1media_1_1AesCryptor-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d6f/classBandwidthEstimator.html b/docs/d2/d6f/classBandwidthEstimator.html index 336a1b1230..b23b7559f3 100644 --- a/docs/d2/d6f/classBandwidthEstimator.html +++ b/docs/d2/d6f/classBandwidthEstimator.html @@ -151,7 +151,7 @@ static const int kUseAllBl diff --git a/docs/d2/d70/structshaka_1_1media_1_1mp4_1_1SchemeInfo.html b/docs/d2/d70/structshaka_1_1media_1_1mp4_1_1SchemeInfo.html index e6d668ce26..db0eee21d1 100644 --- a/docs/d2/d70/structshaka_1_1media_1_1mp4_1_1SchemeInfo.html +++ b/docs/d2/d70/structshaka_1_1media_1_1mp4_1_1SchemeInfo.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d2/d71/classshaka_1_1media_1_1CombinedMuxerListener-members.html b/docs/d2/d71/classshaka_1_1media_1_1CombinedMuxerListener-members.html index 9b8d2234b1..0e832df3d3 100644 --- a/docs/d2/d71/classshaka_1_1media_1_1CombinedMuxerListener-members.html +++ b/docs/d2/d71/classshaka_1_1media_1_1CombinedMuxerListener-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d7b/classshaka_1_1DashIopMpdNotifier-members.html b/docs/d2/d7b/classshaka_1_1DashIopMpdNotifier-members.html index 8c2327ca5a..59f6dc2e06 100644 --- a/docs/d2/d7b/classshaka_1_1DashIopMpdNotifier-members.html +++ b/docs/d2/d7b/classshaka_1_1DashIopMpdNotifier-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d7b/simple__mpd__notifier_8cc_source.html b/docs/d2/d7b/simple__mpd__notifier_8cc_source.html index 1d541e14e0..776f337044 100644 --- a/docs/d2/d7b/simple__mpd__notifier_8cc_source.html +++ b/docs/d2/d7b/simple__mpd__notifier_8cc_source.html @@ -233,7 +233,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d7b/structshaka_1_1StreamDescriptor.html b/docs/d2/d7b/structshaka_1_1StreamDescriptor.html index dd48d76c56..ba9e3e8a9c 100644 --- a/docs/d2/d7b/structshaka_1_1StreamDescriptor.html +++ b/docs/d2/d7b/structshaka_1_1StreamDescriptor.html @@ -117,6 +117,8 @@ std::string   bool skip_encryption = false   +std::string drm_label +  uint32_t trick_play_factor = 0   uint32_t bandwidth = 0 @@ -133,7 +135,7 @@ std::string 

Detailed Description

Defines a single input/output stream.

-

Definition at line 67 of file packager.h.

+

Definition at line 65 of file packager.h.

Member Data Documentation

+ +
+
+ + + + +
std::string shaka::StreamDescriptor::drm_label
+
+

Specifies a custom DRM stream label, which can be a DRM label defined by the DRM system. Typically values include AUDIO, SD, HD, UHD1, UHD2. If not provided, the DRM stream label is derived from stream type (video, audio), resolutions etc.

+ +

Definition at line 89 of file packager.h.

@@ -161,7 +178,7 @@ std::string  @@ -176,7 +193,7 @@ std::string  @@ -191,7 +208,7 @@ std::string  @@ -206,7 +223,7 @@ std::string  @@ -221,7 +238,7 @@ std::string  @@ -236,7 +253,7 @@ std::string  @@ -251,7 +268,7 @@ std::string  @@ -266,7 +283,7 @@ std::string  @@ -281,7 +298,7 @@ std::string  @@ -291,7 +308,7 @@ std::string  diff --git a/docs/d2/d7e/aac__audio__specific__config_8h_source.html b/docs/d2/d7e/aac__audio__specific__config_8h_source.html index fff6fcddde..d5082aafbc 100644 --- a/docs/d2/d7e/aac__audio__specific__config_8h_source.html +++ b/docs/d2/d7e/aac__audio__specific__config_8h_source.html @@ -215,7 +215,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d7f/structshaka_1_1media_1_1mp4_1_1CuePayloadBox.html b/docs/d2/d7f/structshaka_1_1media_1_1mp4_1_1CuePayloadBox.html index 8f7ec5648c..a551f358f6 100644 --- a/docs/d2/d7f/structshaka_1_1media_1_1mp4_1_1CuePayloadBox.html +++ b/docs/d2/d7f/structshaka_1_1media_1_1mp4_1_1CuePayloadBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d2/d82/structshaka_1_1BufferCallbackParams-members.html b/docs/d2/d82/structshaka_1_1BufferCallbackParams-members.html index 951220dbc9..b1a16134a7 100644 --- a/docs/d2/d82/structshaka_1_1BufferCallbackParams-members.html +++ b/docs/d2/d82/structshaka_1_1BufferCallbackParams-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d8a/hls__notify__muxer__listener_8h_source.html b/docs/d2/d8a/hls__notify__muxer__listener_8h_source.html index fd68003503..5a687af788 100644 --- a/docs/d2/d8a/hls__notify__muxer__listener_8h_source.html +++ b/docs/d2/d8a/hls__notify__muxer__listener_8h_source.html @@ -180,7 +180,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d91/structshaka_1_1media_1_1mp4_1_1CuePayloadBox-members.html b/docs/d2/d91/structshaka_1_1media_1_1mp4_1_1CuePayloadBox-members.html index 9b8a69a055..579a6c2b38 100644 --- a/docs/d2/d91/structshaka_1_1media_1_1mp4_1_1CuePayloadBox-members.html +++ b/docs/d2/d91/structshaka_1_1media_1_1mp4_1_1CuePayloadBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d92/box__reader_8h_source.html b/docs/d2/d92/box__reader_8h_source.html index 0ca2ddcf64..194a4be960 100644 --- a/docs/d2/d92/box__reader_8h_source.html +++ b/docs/d2/d92/box__reader_8h_source.html @@ -246,7 +246,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d93/classshaka_1_1media_1_1mp2t_1_1PesPacket.html b/docs/d2/d93/classshaka_1_1media_1_1mp2t_1_1PesPacket.html index 794ffa4771..42f0c2721a 100644 --- a/docs/d2/d93/classshaka_1_1media_1_1mp2t_1_1PesPacket.html +++ b/docs/d2/d93/classshaka_1_1media_1_1mp2t_1_1PesPacket.html @@ -387,7 +387,7 @@ const std::vector< uint8_t > &  diff --git a/docs/d2/d9d/structshaka_1_1FileCloser-members.html b/docs/d2/d9d/structshaka_1_1FileCloser-members.html index f2014addca..377a6f0509 100644 --- a/docs/d2/d9d/structshaka_1_1FileCloser-members.html +++ b/docs/d2/d9d/structshaka_1_1FileCloser-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/da0/classshaka_1_1media_1_1TrickPlayHandler-members.html b/docs/d2/da0/classshaka_1_1media_1_1TrickPlayHandler-members.html index f00be56317..342f7170d3 100644 --- a/docs/d2/da0/classshaka_1_1media_1_1TrickPlayHandler-members.html +++ b/docs/d2/da0/classshaka_1_1media_1_1TrickPlayHandler-members.html @@ -105,26 +105,19 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); FlushDownstream(size_t output_stream_index)shaka::media::MediaHandlerprotected Initialize()shaka::media::MediaHandler initialized() (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected - InitializeInternal() overrideshaka::media::TrickPlayHandlerprotectedvirtual - IsConnected()shaka::media::MediaHandlerinline - MediaHandler()=default (defined in shaka::media::MediaHandler)shaka::media::MediaHandler - next_output_stream_index() const (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected - num_input_streams() const (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected - OnFlushRequest(size_t input_stream_index) overrideshaka::media::TrickPlayHandlerprotectedvirtual + IsConnected()shaka::media::MediaHandlerinline + MediaHandler()=default (defined in shaka::media::MediaHandler)shaka::media::MediaHandler + next_output_stream_index() const (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected + num_input_streams() const (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected output_handlers() (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected - Process(std::unique_ptr< StreamData > stream_data) overrideshaka::media::TrickPlayHandlerprotectedvirtual - SetHandler(size_t output_stream_index, std::shared_ptr< MediaHandler > handler)shaka::media::MediaHandler - SetHandlerForMainStream(std::shared_ptr< MediaHandler > handler) (defined in shaka::media::TrickPlayHandler)shaka::media::TrickPlayHandler - SetHandlerForTrickPlay(uint32_t trick_play_factor, std::shared_ptr< MediaHandler > handler) (defined in shaka::media::TrickPlayHandler)shaka::media::TrickPlayHandler - TrickPlayHandler() (defined in shaka::media::TrickPlayHandler)shaka::media::TrickPlayHandler - TrickPlayHandlerTest (defined in shaka::media::TrickPlayHandler)shaka::media::TrickPlayHandlerfriend - ValidateOutputStreamIndex(size_t stream_index) const overrideshaka::media::TrickPlayHandlerprotectedvirtual + SetHandler(size_t output_stream_index, std::shared_ptr< MediaHandler > handler)shaka::media::MediaHandler + TrickPlayHandler(uint32_t factor) (defined in shaka::media::TrickPlayHandler)shaka::media::TrickPlayHandlerexplicit + ValidateOutputStreamIndex(size_t stream_index) const shaka::media::MediaHandlerprotectedvirtual ~MediaHandler()=default (defined in shaka::media::MediaHandler)shaka::media::MediaHandlervirtual - ~TrickPlayHandler() override (defined in shaka::media::TrickPlayHandler)shaka::media::TrickPlayHandler diff --git a/docs/d2/da6/threaded__io__file_8h_source.html b/docs/d2/da6/threaded__io__file_8h_source.html index c9d97b1016..43000ac27a 100644 --- a/docs/d2/da6/threaded__io__file_8h_source.html +++ b/docs/d2/da6/threaded__io__file_8h_source.html @@ -167,7 +167,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/da8/mp4_2segmenter_8cc_source.html b/docs/d2/da8/mp4_2segmenter_8cc_source.html index 5dd6647082..35b8506975 100644 --- a/docs/d2/da8/mp4_2segmenter_8cc_source.html +++ b/docs/d2/da8/mp4_2segmenter_8cc_source.html @@ -408,7 +408,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/da9/classshaka_1_1media_1_1BufferWriter-members.html b/docs/d2/da9/classshaka_1_1media_1_1BufferWriter-members.html index 48dee6bb12..706b6768b3 100644 --- a/docs/d2/da9/classshaka_1_1media_1_1BufferWriter-members.html +++ b/docs/d2/da9/classshaka_1_1media_1_1BufferWriter-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dae/classshaka_1_1MockAdaptationSet-members.html b/docs/d2/dae/classshaka_1_1MockAdaptationSet-members.html index e384cede0d..3823b8d6c4 100644 --- a/docs/d2/dae/classshaka_1_1MockAdaptationSet-members.html +++ b/docs/d2/dae/classshaka_1_1MockAdaptationSet-members.html @@ -126,7 +126,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dae/webm__muxer_8cc_source.html b/docs/d2/dae/webm__muxer_8cc_source.html index 364968e364..8caffa0a2c 100644 --- a/docs/d2/dae/webm__muxer_8cc_source.html +++ b/docs/d2/dae/webm__muxer_8cc_source.html @@ -226,7 +226,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/db1/master__playlist_8cc_source.html b/docs/d2/db1/master__playlist_8cc_source.html index a3df9d8930..885db8cdfd 100644 --- a/docs/d2/db1/master__playlist_8cc_source.html +++ b/docs/d2/db1/master__playlist_8cc_source.html @@ -268,7 +268,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/db1/structshaka_1_1media_1_1mp4_1_1SampleToGroup-members.html b/docs/d2/db1/structshaka_1_1media_1_1mp4_1_1SampleToGroup-members.html index 0500c0ce3e..55a1bfe162 100644 --- a/docs/d2/db1/structshaka_1_1media_1_1mp4_1_1SampleToGroup-members.html +++ b/docs/d2/db1/structshaka_1_1media_1_1mp4_1_1SampleToGroup-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/db6/structshaka_1_1media_1_1mp4_1_1FileType-members.html b/docs/d2/db6/structshaka_1_1media_1_1mp4_1_1FileType-members.html index c994d4a8f4..49e9fdb92c 100644 --- a/docs/d2/db6/structshaka_1_1media_1_1mp4_1_1FileType-members.html +++ b/docs/d2/db6/structshaka_1_1media_1_1mp4_1_1FileType-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/db8/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox-members.html b/docs/d2/db8/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox-members.html index 75a84da189..48a1ba7b61 100644 --- a/docs/d2/db8/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox-members.html +++ b/docs/d2/db8/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dba/classshaka_1_1media_1_1SegmentTestBase.html b/docs/d2/dba/classshaka_1_1media_1_1SegmentTestBase.html index 1346beb422..31a31db687 100644 --- a/docs/d2/dba/classshaka_1_1media_1_1SegmentTestBase.html +++ b/docs/d2/dba/classshaka_1_1media_1_1SegmentTestBase.html @@ -183,7 +183,7 @@ bool single_segment_ diff --git a/docs/d2/dc3/structshaka_1_1media_1_1mp4_1_1Track-members.html b/docs/d2/dc3/structshaka_1_1media_1_1mp4_1_1Track-members.html index ea5159ef59..92846d2148 100644 --- a/docs/d2/dc3/structshaka_1_1media_1_1mp4_1_1Track-members.html +++ b/docs/d2/dc3/structshaka_1_1media_1_1mp4_1_1Track-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dc7/media__handler__test__base_8cc_source.html b/docs/d2/dc7/media__handler__test__base_8cc_source.html index 4b27f7eb4e..57a731635e 100644 --- a/docs/d2/dc7/media__handler__test__base_8cc_source.html +++ b/docs/d2/dc7/media__handler__test__base_8cc_source.html @@ -96,198 +96,312 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
7 #include "packager/media/base/media_handler_test_base.h"
8 
9 #include "packager/media/base/audio_stream_info.h"
-
10 #include "packager/media/base/video_stream_info.h"
-
11 #include "packager/status_test_util.h"
-
12 
-
13 namespace {
-
14 
-
15 const int kTrackId = 1;
-
16 const uint64_t kDuration = 10000;
-
17 const char kCodecString[] = "codec string";
-
18 const uint8_t kSampleBits = 1;
-
19 const uint8_t kNumChannels = 2;
-
20 const uint32_t kSamplingFrequency = 48000;
-
21 const uint64_t kSeekPrerollNs = 12345;
-
22 const uint64_t kCodecDelayNs = 56789;
-
23 const uint32_t kMaxBitrate = 13579;
-
24 const uint32_t kAvgBitrate = 13000;
-
25 const char kLanguage[] = "eng";
-
26 const uint16_t kWidth = 10u;
-
27 const uint16_t kHeight = 20u;
-
28 const uint32_t kPixelWidth = 2u;
-
29 const uint32_t kPixelHeight = 3u;
-
30 const int16_t kTrickPlayFactor = 0;
-
31 const uint8_t kNaluLengthSize = 1u;
-
32 const bool kEncrypted = true;
-
33 
-
34 // Use H264 code config.
-
35 const uint8_t kCodecConfig[]{
-
36  // Header
-
37  0x01, 0x64, 0x00, 0x1e, 0xff,
-
38  // SPS count (ignore top three bits)
-
39  0xe1,
-
40  // SPS
-
41  0x00, 0x19, // Size
-
42  0x67, 0x64, 0x00, 0x1e, 0xac, 0xd9, 0x40, 0xa0, 0x2f, 0xf9, 0x70, 0x11,
-
43  0x00, 0x00, 0x03, 0x03, 0xe9, 0x00, 0x00, 0xea, 0x60, 0x0f, 0x16, 0x2d,
-
44  0x96,
-
45  // PPS count
-
46  0x01,
-
47  // PPS
-
48  0x00, 0x06, // Size
-
49  0x68, 0xeb, 0xe3, 0xcb, 0x22, 0xc0,
-
50 };
-
51 
-
52 // Mock data, we don't really care about what is inside.
-
53 const uint8_t kData[]{
-
54  0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
-
55 };
-
56 
-
57 } // namespace
-
58 
-
59 namespace shaka {
-
60 namespace media {
-
61 
- -
63  return Status::OK;
-
64 }
-
65 
-
66 Status FakeMediaHandler::Process(std::unique_ptr<StreamData> stream_data) {
-
67  stream_data_vector_.push_back(std::move(stream_data));
+
10 #include "packager/media/base/text_stream_info.h"
+
11 #include "packager/media/base/video_stream_info.h"
+
12 #include "packager/status_test_util.h"
+
13 
+
14 namespace {
+
15 
+
16 const int kTrackId = 1;
+
17 const uint64_t kDuration = 10000;
+
18 const char kCodecString[] = "codec string";
+
19 const uint8_t kSampleBits = 1;
+
20 const uint8_t kNumChannels = 2;
+
21 const uint32_t kSamplingFrequency = 48000;
+
22 const uint64_t kSeekPrerollNs = 12345;
+
23 const uint64_t kCodecDelayNs = 56789;
+
24 const uint32_t kMaxBitrate = 13579;
+
25 const uint32_t kAvgBitrate = 13000;
+
26 const char kLanguage[] = "eng";
+
27 const uint16_t kWidth = 10u;
+
28 const uint16_t kHeight = 20u;
+
29 const uint32_t kPixelWidth = 2u;
+
30 const uint32_t kPixelHeight = 3u;
+
31 const int16_t kTrickPlayFactor = 0;
+
32 const uint8_t kNaluLengthSize = 1u;
+
33 const bool kEncrypted = true;
+
34 
+
35 // Use H264 code config.
+
36 const uint8_t kCodecConfig[]{
+
37  // Header
+
38  0x01, 0x64, 0x00, 0x1e, 0xff,
+
39  // SPS count (ignore top three bits)
+
40  0xe1,
+
41  // SPS
+
42  0x00, 0x19, // Size
+
43  0x67, 0x64, 0x00, 0x1e, 0xac, 0xd9, 0x40, 0xa0, 0x2f, 0xf9, 0x70, 0x11,
+
44  0x00, 0x00, 0x03, 0x03, 0xe9, 0x00, 0x00, 0xea, 0x60, 0x0f, 0x16, 0x2d,
+
45  0x96,
+
46  // PPS count
+
47  0x01,
+
48  // PPS
+
49  0x00, 0x06, // Size
+
50  0x68, 0xeb, 0xe3, 0xcb, 0x22, 0xc0,
+
51 };
+
52 
+
53 // Mock data, we don't really care about what is inside.
+
54 const uint8_t kData[]{
+
55  0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
+
56 };
+
57 
+
58 } // namespace
+
59 
+
60 namespace shaka {
+
61 namespace media {
+
62 
+
63 bool FakeInputMediaHandler::ValidateOutputStreamIndex(size_t index) const {
+
64  return true;
+
65 }
+
66 
+
67 Status FakeInputMediaHandler::InitializeInternal() {
68  return Status::OK;
69 }
70 
-
71 Status FakeMediaHandler::OnFlushRequest(size_t input_stream_index) {
-
72  return Status::OK;
-
73 }
-
74 
-
75 bool FakeMediaHandler::ValidateOutputStreamIndex(size_t stream_index) const {
-
76  return true;
-
77 }
-
78 
-
79 MediaHandlerTestBase::MediaHandlerTestBase()
-
80  : next_handler_(new FakeMediaHandler),
-
81  some_handler_(new FakeMediaHandler) {}
-
82 
-
83 bool MediaHandlerTestBase::IsVideoCodec(Codec codec) const {
-
84  return codec >= kCodecVideo && codec < kCodecVideoMaxPlusOne;
-
85 }
-
86 
-
87 std::unique_ptr<StreamInfo> MediaHandlerTestBase::GetVideoStreamInfo(
-
88  uint32_t time_scale) const {
-
89  return GetVideoStreamInfo(time_scale, kCodecVP9, kWidth, kHeight);
-
90 }
-
91 
-
92 std::unique_ptr<StreamInfo> MediaHandlerTestBase::GetVideoStreamInfo(
-
93  uint32_t time_scale,
-
94  uint32_t width,
-
95  uint64_t height) const {
-
96  return GetVideoStreamInfo(time_scale, kCodecVP9, width, height);
-
97 }
-
98 
-
99 std::unique_ptr<StreamInfo> MediaHandlerTestBase::GetVideoStreamInfo(
-
100  uint32_t time_scale,
-
101  Codec codec) const {
-
102  return GetVideoStreamInfo(time_scale, codec, kWidth, kHeight);
-
103 }
-
104 
-
105 std::unique_ptr<StreamInfo> MediaHandlerTestBase::GetVideoStreamInfo(
-
106  uint32_t time_scale,
-
107  Codec codec,
-
108  uint32_t width,
-
109  uint64_t height) const {
-
110  return std::unique_ptr<VideoStreamInfo>(new VideoStreamInfo(
-
111  kTrackId, time_scale, kDuration, codec, H26xStreamFormat::kUnSpecified,
-
112  kCodecString, kCodecConfig, sizeof(kCodecConfig), width, height,
-
113  kPixelWidth, kPixelHeight, kTrickPlayFactor, kNaluLengthSize, kLanguage,
-
114  !kEncrypted));
+
71 Status FakeInputMediaHandler::Process(std::unique_ptr<StreamData> stream_data) {
+
72  return Status(error::INTERNAL_ERROR,
+
73  "FakeInputMediaHandler should never be a downstream handler.");
+
74 }
+
75 
+
76 Status MockOutputMediaHandler::InitializeInternal() {
+
77  return Status::OK;
+
78 }
+
79 
+
80 Status MockOutputMediaHandler::Process(
+
81  std::unique_ptr<StreamData> stream_data) {
+
82  OnProcess(stream_data.get());
+
83  return Status::OK;
+
84 }
+
85 
+
86 Status MockOutputMediaHandler::OnFlushRequest(size_t index) {
+
87  OnFlush(index);
+
88  return Status::OK;
+
89 }
+
90 
+ +
92  return Status::OK;
+
93 }
+
94 
+
95 Status FakeMediaHandler::Process(std::unique_ptr<StreamData> stream_data) {
+
96  stream_data_vector_.push_back(std::move(stream_data));
+
97  return Status::OK;
+
98 }
+
99 
+
100 Status FakeMediaHandler::OnFlushRequest(size_t input_stream_index) {
+
101  return Status::OK;
+
102 }
+
103 
+
104 bool FakeMediaHandler::ValidateOutputStreamIndex(size_t stream_index) const {
+
105  return true;
+
106 }
+
107 
+
108 bool MediaHandlerTestBase::IsVideoCodec(Codec codec) const {
+
109  return codec >= kCodecVideo && codec < kCodecVideoMaxPlusOne;
+
110 }
+
111 
+
112 std::unique_ptr<StreamInfo> MediaHandlerTestBase::GetVideoStreamInfo(
+
113  uint32_t time_scale) const {
+
114  return GetVideoStreamInfo(time_scale, kCodecVP9, kWidth, kHeight);
115 }
116 
-
117 std::unique_ptr<StreamInfo> MediaHandlerTestBase::GetAudioStreamInfo(
-
118  uint32_t time_scale) const {
-
119  return GetAudioStreamInfo(time_scale, kCodecAAC);
-
120 }
-
121 
-
122 std::unique_ptr<StreamInfo> MediaHandlerTestBase::GetAudioStreamInfo(
-
123  uint32_t time_scale,
-
124  Codec codec) const {
-
125  return std::unique_ptr<AudioStreamInfo>(new AudioStreamInfo(
-
126  kTrackId, time_scale, kDuration, codec, kCodecString, kCodecConfig,
-
127  sizeof(kCodecConfig), kSampleBits, kNumChannels, kSamplingFrequency,
-
128  kSeekPrerollNs, kCodecDelayNs, kMaxBitrate, kAvgBitrate, kLanguage,
-
129  !kEncrypted));
-
130 }
-
131 
-
132 std::unique_ptr<MediaSample> MediaHandlerTestBase::GetMediaSample(
-
133  int64_t timestamp,
-
134  int64_t duration,
-
135  bool is_keyframe) const {
-
136  return GetMediaSample(timestamp, duration, is_keyframe, kData, sizeof(kData));
-
137 }
-
138 
-
139 std::unique_ptr<MediaSample> MediaHandlerTestBase::GetMediaSample(
-
140  int64_t timestamp,
-
141  int64_t duration,
-
142  bool is_keyframe,
-
143  const uint8_t* data,
-
144  size_t data_length) const {
-
145  std::unique_ptr<MediaSample> sample(
-
146  new MediaSample(data, data_length, nullptr, 0, is_keyframe));
-
147  sample->set_dts(timestamp);
-
148  sample->set_duration(duration);
-
149 
-
150  return sample;
-
151 }
-
152 
-
153 std::unique_ptr<SegmentInfo> MediaHandlerTestBase::GetSegmentInfo(
-
154  int64_t start_timestamp,
-
155  int64_t duration,
-
156  bool is_subsegment) const {
-
157  std::unique_ptr<SegmentInfo> info(new SegmentInfo);
-
158  info->start_timestamp = start_timestamp;
-
159  info->duration = duration;
-
160  info->is_subsegment = is_subsegment;
-
161 
-
162  return info;
-
163 }
-
164 
-
165 void MediaHandlerTestBase::SetUpGraph(size_t num_inputs,
-
166  size_t num_outputs,
-
167  std::shared_ptr<MediaHandler> handler) {
-
168  // Input handler is not really used anywhere but just to satisfy one input
-
169  // one output restriction for the encryption handler.
-
170  auto input_handler = std::make_shared<FakeMediaHandler>();
-
171  for (size_t i = 0; i < num_inputs; ++i)
-
172  ASSERT_OK(input_handler->SetHandler(i, handler));
-
173  // All outputs are routed to |next_handler_|.
-
174  for (size_t i = 0; i < num_outputs; ++i)
-
175  ASSERT_OK(handler->SetHandler(i, next_handler_));
+
117 std::unique_ptr<StreamInfo> MediaHandlerTestBase::GetVideoStreamInfo(
+
118  uint32_t time_scale,
+
119  uint32_t width,
+
120  uint64_t height) const {
+
121  return GetVideoStreamInfo(time_scale, kCodecVP9, width, height);
+
122 }
+
123 
+
124 std::unique_ptr<StreamInfo> MediaHandlerTestBase::GetVideoStreamInfo(
+
125  uint32_t time_scale,
+
126  Codec codec) const {
+
127  return GetVideoStreamInfo(time_scale, codec, kWidth, kHeight);
+
128 }
+
129 
+
130 std::unique_ptr<StreamInfo> MediaHandlerTestBase::GetVideoStreamInfo(
+
131  uint32_t time_scale,
+
132  Codec codec,
+
133  uint32_t width,
+
134  uint64_t height) const {
+
135  return std::unique_ptr<VideoStreamInfo>(new VideoStreamInfo(
+
136  kTrackId, time_scale, kDuration, codec, H26xStreamFormat::kUnSpecified,
+
137  kCodecString, kCodecConfig, sizeof(kCodecConfig), width, height,
+
138  kPixelWidth, kPixelHeight, kTrickPlayFactor, kNaluLengthSize, kLanguage,
+
139  !kEncrypted));
+
140 }
+
141 
+
142 std::unique_ptr<StreamInfo> MediaHandlerTestBase::GetAudioStreamInfo(
+
143  uint32_t time_scale) const {
+
144  return GetAudioStreamInfo(time_scale, kCodecAAC);
+
145 }
+
146 
+
147 std::unique_ptr<StreamInfo> MediaHandlerTestBase::GetAudioStreamInfo(
+
148  uint32_t time_scale,
+
149  Codec codec) const {
+
150  return std::unique_ptr<AudioStreamInfo>(new AudioStreamInfo(
+
151  kTrackId, time_scale, kDuration, codec, kCodecString, kCodecConfig,
+
152  sizeof(kCodecConfig), kSampleBits, kNumChannels, kSamplingFrequency,
+
153  kSeekPrerollNs, kCodecDelayNs, kMaxBitrate, kAvgBitrate, kLanguage,
+
154  !kEncrypted));
+
155 }
+
156 
+
157 std::shared_ptr<MediaSample> MediaHandlerTestBase::GetMediaSample(
+
158  int64_t timestamp,
+
159  int64_t duration,
+
160  bool is_keyframe) const {
+
161  return GetMediaSample(timestamp, duration, is_keyframe, kData, sizeof(kData));
+
162 }
+
163 
+
164 std::shared_ptr<MediaSample> MediaHandlerTestBase::GetMediaSample(
+
165  int64_t timestamp,
+
166  int64_t duration,
+
167  bool is_keyframe,
+
168  const uint8_t* data,
+
169  size_t data_length) const {
+
170  std::shared_ptr<MediaSample> sample =
+
171  MediaSample::CopyFrom(data, data_length, nullptr, 0, is_keyframe);
+
172  sample->set_dts(timestamp);
+
173  sample->set_duration(duration);
+
174 
+
175  return sample;
176 }
177 
-
178 const std::vector<std::unique_ptr<StreamData>>&
- -
180  return next_handler_->stream_data_vector();
-
181 }
-
182 
- -
184  next_handler_->clear_stream_data_vector();
-
185 }
+
178 std::unique_ptr<SegmentInfo> MediaHandlerTestBase::GetSegmentInfo(
+
179  int64_t start_timestamp,
+
180  int64_t duration,
+
181  bool is_subsegment) const {
+
182  std::unique_ptr<SegmentInfo> info(new SegmentInfo);
+
183  info->start_timestamp = start_timestamp;
+
184  info->duration = duration;
+
185  info->is_subsegment = is_subsegment;
186 
-
187 } // namespace media
-
188 } // namespace shaka
-
void ClearOutputStreamDataVector()
Clear the output stream data vector.
-
void SetUpGraph(size_t num_inputs, size_t num_outputs, std::shared_ptr< MediaHandler > handler)
Setup a graph using |handler| with |num_inputs| and |num_outputs|.
+
187  return info;
+
188 }
+
189 
+
190 std::unique_ptr<StreamInfo> MediaHandlerTestBase::GetTextStreamInfo() const {
+
191  // None of this information is actually used by the text out handler.
+
192  // The stream info is just needed to signal the start of the stream.
+
193  return std::unique_ptr<StreamInfo>(
+
194  new TextStreamInfo(0, 0, 0, kUnknownCodec, "", "", 0, 0, ""));
+
195 }
+
196 
+
197 std::unique_ptr<TextSample> MediaHandlerTestBase::GetTextSample(
+
198  const std::string& id,
+
199  uint64_t start,
+
200  uint64_t end,
+
201  const std::string& payload) const {
+
202  std::unique_ptr<TextSample> sample(new TextSample);
+
203  sample->set_id(id);
+
204  sample->SetTime(start, end);
+
205  sample->AppendPayload(payload);
+
206 
+
207  return sample;
+
208 }
+
209 
+
210 Status MediaHandlerTestBase::SetUpAndInitializeGraph(
+
211  std::shared_ptr<MediaHandler> handler,
+
212  size_t input_count,
+
213  size_t output_count) {
+
214  DCHECK(handler);
+
215  DCHECK_EQ(nullptr, handler_);
+
216  DCHECK(inputs_.empty());
+
217  DCHECK(outputs_.empty());
+
218 
+
219  handler_ = std::move(handler);
+
220 
+
221  Status status;
+
222 
+
223  // Add and connect all the requested inputs.
+
224  for (size_t i = 0; i < input_count; i++) {
+
225  inputs_.emplace_back(new FakeInputMediaHandler);
+
226  }
+
227 
+
228  for (auto& input : inputs_) {
+
229  status.Update(input->AddHandler(handler_));
+
230  }
+
231 
+
232  if (!status.ok()) {
+
233  return status;
+
234  }
+
235 
+
236  // Add and connect all the requested outputs.
+
237  for (size_t i = 0; i < output_count; i++) {
+
238  outputs_.emplace_back(new MockOutputMediaHandler);
+
239  }
+
240 
+
241  for (auto& output : outputs_) {
+
242  status.Update(handler_->AddHandler(output));
+
243  }
+
244 
+
245  if (!status.ok()) {
+
246  return status;
+
247  }
+
248 
+
249  // Initialize the graph.
+
250  for (auto& input : inputs_) {
+
251  status.Update(input->Initialize());
+
252  }
+
253 
+
254  // In the case that there are no inputs, the start of the graph
+
255  // is at |handler_| so it needs to be initialized or else the graph
+
256  // won't be initialized.
+
257  if (inputs_.empty()) {
+
258  status.Update(handler_->Initialize());
+
259  }
+
260 
+
261  return status;
+
262 }
+
263 
+
264 FakeInputMediaHandler* MediaHandlerTestBase::Input(size_t index) {
+
265  DCHECK_LT(index, inputs_.size());
+
266  return inputs_[index].get();
+
267 }
+
268 
+
269 MockOutputMediaHandler* MediaHandlerTestBase::Output(size_t index) {
+
270  DCHECK_LT(index, outputs_.size());
+
271  return outputs_[index].get();
+
272 }
+
273 
+
274 MediaHandlerGraphTestBase::MediaHandlerGraphTestBase()
+
275  : next_handler_(new FakeMediaHandler),
+
276  some_handler_(new FakeMediaHandler) {}
+
277 
+ +
279  size_t num_inputs,
+
280  size_t num_outputs,
+
281  std::shared_ptr<MediaHandler> handler) {
+
282  // Input handler is not really used anywhere but just to satisfy one input
+
283  // one output restriction for the encryption handler.
+
284  auto input_handler = std::make_shared<FakeMediaHandler>();
+
285  for (size_t i = 0; i < num_inputs; ++i)
+
286  ASSERT_OK(input_handler->SetHandler(i, handler));
+
287  // All outputs are routed to |next_handler_|.
+
288  for (size_t i = 0; i < num_outputs; ++i)
+
289  ASSERT_OK(handler->SetHandler(i, next_handler_));
+
290 }
+
291 
+
292 const std::vector<std::unique_ptr<StreamData>>&
+ +
294  return next_handler_->stream_data_vector();
+
295 }
+
296 
+ +
298  next_handler_->clear_stream_data_vector();
+
299 }
+
300 
+
301 } // namespace media
+
302 } // namespace shaka
+
void ClearOutputStreamDataVector()
Clear the output stream data vector.
- -
Status OnFlushRequest(size_t input_stream_index) override
Event handler for flush request at the specific input stream index.
- -
Status Process(std::unique_ptr< StreamData > stream_data) override
-
bool ValidateOutputStreamIndex(size_t stream_index) const override
Validate if the stream at the specified index actually exists.
-
const std::vector< std::unique_ptr< StreamData > > & GetOutputStreamDataVector() const
+ +
Status OnFlushRequest(size_t input_stream_index) override
Event handler for flush request at the specific input stream index.
+
static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:42
+
Status Process(std::unique_ptr< StreamData > stream_data) override
+
bool ValidateOutputStreamIndex(size_t stream_index) const override
Validate if the stream at the specified index actually exists.
+
void SetUpGraph(size_t num_inputs, size_t num_outputs, std::shared_ptr< MediaHandler > handler)
Setup a graph using |handler| with |num_inputs| and |num_outputs|.
+
const std::vector< std::unique_ptr< StreamData > > & GetOutputStreamDataVector() const
diff --git a/docs/d2/dc7/structshaka_1_1MpdOptions-members.html b/docs/d2/dc7/structshaka_1_1MpdOptions-members.html index 03c72b155b..ee913b0ba0 100644 --- a/docs/d2/dc7/structshaka_1_1MpdOptions-members.html +++ b/docs/d2/dc7/structshaka_1_1MpdOptions-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dcd/program__map__table__writer_8h_source.html b/docs/d2/dcd/program__map__table__writer_8h_source.html index 373845be23..44ad043aaa 100644 --- a/docs/d2/dcd/program__map__table__writer_8h_source.html +++ b/docs/d2/dcd/program__map__table__writer_8h_source.html @@ -190,7 +190,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dcd/structshaka_1_1media_1_1mp4_1_1EditList-members.html b/docs/d2/dcd/structshaka_1_1media_1_1mp4_1_1EditList-members.html index 26d495b840..98436995ca 100644 --- a/docs/d2/dcd/structshaka_1_1media_1_1mp4_1_1EditList-members.html +++ b/docs/d2/dcd/structshaka_1_1media_1_1mp4_1_1EditList-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dce/structshaka_1_1WidevineSigner-members.html b/docs/d2/dce/structshaka_1_1WidevineSigner-members.html index 9a91b570ac..a6fb001809 100644 --- a/docs/d2/dce/structshaka_1_1WidevineSigner-members.html +++ b/docs/d2/dce/structshaka_1_1WidevineSigner-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dd5/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter.html b/docs/d2/dd5/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter.html index 9eb86a7105..4dbadaa1db 100644 --- a/docs/d2/dd5/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter.html +++ b/docs/d2/dd5/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter.html @@ -283,7 +283,7 @@ uint64_t duration () c diff --git a/docs/d2/dd6/mkv__writer_8h_source.html b/docs/d2/dd6/mkv__writer_8h_source.html index b2745ed099..29743abfb3 100644 --- a/docs/d2/dd6/mkv__writer_8h_source.html +++ b/docs/d2/dd6/mkv__writer_8h_source.html @@ -152,7 +152,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d16/structshaka_1_1RawKeyDecryptionParams-members.html b/docs/d2/dd7/structshaka_1_1RawKeyParams-members.html similarity index 80% rename from docs/d0/d16/structshaka_1_1RawKeyDecryptionParams-members.html rename to docs/d2/dd7/structshaka_1_1RawKeyParams-members.html index 341cbacbb9..9517d7f6f7 100644 --- a/docs/d0/d16/structshaka_1_1RawKeyDecryptionParams-members.html +++ b/docs/d2/dd7/structshaka_1_1RawKeyParams-members.html @@ -82,23 +82,25 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
-
shaka::RawKeyDecryptionParams Member List
+
shaka::RawKeyParams Member List
-

This is the complete list of members for shaka::RawKeyDecryptionParams, including all inherited members.

+

This is the complete list of members for shaka::RawKeyParams, including all inherited members.

- - + + + +
key_mapshaka::RawKeyDecryptionParams
StreamLabel typedef (defined in shaka::RawKeyDecryptionParams)shaka::RawKeyDecryptionParams
ivshaka::RawKeyParams
key_mapshaka::RawKeyParams
psshshaka::RawKeyParams
StreamLabel typedef (defined in shaka::RawKeyParams)shaka::RawKeyParams
diff --git a/docs/d2/dd8/classshaka_1_1media_1_1ChunkingHandler-members.html b/docs/d2/dd8/classshaka_1_1media_1_1ChunkingHandler-members.html index cf55100617..bc684a1bdf 100644 --- a/docs/d2/dd8/classshaka_1_1media_1_1ChunkingHandler-members.html +++ b/docs/d2/dd8/classshaka_1_1media_1_1ChunkingHandler-members.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/ddb/classshaka_1_1media_1_1WebMMediaParser.html b/docs/d2/ddb/classshaka_1_1media_1_1WebMMediaParser.html index b6873c1e4d..680e76f4cb 100644 --- a/docs/d2/ddb/classshaka_1_1media_1_1WebMMediaParser.html +++ b/docs/d2/ddb/classshaka_1_1media_1_1WebMMediaParser.html @@ -257,7 +257,7 @@ std::shared_ptr< diff --git a/docs/d2/de1/webvtt__timestamp_8h_source.html b/docs/d2/de1/webvtt__timestamp_8h_source.html index 54b436c967..2e3502c9aa 100644 --- a/docs/d2/de1/webvtt__timestamp_8h_source.html +++ b/docs/d2/de1/webvtt__timestamp_8h_source.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/de3/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt.html b/docs/d2/de3/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt.html index 24459a2a49..03b0c2ef7f 100644 --- a/docs/d2/de3/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt.html +++ b/docs/d2/de3/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt.html @@ -155,7 +155,7 @@ void Reset () override diff --git a/docs/d2/de6/packager__main_8cc_source.html b/docs/d2/de6/packager__main_8cc_source.html index 72a4aa155a..fb0af31c4c 100644 --- a/docs/d2/de6/packager__main_8cc_source.html +++ b/docs/d2/de6/packager__main_8cc_source.html @@ -97,12 +97,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
8 #include <iostream>
9 
10 #include "packager/app/crypto_flags.h"
-
11 #include "packager/app/fixed_key_encryption_flags.h"
-
12 #include "packager/app/hls_flags.h"
-
13 #include "packager/app/mpd_flags.h"
-
14 #include "packager/app/muxer_flags.h"
-
15 #include "packager/app/packager_util.h"
-
16 #include "packager/app/playready_key_encryption_flags.h"
+
11 #include "packager/app/hls_flags.h"
+
12 #include "packager/app/mpd_flags.h"
+
13 #include "packager/app/muxer_flags.h"
+
14 #include "packager/app/packager_util.h"
+
15 #include "packager/app/playready_key_encryption_flags.h"
+
16 #include "packager/app/raw_key_encryption_flags.h"
17 #include "packager/app/stream_descriptor.h"
18 #include "packager/app/vlog_flags.h"
19 #include "packager/app/widevine_encryption_flags.h"
@@ -171,333 +171,383 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
82  " derived from the file extension of the output file.\n"
83  " - skip_encryption=0|1: Optional. Defaults to 0 if not specified. If\n"
84  " it is set to 1, no encryption of the stream will be made.\n"
-
85  " - trick_play_factor (tpf): Optional value which specifies the trick\n"
-
86  " play, a.k.a. trick mode, stream sampling rate among key frames.\n"
-
87  " If specified, the output is a trick play stream.\n"
-
88  " - hls_name: Required for audio when outputting HLS.\n"
-
89  " name of the output stream. This is not (necessarily) the same as\n"
-
90  " output. This is used as the NAME attribute for EXT-X-MEDIA.\n"
-
91  " - hls_group_id: Required for audio when outputting HLS.\n"
-
92  " The group ID for the output stream. This is used as the GROUP-ID\n"
-
93  " attribute for EXT-X-MEDIA.\n"
-
94  " - playlist_name: Required for HLS output.\n"
-
95  " Name of the playlist for the stream. Usually ends with '.m3u8'.\n";
-
96 
-
97 enum ExitStatus {
-
98  kSuccess = 0,
-
99  kArgumentValidationFailed,
-
100  kPackagingFailed,
-
101  kInternalError,
-
102 };
-
103 
-
104 bool GetWidevineSigner(WidevineSigner* signer) {
-
105  signer->signer_name = FLAGS_signer;
-
106  if (!FLAGS_aes_signing_key_bytes.empty()) {
-
107  signer->signing_key_type = WidevineSigner::SigningKeyType::kAes;
-
108  signer->aes.key = FLAGS_aes_signing_key_bytes;
-
109  signer->aes.iv = FLAGS_aes_signing_iv_bytes;
-
110  } else if (!FLAGS_rsa_signing_key_path.empty()) {
-
111  signer->signing_key_type = WidevineSigner::SigningKeyType::kRsa;
-
112  if (!File::ReadFileToString(FLAGS_rsa_signing_key_path.c_str(),
-
113  &signer->rsa.key)) {
-
114  LOG(ERROR) << "Failed to read from '" << FLAGS_rsa_signing_key_path
-
115  << "'.";
-
116  return false;
-
117  }
-
118  }
-
119  return true;
-
120 }
-
121 
-
122 bool GetHlsPlaylistType(const std::string& playlist_type,
-
123  HlsPlaylistType* playlist_type_enum) {
-
124  if (base::ToUpperASCII(playlist_type) == "VOD") {
-
125  *playlist_type_enum = HlsPlaylistType::kVod;
-
126  } else if (base::ToUpperASCII(playlist_type) == "LIVE") {
-
127  *playlist_type_enum = HlsPlaylistType::kLive;
-
128  } else if (base::ToUpperASCII(playlist_type) == "EVENT") {
-
129  *playlist_type_enum = HlsPlaylistType::kEvent;
-
130  } else {
-
131  LOG(ERROR) << "Unrecognized playlist type " << playlist_type;
-
132  return false;
-
133  }
-
134  return true;
-
135 }
-
136 
-
137 bool GetProtectionScheme(uint32_t* protection_scheme) {
-
138  if (FLAGS_protection_scheme == "cenc") {
-
139  *protection_scheme = EncryptionParams::kProtectionSchemeCenc;
-
140  return true;
-
141  }
-
142  if (FLAGS_protection_scheme == "cbc1") {
-
143  *protection_scheme = EncryptionParams::kProtectionSchemeCbc1;
-
144  return true;
-
145  }
-
146  if (FLAGS_protection_scheme == "cbcs") {
-
147  *protection_scheme = EncryptionParams::kProtectionSchemeCbcs;
-
148  return true;
-
149  }
-
150  if (FLAGS_protection_scheme == "cens") {
-
151  *protection_scheme = EncryptionParams::kProtectionSchemeCens;
-
152  return true;
-
153  }
-
154  LOG(ERROR) << "Unrecognized protection_scheme " << FLAGS_protection_scheme;
-
155  return false;
-
156 }
-
157 
-
158 base::Optional<PackagingParams> GetPackagingParams() {
-
159  PackagingParams packaging_params;
-
160 
-
161  ChunkingParams& chunking_params = packaging_params.chunking_params;
-
162  chunking_params.segment_duration_in_seconds = FLAGS_segment_duration;
-
163  chunking_params.subsegment_duration_in_seconds = FLAGS_fragment_duration;
-
164  chunking_params.segment_sap_aligned = FLAGS_segment_sap_aligned;
-
165  chunking_params.subsegment_sap_aligned = FLAGS_fragment_sap_aligned;
-
166 
-
167  int num_key_providers = 0;
-
168  EncryptionParams& encryption_params = packaging_params.encryption_params;
-
169  if (FLAGS_enable_widevine_encryption) {
-
170  encryption_params.key_provider = KeyProvider::kWidevine;
-
171  ++num_key_providers;
-
172  }
-
173  if (FLAGS_enable_playready_encryption) {
-
174  encryption_params.key_provider = KeyProvider::kPlayready;
-
175  ++num_key_providers;
-
176  }
-
177  if (FLAGS_enable_fixed_key_encryption) {
-
178  encryption_params.key_provider = KeyProvider::kRawKey;
-
179  ++num_key_providers;
-
180  }
-
181  if (num_key_providers > 1) {
-
182  LOG(ERROR) << "Only one of --enable_widevine_encryption, "
-
183  "--enable_playready_encryption, "
-
184  "--enable_fixed_key_encryption can be enabled.";
-
185  return base::nullopt;
-
186  }
-
187 
-
188  if (encryption_params.key_provider != KeyProvider::kNone) {
-
189  encryption_params.clear_lead_in_seconds = FLAGS_clear_lead;
-
190  if (!GetProtectionScheme(&encryption_params.protection_scheme))
-
191  return base::nullopt;
-
192  encryption_params.crypto_period_duration_in_seconds =
-
193  FLAGS_crypto_period_duration;
-
194  encryption_params.vp9_subsample_encryption = FLAGS_vp9_subsample_encryption;
-
195  encryption_params.stream_label_func = std::bind(
-
196  &Packager::DefaultStreamLabelFunction, FLAGS_max_sd_pixels,
-
197  FLAGS_max_hd_pixels, FLAGS_max_uhd1_pixels, std::placeholders::_1);
-
198  }
-
199  switch (encryption_params.key_provider) {
-
200  case KeyProvider::kWidevine: {
-
201  WidevineEncryptionParams& widevine = encryption_params.widevine;
-
202  widevine.key_server_url = FLAGS_key_server_url;
-
203  widevine.include_common_pssh = FLAGS_include_common_pssh;
-
204 
-
205  widevine.content_id = FLAGS_content_id_bytes;
-
206  widevine.policy = FLAGS_policy;
-
207  widevine.group_id = FLAGS_group_id_bytes;
-
208  if (!GetWidevineSigner(&widevine.signer))
-
209  return base::nullopt;
-
210  break;
-
211  }
-
212  case KeyProvider::kPlayready: {
-
213  PlayreadyEncryptionParams& playready = encryption_params.playready;
-
214  playready.key_server_url = FLAGS_playready_server_url;
-
215  playready.program_identifier = FLAGS_program_identifier;
-
216  playready.ca_file = FLAGS_ca_file;
-
217  playready.client_cert_file = FLAGS_client_cert_file;
-
218  playready.client_cert_private_key_file =
-
219  FLAGS_client_cert_private_key_file;
-
220  playready.client_cert_private_key_password =
-
221  FLAGS_client_cert_private_key_password;
-
222  playready.key_id = FLAGS_playready_key_id_bytes;
-
223  playready.key = FLAGS_playready_key_bytes;
-
224  break;
-
225  }
-
226  case KeyProvider::kRawKey: {
-
227  RawKeyEncryptionParams& raw_key = encryption_params.raw_key;
-
228  raw_key.iv = FLAGS_iv_bytes;
-
229  raw_key.pssh = FLAGS_pssh_bytes;
-
230  // An empty StreamLabel specifies the default KeyPair.
-
231  RawKeyEncryptionParams::KeyPair& key_pair = raw_key.key_map[""];
-
232  key_pair.key_id = FLAGS_key_id_bytes;
-
233  key_pair.key = FLAGS_key_bytes;
-
234  break;
-
235  }
-
236  case KeyProvider::kNone:
-
237  break;
+
85  " - drm_label: Optional value for custom DRM label, which defines the\n"
+
86  " encryption key applied to the stream. Typical values include AUDIO,\n"
+
87  " SD, HD, UHD1, UHD2. For raw key, it should be a label defined in\n"
+
88  " --keys. If not provided, the DRM label is derived from stream type\n"
+
89  " (video, audio), resolution, etc.\n"
+
90  " Note that it is case sensitive.\n"
+
91  " - trick_play_factor (tpf): Optional value which specifies the trick\n"
+
92  " play, a.k.a. trick mode, stream sampling rate among key frames.\n"
+
93  " If specified, the output is a trick play stream.\n"
+
94  " - hls_name: Used for HLS audio to set the NAME attribute for\n"
+
95  " EXT-X-MEDIA. Defaults to the base of the playlist name.\n"
+
96  " - hls_group_id: Used for HLS audio to set the GROUP-ID attribute for\n"
+
97  " EXT-X-MEDIA. Defaults to 'audio' if not specified.\n"
+
98  " - playlist_name: Used for HLS to name the playlist for the stream.\n"
+
99  " Usually ends with '.m3u8'. If unspecified, defaults to something of\n"
+
100  " the form 'stream_0.m3u8', 'stream_1.m3u8', 'stream_2.m3u8', etc.\n";
+
101 
+
102 // Labels for parameters in RawKey key info.
+
103 const char kDrmLabelLabel[] = "label";
+
104 const char kKeyIdLabel[] = "key_id";
+
105 const char kKeyLabel[] = "key";
+
106 
+
107 enum ExitStatus {
+
108  kSuccess = 0,
+
109  kArgumentValidationFailed,
+
110  kPackagingFailed,
+
111  kInternalError,
+
112 };
+
113 
+
114 bool GetWidevineSigner(WidevineSigner* signer) {
+
115  signer->signer_name = FLAGS_signer;
+
116  if (!FLAGS_aes_signing_key_bytes.empty()) {
+
117  signer->signing_key_type = WidevineSigner::SigningKeyType::kAes;
+
118  signer->aes.key = FLAGS_aes_signing_key_bytes;
+
119  signer->aes.iv = FLAGS_aes_signing_iv_bytes;
+
120  } else if (!FLAGS_rsa_signing_key_path.empty()) {
+
121  signer->signing_key_type = WidevineSigner::SigningKeyType::kRsa;
+
122  if (!File::ReadFileToString(FLAGS_rsa_signing_key_path.c_str(),
+
123  &signer->rsa.key)) {
+
124  LOG(ERROR) << "Failed to read from '" << FLAGS_rsa_signing_key_path
+
125  << "'.";
+
126  return false;
+
127  }
+
128  }
+
129  return true;
+
130 }
+
131 
+
132 bool GetHlsPlaylistType(const std::string& playlist_type,
+
133  HlsPlaylistType* playlist_type_enum) {
+
134  if (base::ToUpperASCII(playlist_type) == "VOD") {
+
135  *playlist_type_enum = HlsPlaylistType::kVod;
+
136  } else if (base::ToUpperASCII(playlist_type) == "LIVE") {
+
137  *playlist_type_enum = HlsPlaylistType::kLive;
+
138  } else if (base::ToUpperASCII(playlist_type) == "EVENT") {
+
139  *playlist_type_enum = HlsPlaylistType::kEvent;
+
140  } else {
+
141  LOG(ERROR) << "Unrecognized playlist type " << playlist_type;
+
142  return false;
+
143  }
+
144  return true;
+
145 }
+
146 
+
147 bool GetProtectionScheme(uint32_t* protection_scheme) {
+
148  if (FLAGS_protection_scheme == "cenc") {
+
149  *protection_scheme = EncryptionParams::kProtectionSchemeCenc;
+
150  return true;
+
151  }
+
152  if (FLAGS_protection_scheme == "cbc1") {
+
153  *protection_scheme = EncryptionParams::kProtectionSchemeCbc1;
+
154  return true;
+
155  }
+
156  if (FLAGS_protection_scheme == "cbcs") {
+
157  *protection_scheme = EncryptionParams::kProtectionSchemeCbcs;
+
158  return true;
+
159  }
+
160  if (FLAGS_protection_scheme == "cens") {
+
161  *protection_scheme = EncryptionParams::kProtectionSchemeCens;
+
162  return true;
+
163  }
+
164  LOG(ERROR) << "Unrecognized protection_scheme " << FLAGS_protection_scheme;
+
165  return false;
+
166 }
+
167 
+
168 bool ParseKeys(const std::string& keys, RawKeyParams* raw_key) {
+
169  for (const std::string& key_data : base::SplitString(
+
170  keys, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY)) {
+
171  base::StringPairs string_pairs;
+
172  base::SplitStringIntoKeyValuePairs(key_data, '=', ':', &string_pairs);
+
173 
+
174  std::map<std::string, std::string> value_map;
+
175  for (const auto& string_pair : string_pairs)
+
176  value_map[string_pair.first] = string_pair.second;
+
177  const std::string drm_label = value_map[kDrmLabelLabel];
+
178  if (raw_key->key_map.find(drm_label) != raw_key->key_map.end()) {
+
179  LOG(ERROR) << "Seeing duplicated DRM label '" << drm_label << "'.";
+
180  return false;
+
181  }
+
182  auto& key_info = raw_key->key_map[drm_label];
+
183  if (value_map[kKeyIdLabel].empty() ||
+
184  !base::HexStringToBytes(value_map[kKeyIdLabel], &key_info.key_id)) {
+
185  LOG(ERROR) << "Empty key id or invalid hex string for key id: "
+
186  << value_map[kKeyIdLabel];
+
187  return false;
+
188  }
+
189  if (value_map[kKeyLabel].empty() ||
+
190  !base::HexStringToBytes(value_map[kKeyLabel], &key_info.key)) {
+
191  LOG(ERROR) << "Empty key or invalid hex string for key: "
+
192  << value_map[kKeyLabel];
+
193  return false;
+
194  }
+
195  }
+
196  return true;
+
197 }
+
198 
+
199 bool GetRawKeyParams(RawKeyParams* raw_key) {
+
200  raw_key->iv = FLAGS_iv_bytes;
+
201  raw_key->pssh = FLAGS_pssh_bytes;
+
202  if (!FLAGS_keys.empty()) {
+
203  if (!ParseKeys(FLAGS_keys, raw_key)) {
+
204  LOG(ERROR) << "Failed to parse --keys " << FLAGS_keys;
+
205  return false;
+
206  }
+
207  } else {
+
208  // An empty StreamLabel specifies the default key info.
+
209  RawKeyParams::KeyInfo& key_info = raw_key->key_map[""];
+
210  key_info.key_id = FLAGS_key_id_bytes;
+
211  key_info.key = FLAGS_key_bytes;
+
212  }
+
213  return true;
+
214 }
+
215 
+
216 base::Optional<PackagingParams> GetPackagingParams() {
+
217  PackagingParams packaging_params;
+
218 
+
219  ChunkingParams& chunking_params = packaging_params.chunking_params;
+
220  chunking_params.segment_duration_in_seconds = FLAGS_segment_duration;
+
221  chunking_params.subsegment_duration_in_seconds = FLAGS_fragment_duration;
+
222  chunking_params.segment_sap_aligned = FLAGS_segment_sap_aligned;
+
223  chunking_params.subsegment_sap_aligned = FLAGS_fragment_sap_aligned;
+
224 
+
225  int num_key_providers = 0;
+
226  EncryptionParams& encryption_params = packaging_params.encryption_params;
+
227  if (FLAGS_enable_widevine_encryption) {
+
228  encryption_params.key_provider = KeyProvider::kWidevine;
+
229  ++num_key_providers;
+
230  }
+
231  if (FLAGS_enable_playready_encryption) {
+
232  encryption_params.key_provider = KeyProvider::kPlayready;
+
233  ++num_key_providers;
+
234  }
+
235  if (FLAGS_enable_raw_key_encryption) {
+
236  encryption_params.key_provider = KeyProvider::kRawKey;
+
237  ++num_key_providers;
238  }
-
239 
-
240  num_key_providers = 0;
-
241  DecryptionParams& decryption_params = packaging_params.decryption_params;
-
242  if (FLAGS_enable_widevine_decryption) {
-
243  decryption_params.key_provider = KeyProvider::kWidevine;
-
244  ++num_key_providers;
-
245  }
-
246  if (FLAGS_enable_fixed_key_decryption) {
-
247  decryption_params.key_provider = KeyProvider::kRawKey;
-
248  ++num_key_providers;
-
249  }
-
250  if (num_key_providers > 1) {
-
251  LOG(ERROR) << "Only one of --enable_widevine_decryption, "
-
252  "--enable_fixed_key_decryption can be enabled.";
-
253  return base::nullopt;
-
254  }
-
255  switch (decryption_params.key_provider) {
-
256  case KeyProvider::kWidevine: {
-
257  WidevineDecryptionParams& widevine = decryption_params.widevine;
-
258  widevine.key_server_url = FLAGS_key_server_url;
-
259  if (!GetWidevineSigner(&widevine.signer))
-
260  return base::nullopt;
-
261  break;
-
262  }
-
263  case KeyProvider::kRawKey: {
-
264  RawKeyDecryptionParams& raw_key = decryption_params.raw_key;
-
265  // An empty StreamLabel specifies the default KeyPair.
-
266  RawKeyDecryptionParams::KeyPair& key_pair = raw_key.key_map[""];
-
267  key_pair.key_id = FLAGS_key_id_bytes;
-
268  key_pair.key = FLAGS_key_bytes;
-
269  break;
-
270  }
-
271  case KeyProvider::kPlayready:
-
272  case KeyProvider::kNone:
-
273  break;
-
274  }
-
275 
-
276  Mp4OutputParams& mp4_params = packaging_params.mp4_output_params;
-
277  mp4_params.num_subsegments_per_sidx = FLAGS_num_subsegments_per_sidx;
-
278  if (FLAGS_mp4_use_decoding_timestamp_in_timeline) {
-
279  LOG(WARNING) << "Flag --mp4_use_decoding_timestamp_in_timeline is set. "
-
280  "Note that it is a temporary hack to workaround Chromium "
-
281  "bug https://crbug.com/398130. The flag may be removed "
-
282  "when the Chromium bug is fixed.";
-
283  }
-
284  mp4_params.use_decoding_timestamp_in_timeline =
-
285  FLAGS_mp4_use_decoding_timestamp_in_timeline;
-
286  mp4_params.include_pssh_in_stream = FLAGS_mp4_include_pssh_in_stream;
-
287 
-
288  packaging_params.output_media_info = FLAGS_output_media_info;
-
289 
-
290  MpdParams& mpd_params = packaging_params.mpd_params;
-
291  mpd_params.generate_static_live_mpd = FLAGS_generate_static_mpd;
-
292  mpd_params.mpd_output = FLAGS_mpd_output;
-
293  mpd_params.base_urls = base::SplitString(
-
294  FLAGS_base_urls, ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
-
295  mpd_params.generate_dash_if_iop_compliant_mpd =
-
296  FLAGS_generate_dash_if_iop_compliant_mpd;
-
297  mpd_params.minimum_update_period = FLAGS_minimum_update_period;
-
298  mpd_params.min_buffer_time = FLAGS_min_buffer_time;
-
299  mpd_params.time_shift_buffer_depth = FLAGS_time_shift_buffer_depth;
-
300  mpd_params.suggested_presentation_delay = FLAGS_suggested_presentation_delay;
-
301  mpd_params.default_language = FLAGS_default_language;
-
302 
-
303  HlsParams& hls_params = packaging_params.hls_params;
-
304  if (!GetHlsPlaylistType(FLAGS_hls_playlist_type, &hls_params.playlist_type)) {
-
305  return base::nullopt;
-
306  }
-
307  hls_params.master_playlist_output = FLAGS_hls_master_playlist_output;
-
308  hls_params.base_url = FLAGS_hls_base_url;
-
309  hls_params.time_shift_buffer_depth = FLAGS_time_shift_buffer_depth;
-
310 
-
311  TestParams& test_params = packaging_params.test_params;
-
312  test_params.dump_stream_info = FLAGS_dump_stream_info;
-
313  test_params.inject_fake_clock = FLAGS_use_fake_clock_for_muxer;
-
314  if (FLAGS_override_version)
-
315  test_params.injected_library_version = FLAGS_test_version;
-
316 
-
317  return packaging_params;
-
318 }
-
319 
-
320 int PackagerMain(int argc, char** argv) {
-
321  // Needed to enable VLOG/DVLOG through --vmodule or --v.
-
322  base::CommandLine::Init(argc, argv);
-
323 
-
324  // Set up logging.
-
325  logging::LoggingSettings log_settings;
-
326  log_settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
-
327  CHECK(logging::InitLogging(log_settings));
-
328 
-
329  google::SetVersionString(shaka::Packager::GetLibraryVersion());
-
330  google::SetUsageMessage(base::StringPrintf(kUsage, argv[0]));
-
331  google::ParseCommandLineFlags(&argc, &argv, true);
-
332  if (argc < 2) {
-
333  google::ShowUsageWithFlags("Usage");
-
334  return kSuccess;
-
335  }
-
336 
- - -
339  return kArgumentValidationFailed;
-
340  }
-
341 
-
342  base::Optional<PackagingParams> packaging_params = GetPackagingParams();
-
343  if (!packaging_params)
-
344  return kArgumentValidationFailed;
-
345 
-
346  std::vector<StreamDescriptor> stream_descriptors;
-
347  for (int i = 1; i < argc; ++i) {
-
348  base::Optional<StreamDescriptor> stream_descriptor =
-
349  ParseStreamDescriptor(argv[i]);
-
350  if (!stream_descriptor)
-
351  return kArgumentValidationFailed;
-
352  stream_descriptors.push_back(stream_descriptor.value());
-
353  }
-
354  Packager packager;
-
355  Status status =
-
356  packager.Initialize(packaging_params.value(), stream_descriptors);
-
357  if (!status.ok()) {
-
358  LOG(ERROR) << "Failed to initialize packager: " << status.ToString();
-
359  return kArgumentValidationFailed;
-
360  }
-
361  status = packager.Run();
-
362  if (!status.ok()) {
-
363  LOG(ERROR) << "Packaging Error: " << status.ToString();
-
364  return kPackagingFailed;
-
365  }
-
366  printf("Packaging completed successfully.\n");
-
367  return kSuccess;
+
239  if (num_key_providers > 1) {
+
240  LOG(ERROR) << "Only one of --enable_widevine_encryption, "
+
241  "--enable_playready_encryption, "
+
242  "--enable_raw_key_encryption can be enabled.";
+
243  return base::nullopt;
+
244  }
+
245 
+
246  if (encryption_params.key_provider != KeyProvider::kNone) {
+
247  encryption_params.clear_lead_in_seconds = FLAGS_clear_lead;
+
248  if (!GetProtectionScheme(&encryption_params.protection_scheme))
+
249  return base::nullopt;
+
250  encryption_params.crypto_period_duration_in_seconds =
+
251  FLAGS_crypto_period_duration;
+
252  encryption_params.vp9_subsample_encryption = FLAGS_vp9_subsample_encryption;
+
253  encryption_params.stream_label_func = std::bind(
+
254  &Packager::DefaultStreamLabelFunction, FLAGS_max_sd_pixels,
+
255  FLAGS_max_hd_pixels, FLAGS_max_uhd1_pixels, std::placeholders::_1);
+
256  }
+
257  switch (encryption_params.key_provider) {
+
258  case KeyProvider::kWidevine: {
+
259  WidevineEncryptionParams& widevine = encryption_params.widevine;
+
260  widevine.key_server_url = FLAGS_key_server_url;
+
261  widevine.include_common_pssh = FLAGS_include_common_pssh;
+
262 
+
263  widevine.content_id = FLAGS_content_id_bytes;
+
264  widevine.policy = FLAGS_policy;
+
265  widevine.group_id = FLAGS_group_id_bytes;
+
266  if (!GetWidevineSigner(&widevine.signer))
+
267  return base::nullopt;
+
268  break;
+
269  }
+
270  case KeyProvider::kPlayready: {
+
271  PlayreadyEncryptionParams& playready = encryption_params.playready;
+
272  playready.key_server_url = FLAGS_playready_server_url;
+
273  playready.program_identifier = FLAGS_program_identifier;
+
274  playready.ca_file = FLAGS_ca_file;
+
275  playready.client_cert_file = FLAGS_client_cert_file;
+
276  playready.client_cert_private_key_file =
+
277  FLAGS_client_cert_private_key_file;
+
278  playready.client_cert_private_key_password =
+
279  FLAGS_client_cert_private_key_password;
+
280  playready.key_id = FLAGS_playready_key_id_bytes;
+
281  playready.key = FLAGS_playready_key_bytes;
+
282  break;
+
283  }
+
284  case KeyProvider::kRawKey: {
+
285  if (!GetRawKeyParams(&encryption_params.raw_key))
+
286  return base::nullopt;
+
287  break;
+
288  }
+
289  case KeyProvider::kNone:
+
290  break;
+
291  }
+
292 
+
293  num_key_providers = 0;
+
294  DecryptionParams& decryption_params = packaging_params.decryption_params;
+
295  if (FLAGS_enable_widevine_decryption) {
+
296  decryption_params.key_provider = KeyProvider::kWidevine;
+
297  ++num_key_providers;
+
298  }
+
299  if (FLAGS_enable_raw_key_decryption) {
+
300  decryption_params.key_provider = KeyProvider::kRawKey;
+
301  ++num_key_providers;
+
302  }
+
303  if (num_key_providers > 1) {
+
304  LOG(ERROR) << "Only one of --enable_widevine_decryption, "
+
305  "--enable_raw_key_decryption can be enabled.";
+
306  return base::nullopt;
+
307  }
+
308  switch (decryption_params.key_provider) {
+
309  case KeyProvider::kWidevine: {
+
310  WidevineDecryptionParams& widevine = decryption_params.widevine;
+
311  widevine.key_server_url = FLAGS_key_server_url;
+
312  if (!GetWidevineSigner(&widevine.signer))
+
313  return base::nullopt;
+
314  break;
+
315  }
+
316  case KeyProvider::kRawKey: {
+
317  if (!GetRawKeyParams(&decryption_params.raw_key))
+
318  return base::nullopt;
+
319  break;
+
320  }
+
321  case KeyProvider::kPlayready:
+
322  case KeyProvider::kNone:
+
323  break;
+
324  }
+
325 
+
326  Mp4OutputParams& mp4_params = packaging_params.mp4_output_params;
+
327  mp4_params.num_subsegments_per_sidx = FLAGS_num_subsegments_per_sidx;
+
328  if (FLAGS_mp4_use_decoding_timestamp_in_timeline) {
+
329  LOG(WARNING) << "Flag --mp4_use_decoding_timestamp_in_timeline is set. "
+
330  "Note that it is a temporary hack to workaround Chromium "
+
331  "bug https://crbug.com/398130. The flag may be removed "
+
332  "when the Chromium bug is fixed.";
+
333  }
+
334  mp4_params.use_decoding_timestamp_in_timeline =
+
335  FLAGS_mp4_use_decoding_timestamp_in_timeline;
+
336  mp4_params.include_pssh_in_stream = FLAGS_mp4_include_pssh_in_stream;
+
337 
+
338  packaging_params.output_media_info = FLAGS_output_media_info;
+
339 
+
340  MpdParams& mpd_params = packaging_params.mpd_params;
+
341  mpd_params.generate_static_live_mpd = FLAGS_generate_static_mpd;
+
342  mpd_params.mpd_output = FLAGS_mpd_output;
+
343  mpd_params.base_urls = base::SplitString(
+
344  FLAGS_base_urls, ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
+
345  mpd_params.generate_dash_if_iop_compliant_mpd =
+
346  FLAGS_generate_dash_if_iop_compliant_mpd;
+
347  mpd_params.minimum_update_period = FLAGS_minimum_update_period;
+
348  mpd_params.min_buffer_time = FLAGS_min_buffer_time;
+
349  mpd_params.time_shift_buffer_depth = FLAGS_time_shift_buffer_depth;
+
350  mpd_params.suggested_presentation_delay = FLAGS_suggested_presentation_delay;
+
351  mpd_params.default_language = FLAGS_default_language;
+
352 
+
353  HlsParams& hls_params = packaging_params.hls_params;
+
354  if (!GetHlsPlaylistType(FLAGS_hls_playlist_type, &hls_params.playlist_type)) {
+
355  return base::nullopt;
+
356  }
+
357  hls_params.master_playlist_output = FLAGS_hls_master_playlist_output;
+
358  hls_params.base_url = FLAGS_hls_base_url;
+
359  hls_params.time_shift_buffer_depth = FLAGS_time_shift_buffer_depth;
+
360 
+
361  TestParams& test_params = packaging_params.test_params;
+
362  test_params.dump_stream_info = FLAGS_dump_stream_info;
+
363  test_params.inject_fake_clock = FLAGS_use_fake_clock_for_muxer;
+
364  if (FLAGS_override_version)
+
365  test_params.injected_library_version = FLAGS_test_version;
+
366 
+
367  return packaging_params;
368 }
369 
-
370 } // namespace
-
371 } // namespace shaka
-
372 
-
373 #if defined(OS_WIN)
-
374 // Windows wmain, which converts wide character arguments to UTF-8.
-
375 int wmain(int argc, wchar_t* argv[], wchar_t* envp[]) {
-
376  std::unique_ptr<char* [], std::function<void(char**)>> utf8_argv(
-
377  new char*[argc], [argc](char** utf8_args) {
-
378  // TODO(tinskip): This leaks, but if this code is enabled, it crashes.
-
379  // Figure out why. I suspect gflags does something funny with the
-
380  // argument array.
-
381  // for (int idx = 0; idx < argc; ++idx)
-
382  // delete[] utf8_args[idx];
-
383  delete[] utf8_args;
-
384  });
-
385  std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
-
386  for (int idx = 0; idx < argc; ++idx) {
-
387  std::string utf8_arg(converter.to_bytes(argv[idx]));
-
388  utf8_arg += '\0';
-
389  utf8_argv[idx] = new char[utf8_arg.size()];
-
390  memcpy(utf8_argv[idx], &utf8_arg[0], utf8_arg.size());
-
391  }
-
392  return shaka::PackagerMain(argc, utf8_argv.get());
-
393 }
-
394 #else
-
395 int main(int argc, char** argv) {
-
396  return shaka::PackagerMain(argc, argv);
-
397 }
-
398 #endif // defined(OS_WIN)
-
static std::string DefaultStreamLabelFunction(int max_sd_pixels, int max_hd_pixels, int max_uhd1_pixels, const EncryptionParams::EncryptedStreamAttributes &stream_attributes)
Definition: packager.cc:808
+
370 int PackagerMain(int argc, char** argv) {
+
371  // Needed to enable VLOG/DVLOG through --vmodule or --v.
+
372  base::CommandLine::Init(argc, argv);
+
373 
+
374  // Set up logging.
+
375  logging::LoggingSettings log_settings;
+
376  log_settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+
377  CHECK(logging::InitLogging(log_settings));
+
378 
+
379  google::SetVersionString(shaka::Packager::GetLibraryVersion());
+
380  google::SetUsageMessage(base::StringPrintf(kUsage, argv[0]));
+
381  google::ParseCommandLineFlags(&argc, &argv, true);
+
382  if (argc < 2) {
+
383  google::ShowUsageWithFlags("Usage");
+
384  return kSuccess;
+
385  }
+
386 
+ + +
389  return kArgumentValidationFailed;
+
390  }
+
391 
+
392  base::Optional<PackagingParams> packaging_params = GetPackagingParams();
+
393  if (!packaging_params)
+
394  return kArgumentValidationFailed;
+
395 
+
396  std::vector<StreamDescriptor> stream_descriptors;
+
397  for (int i = 1; i < argc; ++i) {
+
398  base::Optional<StreamDescriptor> stream_descriptor =
+
399  ParseStreamDescriptor(argv[i]);
+
400  if (!stream_descriptor)
+
401  return kArgumentValidationFailed;
+
402  stream_descriptors.push_back(stream_descriptor.value());
+
403  }
+
404  Packager packager;
+
405  Status status =
+
406  packager.Initialize(packaging_params.value(), stream_descriptors);
+
407  if (!status.ok()) {
+
408  LOG(ERROR) << "Failed to initialize packager: " << status.ToString();
+
409  return kArgumentValidationFailed;
+
410  }
+
411  status = packager.Run();
+
412  if (!status.ok()) {
+
413  LOG(ERROR) << "Packaging Error: " << status.ToString();
+
414  return kPackagingFailed;
+
415  }
+
416  printf("Packaging completed successfully.\n");
+
417  return kSuccess;
+
418 }
+
419 
+
420 } // namespace
+
421 } // namespace shaka
+
422 
+
423 #if defined(OS_WIN)
+
424 // Windows wmain, which converts wide character arguments to UTF-8.
+
425 int wmain(int argc, wchar_t* argv[], wchar_t* envp[]) {
+
426  std::unique_ptr<char* [], std::function<void(char**)>> utf8_argv(
+
427  new char*[argc], [argc](char** utf8_args) {
+
428  // TODO(tinskip): This leaks, but if this code is enabled, it crashes.
+
429  // Figure out why. I suspect gflags does something funny with the
+
430  // argument array.
+
431  // for (int idx = 0; idx < argc; ++idx)
+
432  // delete[] utf8_args[idx];
+
433  delete[] utf8_args;
+
434  });
+
435  std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
+
436  for (int idx = 0; idx < argc; ++idx) {
+
437  std::string utf8_arg(converter.to_bytes(argv[idx]));
+
438  utf8_arg += '\0';
+
439  utf8_argv[idx] = new char[utf8_arg.size()];
+
440  memcpy(utf8_argv[idx], &utf8_arg[0], utf8_arg.size());
+
441  }
+
442  return shaka::PackagerMain(argc, utf8_argv.get());
+
443 }
+
444 #else
+
445 int main(int argc, char** argv) {
+
446  return shaka::PackagerMain(argc, argv);
+
447 }
+
448 #endif // defined(OS_WIN)
+
static std::string DefaultStreamLabelFunction(int max_sd_pixels, int max_hd_pixels, int max_uhd1_pixels, const EncryptionParams::EncryptedStreamAttributes &stream_attributes)
Definition: packager.cc:893
HlsPlaylistType
Definition: hls_params.h:16
-
base::Optional< StreamDescriptor > ParseStreamDescriptor(const std::string &descriptor_string)
+
base::Optional< StreamDescriptor > ParseStreamDescriptor(const std::string &descriptor_string)
static bool ReadFileToString(const char *file_name, std::string *contents)
Definition: file.cc:216
+
bool ValidateRawKeyCryptoFlags()
bool ValidateWidevineCryptoFlags()
-
static std::string GetLibraryVersion()
Definition: packager.cc:804
-
static constexpr uint32_t kProtectionSchemeCenc
The protection scheme: "cenc", "cens", "cbc1", "cbcs".
-
bool ValidateFixedCryptoFlags()
+
static std::string GetLibraryVersion()
Definition: packager.cc:889
+
static constexpr uint32_t kProtectionSchemeCenc
The protection scheme: "cenc", "cens", "cbc1", "cbcs".
diff --git a/docs/d2/de7/classshaka_1_1media_1_1TextStreamInfo-members.html b/docs/d2/de7/classshaka_1_1media_1_1TextStreamInfo-members.html index 6681d24802..60c518a034 100644 --- a/docs/d2/de7/classshaka_1_1media_1_1TextStreamInfo-members.html +++ b/docs/d2/de7/classshaka_1_1media_1_1TextStreamInfo-members.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/de7/structshaka_1_1media_1_1mp4_1_1Edit-members.html b/docs/d2/de7/structshaka_1_1media_1_1mp4_1_1Edit-members.html index 561b25f29d..c9383399a8 100644 --- a/docs/d2/de7/structshaka_1_1media_1_1mp4_1_1Edit-members.html +++ b/docs/d2/de7/structshaka_1_1media_1_1mp4_1_1Edit-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/de9/media__handler_8cc_source.html b/docs/d2/de9/media__handler_8cc_source.html index 1be93ccbbc..633db9350f 100644 --- a/docs/d2/de9/media__handler_8cc_source.html +++ b/docs/d2/de9/media__handler_8cc_source.html @@ -182,7 +182,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/de9/mock__muxer__listener_8h_source.html b/docs/d2/de9/mock__muxer__listener_8h_source.html index 156c525927..31bb011af9 100644 --- a/docs/d2/de9/mock__muxer__listener_8h_source.html +++ b/docs/d2/de9/mock__muxer__listener_8h_source.html @@ -170,7 +170,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/deb/es__parser_8h_source.html b/docs/d2/deb/es__parser_8h_source.html index 776c0adf72..87a6852768 100644 --- a/docs/d2/deb/es__parser_8h_source.html +++ b/docs/d2/deb/es__parser_8h_source.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dee/classshaka_1_1media_1_1mp2t_1_1TsSectionPes-members.html b/docs/d2/dee/classshaka_1_1media_1_1mp2t_1_1TsSectionPes-members.html index 9f8d763d37..40931ac3a5 100644 --- a/docs/d2/dee/classshaka_1_1media_1_1mp2t_1_1TsSectionPes-members.html +++ b/docs/d2/dee/classshaka_1_1media_1_1mp2t_1_1TsSectionPes-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dee/pes__packet__generator_8cc_source.html b/docs/d2/dee/pes__packet__generator_8cc_source.html index 8c71a2c84c..66d1f04907 100644 --- a/docs/d2/dee/pes__packet__generator_8cc_source.html +++ b/docs/d2/dee/pes__packet__generator_8cc_source.html @@ -233,7 +233,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/df8/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser.html b/docs/d2/df8/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser.html index 0d988fc65e..39052522b7 100644 --- a/docs/d2/df8/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser.html +++ b/docs/d2/df8/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser.html @@ -131,7 +131,7 @@ size_t cluster_count ( diff --git a/docs/d2/dfc/classshaka_1_1media_1_1MkvWriter-members.html b/docs/d2/dfc/classshaka_1_1media_1_1MkvWriter-members.html index 6eee147b93..56a91fecfa 100644 --- a/docs/d2/dfc/classshaka_1_1media_1_1MkvWriter-members.html +++ b/docs/d2/dfc/classshaka_1_1media_1_1MkvWriter-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dfd/adts__header_8h_source.html b/docs/d2/dfd/adts__header_8h_source.html index 211e3d2db6..03d7fac874 100644 --- a/docs/d2/dfd/adts__header_8h_source.html +++ b/docs/d2/dfd/adts__header_8h_source.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d07/classshaka_1_1media_1_1mp4_1_1BoxReader-members.html b/docs/d3/d07/classshaka_1_1media_1_1mp4_1_1BoxReader-members.html index 96df00ca1b..5274477911 100644 --- a/docs/d3/d07/classshaka_1_1media_1_1mp4_1_1BoxReader-members.html +++ b/docs/d3/d07/classshaka_1_1media_1_1mp4_1_1BoxReader-members.html @@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d07/mpd__params_8h_source.html b/docs/d3/d07/mpd__params_8h_source.html index 755a13cebd..71bb6387d8 100644 --- a/docs/d3/d07/mpd__params_8h_source.html +++ b/docs/d3/d07/mpd__params_8h_source.html @@ -130,7 +130,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d09/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator-members.html b/docs/d3/d09/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator-members.html index b3abde2e07..e5080185c6 100644 --- a/docs/d3/d09/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator-members.html +++ b/docs/d3/d09/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d0a/classshaka_1_1media_1_1MediaParser.html b/docs/d3/d0a/classshaka_1_1media_1_1MediaParser.html index aa30e0710d..ae796e16a6 100644 --- a/docs/d3/d0a/classshaka_1_1media_1_1MediaParser.html +++ b/docs/d3/d0a/classshaka_1_1media_1_1MediaParser.html @@ -299,7 +299,7 @@ Public Member Functions diff --git a/docs/d3/d0c/classshaka_1_1media_1_1mp2t_1_1AdtsHeader.html b/docs/d3/d0c/classshaka_1_1media_1_1mp2t_1_1AdtsHeader.html index e97bd6491b..933a53c3df 100644 --- a/docs/d3/d0c/classshaka_1_1media_1_1mp2t_1_1AdtsHeader.html +++ b/docs/d3/d0c/classshaka_1_1media_1_1mp2t_1_1AdtsHeader.html @@ -336,7 +336,7 @@ Static Public Member Functions diff --git a/docs/d3/d12/classshaka_1_1media_1_1LibcryptoThreading-members.html b/docs/d3/d12/classshaka_1_1media_1_1LibcryptoThreading-members.html index 41a2b048ec..04b9c49c00 100644 --- a/docs/d3/d12/classshaka_1_1media_1_1LibcryptoThreading-members.html +++ b/docs/d3/d12/classshaka_1_1media_1_1LibcryptoThreading-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d18/classshaka_1_1media_1_1mp2t_1_1TsSectionPat-members.html b/docs/d3/d18/classshaka_1_1media_1_1mp2t_1_1TsSectionPat-members.html index 418a4767e2..5951ac3143 100644 --- a/docs/d3/d18/classshaka_1_1media_1_1mp2t_1_1TsSectionPat-members.html +++ b/docs/d3/d18/classshaka_1_1media_1_1mp2t_1_1TsSectionPat-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d19/io__cache_8h_source.html b/docs/d3/d19/io__cache_8h_source.html index 0233ba1983..d74bf7b856 100644 --- a/docs/d3/d19/io__cache_8h_source.html +++ b/docs/d3/d19/io__cache_8h_source.html @@ -160,7 +160,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d1a/classshaka_1_1media_1_1Replicator.html b/docs/d3/d1a/classshaka_1_1media_1_1Replicator.html new file mode 100644 index 0000000000..0199cd359b --- /dev/null +++ b/docs/d3/d1a/classshaka_1_1media_1_1Replicator.html @@ -0,0 +1,190 @@ + + + + + + +Shaka Packager SDK: shaka::media::Replicator Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Shaka Packager SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
shaka::media::Replicator Class Reference
+
+
+ +

#include <replicator.h>

+
+Inheritance diagram for shaka::media::Replicator:
+
+
+ + +shaka::media::MediaHandler + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from shaka::media::MediaHandler
+Status SetHandler (size_t output_stream_index, std::shared_ptr< MediaHandler > handler)
 Connect downstream handler at the specified output stream index.
 
+Status AddHandler (std::shared_ptr< MediaHandler > handler)
 Connect downstream handler to the next availble output stream index.
 
Status Initialize ()
 
+bool IsConnected ()
 Validate if the handler is connected to its upstream handler.
 
- Protected Member Functions inherited from shaka::media::MediaHandler
Status Dispatch (std::unique_ptr< StreamData > stream_data)
 
+Status DispatchPeriodInfo (size_t stream_index, std::shared_ptr< const PeriodInfo > period_info)
 Dispatch the period info to downstream handlers.
 
+Status DispatchStreamInfo (size_t stream_index, std::shared_ptr< const StreamInfo > stream_info)
 Dispatch the stream info to downstream handlers.
 
+Status DispatchMediaSample (size_t stream_index, std::shared_ptr< const MediaSample > media_sample)
 Dispatch the media sample to downstream handlers.
 
+Status DispatchTextSample (size_t stream_index, std::shared_ptr< const TextSample > text_sample)
 Dispatch the text sample to downsream handlers.
 
+Status DispatchMediaEvent (size_t stream_index, std::shared_ptr< const MediaEvent > media_event)
 Dispatch the media event to downstream handlers.
 
+Status DispatchSegmentInfo (size_t stream_index, std::shared_ptr< const SegmentInfo > segment_info)
 Dispatch the segment info to downstream handlers.
 
+Status FlushDownstream (size_t output_stream_index)
 Flush the downstream connected at the specified output stream index.
 
+Status FlushAllDownstreams ()
 Flush all connected downstreams.
 
+bool initialized ()
 
+size_t num_input_streams () const
 
+size_t next_output_stream_index () const
 
+const std::map< size_t,
+std::pair< std::shared_ptr
+< MediaHandler >, size_t > > & 
output_handlers ()
 
+

Detailed Description

+

The replicator takes a single input and send the messages to multiple downstream handlers. The messages that are sent downstream are not copies, they are the original message. It is the responsibility of downstream handlers to make a copy before modifying the message.

+ +

Definition at line 19 of file replicator.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/docs/d3/d1a/classshaka_1_1media_1_1Replicator.png b/docs/d3/d1a/classshaka_1_1media_1_1Replicator.png new file mode 100644 index 0000000000..a94e7f4689 Binary files /dev/null and b/docs/d3/d1a/classshaka_1_1media_1_1Replicator.png differ diff --git a/docs/d3/d1e/classshaka_1_1media_1_1FakeInputMediaHandler.html b/docs/d3/d1e/classshaka_1_1media_1_1FakeInputMediaHandler.html new file mode 100644 index 0000000000..c91b1153c7 --- /dev/null +++ b/docs/d3/d1e/classshaka_1_1media_1_1FakeInputMediaHandler.html @@ -0,0 +1,191 @@ + + + + + + +Shaka Packager SDK: shaka::media::FakeInputMediaHandler Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Shaka Packager SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
shaka::media::FakeInputMediaHandler Class Reference
+
+
+
+Inheritance diagram for shaka::media::FakeInputMediaHandler:
+
+
+ + +shaka::media::MediaHandler + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from shaka::media::MediaHandler
+Status SetHandler (size_t output_stream_index, std::shared_ptr< MediaHandler > handler)
 Connect downstream handler at the specified output stream index.
 
+Status AddHandler (std::shared_ptr< MediaHandler > handler)
 Connect downstream handler to the next availble output stream index.
 
Status Initialize ()
 
+bool IsConnected ()
 Validate if the handler is connected to its upstream handler.
 
- Protected Member Functions inherited from shaka::media::MediaHandler
+virtual Status OnFlushRequest (size_t input_stream_index)
 Event handler for flush request at the specific input stream index.
 
Status Dispatch (std::unique_ptr< StreamData > stream_data)
 
+Status DispatchPeriodInfo (size_t stream_index, std::shared_ptr< const PeriodInfo > period_info)
 Dispatch the period info to downstream handlers.
 
+Status DispatchStreamInfo (size_t stream_index, std::shared_ptr< const StreamInfo > stream_info)
 Dispatch the stream info to downstream handlers.
 
+Status DispatchMediaSample (size_t stream_index, std::shared_ptr< const MediaSample > media_sample)
 Dispatch the media sample to downstream handlers.
 
+Status DispatchTextSample (size_t stream_index, std::shared_ptr< const TextSample > text_sample)
 Dispatch the text sample to downsream handlers.
 
+Status DispatchMediaEvent (size_t stream_index, std::shared_ptr< const MediaEvent > media_event)
 Dispatch the media event to downstream handlers.
 
+Status DispatchSegmentInfo (size_t stream_index, std::shared_ptr< const SegmentInfo > segment_info)
 Dispatch the segment info to downstream handlers.
 
+Status FlushDownstream (size_t output_stream_index)
 Flush the downstream connected at the specified output stream index.
 
+Status FlushAllDownstreams ()
 Flush all connected downstreams.
 
+bool initialized ()
 
+size_t num_input_streams () const
 
+size_t next_output_stream_index () const
 
+const std::map< size_t,
+std::pair< std::shared_ptr
+< MediaHandler >, size_t > > & 
output_handlers ()
 
+

Detailed Description

+
+

Definition at line 86 of file media_handler_test_base.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/docs/d3/d1e/classshaka_1_1media_1_1FakeInputMediaHandler.png b/docs/d3/d1e/classshaka_1_1media_1_1FakeInputMediaHandler.png new file mode 100644 index 0000000000..4d97667af4 Binary files /dev/null and b/docs/d3/d1e/classshaka_1_1media_1_1FakeInputMediaHandler.png differ diff --git a/docs/d3/d35/video__slice__header__parser_8cc_source.html b/docs/d3/d35/video__slice__header__parser_8cc_source.html index fdd7b44670..a32e3b0d80 100644 --- a/docs/d3/d35/video__slice__header__parser_8cc_source.html +++ b/docs/d3/d35/video__slice__header__parser_8cc_source.html @@ -200,7 +200,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d47/structshaka_1_1media_1_1mp4_1_1PrivFrame.html b/docs/d3/d47/structshaka_1_1media_1_1mp4_1_1PrivFrame.html index 78d6decf69..75cffa17e9 100644 --- a/docs/d3/d47/structshaka_1_1media_1_1mp4_1_1PrivFrame.html +++ b/docs/d3/d47/structshaka_1_1media_1_1mp4_1_1PrivFrame.html @@ -129,7 +129,7 @@ std::string value diff --git a/docs/d3/d48/packager_8cc_source.html b/docs/d3/d48/packager_8cc_source.html index 9d6f8a4a26..2510751525 100644 --- a/docs/d3/d48/packager_8cc_source.html +++ b/docs/d3/d48/packager_8cc_source.html @@ -95,867 +95,955 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
6 
7 #include "packager/packager.h"
8 
-
9 #include "packager/app/libcrypto_threading.h"
-
10 #include "packager/app/packager_util.h"
-
11 #include "packager/app/stream_descriptor.h"
-
12 #include "packager/base/at_exit.h"
-
13 #include "packager/base/files/file_path.h"
-
14 #include "packager/base/logging.h"
-
15 #include "packager/base/path_service.h"
-
16 #include "packager/base/strings/stringprintf.h"
-
17 #include "packager/base/threading/simple_thread.h"
-
18 #include "packager/base/time/clock.h"
-
19 #include "packager/file/file.h"
-
20 #include "packager/hls/base/hls_notifier.h"
-
21 #include "packager/hls/base/simple_hls_notifier.h"
-
22 #include "packager/media/base/container_names.h"
-
23 #include "packager/media/base/fourccs.h"
-
24 #include "packager/media/base/key_source.h"
-
25 #include "packager/media/base/muxer_options.h"
-
26 #include "packager/media/base/muxer_util.h"
-
27 #include "packager/media/chunking/chunking_handler.h"
-
28 #include "packager/media/crypto/encryption_handler.h"
-
29 #include "packager/media/demuxer/demuxer.h"
-
30 #include "packager/media/event/combined_muxer_listener.h"
-
31 #include "packager/media/event/hls_notify_muxer_listener.h"
-
32 #include "packager/media/event/mpd_notify_muxer_listener.h"
-
33 #include "packager/media/event/vod_media_info_dump_muxer_listener.h"
-
34 #include "packager/media/formats/mp2t/ts_muxer.h"
-
35 #include "packager/media/formats/mp4/mp4_muxer.h"
-
36 #include "packager/media/formats/webm/webm_muxer.h"
-
37 #include "packager/media/trick_play/trick_play_handler.h"
-
38 #include "packager/mpd/base/dash_iop_mpd_notifier.h"
-
39 #include "packager/mpd/base/media_info.pb.h"
-
40 #include "packager/mpd/base/mpd_builder.h"
-
41 #include "packager/mpd/base/simple_mpd_notifier.h"
-
42 #include "packager/version/version.h"
-
43 
-
44 namespace shaka {
-
45 
-
46 // TODO(kqyang): Clean up namespaces.
-
47 using media::Demuxer;
-
48 using media::KeySource;
-
49 using media::MuxerOptions;
-
50 
-
51 namespace media {
-
52 namespace {
-
53 
-
54 const char kMediaInfoSuffix[] = ".media_info";
-
55 
-
56 // TODO(rkuroiwa): Write TTML and WebVTT parser (demuxing) for a better check
-
57 // and for supporting live/segmenting (muxing). With a demuxer and a muxer,
-
58 // CreateRemuxJobs() shouldn't treat text as a special case.
-
59 std::string DetermineTextFileFormat(const std::string& file) {
-
60  std::string content;
-
61  if (!File::ReadFileToString(file.c_str(), &content)) {
-
62  LOG(ERROR) << "Failed to open file " << file
-
63  << " to determine file format.";
-
64  return "";
-
65  }
-
66  MediaContainerName container_name = DetermineContainer(
-
67  reinterpret_cast<const uint8_t*>(content.data()), content.size());
-
68  if (container_name == CONTAINER_WEBVTT) {
-
69  return "vtt";
-
70  } else if (container_name == CONTAINER_TTML) {
-
71  return "ttml";
-
72  }
-
73 
-
74  return "";
-
75 }
-
76 
-
77 MediaContainerName GetOutputFormat(const StreamDescriptor& descriptor) {
-
78  MediaContainerName output_format = CONTAINER_UNKNOWN;
-
79  if (!descriptor.output_format.empty()) {
-
80  output_format = DetermineContainerFromFormatName(descriptor.output_format);
-
81  if (output_format == CONTAINER_UNKNOWN) {
-
82  LOG(ERROR) << "Unable to determine output format from '"
-
83  << descriptor.output_format << "'.";
-
84  }
-
85  } else {
-
86  const std::string& output_name = descriptor.output.empty()
-
87  ? descriptor.segment_template
-
88  : descriptor.output;
-
89  if (output_name.empty())
-
90  return CONTAINER_UNKNOWN;
-
91  output_format = DetermineContainerFromFileName(output_name);
-
92  if (output_format == CONTAINER_UNKNOWN) {
-
93  LOG(ERROR) << "Unable to determine output format from '" << output_name
-
94  << "'.";
-
95  }
-
96  }
-
97  return output_format;
-
98 }
-
99 
-
100 Status ValidateStreamDescriptor(bool dump_stream_info,
-
101  const StreamDescriptor& stream) {
-
102  if (stream.input.empty()) {
-
103  return Status(error::INVALID_ARGUMENT, "Stream input not specified.");
-
104  }
-
105 
-
106  // The only time a stream can have no outputs, is when dump stream info is
-
107  // set.
-
108  if (dump_stream_info && stream.output.empty() &&
-
109  stream.segment_template.empty()) {
-
110  return Status::OK;
-
111  }
-
112 
-
113  if (stream.output.empty() && stream.segment_template.empty()) {
-
114  return Status(error::INVALID_ARGUMENT,
-
115  "Streams must specify 'output' or 'segment template'.");
-
116  }
-
117 
-
118  // Whenever there is output, a stream must be selected.
-
119  if (stream.stream_selector.empty()) {
-
120  return Status(error::INVALID_ARGUMENT,
-
121  "Stream stream_selector not specified.");
-
122  }
-
123 
-
124  // If a segment template is provided, it must be valid.
-
125  if (stream.segment_template.length()) {
-
126  Status template_check = ValidateSegmentTemplate(stream.segment_template);
-
127  if (!template_check.ok()) {
-
128  return template_check;
-
129  }
-
130  }
-
131 
-
132  // There are some specifics that must be checked based on which format
-
133  // we are writing to.
-
134  const MediaContainerName output_format = GetOutputFormat(stream);
+
9 #include <algorithm>
+
10 
+
11 #include "packager/app/libcrypto_threading.h"
+
12 #include "packager/app/packager_util.h"
+
13 #include "packager/app/stream_descriptor.h"
+
14 #include "packager/base/at_exit.h"
+
15 #include "packager/base/files/file_path.h"
+
16 #include "packager/base/logging.h"
+
17 #include "packager/base/path_service.h"
+
18 #include "packager/base/strings/stringprintf.h"
+
19 #include "packager/base/threading/simple_thread.h"
+
20 #include "packager/base/time/clock.h"
+
21 #include "packager/file/file.h"
+
22 #include "packager/hls/base/hls_notifier.h"
+
23 #include "packager/hls/base/simple_hls_notifier.h"
+
24 #include "packager/media/base/container_names.h"
+
25 #include "packager/media/base/fourccs.h"
+
26 #include "packager/media/base/key_source.h"
+
27 #include "packager/media/base/language_utils.h"
+
28 #include "packager/media/base/muxer_options.h"
+
29 #include "packager/media/base/muxer_util.h"
+
30 #include "packager/media/chunking/chunking_handler.h"
+
31 #include "packager/media/crypto/encryption_handler.h"
+
32 #include "packager/media/demuxer/demuxer.h"
+
33 #include "packager/media/event/combined_muxer_listener.h"
+
34 #include "packager/media/event/hls_notify_muxer_listener.h"
+
35 #include "packager/media/event/mpd_notify_muxer_listener.h"
+
36 #include "packager/media/event/vod_media_info_dump_muxer_listener.h"
+
37 #include "packager/media/formats/mp2t/ts_muxer.h"
+
38 #include "packager/media/formats/mp4/mp4_muxer.h"
+
39 #include "packager/media/formats/webm/webm_muxer.h"
+
40 #include "packager/media/replicator/replicator.h"
+
41 #include "packager/media/trick_play/trick_play_handler.h"
+
42 #include "packager/mpd/base/dash_iop_mpd_notifier.h"
+
43 #include "packager/mpd/base/media_info.pb.h"
+
44 #include "packager/mpd/base/mpd_builder.h"
+
45 #include "packager/mpd/base/simple_mpd_notifier.h"
+
46 #include "packager/version/version.h"
+
47 
+
48 namespace shaka {
+
49 
+
50 // TODO(kqyang): Clean up namespaces.
+
51 using media::Demuxer;
+
52 using media::KeySource;
+
53 using media::MuxerOptions;
+
54 
+
55 namespace media {
+
56 namespace {
+
57 
+
58 const char kMediaInfoSuffix[] = ".media_info";
+
59 
+
60 // TODO(rkuroiwa): Write TTML and WebVTT parser (demuxing) for a better check
+
61 // and for supporting live/segmenting (muxing). With a demuxer and a muxer,
+
62 // CreateAllJobs() shouldn't treat text as a special case.
+
63 std::string DetermineTextFileFormat(const std::string& file) {
+
64  std::string content;
+
65  if (!File::ReadFileToString(file.c_str(), &content)) {
+
66  LOG(ERROR) << "Failed to open file " << file
+
67  << " to determine file format.";
+
68  return "";
+
69  }
+
70  MediaContainerName container_name = DetermineContainer(
+
71  reinterpret_cast<const uint8_t*>(content.data()), content.size());
+
72  if (container_name == CONTAINER_WEBVTT) {
+
73  return "vtt";
+
74  } else if (container_name == CONTAINER_TTML) {
+
75  return "ttml";
+
76  }
+
77 
+
78  return "";
+
79 }
+
80 
+
81 MediaContainerName GetOutputFormat(const StreamDescriptor& descriptor) {
+
82  MediaContainerName output_format = CONTAINER_UNKNOWN;
+
83  if (!descriptor.output_format.empty()) {
+
84  output_format = DetermineContainerFromFormatName(descriptor.output_format);
+
85  if (output_format == CONTAINER_UNKNOWN) {
+
86  LOG(ERROR) << "Unable to determine output format from '"
+
87  << descriptor.output_format << "'.";
+
88  }
+
89  } else {
+
90  const std::string& output_name = descriptor.output.empty()
+
91  ? descriptor.segment_template
+
92  : descriptor.output;
+
93  if (output_name.empty())
+
94  return CONTAINER_UNKNOWN;
+
95  output_format = DetermineContainerFromFileName(output_name);
+
96  if (output_format == CONTAINER_UNKNOWN) {
+
97  LOG(ERROR) << "Unable to determine output format from '" << output_name
+
98  << "'.";
+
99  }
+
100  }
+
101  return output_format;
+
102 }
+
103 
+
104 Status ValidateStreamDescriptor(bool dump_stream_info,
+
105  const StreamDescriptor& stream) {
+
106  if (stream.input.empty()) {
+
107  return Status(error::INVALID_ARGUMENT, "Stream input not specified.");
+
108  }
+
109 
+
110  // The only time a stream can have no outputs, is when dump stream info is
+
111  // set.
+
112  if (dump_stream_info && stream.output.empty() &&
+
113  stream.segment_template.empty()) {
+
114  return Status::OK;
+
115  }
+
116 
+
117  if (stream.output.empty() && stream.segment_template.empty()) {
+
118  return Status(error::INVALID_ARGUMENT,
+
119  "Streams must specify 'output' or 'segment template'.");
+
120  }
+
121 
+
122  // Whenever there is output, a stream must be selected.
+
123  if (stream.stream_selector.empty()) {
+
124  return Status(error::INVALID_ARGUMENT,
+
125  "Stream stream_selector not specified.");
+
126  }
+
127 
+
128  // If a segment template is provided, it must be valid.
+
129  if (stream.segment_template.length()) {
+
130  Status template_check = ValidateSegmentTemplate(stream.segment_template);
+
131  if (!template_check.ok()) {
+
132  return template_check;
+
133  }
+
134  }
135 
-
136  if (output_format == CONTAINER_UNKNOWN) {
-
137  return Status(error::INVALID_ARGUMENT, "Unsupported output format.");
-
138  } else if (output_format == MediaContainerName::CONTAINER_MPEG2TS) {
-
139  if (stream.segment_template.empty()) {
-
140  return Status(error::INVALID_ARGUMENT,
-
141  "Please specify segment_template. Single file TS output is "
-
142  "not supported.");
-
143  }
-
144 
-
145  // Right now the init segment is saved in |output| for multi-segment
-
146  // content. However, for TS all segments must be self-initializing so
-
147  // there cannot be an init segment.
-
148  if (stream.output.length()) {
-
149  return Status(error::INVALID_ARGUMENT,
-
150  "All TS segments must be self-initializing. Stream "
-
151  "descriptors 'output' or 'init_segment' are not allowed.");
-
152  }
-
153  } else {
-
154  // For any other format, if there is a segment template, there must be an
-
155  // init segment provided.
-
156  if (stream.segment_template.length() && stream.output.empty()) {
-
157  return Status(error::INVALID_ARGUMENT,
-
158  "Please specify 'init_segment'. All non-TS multi-segment "
-
159  "content must provide an init segment.");
-
160  }
-
161  }
-
162 
-
163  return Status::OK;
-
164 }
-
165 
-
166 Status ValidateParams(const PackagingParams& packaging_params,
-
167  const std::vector<StreamDescriptor>& stream_descriptors) {
-
168  if (!packaging_params.chunking_params.segment_sap_aligned &&
-
169  packaging_params.chunking_params.subsegment_sap_aligned) {
-
170  return Status(error::INVALID_ARGUMENT,
-
171  "Setting segment_sap_aligned to false but "
-
172  "subsegment_sap_aligned to true is not allowed.");
-
173  }
-
174 
-
175  if (stream_descriptors.empty()) {
-
176  return Status(error::INVALID_ARGUMENT,
-
177  "Stream descriptors cannot be empty.");
-
178  }
-
179 
-
180  // On demand profile generates single file segment while live profile
-
181  // generates multiple segments specified using segment template.
-
182  const bool on_demand_dash_profile =
-
183  stream_descriptors.begin()->segment_template.empty();
-
184  for (const auto& descriptor : stream_descriptors) {
-
185  if (on_demand_dash_profile != descriptor.segment_template.empty()) {
-
186  return Status(error::INVALID_ARGUMENT,
-
187  "Inconsistent stream descriptor specification: "
-
188  "segment_template should be specified for none or all "
-
189  "stream descriptors.");
-
190  }
-
191 
-
192  Status stream_check = ValidateStreamDescriptor(
-
193  packaging_params.test_params.dump_stream_info, descriptor);
-
194 
-
195  if (!stream_check.ok()) {
-
196  return stream_check;
-
197  }
-
198  }
-
199 
-
200  if (packaging_params.output_media_info && !on_demand_dash_profile) {
-
201  // TODO(rkuroiwa, kqyang): Support partial media info dump for live.
-
202  return Status(error::UNIMPLEMENTED,
-
203  "--output_media_info is only supported for on-demand profile "
-
204  "(not using segment_template).");
-
205  }
-
206 
-
207  return Status::OK;
-
208 }
-
209 
-
210 class StreamDescriptorCompareFn {
-
211  public:
-
212  bool operator()(const StreamDescriptor& a, const StreamDescriptor& b) {
-
213  if (a.input == b.input) {
-
214  if (a.stream_selector == b.stream_selector)
-
215  // Stream with high trick_play_factor is at the beginning.
-
216  return a.trick_play_factor > b.trick_play_factor;
-
217  else
-
218  return a.stream_selector < b.stream_selector;
-
219  }
-
220 
-
221  return a.input < b.input;
-
222  }
-
223 };
-
224 
-
226 typedef std::multiset<StreamDescriptor, StreamDescriptorCompareFn>
-
227  StreamDescriptorList;
-
228 
-
229 // A fake clock that always return time 0 (epoch). Should only be used for
-
230 // testing.
-
231 class FakeClock : public base::Clock {
-
232  public:
-
233  base::Time Now() override { return base::Time(); }
-
234 };
-
235 
-
236 class Job : public base::SimpleThread {
-
237  public:
-
238  Job(const std::string& name, std::shared_ptr<OriginHandler> work)
-
239  : SimpleThread(name),
-
240  work_(work),
-
241  wait_(base::WaitableEvent::ResetPolicy::MANUAL,
-
242  base::WaitableEvent::InitialState::NOT_SIGNALED) {}
-
243 
-
244  void Initialize() {
-
245  DCHECK(work_);
-
246  status_ = work_->Initialize();
-
247  }
-
248 
-
249  void Cancel() {
-
250  DCHECK(work_);
-
251  work_->Cancel();
-
252  }
-
253 
-
254  const Status& status() const { return status_; }
-
255 
-
256  base::WaitableEvent* wait() { return &wait_; }
+
136  // There are some specifics that must be checked based on which format
+
137  // we are writing to.
+
138  const MediaContainerName output_format = GetOutputFormat(stream);
+
139 
+
140  if (output_format == CONTAINER_UNKNOWN) {
+
141  return Status(error::INVALID_ARGUMENT, "Unsupported output format.");
+
142  } else if (output_format == MediaContainerName::CONTAINER_MPEG2TS) {
+
143  if (stream.segment_template.empty()) {
+
144  return Status(error::INVALID_ARGUMENT,
+
145  "Please specify segment_template. Single file TS output is "
+
146  "not supported.");
+
147  }
+
148 
+
149  // Right now the init segment is saved in |output| for multi-segment
+
150  // content. However, for TS all segments must be self-initializing so
+
151  // there cannot be an init segment.
+
152  if (stream.output.length()) {
+
153  return Status(error::INVALID_ARGUMENT,
+
154  "All TS segments must be self-initializing. Stream "
+
155  "descriptors 'output' or 'init_segment' are not allowed.");
+
156  }
+
157  } else {
+
158  // For any other format, if there is a segment template, there must be an
+
159  // init segment provided.
+
160  if (stream.segment_template.length() && stream.output.empty()) {
+
161  return Status(error::INVALID_ARGUMENT,
+
162  "Please specify 'init_segment'. All non-TS multi-segment "
+
163  "content must provide an init segment.");
+
164  }
+
165  }
+
166 
+
167  return Status::OK;
+
168 }
+
169 
+
170 Status ValidateParams(const PackagingParams& packaging_params,
+
171  const std::vector<StreamDescriptor>& stream_descriptors) {
+
172  if (!packaging_params.chunking_params.segment_sap_aligned &&
+
173  packaging_params.chunking_params.subsegment_sap_aligned) {
+
174  return Status(error::INVALID_ARGUMENT,
+
175  "Setting segment_sap_aligned to false but "
+
176  "subsegment_sap_aligned to true is not allowed.");
+
177  }
+
178 
+
179  if (stream_descriptors.empty()) {
+
180  return Status(error::INVALID_ARGUMENT,
+
181  "Stream descriptors cannot be empty.");
+
182  }
+
183 
+
184  // On demand profile generates single file segment while live profile
+
185  // generates multiple segments specified using segment template.
+
186  const bool on_demand_dash_profile =
+
187  stream_descriptors.begin()->segment_template.empty();
+
188  for (const auto& descriptor : stream_descriptors) {
+
189  if (on_demand_dash_profile != descriptor.segment_template.empty()) {
+
190  return Status(error::INVALID_ARGUMENT,
+
191  "Inconsistent stream descriptor specification: "
+
192  "segment_template should be specified for none or all "
+
193  "stream descriptors.");
+
194  }
+
195 
+
196  Status stream_check = ValidateStreamDescriptor(
+
197  packaging_params.test_params.dump_stream_info, descriptor);
+
198 
+
199  if (!stream_check.ok()) {
+
200  return stream_check;
+
201  }
+
202  }
+
203 
+
204  if (packaging_params.output_media_info && !on_demand_dash_profile) {
+
205  // TODO(rkuroiwa, kqyang): Support partial media info dump for live.
+
206  return Status(error::UNIMPLEMENTED,
+
207  "--output_media_info is only supported for on-demand profile "
+
208  "(not using segment_template).");
+
209  }
+
210 
+
211  return Status::OK;
+
212 }
+
213 
+
214 bool StreamDescriptorCompareFn(const StreamDescriptor& a,
+
215  const StreamDescriptor& b) {
+
216  if (a.input == b.input) {
+
217  if (a.stream_selector == b.stream_selector) {
+
218  // The MPD notifier requires that the main track comes first, so make
+
219  // sure that happens.
+
220  if (a.trick_play_factor == 0 || b.trick_play_factor == 0) {
+
221  return a.trick_play_factor == 0;
+
222  } else {
+
223  return a.trick_play_factor > b.trick_play_factor;
+
224  }
+
225  } else {
+
226  return a.stream_selector < b.stream_selector;
+
227  }
+
228  }
+
229 
+
230  return a.input < b.input;
+
231 }
+
232 
+
233 // A fake clock that always return time 0 (epoch). Should only be used for
+
234 // testing.
+
235 class FakeClock : public base::Clock {
+
236  public:
+
237  base::Time Now() override { return base::Time(); }
+
238 };
+
239 
+
240 class Job : public base::SimpleThread {
+
241  public:
+
242  Job(const std::string& name, std::shared_ptr<OriginHandler> work)
+
243  : SimpleThread(name),
+
244  work_(work),
+
245  wait_(base::WaitableEvent::ResetPolicy::MANUAL,
+
246  base::WaitableEvent::InitialState::NOT_SIGNALED) {}
+
247 
+
248  void Initialize() {
+
249  DCHECK(work_);
+
250  status_ = work_->Initialize();
+
251  }
+
252 
+
253  void Cancel() {
+
254  DCHECK(work_);
+
255  work_->Cancel();
+
256  }
257 
-
258  private:
-
259  Job(const Job&) = delete;
-
260  Job& operator=(const Job&) = delete;
+
258  const Status& status() const { return status_; }
+
259 
+
260  base::WaitableEvent* wait() { return &wait_; }
261 
-
262  void Run() override {
-
263  DCHECK(work_);
-
264  status_ = work_->Run();
-
265  wait_.Signal();
-
266  }
-
267 
-
268  std::shared_ptr<OriginHandler> work_;
-
269  Status status_;
-
270 
-
271  base::WaitableEvent wait_;
-
272 };
-
273 
-
274 bool StreamInfoToTextMediaInfo(const StreamDescriptor& stream_descriptor,
-
275  MediaInfo* text_media_info) {
-
276  const std::string& language = stream_descriptor.language;
-
277  const std::string format = DetermineTextFileFormat(stream_descriptor.input);
-
278  if (format.empty()) {
-
279  LOG(ERROR) << "Failed to determine the text file format for "
-
280  << stream_descriptor.input;
-
281  return false;
-
282  }
-
283 
-
284  if (!File::Copy(stream_descriptor.input.c_str(),
-
285  stream_descriptor.output.c_str())) {
-
286  LOG(ERROR) << "Failed to copy the input file (" << stream_descriptor.input
-
287  << ") to output file (" << stream_descriptor.output << ").";
-
288  return false;
-
289  }
-
290 
-
291  text_media_info->set_media_file_name(stream_descriptor.output);
-
292  text_media_info->set_container_type(MediaInfo::CONTAINER_TEXT);
-
293 
-
294  if (stream_descriptor.bandwidth != 0) {
-
295  text_media_info->set_bandwidth(stream_descriptor.bandwidth);
-
296  } else {
-
297  // Text files are usually small and since the input is one file; there's no
-
298  // way for the player to do ranged requests. So set this value to something
-
299  // reasonable.
-
300  const int kDefaultTextBandwidth = 256;
-
301  text_media_info->set_bandwidth(kDefaultTextBandwidth);
-
302  }
-
303 
-
304  MediaInfo::TextInfo* text_info = text_media_info->mutable_text_info();
-
305  text_info->set_format(format);
-
306  if (!language.empty())
-
307  text_info->set_language(language);
-
308 
-
309  return true;
-
310 }
-
311 
-
312 std::unique_ptr<MuxerListener> CreateMuxerListener(
-
313  const StreamDescriptor& stream,
-
314  int stream_number,
-
315  bool output_media_info,
-
316  MpdNotifier* mpd_notifier,
-
317  hls::HlsNotifier* hls_notifier) {
-
318  std::unique_ptr<CombinedMuxerListener> combined_listener(
-
319  new CombinedMuxerListener);
-
320 
-
321  if (output_media_info) {
-
322  std::unique_ptr<MuxerListener> listener(
-
323  new VodMediaInfoDumpMuxerListener(stream.output + kMediaInfoSuffix));
-
324  combined_listener->AddListener(std::move(listener));
-
325  }
-
326 
-
327  if (mpd_notifier) {
-
328  std::unique_ptr<MuxerListener> listener(
-
329  new MpdNotifyMuxerListener(mpd_notifier));
-
330  combined_listener->AddListener(std::move(listener));
-
331  }
-
332 
-
333  if (hls_notifier) {
-
334  // TODO(rkuroiwa): Do some smart stuff to group the audios, e.g. detect
-
335  // languages.
-
336  std::string group_id = stream.hls_group_id;
-
337  std::string name = stream.hls_name;
-
338  std::string hls_playlist_name = stream.hls_playlist_name;
-
339  if (group_id.empty())
-
340  group_id = "audio";
-
341  if (name.empty())
-
342  name = base::StringPrintf("stream_%d", stream_number);
-
343  if (hls_playlist_name.empty())
-
344  hls_playlist_name = base::StringPrintf("stream_%d.m3u8", stream_number);
-
345 
-
346  std::unique_ptr<MuxerListener> listener(new HlsNotifyMuxerListener(
-
347  hls_playlist_name, name, group_id, hls_notifier));
-
348  combined_listener->AddListener(std::move(listener));
-
349  }
-
350 
-
351  return std::move(combined_listener);
-
352 }
-
353 
-
354 std::shared_ptr<Muxer> CreateMuxer(const PackagingParams& packaging_params,
-
355  const StreamDescriptor& stream,
-
356  base::Clock* clock,
-
357  std::unique_ptr<MuxerListener> listener) {
-
358  const MediaContainerName format = GetOutputFormat(stream);
-
359 
-
360  MuxerOptions options;
-
361  options.mp4_params = packaging_params.mp4_output_params;
-
362  options.temp_dir = packaging_params.temp_dir;
-
363  options.bandwidth = stream.bandwidth;
-
364  options.output_file_name = stream.output;
-
365  options.segment_template = stream.segment_template;
-
366 
-
367  std::shared_ptr<Muxer> muxer;
-
368 
-
369  switch (format) {
-
370  case CONTAINER_WEBM:
-
371  muxer = std::make_shared<webm::WebMMuxer>(options);
-
372  break;
-
373  case CONTAINER_MPEG2TS:
-
374  muxer = std::make_shared<mp2t::TsMuxer>(options);
-
375  break;
-
376  case CONTAINER_MOV:
-
377  muxer = std::make_shared<mp4::MP4Muxer>(options);
-
378  break;
-
379  default:
-
380  LOG(ERROR) << "Cannot support muxing to " << format;
-
381  break;
-
382  }
-
383 
-
384  if (!muxer) {
-
385  return nullptr;
+
262  private:
+
263  Job(const Job&) = delete;
+
264  Job& operator=(const Job&) = delete;
+
265 
+
266  void Run() override {
+
267  DCHECK(work_);
+
268  status_ = work_->Run();
+
269  wait_.Signal();
+
270  }
+
271 
+
272  std::shared_ptr<OriginHandler> work_;
+
273  Status status_;
+
274 
+
275  base::WaitableEvent wait_;
+
276 };
+
277 
+
278 bool StreamInfoToTextMediaInfo(const StreamDescriptor& stream_descriptor,
+
279  MediaInfo* text_media_info) {
+
280  const std::string& language = stream_descriptor.language;
+
281  const std::string format = DetermineTextFileFormat(stream_descriptor.input);
+
282  if (format.empty()) {
+
283  LOG(ERROR) << "Failed to determine the text file format for "
+
284  << stream_descriptor.input;
+
285  return false;
+
286  }
+
287 
+
288  if (!File::Copy(stream_descriptor.input.c_str(),
+
289  stream_descriptor.output.c_str())) {
+
290  LOG(ERROR) << "Failed to copy the input file (" << stream_descriptor.input
+
291  << ") to output file (" << stream_descriptor.output << ").";
+
292  return false;
+
293  }
+
294 
+
295  text_media_info->set_media_file_name(stream_descriptor.output);
+
296  text_media_info->set_container_type(MediaInfo::CONTAINER_TEXT);
+
297 
+
298  if (stream_descriptor.bandwidth != 0) {
+
299  text_media_info->set_bandwidth(stream_descriptor.bandwidth);
+
300  } else {
+
301  // Text files are usually small and since the input is one file; there's no
+
302  // way for the player to do ranged requests. So set this value to something
+
303  // reasonable.
+
304  const int kDefaultTextBandwidth = 256;
+
305  text_media_info->set_bandwidth(kDefaultTextBandwidth);
+
306  }
+
307 
+
308  MediaInfo::TextInfo* text_info = text_media_info->mutable_text_info();
+
309  text_info->set_format(format);
+
310  if (!language.empty())
+
311  text_info->set_language(language);
+
312 
+
313  return true;
+
314 }
+
315 
+
316 std::unique_ptr<MuxerListener> CreateMuxerListener(
+
317  const StreamDescriptor& stream,
+
318  int stream_number,
+
319  bool output_media_info,
+
320  MpdNotifier* mpd_notifier,
+
321  hls::HlsNotifier* hls_notifier) {
+
322  std::unique_ptr<CombinedMuxerListener> combined_listener(
+
323  new CombinedMuxerListener);
+
324 
+
325  if (output_media_info) {
+
326  std::unique_ptr<MuxerListener> listener(
+
327  new VodMediaInfoDumpMuxerListener(stream.output + kMediaInfoSuffix));
+
328  combined_listener->AddListener(std::move(listener));
+
329  }
+
330 
+
331  if (mpd_notifier) {
+
332  std::unique_ptr<MuxerListener> listener(
+
333  new MpdNotifyMuxerListener(mpd_notifier));
+
334  combined_listener->AddListener(std::move(listener));
+
335  }
+
336 
+
337  if (hls_notifier) {
+
338  // TODO(rkuroiwa): Do some smart stuff to group the audios, e.g. detect
+
339  // languages.
+
340  std::string group_id = stream.hls_group_id;
+
341  std::string name = stream.hls_name;
+
342  std::string hls_playlist_name = stream.hls_playlist_name;
+
343  if (group_id.empty())
+
344  group_id = "audio";
+
345  if (name.empty())
+
346  name = base::StringPrintf("stream_%d", stream_number);
+
347  if (hls_playlist_name.empty())
+
348  hls_playlist_name = base::StringPrintf("stream_%d.m3u8", stream_number);
+
349 
+
350  std::unique_ptr<MuxerListener> listener(new HlsNotifyMuxerListener(
+
351  hls_playlist_name, name, group_id, hls_notifier));
+
352  combined_listener->AddListener(std::move(listener));
+
353  }
+
354 
+
355  return std::move(combined_listener);
+
356 }
+
357 
+
358 std::shared_ptr<Muxer> CreateMuxer(const PackagingParams& packaging_params,
+
359  const StreamDescriptor& stream,
+
360  base::Clock* clock,
+
361  std::unique_ptr<MuxerListener> listener) {
+
362  const MediaContainerName format = GetOutputFormat(stream);
+
363 
+
364  MuxerOptions options;
+
365  options.mp4_params = packaging_params.mp4_output_params;
+
366  options.temp_dir = packaging_params.temp_dir;
+
367  options.bandwidth = stream.bandwidth;
+
368  options.output_file_name = stream.output;
+
369  options.segment_template = stream.segment_template;
+
370 
+
371  std::shared_ptr<Muxer> muxer;
+
372 
+
373  switch (format) {
+
374  case CONTAINER_WEBM:
+
375  muxer = std::make_shared<webm::WebMMuxer>(options);
+
376  break;
+
377  case CONTAINER_MPEG2TS:
+
378  muxer = std::make_shared<mp2t::TsMuxer>(options);
+
379  break;
+
380  case CONTAINER_MOV:
+
381  muxer = std::make_shared<mp4::MP4Muxer>(options);
+
382  break;
+
383  default:
+
384  LOG(ERROR) << "Cannot support muxing to " << format;
+
385  break;
386  }
387 
-
388  // We successfully created a muxer, then there is a couple settings
-
389  // we should set before returning it.
-
390  if (clock) {
-
391  muxer->set_clock(clock);
-
392  }
-
393 
-
394  if (listener) {
-
395  muxer->SetMuxerListener(std::move(listener));
+
388  if (!muxer) {
+
389  return nullptr;
+
390  }
+
391 
+
392  // We successfully created a muxer, then there is a couple settings
+
393  // we should set before returning it.
+
394  if (clock) {
+
395  muxer->set_clock(clock);
396  }
397 
-
398  return muxer;
-
399 }
-
400 
-
401 std::shared_ptr<MediaHandler> CreateCryptoHandler(
-
402  const PackagingParams& packaging_params,
-
403  const StreamDescriptor& stream,
-
404  KeySource* key_source) {
-
405  if (stream.skip_encryption) {
-
406  return nullptr;
-
407  }
-
408 
-
409  if (!key_source) {
+
398  if (listener) {
+
399  muxer->SetMuxerListener(std::move(listener));
+
400  }
+
401 
+
402  return muxer;
+
403 }
+
404 
+
405 std::shared_ptr<MediaHandler> CreateEncryptionHandler(
+
406  const PackagingParams& packaging_params,
+
407  const StreamDescriptor& stream,
+
408  KeySource* key_source) {
+
409  if (stream.skip_encryption) {
410  return nullptr;
411  }
412 
-
413  // Make a copy so that we can modify it for this specific stream.
-
414  EncryptionParams encryption_params = packaging_params.encryption_params;
-
415 
-
416  // Use Sample AES in MPEG2TS.
-
417  // TODO(kqyang): Consider adding a new flag to enable Sample AES as we
-
418  // will support CENC in TS in the future.
-
419  if (GetOutputFormat(stream) == CONTAINER_MPEG2TS) {
-
420  VLOG(1) << "Use Apple Sample AES encryption for MPEG2TS.";
-
421  encryption_params.protection_scheme = kAppleSampleAesProtectionScheme;
-
422  }
-
423 
-
424  if (!encryption_params.stream_label_func) {
-
425  const int kDefaultMaxSdPixels = 768 * 576;
-
426  const int kDefaultMaxHdPixels = 1920 * 1080;
-
427  const int kDefaultMaxUhd1Pixels = 4096 * 2160;
-
428  encryption_params.stream_label_func = std::bind(
-
429  &Packager::DefaultStreamLabelFunction, kDefaultMaxSdPixels,
-
430  kDefaultMaxHdPixels, kDefaultMaxUhd1Pixels, std::placeholders::_1);
-
431  }
-
432 
-
433  return std::make_shared<EncryptionHandler>(encryption_params, key_source);
-
434 }
-
435 
-
436 Status CreateRemuxJobs(const StreamDescriptorList& stream_descriptors,
-
437  const PackagingParams& packaging_params,
-
438  FakeClock* fake_clock,
-
439  KeySource* encryption_key_source,
-
440  MpdNotifier* mpd_notifier,
-
441  hls::HlsNotifier* hls_notifier,
-
442  std::vector<std::unique_ptr<Job>>* jobs) {
-
443  // No notifiers OR (mpd_notifier XOR hls_notifier); which is NAND.
-
444  DCHECK(!(mpd_notifier && hls_notifier));
-
445  DCHECK(jobs);
-
446 
-
447  std::shared_ptr<Demuxer> demuxer;
-
448  std::shared_ptr<TrickPlayHandler> trick_play_handler;
-
449 
-
450  std::string previous_input;
-
451  std::string previous_stream_selector;
-
452  int stream_number = 0;
-
453  for (StreamDescriptorList::const_iterator
-
454  stream_iter = stream_descriptors.begin();
-
455  stream_iter != stream_descriptors.end();
-
456  ++stream_iter, ++stream_number) {
-
457  MediaContainerName output_format = GetOutputFormat(*stream_iter);
+
413  if (!key_source) {
+
414  return nullptr;
+
415  }
+
416 
+
417  // Make a copy so that we can modify it for this specific stream.
+
418  EncryptionParams encryption_params = packaging_params.encryption_params;
+
419 
+
420  // Use Sample AES in MPEG2TS.
+
421  // TODO(kqyang): Consider adding a new flag to enable Sample AES as we
+
422  // will support CENC in TS in the future.
+
423  if (GetOutputFormat(stream) == CONTAINER_MPEG2TS) {
+
424  VLOG(1) << "Use Apple Sample AES encryption for MPEG2TS.";
+
425  encryption_params.protection_scheme = kAppleSampleAesProtectionScheme;
+
426  }
+
427 
+
428  if (!stream.drm_label.empty()) {
+
429  const std::string& drm_label = stream.drm_label;
+
430  encryption_params.stream_label_func =
+
431  [drm_label](const EncryptionParams::EncryptedStreamAttributes&) {
+
432  return drm_label;
+
433  };
+
434  } else if (!encryption_params.stream_label_func) {
+
435  const int kDefaultMaxSdPixels = 768 * 576;
+
436  const int kDefaultMaxHdPixels = 1920 * 1080;
+
437  const int kDefaultMaxUhd1Pixels = 4096 * 2160;
+
438  encryption_params.stream_label_func = std::bind(
+
439  &Packager::DefaultStreamLabelFunction, kDefaultMaxSdPixels,
+
440  kDefaultMaxHdPixels, kDefaultMaxUhd1Pixels, std::placeholders::_1);
+
441  }
+
442 
+
443  return std::make_shared<EncryptionHandler>(encryption_params, key_source);
+
444 }
+
445 
+
446 Status CreateTextJobs(
+
447  int first_stream_number,
+
448  const std::vector<std::reference_wrapper<const StreamDescriptor>>& streams,
+
449  const PackagingParams& packaging_params,
+
450  MpdNotifier* mpd_notifier,
+
451  std::vector<std::unique_ptr<Job>>* jobs) {
+
452  // -1 so that it will be back at |first_stream_number| on the first
+
453  // iteration.
+
454  int stream_number = first_stream_number - 1;
+
455 
+
456  for (const StreamDescriptor& stream : streams) {
+
457  stream_number += 1;
458 
-
459  // Process stream descriptor.
-
460  MuxerOptions stream_muxer_options;
-
461  stream_muxer_options.mp4_params = packaging_params.mp4_output_params;
-
462  stream_muxer_options.temp_dir = packaging_params.temp_dir;
-
463  stream_muxer_options.output_file_name = stream_iter->output;
-
464  if (!stream_iter->segment_template.empty()) {
-
465  Status template_check =
-
466  ValidateSegmentTemplate(stream_iter->segment_template);
-
467  if (!template_check.ok()) {
-
468  return template_check;
-
469  }
-
470  stream_muxer_options.segment_template = stream_iter->segment_template;
-
471  }
-
472  stream_muxer_options.bandwidth = stream_iter->bandwidth;
-
473 
-
474  if (stream_iter->stream_selector == "text" &&
-
475  output_format != CONTAINER_MOV) {
-
476  MediaInfo text_media_info;
-
477  if (!StreamInfoToTextMediaInfo(*stream_iter, &text_media_info)) {
-
478  return Status(error::INVALID_ARGUMENT,
-
479  "Could not create media info for stream.");
+
459  const MediaContainerName output_format = GetOutputFormat(stream);
+
460 
+
461  if (output_format == CONTAINER_MOV) {
+
462  // TODO(vaage): Complete this part of the text pipeline. This path will
+
463  // be similar to the audio/video pipeline but with some components
+
464  // removed (e.g. trick play).
+
465  } else {
+
466  MediaInfo text_media_info;
+
467  if (!StreamInfoToTextMediaInfo(stream, &text_media_info)) {
+
468  return Status(error::INVALID_ARGUMENT,
+
469  "Could not create media info for stream.");
+
470  }
+
471 
+
472  if (mpd_notifier) {
+
473  uint32_t unused;
+
474  if (mpd_notifier->NotifyNewContainer(text_media_info, &unused)) {
+
475  mpd_notifier->Flush();
+
476  } else {
+
477  return Status(error::PARSER_FAILURE,
+
478  "Failed to process text file " + stream.input);
+
479  }
480  }
481 
-
482  if (mpd_notifier) {
-
483  uint32_t unused;
-
484  if (!mpd_notifier->NotifyNewContainer(text_media_info, &unused)) {
-
485  LOG(ERROR) << "Failed to process text file " << stream_iter->input;
-
486  } else {
-
487  mpd_notifier->Flush();
-
488  }
-
489  } else if (packaging_params.output_media_info) {
- -
491  text_media_info, stream_iter->output + kMediaInfoSuffix);
-
492  }
-
493  continue;
-
494  }
-
495 
-
496  if (stream_iter->input != previous_input) {
-
497  // New remux job needed. Create demux and job thread.
-
498  demuxer = std::make_shared<Demuxer>(stream_iter->input);
-
499 
-
500  demuxer->set_dump_stream_info(
-
501  packaging_params.test_params.dump_stream_info);
-
502  if (packaging_params.decryption_params.key_provider !=
-
503  KeyProvider::kNone) {
-
504  std::unique_ptr<KeySource> decryption_key_source(
-
505  CreateDecryptionKeySource(packaging_params.decryption_params));
-
506  if (!decryption_key_source) {
-
507  return Status(
-
508  error::INVALID_ARGUMENT,
-
509  "Must define decryption key source when defining key provider");
-
510  }
-
511  demuxer->SetKeySource(std::move(decryption_key_source));
-
512  }
-
513  jobs->emplace_back(new media::Job("RemuxJob", demuxer));
-
514  trick_play_handler.reset();
-
515  previous_input = stream_iter->input;
-
516  // Skip setting up muxers if output is not needed.
-
517  if (stream_iter->output.empty() && stream_iter->segment_template.empty())
-
518  continue;
-
519  }
-
520  DCHECK(!jobs->empty());
-
521 
-
522  // Each stream selector requires an individual trick play handler.
-
523  // E.g., an input with two video streams needs two trick play handlers.
-
524  // TODO(hmchen): add a test case in packager_test.py for two video streams
-
525  // input.
-
526  if (stream_iter->stream_selector != previous_stream_selector) {
-
527  previous_stream_selector = stream_iter->stream_selector;
-
528  trick_play_handler.reset();
-
529  }
-
530 
-
531  // Create the muxer (output) for this track.
-
532  std::unique_ptr<MuxerListener> muxer_listener = CreateMuxerListener(
-
533  *stream_iter, stream_number, packaging_params.output_media_info,
-
534  mpd_notifier, hls_notifier);
-
535  std::shared_ptr<Muxer> muxer = CreateMuxer(
-
536  packaging_params, *stream_iter,
-
537  packaging_params.test_params.inject_fake_clock ? fake_clock : nullptr,
-
538  std::move(muxer_listener));
+
482  if (packaging_params.output_media_info) {
+ +
484  text_media_info, stream.output + kMediaInfoSuffix);
+
485  }
+
486  }
+
487  }
+
488 
+
489  return Status::OK;
+
490 }
+
491 
+
492 Status CreateAudioVideoJobs(
+
493  int first_stream_number,
+
494  const std::vector<std::reference_wrapper<const StreamDescriptor>>& streams,
+
495  const PackagingParams& packaging_params,
+
496  FakeClock* fake_clock,
+
497  KeySource* encryption_key_source,
+
498  MpdNotifier* mpd_notifier,
+
499  hls::HlsNotifier* hls_notifier,
+
500  std::vector<std::unique_ptr<Job>>* jobs) {
+
501  DCHECK(jobs);
+
502 
+
503  // Demuxers are shared among all streams with the same input.
+
504  std::shared_ptr<Demuxer> demuxer;
+
505  // Replicators are shared among all streams with the same input and stream
+
506  // selector.
+
507  std::shared_ptr<MediaHandler> replicator;
+
508 
+
509  std::string previous_input;
+
510  std::string previous_selector;
+
511 
+
512  // -1 so that it will be back at |first_stream_number| on the first
+
513  // iteration.
+
514  int stream_number = first_stream_number - 1;
+
515 
+
516  for (const StreamDescriptor& stream : streams) {
+
517  stream_number += 1;
+
518 
+
519  // If we changed our input files, we need a new demuxer.
+
520  if (previous_input != stream.input) {
+
521  demuxer = std::make_shared<Demuxer>(stream.input);
+
522 
+
523  demuxer->set_dump_stream_info(
+
524  packaging_params.test_params.dump_stream_info);
+
525  if (packaging_params.decryption_params.key_provider !=
+
526  KeyProvider::kNone) {
+
527  std::unique_ptr<KeySource> decryption_key_source(
+
528  CreateDecryptionKeySource(packaging_params.decryption_params));
+
529  if (!decryption_key_source) {
+
530  return Status(
+
531  error::INVALID_ARGUMENT,
+
532  "Must define decryption key source when defining key provider");
+
533  }
+
534  demuxer->SetKeySource(std::move(decryption_key_source));
+
535  }
+
536 
+
537  jobs->emplace_back(new media::Job("RemuxJob", demuxer));
+
538  }
539 
-
540  if (!muxer) {
-
541  return Status(error::INVALID_ARGUMENT, "Failed to create muxer for " +
-
542  stream_iter->input + ":" +
-
543  stream_iter->stream_selector);
-
544  }
-
545 
-
546  // Create a new trick_play_handler. Note that the stream_decriptors
-
547  // are sorted so that for the same input and stream_selector, the main
-
548  // stream is always the last one following the trick play streams.
-
549  if (stream_iter->trick_play_factor > 0) {
-
550  if (!trick_play_handler) {
-
551  trick_play_handler.reset(new TrickPlayHandler());
-
552  }
-
553  trick_play_handler->SetHandlerForTrickPlay(stream_iter->trick_play_factor,
-
554  std::move(muxer));
-
555  if (trick_play_handler->IsConnected())
-
556  continue;
-
557  } else if (trick_play_handler) {
-
558  trick_play_handler->SetHandlerForMainStream(std::move(muxer));
-
559  DCHECK(trick_play_handler->IsConnected());
-
560  continue;
-
561  }
-
562 
-
563  std::vector<std::shared_ptr<MediaHandler>> handlers;
-
564 
-
565  auto chunking_handler =
-
566  std::make_shared<ChunkingHandler>(packaging_params.chunking_params);
-
567  handlers.push_back(chunking_handler);
-
568 
-
569  std::shared_ptr<MediaHandler> crypto_handler = CreateCryptoHandler(
-
570  packaging_params, *stream_iter, encryption_key_source);
-
571  if (crypto_handler) {
-
572  handlers.push_back(crypto_handler);
-
573  }
-
574 
-
575  // If trick_play_handler is available, muxer should already be connected to
-
576  // trick_play_handler.
-
577  if (trick_play_handler) {
-
578  handlers.push_back(trick_play_handler);
-
579  } else {
-
580  handlers.push_back(std::move(muxer));
-
581  }
-
582 
-
583  Status status;
-
584  status.Update(
-
585  demuxer->SetHandler(stream_iter->stream_selector, chunking_handler));
-
586  status.Update(ConnectHandlers(handlers));
-
587 
-
588  if (!status.ok()) {
-
589  return status;
-
590  }
-
591  if (!stream_iter->language.empty())
-
592  demuxer->SetLanguageOverride(stream_iter->stream_selector,
-
593  stream_iter->language);
-
594  }
+
540  if (!stream.language.empty()) {
+
541  demuxer->SetLanguageOverride(stream.stream_selector, stream.language);
+
542  }
+
543 
+
544  const bool new_source = previous_input != stream.input ||
+
545  previous_selector != stream.stream_selector;
+
546  previous_input = stream.input;
+
547  previous_selector = stream.stream_selector;
+
548 
+
549  // If the stream has no output, then there is no reason setting-up the rest
+
550  // of the pipeline.
+
551  if (stream.output.empty() && stream.segment_template.empty()) {
+
552  continue;
+
553  }
+
554 
+
555  if (new_source) {
+
556  replicator = std::make_shared<Replicator>();
+
557 
+
558  std::shared_ptr<MediaHandler> chunker =
+
559  std::make_shared<ChunkingHandler>(packaging_params.chunking_params);
+
560 
+
561  std::shared_ptr<MediaHandler> encryptor = CreateEncryptionHandler(
+
562  packaging_params, stream, encryption_key_source);
+
563 
+
564  Status status;
+
565 
+
566  // The path is different if there is encryption. Even though there are
+
567  // common elements, it is easier to understand the path if they are
+
568  // expressed independently of each other.
+
569  if (encryptor) {
+
570  status.Update(demuxer->SetHandler(stream.stream_selector, chunker));
+
571  status.Update(chunker->AddHandler(encryptor));
+
572  status.Update(encryptor->AddHandler(replicator));
+
573  } else {
+
574  status.Update(demuxer->SetHandler(stream.stream_selector, chunker));
+
575  status.Update(chunker->AddHandler(replicator));
+
576  }
+
577 
+
578  if (!status.ok()) {
+
579  return status;
+
580  }
+
581 
+
582  if (!stream.language.empty()) {
+
583  demuxer->SetLanguageOverride(stream.stream_selector, stream.language);
+
584  }
+
585  }
+
586 
+
587  // Create the muxer (output) for this track.
+
588  std::unique_ptr<MuxerListener> muxer_listener = CreateMuxerListener(
+
589  stream, stream_number, packaging_params.output_media_info, mpd_notifier,
+
590  hls_notifier);
+
591  std::shared_ptr<Muxer> muxer = CreateMuxer(
+
592  packaging_params, stream,
+
593  packaging_params.test_params.inject_fake_clock ? fake_clock : nullptr,
+
594  std::move(muxer_listener));
595 
-
596  // Initialize processing graph.
-
597  Status status;
-
598  for (const std::unique_ptr<Job>& job : *jobs) {
-
599  job->Initialize();
-
600  status.Update(job->status());
-
601  }
-
602  return status;
-
603 }
-
604 
-
605 Status RunJobs(const std::vector<std::unique_ptr<Job>>& jobs) {
-
606  // We need to store the jobs and the waits separately in order to use the
-
607  // |WaitMany| function. |WaitMany| takes an array of WaitableEvents but we
-
608  // need to access the jobs in order to join the thread and check the status.
-
609  // The indexes needs to be check in sync or else we won't be able to relate a
-
610  // WaitableEvent back to the job.
-
611  std::vector<Job*> active_jobs;
-
612  std::vector<base::WaitableEvent*> active_waits;
-
613 
-
614  // Start every job and add it to the active jobs list so that we can wait
-
615  // on each one.
-
616  for (auto& job : jobs) {
-
617  job->Start();
-
618 
-
619  active_jobs.push_back(job.get());
-
620  active_waits.push_back(job->wait());
-
621  }
+
596  if (!muxer) {
+
597  return Status(error::INVALID_ARGUMENT, "Failed to create muxer for " +
+
598  stream.input + ":" +
+
599  stream.stream_selector);
+
600  }
+
601 
+
602  std::shared_ptr<MediaHandler> trick_play;
+
603  if (stream.trick_play_factor) {
+
604  trick_play = std::make_shared<TrickPlayHandler>(stream.trick_play_factor);
+
605  }
+
606 
+
607  Status status;
+
608  if (trick_play) {
+
609  status.Update(replicator->AddHandler(trick_play));
+
610  status.Update(trick_play->AddHandler(muxer));
+
611  } else {
+
612  status.Update(replicator->AddHandler(muxer));
+
613  }
+
614 
+
615  if (!status.ok()) {
+
616  return status;
+
617  }
+
618  }
+
619 
+
620  return Status::OK;
+
621 }
622 
-
623  // Wait for all jobs to complete or an error occurs.
-
624  Status status;
-
625  while (status.ok() && active_jobs.size()) {
-
626  // Wait for an event to finish and then update our status so that we can
-
627  // quit if something has gone wrong.
-
628  const size_t done =
-
629  base::WaitableEvent::WaitMany(active_waits.data(), active_waits.size());
-
630  Job* job = active_jobs[done];
+
623 Status CreateAllJobs(const std::vector<StreamDescriptor>& stream_descriptors,
+
624  const PackagingParams& packaging_params,
+
625  FakeClock* fake_clock,
+
626  KeySource* encryption_key_source,
+
627  MpdNotifier* mpd_notifier,
+
628  hls::HlsNotifier* hls_notifier,
+
629  std::vector<std::unique_ptr<Job>>* jobs) {
+
630  DCHECK(jobs);
631 
-
632  job->Join();
-
633  status.Update(job->status());
-
634 
-
635  // Remove the job and the wait from our tracking.
-
636  active_jobs.erase(active_jobs.begin() + done);
-
637  active_waits.erase(active_waits.begin() + done);
-
638  }
-
639 
-
640  // If the main loop has exited and there are still jobs running,
-
641  // we need to cancel them and clean-up.
-
642  for (auto& job : active_jobs) {
-
643  job->Cancel();
-
644  }
-
645 
-
646  for (auto& job : active_jobs) {
-
647  job->Join();
-
648  }
-
649 
-
650  return status;
-
651 }
+
632  // Group all streams based on which pipeline they will use.
+
633  std::vector<std::reference_wrapper<const StreamDescriptor>> text_streams;
+
634  std::vector<std::reference_wrapper<const StreamDescriptor>>
+
635  audio_video_streams;
+
636 
+
637  for (const StreamDescriptor& stream : stream_descriptors) {
+
638  // TODO: Find a better way to determine what stream type a stream
+
639  // descriptor is as |stream_selector| may use an index. This would
+
640  // also allow us to use a simpler audio pipeline.
+
641  if (stream.stream_selector == "text") {
+
642  text_streams.push_back(stream);
+
643  } else {
+
644  audio_video_streams.push_back(stream);
+
645  }
+
646  }
+
647 
+
648  // Audio/Video streams need to be in sorted order so that demuxers and trick
+
649  // play handlers get setup correctly.
+
650  std::sort(audio_video_streams.begin(), audio_video_streams.end(),
+
651  media::StreamDescriptorCompareFn);
652 
-
653 } // namespace
-
654 } // namespace media
-
655 
-
656 struct Packager::PackagerInternal {
-
657  media::FakeClock fake_clock;
-
658  std::unique_ptr<KeySource> encryption_key_source;
-
659  std::unique_ptr<MpdNotifier> mpd_notifier;
-
660  std::unique_ptr<hls::HlsNotifier> hls_notifier;
-
661  std::vector<std::unique_ptr<media::Job>> jobs;
-
662  BufferCallbackParams buffer_callback_params;
-
663 };
-
664 
-
665 Packager::Packager() {}
-
666 
-
667 Packager::~Packager() {}
-
668 
- -
670  const PackagingParams& packaging_params,
-
671  const std::vector<StreamDescriptor>& stream_descriptors) {
-
672  // Needed by base::WorkedPool used in ThreadedIoFile.
-
673  static base::AtExitManager exit;
-
674  static media::LibcryptoThreading libcrypto_threading;
+
653  int stream_number = 0;
+
654 
+
655  Status status;
+
656 
+
657  status.Update(CreateTextJobs(stream_number, text_streams, packaging_params,
+
658  mpd_notifier, jobs));
+
659 
+
660  stream_number += text_streams.size();
+
661 
+
662  status.Update(CreateAudioVideoJobs(
+
663  stream_number, audio_video_streams, packaging_params, fake_clock,
+
664  encryption_key_source, mpd_notifier, hls_notifier, jobs));
+
665 
+
666  if (!status.ok()) {
+
667  return status;
+
668  }
+
669 
+
670  // Initialize processing graph.
+
671  for (const std::unique_ptr<Job>& job : *jobs) {
+
672  job->Initialize();
+
673  status.Update(job->status());
+
674  }
675 
-
676  if (internal_)
-
677  return Status(error::INVALID_ARGUMENT, "Already initialized.");
+
676  return status;
+
677 }
678 
-
679  Status param_check =
-
680  media::ValidateParams(packaging_params, stream_descriptors);
-
681  if (!param_check.ok()) {
-
682  return param_check;
-
683  }
-
684 
-
685  if (!packaging_params.test_params.injected_library_version.empty()) {
-
686  SetPackagerVersionForTesting(
-
687  packaging_params.test_params.injected_library_version);
-
688  }
-
689 
-
690  std::unique_ptr<PackagerInternal> internal(new PackagerInternal);
-
691 
-
692  // Create encryption key source if needed.
-
693  if (packaging_params.encryption_params.key_provider != KeyProvider::kNone) {
-
694  internal->encryption_key_source = CreateEncryptionKeySource(
-
695  static_cast<media::FourCC>(
-
696  packaging_params.encryption_params.protection_scheme),
-
697  packaging_params.encryption_params);
-
698  if (!internal->encryption_key_source)
-
699  return Status(error::INVALID_ARGUMENT, "Failed to create key source.");
-
700  }
-
701 
-
702  // Store callback params to make it available during packaging.
-
703  internal->buffer_callback_params = packaging_params.buffer_callback_params;
-
704 
-
705  // Update mpd output and hls output if callback param is specified.
-
706  MpdParams mpd_params = packaging_params.mpd_params;
-
707  HlsParams hls_params = packaging_params.hls_params;
-
708  if (internal->buffer_callback_params.write_func) {
- -
710  internal->buffer_callback_params, mpd_params.mpd_output);
- -
712  internal->buffer_callback_params, hls_params.master_playlist_output);
-
713  }
-
714 
-
715  if (!mpd_params.mpd_output.empty()) {
-
716  const bool on_demand_dash_profile =
-
717  stream_descriptors.begin()->segment_template.empty();
-
718  MpdOptions mpd_options =
-
719  media::GetMpdOptions(on_demand_dash_profile, mpd_params);
-
720  if (mpd_params.generate_dash_if_iop_compliant_mpd) {
-
721  internal->mpd_notifier.reset(new DashIopMpdNotifier(mpd_options));
-
722  } else {
-
723  internal->mpd_notifier.reset(new SimpleMpdNotifier(mpd_options));
-
724  }
-
725  if (!internal->mpd_notifier->Init()) {
-
726  LOG(ERROR) << "MpdNotifier failed to initialize.";
-
727  return Status(error::INVALID_ARGUMENT,
-
728  "Failed to initialize MpdNotifier.");
-
729  }
-
730  }
-
731 
-
732  if (!hls_params.master_playlist_output.empty()) {
-
733  base::FilePath master_playlist_path(
-
734  base::FilePath::FromUTF8Unsafe(hls_params.master_playlist_output));
-
735  base::FilePath master_playlist_name = master_playlist_path.BaseName();
-
736 
-
737  internal->hls_notifier.reset(new hls::SimpleHlsNotifier(
-
738  hls_params.playlist_type, hls_params.time_shift_buffer_depth,
-
739  hls_params.base_url,
-
740  master_playlist_path.DirName().AsEndingWithSeparator().AsUTF8Unsafe(),
-
741  master_playlist_name.AsUTF8Unsafe()));
-
742  }
-
743 
-
744  media::StreamDescriptorList stream_descriptor_list;
-
745  for (const StreamDescriptor& descriptor : stream_descriptors) {
-
746  if (internal->buffer_callback_params.read_func ||
-
747  internal->buffer_callback_params.write_func) {
-
748  StreamDescriptor descriptor_copy = descriptor;
-
749  if (internal->buffer_callback_params.read_func) {
-
750  descriptor_copy.input = File::MakeCallbackFileName(
-
751  internal->buffer_callback_params, descriptor.input);
-
752  }
-
753  if (internal->buffer_callback_params.write_func) {
-
754  descriptor_copy.output = File::MakeCallbackFileName(
-
755  internal->buffer_callback_params, descriptor.output);
- -
757  internal->buffer_callback_params, descriptor.segment_template);
-
758  }
-
759  stream_descriptor_list.insert(descriptor_copy);
-
760  } else {
-
761  stream_descriptor_list.insert(descriptor);
-
762  }
-
763  }
-
764 
-
765  Status status = media::CreateRemuxJobs(
-
766  stream_descriptor_list, packaging_params, &internal->fake_clock,
-
767  internal->encryption_key_source.get(), internal->mpd_notifier.get(),
-
768  internal->hls_notifier.get(), &internal->jobs);
-
769 
-
770  if (status.ok()) {
-
771  internal_ = std::move(internal);
-
772  }
-
773 
-
774  return status;
-
775 }
-
776 
- -
778  if (!internal_)
-
779  return Status(error::INVALID_ARGUMENT, "Not yet initialized.");
-
780  Status status = media::RunJobs(internal_->jobs);
-
781  if (!status.ok())
-
782  return status;
-
783 
-
784  if (internal_->hls_notifier) {
-
785  if (!internal_->hls_notifier->Flush())
-
786  return Status(error::INVALID_ARGUMENT, "Failed to flush Hls.");
+
679 Status RunJobs(const std::vector<std::unique_ptr<Job>>& jobs) {
+
680  // We need to store the jobs and the waits separately in order to use the
+
681  // |WaitMany| function. |WaitMany| takes an array of WaitableEvents but we
+
682  // need to access the jobs in order to join the thread and check the status.
+
683  // The indexes needs to be check in sync or else we won't be able to relate a
+
684  // WaitableEvent back to the job.
+
685  std::vector<Job*> active_jobs;
+
686  std::vector<base::WaitableEvent*> active_waits;
+
687 
+
688  // Start every job and add it to the active jobs list so that we can wait
+
689  // on each one.
+
690  for (auto& job : jobs) {
+
691  job->Start();
+
692 
+
693  active_jobs.push_back(job.get());
+
694  active_waits.push_back(job->wait());
+
695  }
+
696 
+
697  // Wait for all jobs to complete or an error occurs.
+
698  Status status;
+
699  while (status.ok() && active_jobs.size()) {
+
700  // Wait for an event to finish and then update our status so that we can
+
701  // quit if something has gone wrong.
+
702  const size_t done =
+
703  base::WaitableEvent::WaitMany(active_waits.data(), active_waits.size());
+
704  Job* job = active_jobs[done];
+
705 
+
706  job->Join();
+
707  status.Update(job->status());
+
708 
+
709  // Remove the job and the wait from our tracking.
+
710  active_jobs.erase(active_jobs.begin() + done);
+
711  active_waits.erase(active_waits.begin() + done);
+
712  }
+
713 
+
714  // If the main loop has exited and there are still jobs running,
+
715  // we need to cancel them and clean-up.
+
716  for (auto& job : active_jobs) {
+
717  job->Cancel();
+
718  }
+
719 
+
720  for (auto& job : active_jobs) {
+
721  job->Join();
+
722  }
+
723 
+
724  return status;
+
725 }
+
726 
+
727 } // namespace
+
728 } // namespace media
+
729 
+
730 struct Packager::PackagerInternal {
+
731  media::FakeClock fake_clock;
+
732  std::unique_ptr<KeySource> encryption_key_source;
+
733  std::unique_ptr<MpdNotifier> mpd_notifier;
+
734  std::unique_ptr<hls::HlsNotifier> hls_notifier;
+
735  std::vector<std::unique_ptr<media::Job>> jobs;
+
736  BufferCallbackParams buffer_callback_params;
+
737 };
+
738 
+
739 Packager::Packager() {}
+
740 
+
741 Packager::~Packager() {}
+
742 
+ +
744  const PackagingParams& packaging_params,
+
745  const std::vector<StreamDescriptor>& stream_descriptors) {
+
746  // Needed by base::WorkedPool used in ThreadedIoFile.
+
747  static base::AtExitManager exit;
+
748  static media::LibcryptoThreading libcrypto_threading;
+
749 
+
750  if (internal_)
+
751  return Status(error::INVALID_ARGUMENT, "Already initialized.");
+
752 
+
753  Status param_check =
+
754  media::ValidateParams(packaging_params, stream_descriptors);
+
755  if (!param_check.ok()) {
+
756  return param_check;
+
757  }
+
758 
+
759  if (!packaging_params.test_params.injected_library_version.empty()) {
+
760  SetPackagerVersionForTesting(
+
761  packaging_params.test_params.injected_library_version);
+
762  }
+
763 
+
764  std::unique_ptr<PackagerInternal> internal(new PackagerInternal);
+
765 
+
766  // Create encryption key source if needed.
+
767  if (packaging_params.encryption_params.key_provider != KeyProvider::kNone) {
+
768  internal->encryption_key_source = CreateEncryptionKeySource(
+
769  static_cast<media::FourCC>(
+
770  packaging_params.encryption_params.protection_scheme),
+
771  packaging_params.encryption_params);
+
772  if (!internal->encryption_key_source)
+
773  return Status(error::INVALID_ARGUMENT, "Failed to create key source.");
+
774  }
+
775 
+
776  // Store callback params to make it available during packaging.
+
777  internal->buffer_callback_params = packaging_params.buffer_callback_params;
+
778 
+
779  // Update mpd output and hls output if callback param is specified.
+
780  MpdParams mpd_params = packaging_params.mpd_params;
+
781  HlsParams hls_params = packaging_params.hls_params;
+
782  if (internal->buffer_callback_params.write_func) {
+ +
784  internal->buffer_callback_params, mpd_params.mpd_output);
+ +
786  internal->buffer_callback_params, hls_params.master_playlist_output);
787  }
-
788  if (internal_->mpd_notifier) {
-
789  if (!internal_->mpd_notifier->Flush())
-
790  return Status(error::INVALID_ARGUMENT, "Failed to flush Mpd.");
-
791  }
-
792  return Status::OK;
-
793 }
-
794 
- -
796  if (!internal_) {
-
797  LOG(INFO) << "Not yet initialized. Return directly.";
-
798  return;
-
799  }
-
800  for (const std::unique_ptr<media::Job>& job : internal_->jobs)
-
801  job->Cancel();
-
802 }
-
803 
- -
805  return GetPackagerVersion();
-
806 }
-
807 
- -
809  int max_sd_pixels,
-
810  int max_hd_pixels,
-
811  int max_uhd1_pixels,
-
812  const EncryptionParams::EncryptedStreamAttributes& stream_attributes) {
-
813  if (stream_attributes.stream_type ==
-
814  EncryptionParams::EncryptedStreamAttributes::kAudio)
-
815  return "AUDIO";
-
816  if (stream_attributes.stream_type ==
-
817  EncryptionParams::EncryptedStreamAttributes::kVideo) {
-
818  const int pixels = stream_attributes.oneof.video.width *
-
819  stream_attributes.oneof.video.height;
-
820  if (pixels <= max_sd_pixels)
-
821  return "SD";
-
822  if (pixels <= max_hd_pixels)
-
823  return "HD";
-
824  if (pixels <= max_uhd1_pixels)
-
825  return "UHD1";
-
826  return "UHD2";
-
827  }
-
828  return "";
-
829 }
-
830 
-
831 } // namespace shaka
-
BufferCallbackParams buffer_callback_params
Buffer callback params.
Definition: packager.h:60
+
788 
+
789  if (!mpd_params.mpd_output.empty()) {
+
790  const bool on_demand_dash_profile =
+
791  stream_descriptors.begin()->segment_template.empty();
+
792  MpdOptions mpd_options =
+
793  media::GetMpdOptions(on_demand_dash_profile, mpd_params);
+
794  if (mpd_params.generate_dash_if_iop_compliant_mpd) {
+
795  internal->mpd_notifier.reset(new DashIopMpdNotifier(mpd_options));
+
796  } else {
+
797  internal->mpd_notifier.reset(new SimpleMpdNotifier(mpd_options));
+
798  }
+
799  if (!internal->mpd_notifier->Init()) {
+
800  LOG(ERROR) << "MpdNotifier failed to initialize.";
+
801  return Status(error::INVALID_ARGUMENT,
+
802  "Failed to initialize MpdNotifier.");
+
803  }
+
804  }
+
805 
+
806  if (!hls_params.master_playlist_output.empty()) {
+
807  base::FilePath master_playlist_path(
+
808  base::FilePath::FromUTF8Unsafe(hls_params.master_playlist_output));
+
809  base::FilePath master_playlist_name = master_playlist_path.BaseName();
+
810 
+
811  internal->hls_notifier.reset(new hls::SimpleHlsNotifier(
+
812  hls_params.playlist_type, hls_params.time_shift_buffer_depth,
+
813  hls_params.base_url,
+
814  master_playlist_path.DirName().AsEndingWithSeparator().AsUTF8Unsafe(),
+
815  master_playlist_name.AsUTF8Unsafe()));
+
816  }
+
817 
+
818  std::vector<StreamDescriptor> streams_for_jobs;
+
819 
+
820  for (const StreamDescriptor& descriptor : stream_descriptors) {
+
821  // We may need to overwrite some values, so make a copy first.
+
822  StreamDescriptor copy = descriptor;
+
823 
+
824  if (internal->buffer_callback_params.read_func) {
+
825  copy.input = File::MakeCallbackFileName(internal->buffer_callback_params,
+
826  descriptor.input);
+
827  }
+
828 
+
829  if (internal->buffer_callback_params.write_func) {
+
830  copy.output = File::MakeCallbackFileName(internal->buffer_callback_params,
+
831  descriptor.output);
+ +
833  internal->buffer_callback_params, descriptor.segment_template);
+
834  }
+
835 
+
836  // Update language to ISO_639_2 code if set.
+
837  if (!copy.language.empty()) {
+
838  copy.language = LanguageToISO_639_2(descriptor.language);
+
839  if (copy.language == "und") {
+
840  return Status(
+
841  error::INVALID_ARGUMENT,
+
842  "Unknown/invalid language specified: " + descriptor.language);
+
843  }
+
844  }
+
845 
+
846  streams_for_jobs.push_back(copy);
+
847  }
+
848 
+
849  Status status = media::CreateAllJobs(
+
850  streams_for_jobs, packaging_params, &internal->fake_clock,
+
851  internal->encryption_key_source.get(), internal->mpd_notifier.get(),
+
852  internal->hls_notifier.get(), &internal->jobs);
+
853 
+
854  if (!status.ok()) {
+
855  return status;
+
856  }
+
857 
+
858  internal_ = std::move(internal);
+
859  return Status::OK;
+
860 }
+
861 
+ +
863  if (!internal_)
+
864  return Status(error::INVALID_ARGUMENT, "Not yet initialized.");
+
865  Status status = media::RunJobs(internal_->jobs);
+
866  if (!status.ok())
+
867  return status;
+
868 
+
869  if (internal_->hls_notifier) {
+
870  if (!internal_->hls_notifier->Flush())
+
871  return Status(error::INVALID_ARGUMENT, "Failed to flush Hls.");
+
872  }
+
873  if (internal_->mpd_notifier) {
+
874  if (!internal_->mpd_notifier->Flush())
+
875  return Status(error::INVALID_ARGUMENT, "Failed to flush Mpd.");
+
876  }
+
877  return Status::OK;
+
878 }
+
879 
+ +
881  if (!internal_) {
+
882  LOG(INFO) << "Not yet initialized. Return directly.";
+
883  return;
+
884  }
+
885  for (const std::unique_ptr<media::Job>& job : internal_->jobs)
+
886  job->Cancel();
+
887 }
+
888 
+ +
890  return GetPackagerVersion();
+
891 }
+
892 
+ +
894  int max_sd_pixels,
+
895  int max_hd_pixels,
+
896  int max_uhd1_pixels,
+
897  const EncryptionParams::EncryptedStreamAttributes& stream_attributes) {
+
898  if (stream_attributes.stream_type ==
+
899  EncryptionParams::EncryptedStreamAttributes::kAudio)
+
900  return "AUDIO";
+
901  if (stream_attributes.stream_type ==
+
902  EncryptionParams::EncryptedStreamAttributes::kVideo) {
+
903  const int pixels = stream_attributes.oneof.video.width *
+
904  stream_attributes.oneof.video.height;
+
905  if (pixels <= max_sd_pixels)
+
906  return "SD";
+
907  if (pixels <= max_hd_pixels)
+
908  return "HD";
+
909  if (pixels <= max_uhd1_pixels)
+
910  return "UHD1";
+
911  return "UHD2";
+
912  }
+
913  return "";
+
914 }
+
915 
+
916 } // namespace shaka
+
BufferCallbackParams buffer_callback_params
Buffer callback params.
Definition: packager.h:58
std::string master_playlist_output
HLS master playlist output path.
Definition: hls_params.h:27
DASH MPD related parameters.
Definition: mpd_params.h:16
-
Defines a single input/output stream.
Definition: packager.h:67
-
std::string input
Input/source media file path or network stream URL. Required.
Definition: packager.h:69
-
HlsParams hls_params
HLS related parameters.
Definition: packager.h:53
-
Status Initialize(const PackagingParams &packaging_params, const std::vector< StreamDescriptor > &stream_descriptors)
Definition: packager.cc:669
+
Defines a single input/output stream.
Definition: packager.h:65
+
std::string input
Input/source media file path or network stream URL. Required.
Definition: packager.h:67
+
HlsParams hls_params
HLS related parameters.
Definition: packager.h:51
+
Status Initialize(const PackagingParams &packaging_params, const std::vector< StreamDescriptor > &stream_descriptors)
Definition: packager.cc:743
-
static std::string DefaultStreamLabelFunction(int max_sd_pixels, int max_hd_pixels, int max_uhd1_pixels, const EncryptionParams::EncryptedStreamAttributes &stream_attributes)
Definition: packager.cc:808
+
static std::string DefaultStreamLabelFunction(int max_sd_pixels, int max_hd_pixels, int max_uhd1_pixels, const EncryptionParams::EncryptedStreamAttributes &stream_attributes)
Definition: packager.cc:893
HLS related parameters.
Definition: hls_params.h:23
-
std::string segment_template
Specifies segment template. Can be empty.
Definition: packager.h:79
+
std::string segment_template
Specifies segment template. Can be empty.
Definition: packager.h:77
static bool Copy(const char *from_file_name, const char *to_file_name)
Definition: file.cc:281
static bool ReadFileToString(const char *file_name, std::string *contents)
Definition: file.cc:216
Convenience class which initializes and terminates libcrypto threading.
bool generate_dash_if_iop_compliant_mpd
Try to generate DASH-IF IOP compliant MPD.
Definition: mpd_params.h:48
-
static std::string GetLibraryVersion()
Definition: packager.cc:804
+
static std::string GetLibraryVersion()
Definition: packager.cc:889
+
std::string LanguageToISO_639_2(const std::string &language)
std::string injected_library_version
Definition: packager.h:33
-
MpdParams mpd_params
DASH MPD related parameters.
Definition: packager.h:51
+
MpdParams mpd_params
DASH MPD related parameters.
Definition: packager.h:49
double time_shift_buffer_depth
Definition: hls_params.h:33
static bool WriteMediaInfoToFile(const MediaInfo &media_info, const std::string &output_file_path)
-
EncryptionParams encryption_params
Encryption and Decryption Parameters.
Definition: packager.h:56
+
EncryptionParams encryption_params
Encryption and Decryption Parameters.
Definition: packager.h:54
std::string mpd_output
MPD output file path.
Definition: mpd_params.h:18
-
Status Run()
Definition: packager.cc:777
+
Status Run()
Definition: packager.cc:862
static std::string MakeCallbackFileName(const BufferCallbackParams &callback_params, const std::string &name)
Definition: file.cc:354
-
std::string output
Definition: packager.h:77
- -
Encrypted stream information that is used to determine stream label.
+
std::string output
Definition: packager.h:75
+ +
Encrypted stream information that is used to determine stream label.
std::string base_url
Definition: hls_params.h:30
Defines Mpd Options.
Definition: mpd_options.h:25
-
void Cancel()
Cancel packaging. Note that it has to be called from another thread.
Definition: packager.cc:795
+
void Cancel()
Cancel packaging. Note that it has to be called from another thread.
Definition: packager.cc:880
Packaging parameters.
Definition: packager.h:37
HlsPlaylistType playlist_type
HLS playlist type. See HLS specification for details.
Definition: hls_params.h:25
+
std::string language
Definition: packager.h:100
diff --git a/docs/d3/d51/classshaka_1_1media_1_1LibcryptoThreading.html b/docs/d3/d51/classshaka_1_1media_1_1LibcryptoThreading.html index 1fc4f18440..fafc585291 100644 --- a/docs/d3/d51/classshaka_1_1media_1_1LibcryptoThreading.html +++ b/docs/d3/d51/classshaka_1_1media_1_1LibcryptoThreading.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d56/decrypt__config_8cc_source.html b/docs/d3/d56/decrypt__config_8cc_source.html index 993b4a9584..ef6aa973c6 100644 --- a/docs/d3/d56/decrypt__config_8cc_source.html +++ b/docs/d3/d56/decrypt__config_8cc_source.html @@ -136,7 +136,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d62/continuity__counter_8h_source.html b/docs/d3/d62/continuity__counter_8h_source.html index 74254896a9..8d5b14ec69 100644 --- a/docs/d3/d62/continuity__counter_8h_source.html +++ b/docs/d3/d62/continuity__counter_8h_source.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d62/rcheck_8h_source.html b/docs/d3/d62/rcheck_8h_source.html index f48f374055..bcd1066481 100644 --- a/docs/d3/d62/rcheck_8h_source.html +++ b/docs/d3/d62/rcheck_8h_source.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d66/structshaka_1_1media_1_1mp4_1_1DataEntryUrl-members.html b/docs/d3/d66/structshaka_1_1media_1_1mp4_1_1DataEntryUrl-members.html index df66052958..8ac001ed89 100644 --- a/docs/d3/d66/structshaka_1_1media_1_1mp4_1_1DataEntryUrl-members.html +++ b/docs/d3/d66/structshaka_1_1media_1_1mp4_1_1DataEntryUrl-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d67/classshaka_1_1media_1_1WebMVideoClient.html b/docs/d3/d67/classshaka_1_1media_1_1WebMVideoClient.html index 5bd298224f..ee81a1565d 100644 --- a/docs/d3/d67/classshaka_1_1media_1_1WebMVideoClient.html +++ b/docs/d3/d67/classshaka_1_1media_1_1WebMVideoClient.html @@ -116,8 +116,8 @@ void   std::shared_ptr< VideoStreamInfoGetVideoStreamInfo (int64_t track_num, const std::string &codec_id, bool is_encrypted)   -const VPCodecConfigurationRecordGetVpCodecConfig (const std::vector< uint8_t > &codec_private) -  +VPCodecConfigurationRecord GetVpCodecConfig (const std::vector< uint8_t > &codec_private) +  - Public Member Functions inherited from shaka::media::WebMParserClient virtual bool OnString (int id, const std::string &str) @@ -169,16 +169,16 @@ Additional Inherited Members
An empty pointer if there was unexpected values in the provided parameters or video track element fields.
-

Definition at line 56 of file webm_video_client.cc.

+

Definition at line 57 of file webm_video_client.cc.

- +
- + @@ -188,7 +188,7 @@ An empty pointer if there was unexpected values in the provided parameters or vi

Extracts VPCodecConfigurationRecord parsed from codec private data and Colour element.

-

Definition at line 122 of file webm_video_client.cc.

+

Definition at line 123 of file webm_video_client.cc.

@@ -199,7 +199,7 @@ An empty pointer if there was unexpected values in the provided parameters or vi diff --git a/docs/d3/d6b/fixed__key__source_8cc_source.html b/docs/d3/d6b/fixed__key__source_8cc_source.html deleted file mode 100644 index e2d4a86951..0000000000 --- a/docs/d3/d6b/fixed__key__source_8cc_source.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - - - -Shaka Packager SDK: packager/media/base/fixed_key_source.cc Source File - - - - - - - - - -
-
-
const VPCodecConfigurationRecord & shaka::media::WebMVideoClient::GetVpCodecConfig VPCodecConfigurationRecord shaka::media::WebMVideoClient::GetVpCodecConfig ( const std::vector< uint8_t > &  codec_private)
- - - - - -
-
Shaka Packager SDK -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
fixed_key_source.cc
-
-
-
1 // Copyright 2016 Google Inc. All rights reserved.
-
2 //
-
3 // Use of this source code is governed by a BSD-style
-
4 // license that can be found in the LICENSE file or at
-
5 // https://developers.google.com/open-source/licenses/bsd
-
6 
-
7 #include "packager/media/base/fixed_key_source.h"
-
8 
-
9 #include <algorithm>
-
10 #include "packager/base/logging.h"
-
11 #include "packager/base/strings/string_number_conversions.h"
-
12 
-
13 namespace shaka {
-
14 namespace media {
-
15 
-
16 FixedKeySource::~FixedKeySource() {}
-
17 
-
18 Status FixedKeySource::FetchKeys(EmeInitDataType init_data_type,
-
19  const std::vector<uint8_t>& init_data) {
-
20  // Do nothing for fixed key encryption/decryption.
-
21  return Status::OK;
-
22 }
-
23 
-
24 Status FixedKeySource::GetKey(const std::string& stream_label,
-
25  EncryptionKey* key) {
-
26  DCHECK(key);
-
27  DCHECK(encryption_key_);
-
28  *key = *encryption_key_;
-
29  return Status::OK;
-
30 }
-
31 
-
32 Status FixedKeySource::GetKey(const std::vector<uint8_t>& key_id,
-
33  EncryptionKey* key) {
-
34  DCHECK(key);
-
35  DCHECK(encryption_key_);
-
36  if (key_id != encryption_key_->key_id) {
-
37  return Status(error::NOT_FOUND,
-
38  std::string("Key for key ID ") +
-
39  base::HexEncode(&key_id[0], key_id.size()) +
-
40  " was not found.");
-
41  }
-
42  *key = *encryption_key_;
-
43  return Status::OK;
-
44 }
-
45 
-
46 Status FixedKeySource::GetCryptoPeriodKey(uint32_t crypto_period_index,
-
47  const std::string& stream_label,
-
48  EncryptionKey* key) {
-
49  // Create a copy of the key.
-
50  *key = *encryption_key_;
-
51 
-
52  // A naive key rotation algorithm is implemented here by left rotating the
-
53  // key, key_id and pssh. Note that this implementation is only intended for
-
54  // testing purpose. The actual key rotation algorithm can be much more
-
55  // complicated.
-
56  LOG(WARNING)
-
57  << "This naive key rotation algorithm should not be used in production.";
-
58  std::rotate(key->key_id.begin(),
-
59  key->key_id.begin() + (crypto_period_index % key->key_id.size()),
-
60  key->key_id.end());
-
61  std::rotate(key->key.begin(),
-
62  key->key.begin() + (crypto_period_index % key->key.size()),
-
63  key->key.end());
-
64 
-
65  for (size_t i = 0; i < key->key_system_info.size(); i++) {
-
66  std::vector<uint8_t> pssh_data = key->key_system_info[i].pssh_data();
-
67  if (!pssh_data.empty()) {
-
68  std::rotate(pssh_data.begin(),
-
69  pssh_data.begin() + (crypto_period_index % pssh_data.size()),
-
70  pssh_data.end());
-
71  key->key_system_info[i].set_pssh_data(pssh_data);
-
72  }
-
73  }
-
74 
-
75  return Status::OK;
-
76 }
-
77 
-
78 std::unique_ptr<FixedKeySource> FixedKeySource::Create(
-
79  const std::vector<uint8_t>& key_id,
-
80  const std::vector<uint8_t>& key,
-
81  const std::vector<uint8_t>& pssh_boxes,
-
82  const std::vector<uint8_t>& iv) {
-
83  std::unique_ptr<EncryptionKey> encryption_key(new EncryptionKey());
-
84 
-
85  if (key_id.size() != 16) {
-
86  LOG(ERROR) << "Invalid key ID size '" << key_id.size()
-
87  << "', must be 16 bytes.";
-
88  return std::unique_ptr<FixedKeySource>();
-
89  }
-
90  if (key.size() != 16) {
-
91  // CENC only supports AES-128, i.e. 16 bytes.
-
92  LOG(ERROR) << "Invalid key size '" << key.size() << "', must be 16 bytes.";
-
93  return std::unique_ptr<FixedKeySource>();
-
94  }
-
95 
-
96  encryption_key->key_id = key_id;
-
97  encryption_key->key = key;
-
98  encryption_key->iv = iv;
-
99 
- -
101  pssh_boxes.data(), pssh_boxes.size(),
-
102  &encryption_key->key_system_info)) {
-
103  LOG(ERROR) << "--pssh argument should be full PSSH boxes.";
-
104  return std::unique_ptr<FixedKeySource>();
-
105  }
-
106 
-
107  // If there aren't any PSSH boxes given, create one with the common system ID.
-
108  if (encryption_key->key_system_info.size() == 0) {
- -
110  info.add_key_id(encryption_key->key_id);
-
111  info.set_system_id(kCommonSystemId, arraysize(kCommonSystemId));
-
112  info.set_pssh_box_version(1);
-
113 
-
114  encryption_key->key_system_info.push_back(info);
-
115  }
-
116 
-
117  return std::unique_ptr<FixedKeySource>(
-
118  new FixedKeySource(std::move(encryption_key)));
-
119 }
-
120 
-
121 FixedKeySource::FixedKeySource() {}
-
122 FixedKeySource::FixedKeySource(std::unique_ptr<EncryptionKey> key)
-
123  : encryption_key_(std::move(key)) {}
-
124 
-
125 } // namespace media
-
126 } // namespace shaka
-
Status GetCryptoPeriodKey(uint32_t crypto_period_index, const std::string &stream_label, EncryptionKey *key) override
-
Status GetKey(const std::string &stream_label, EncryptionKey *key) override
- -
static bool ParseBoxes(const uint8_t *data, size_t data_size, std::vector< ProtectionSystemSpecificInfo > *pssh_boxes)
-
Status FetchKeys(EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) override
-
A key source that uses fixed keys for encryption.
- - -
static std::unique_ptr< FixedKeySource > Create(const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &key, const std::vector< uint8_t > &pssh_boxes, const std::vector< uint8_t > &iv)
-
- - - - diff --git a/docs/d3/d71/classshaka_1_1media_1_1mp2t_1_1TsMuxer.html b/docs/d3/d71/classshaka_1_1media_1_1mp2t_1_1TsMuxer.html index 280d3658e8..36d284cb54 100644 --- a/docs/d3/d71/classshaka_1_1media_1_1mp2t_1_1TsMuxer.html +++ b/docs/d3/d71/classshaka_1_1media_1_1mp2t_1_1TsMuxer.html @@ -232,7 +232,7 @@ std::pair< std::shared_ptr
diff --git a/docs/d3/d73/classshaka_1_1File.html b/docs/d3/d73/classshaka_1_1File.html index 5868d0a481..3e09adb2ae 100644 --- a/docs/d3/d73/classshaka_1_1File.html +++ b/docs/d3/d73/classshaka_1_1File.html @@ -1006,7 +1006,7 @@ class ThreadedIoFile diff --git a/docs/d3/d73/classshaka_1_1media_1_1webm_1_1WebMMuxer.html b/docs/d3/d73/classshaka_1_1media_1_1webm_1_1WebMMuxer.html index c914aa7635..544e74455d 100644 --- a/docs/d3/d73/classshaka_1_1media_1_1webm_1_1WebMMuxer.html +++ b/docs/d3/d73/classshaka_1_1media_1_1webm_1_1WebMMuxer.html @@ -236,7 +236,7 @@ std::pair< std::shared_ptr
diff --git a/docs/d3/d75/classshaka_1_1media_1_1AesEncryptor.html b/docs/d3/d75/classshaka_1_1media_1_1AesEncryptor.html index f7b4868b52..8acfc07b74 100644 --- a/docs/d3/d75/classshaka_1_1media_1_1AesEncryptor.html +++ b/docs/d3/d75/classshaka_1_1media_1_1AesEncryptor.html @@ -236,7 +236,7 @@ AES_KEY * mutable_aes_key< diff --git a/docs/d3/d75/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html b/docs/d3/d75/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html index 6a51755a46..9a249ae210 100644 --- a/docs/d3/d75/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html +++ b/docs/d3/d75/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d76/muxer__flags_8h_source.html b/docs/d3/d76/muxer__flags_8h_source.html index 0a5987f476..11048a631e 100644 --- a/docs/d3/d76/muxer__flags_8h_source.html +++ b/docs/d3/d76/muxer__flags_8h_source.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d77/structshaka_1_1media_1_1mp4_1_1TextSampleEntry-members.html b/docs/d3/d77/structshaka_1_1media_1_1mp4_1_1TextSampleEntry-members.html index 547ad716e0..d1bd2fa9c6 100644 --- a/docs/d3/d77/structshaka_1_1media_1_1mp4_1_1TextSampleEntry-members.html +++ b/docs/d3/d77/structshaka_1_1media_1_1mp4_1_1TextSampleEntry-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d7b/classshaka_1_1media_1_1RsaPublicKey-members.html b/docs/d3/d7b/classshaka_1_1media_1_1RsaPublicKey-members.html index 9eea351bd6..b57b93b8ed 100644 --- a/docs/d3/d7b/classshaka_1_1media_1_1RsaPublicKey-members.html +++ b/docs/d3/d7b/classshaka_1_1media_1_1RsaPublicKey-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d7c/classshaka_1_1media_1_1WebMAudioClient.html b/docs/d3/d7c/classshaka_1_1media_1_1WebMAudioClient.html index a53ddd9461..1671e674e0 100644 --- a/docs/d3/d7c/classshaka_1_1media_1_1WebMAudioClient.html +++ b/docs/d3/d7c/classshaka_1_1media_1_1WebMAudioClient.html @@ -223,7 +223,7 @@ An empty pointer if there was unexpected values in the provided parameters or au diff --git a/docs/d3/d80/muxer__util_8h_source.html b/docs/d3/d80/muxer__util_8h_source.html index 400d8261c2..021d6cf11a 100644 --- a/docs/d3/d80/muxer__util_8h_source.html +++ b/docs/d3/d80/muxer__util_8h_source.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d87/structshaka_1_1media_1_1mp4_1_1SampleToChunk.html b/docs/d3/d87/structshaka_1_1media_1_1mp4_1_1SampleToChunk.html index 4d5c4c996c..014e43913e 100644 --- a/docs/d3/d87/structshaka_1_1media_1_1mp4_1_1SampleToChunk.html +++ b/docs/d3/d87/structshaka_1_1media_1_1mp4_1_1SampleToChunk.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d3/d87/trick__play__handler_8cc_source.html b/docs/d3/d87/trick__play__handler_8cc_source.html index 266e9814c6..199d011735 100644 --- a/docs/d3/d87/trick__play__handler_8cc_source.html +++ b/docs/d3/d87/trick__play__handler_8cc_source.html @@ -100,232 +100,190 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
11 
12 namespace shaka {
13 namespace media {
-
14 
-
15 namespace {
-
16 const size_t kMainStreamIndex = 0;
-
17 }
+
14 namespace {
+
15 const size_t kStreamIndexIn = 0;
+
16 const size_t kStreamIndexOut = 0;
+
17 } // namespace
18 
-
19 TrickPlayHandler::TrickPlayHandler() {}
-
20 
-
21 TrickPlayHandler::~TrickPlayHandler() {}
-
22 
-
23 void TrickPlayHandler::SetHandlerForMainStream(
-
24  std::shared_ptr<MediaHandler> handler) {
-
25  SetHandler(kMainStreamIndex, std::move(handler));
+
19 TrickPlayHandler::TrickPlayHandler(uint32_t factor) : factor_(factor) {
+
20  DCHECK_GE(factor, 1u)
+
21  << "Trick Play Handles must have a factor of 1 or higher.";
+
22 }
+
23 
+
24 Status TrickPlayHandler::InitializeInternal() {
+
25  return Status::OK;
26 }
27 
-
28 void TrickPlayHandler::SetHandlerForTrickPlay(
-
29  uint32_t trick_play_factor,
-
30  std::shared_ptr<MediaHandler> handler) {
-
31  trick_play_factors_.push_back(trick_play_factor);
-
32  // Trick play streams start from index 1.
-
33  SetHandler(trick_play_factors_.size(), std::move(handler));
-
34 }
+
28 Status TrickPlayHandler::Process(std::unique_ptr<StreamData> stream_data) {
+
29  DCHECK(stream_data);
+
30  DCHECK_EQ(stream_data->stream_index, kStreamIndexIn);
+
31 
+
32  switch (stream_data->stream_data_type) {
+
33  case StreamDataType::kStreamInfo:
+
34  return OnStreamInfo(*stream_data->stream_info);
35 
- -
37  if (!HasMainStream()) {
-
38  return Status(error::TRICK_PLAY_ERROR,
-
39  "Trick play does not have main stream");
-
40  }
-
41  if (trick_play_factors_.empty()) {
-
42  return Status(error::TRICK_PLAY_ERROR,
-
43  "Trick play factors are not specified.");
-
44  }
-
45  size_t num_trick_play_factors = trick_play_factors_.size();
-
46  cached_stream_data_.resize(num_trick_play_factors);
-
47  playback_rates_.resize(num_trick_play_factors, 0);
+
36  case StreamDataType::kSegmentInfo:
+
37  return OnSegmentInfo(std::move(stream_data->segment_info));
+
38 
+
39  case StreamDataType::kMediaSample:
+
40  return OnMediaSample(*stream_data->media_sample);
+
41 
+
42  default:
+
43  return Status(error::TRICK_PLAY_ERROR,
+
44  "Trick play only supports stream info, segment info, and "
+
45  "media sample messages.");
+
46  }
+
47 }
48 
-
49  return Status::OK;
-
50 }
+
49 Status TrickPlayHandler::OnFlushRequest(size_t input_stream_index) {
+
50  DCHECK_EQ(input_stream_index, 0u);
51 
-
52 Status TrickPlayHandler::Process(std::unique_ptr<StreamData> stream_data) {
-
53  // The non-trick play stream is dispatched at index 0.
-
54  // The trick-play streams are dispatched to index 1, index 2 and so on.
-
55  DCHECK(stream_data);
-
56  DCHECK_EQ(stream_data->stream_index, 0u);
-
57 
-
58  std::unique_ptr<StreamData> copy(new StreamData);
-
59  *copy = *stream_data;
-
60  Status status = Dispatch(std::move(copy));
-
61  if (!status.ok()) {
-
62  return status;
-
63  }
-
64 
-
65  std::shared_ptr<StreamData> shared_stream_data(std::move(stream_data));
-
66 
-
67  if (shared_stream_data->stream_data_type == StreamDataType::kStreamInfo) {
-
68  if (shared_stream_data->stream_info->stream_type() != kStreamVideo) {
-
69  status.SetError(error::TRICK_PLAY_ERROR,
-
70  "Trick play does not support non-video stream");
-
71  return status;
-
72  }
-
73  const VideoStreamInfo& video_stream_info =
-
74  static_cast<const VideoStreamInfo&>(*shared_stream_data->stream_info);
-
75  if (video_stream_info.trick_play_factor() > 0) {
-
76  status.SetError(error::TRICK_PLAY_ERROR,
-
77  "This stream is alreay a trick play stream.");
-
78  return status;
-
79  }
-
80  }
+
52  // Send everything out in its "as-is" state as we no longer need to update
+
53  // anything.
+
54  Status s;
+
55  while (s.ok() && delayed_messages_.size()) {
+
56  s.Update(Dispatch(std::move(delayed_messages_.front())));
+
57  delayed_messages_.pop_front();
+
58  }
+
59 
+
60  return s.ok() ? MediaHandler::FlushAllDownstreams() : s;
+
61 }
+
62 
+
63 Status TrickPlayHandler::OnStreamInfo(const StreamInfo& info) {
+
64  if (info.stream_type() != kStreamVideo) {
+
65  return Status(error::TRICK_PLAY_ERROR,
+
66  "Trick play does not support non-video stream");
+
67  }
+
68 
+
69  // Copy the video so we can edit it. Set play back rate to be zero. It will be
+
70  // updated later before being dispatched downstream.
+
71  video_info_ = std::make_shared<VideoStreamInfo>(
+
72  static_cast<const VideoStreamInfo&>(info));
+
73 
+
74  if (video_info_->trick_play_factor() > 0) {
+
75  return Status(error::TRICK_PLAY_ERROR,
+
76  "This stream is already a trick play stream.");
+
77  }
+
78 
+
79  video_info_->set_trick_play_factor(factor_);
+
80  video_info_->set_playback_rate(0);
81 
-
82  if (shared_stream_data->stream_data_type == StreamDataType::kSegmentInfo) {
-
83  for (auto& cached_data : cached_stream_data_) {
-
84  // It is possible that trick play stream has large frame duration that
-
85  // some segments in the main stream are skipped. To avoid empty segments,
-
86  // only cache SegementInfo with MediaSample before it.
-
87  if (!cached_data.empty() &&
-
88  cached_data.back()->stream_data_type == StreamDataType::kMediaSample)
-
89  cached_data.push_back(shared_stream_data);
-
90  }
-
91  return Status::OK;
-
92  }
-
93 
-
94  if (shared_stream_data->stream_data_type != StreamDataType::kMediaSample) {
-
95  // Non media sample stream data needs to be dispatched to every output
-
96  // stream. It is just cached in every queue until a new key frame comes or
-
97  // the stream is flushed.
-
98  for (size_t i = 0; i < cached_stream_data_.size(); ++i)
-
99  cached_stream_data_[i].push_back(shared_stream_data);
+
82  // Add video info to the message queue so that it can be sent out with all
+
83  // other messages. It won't be sent until the second trick play frame comes
+
84  // through. Until then, it can be updated via the |video_info_| member.
+
85  delayed_messages_.push_back(
+
86  StreamData::FromStreamInfo(kStreamIndexOut, video_info_));
+
87 
+
88  return Status::OK;
+
89 }
+
90 
+
91 Status TrickPlayHandler::OnSegmentInfo(
+
92  std::shared_ptr<const SegmentInfo> info) {
+
93  if (delayed_messages_.empty()) {
+
94  return Status(error::TRICK_PLAY_ERROR,
+
95  "Cannot handle segments with no preceding samples.");
+
96  }
+
97 
+
98  // Trick play does not care about sub segments, only full segments matter.
+
99  if (info->is_subsegment) {
100  return Status::OK;
101  }
102 
-
103  if (shared_stream_data->media_sample->is_key_frame()) {
-
104  // For a new key frame, some of the trick play streams may include it.
-
105  // The cached data in those trick play streams will be processed.
-
106  DCHECK_EQ(trick_play_factors_.size(), cached_stream_data_.size());
-
107  for (size_t i = 0; i < cached_stream_data_.size(); ++i) {
-
108  uint32_t factor = trick_play_factors_[i];
-
109  if (total_key_frames_ % factor == 0) {
-
110  // Delay processing cached stream data until receiving the second key
-
111  // frame so that the GOP size could be derived.
-
112  if (!cached_stream_data_[i].empty() && total_key_frames_ > 0) {
-
113  // Num of frames between first two key frames in the trick play
-
114  // streams. Use this as the playback_rate.
-
115  if (playback_rates_[i] == 0)
-
116  playback_rates_[i] = total_frames_;
-
117 
-
118  Status status =
-
119  ProcessCachedStreamData(i + 1, &cached_stream_data_[i]);
-
120  if (!status.ok())
-
121  return status;
-
122  }
-
123  cached_stream_data_[i].push_back(shared_stream_data);
-
124  }
-
125  }
-
126 
-
127  total_key_frames_++;
+
103  const StreamDataType previous_type =
+
104  delayed_messages_.back()->stream_data_type;
+
105 
+
106  switch (previous_type) {
+
107  case StreamDataType::kSegmentInfo:
+
108  // In the case that there was an empty segment (no trick frame between in
+
109  // a segment) extend the previous segment to include the empty segment to
+
110  // avoid holes.
+
111  previous_segment_->duration += info->duration;
+
112  return Status::OK;
+
113 
+
114  case StreamDataType::kMediaSample:
+
115  // The segment has ended and there are media samples in the segment.
+
116  // Add the segment info to the list of delayed messages. Segment info will
+
117  // not get sent downstream until the next trick play frame comes through
+
118  // or flush is called.
+
119  previous_segment_ = std::make_shared<SegmentInfo>(*info);
+
120  delayed_messages_.push_back(
+
121  StreamData::FromSegmentInfo(kStreamIndexOut, previous_segment_));
+
122  return Status::OK;
+
123 
+
124  default:
+
125  return Status(error::TRICK_PLAY_ERROR,
+
126  "Unexpected sample in trick play deferred queue : type=" +
+
127  std::to_string(static_cast<int>(previous_type)));
128  }
-
129 
-
130  total_frames_++;
-
131  prev_sample_end_timestamp_ = shared_stream_data->media_sample->dts() +
-
132  shared_stream_data->media_sample->duration();
+
129 }
+
130 
+
131 Status TrickPlayHandler::OnMediaSample(const MediaSample& sample) {
+
132  total_frames_++;
133 
-
134  return Status::OK;
-
135 }
+
134  if (sample.is_key_frame()) {
+
135  total_key_frames_++;
136 
-
137 bool TrickPlayHandler::ValidateOutputStreamIndex(size_t stream_index) const {
-
138  // Output stream index should be less than the number of trick play
-
139  // streams + one original stream.
-
140  return stream_index <= trick_play_factors_.size();
-
141 };
-
142 
-
143 Status TrickPlayHandler::OnFlushRequest(size_t input_stream_index) {
-
144  DCHECK_EQ(input_stream_index, 0u)
-
145  << "Trick Play Handler should only have single input.";
-
146  for (size_t i = 0; i < cached_stream_data_.size(); ++i) {
-
147  LOG_IF(WARNING, playback_rates_[i] == 0)
-
148  << "Max playout rate for trick play factor " << trick_play_factors_[i]
-
149  << " is not determined. "
-
150  << "Specify it as total number of frames: " << total_frames_ << ".";
-
151  playback_rates_[i] = total_frames_;
-
152  ProcessCachedStreamData(i + 1, &cached_stream_data_[i]);
-
153  }
- -
155 }
-
156 
-
157 bool TrickPlayHandler::HasMainStream() {
-
158  const auto& handlers = output_handlers();
-
159  const auto& main_stream_handler = handlers.find(kMainStreamIndex);
-
160  if (main_stream_handler == handlers.end()) {
-
161  return false;
-
162  }
-
163  return main_stream_handler->second.first != nullptr;
-
164 }
+
137  if ((total_key_frames_ - 1) % factor_ == 0) {
+
138  return OnTrickFrame(sample);
+
139  }
+
140  }
+
141 
+
142  // Update this now as it may be sent out soon via the delay message queue.
+
143  if (total_trick_frames_ < 2) {
+
144  // At this point, video_info will be at the head of the delay message queue
+
145  // and can still be updated safely.
+
146 
+
147  // The play back rate is determined by the number of frames between the
+
148  // first two trick play frames. The first trick play frame will be the
+
149  // first frame in the video.
+
150  video_info_->set_playback_rate(total_frames_);
+
151  }
+
152 
+
153  // If the frame is not a trick play frame, then take the duration of this
+
154  // frame and add it to the previous trick play frame so that it will span the
+
155  // gap created by not passing this frame through.
+
156  DCHECK(previous_trick_frame_);
+
157  previous_trick_frame_->set_duration(previous_trick_frame_->duration() +
+
158  sample.duration());
+
159 
+
160  return Status::OK;
+
161 }
+
162 
+
163 Status TrickPlayHandler::OnTrickFrame(const MediaSample& sample) {
+
164  total_trick_frames_++;
165 
-
166 Status TrickPlayHandler::ProcessCachedStreamData(
-
167  size_t output_stream_index,
-
168  std::deque<std::shared_ptr<StreamData>>* cached_stream_data) {
-
169  while (!cached_stream_data->empty()) {
-
170  Status status =
-
171  ProcessOneStreamData(output_stream_index, *cached_stream_data->front());
-
172  if (!status.ok()) {
-
173  return status;
-
174  }
-
175  cached_stream_data->pop_front();
-
176  }
-
177  return Status::OK;
-
178 }
+
166  // Make a message we can store until later.
+
167  previous_trick_frame_ = sample.Clone();
+
168 
+
169  // Add the message to our queue so that it will be ready to go out.
+
170  delayed_messages_.push_back(
+
171  StreamData::FromMediaSample(kStreamIndexOut, previous_trick_frame_));
+
172 
+
173  // We need two trick play frames before we can send out our stream info, so we
+
174  // cannot send this media sample until after we send our sample info
+
175  // downstream.
+
176  if (total_trick_frames_ < 2) {
+
177  return Status::OK;
+
178  }
179 
-
180 Status TrickPlayHandler::ProcessOneStreamData(size_t output_stream_index,
-
181  const StreamData& stream_data) {
-
182  size_t trick_play_index = output_stream_index - 1;
-
183  uint32_t trick_play_factor = trick_play_factors_[trick_play_index];
-
184  Status status;
-
185  switch (stream_data.stream_data_type) {
-
186  // trick_play_factor in StreamInfo should be modified.
-
187  case StreamDataType::kStreamInfo: {
-
188  const VideoStreamInfo& video_stream_info =
-
189  static_cast<const VideoStreamInfo&>(*stream_data.stream_info);
-
190  std::shared_ptr<VideoStreamInfo> trick_play_video_stream_info(
-
191  new VideoStreamInfo(video_stream_info));
-
192  trick_play_video_stream_info->set_trick_play_factor(trick_play_factor);
-
193  DCHECK_GT(playback_rates_[trick_play_index], 0u);
-
194  trick_play_video_stream_info->set_playback_rate(
-
195  playback_rates_[trick_play_index]);
-
196  status =
-
197  DispatchStreamInfo(output_stream_index, trick_play_video_stream_info);
-
198  break;
-
199  }
-
200  case StreamDataType::kMediaSample: {
-
201  if (stream_data.media_sample->is_key_frame()) {
-
202  std::shared_ptr<MediaSample> trick_play_media_sample =
-
203  MediaSample::CopyFrom(*(stream_data.media_sample));
-
204  trick_play_media_sample->set_duration(prev_sample_end_timestamp_ -
-
205  stream_data.media_sample->dts());
-
206  status =
-
207  DispatchMediaSample(output_stream_index, trick_play_media_sample);
-
208  }
-
209  break;
-
210  }
-
211  default:
-
212  std::unique_ptr<StreamData> copy(new StreamData(stream_data));
-
213  copy->stream_index = output_stream_index;
-
214  status = Dispatch(std::move(copy));
-
215  break;
-
216  }
-
217  return status;
-
218 }
-
219 
-
220 } // namespace media
-
221 } // namespace shaka
+
180  // Send out all delayed messages up until the new trick play frame we just
+
181  // added.
+
182  Status s;
+
183  while (s.ok() && delayed_messages_.size() > 1) {
+
184  s.Update(Dispatch(std::move(delayed_messages_.front())));
+
185  delayed_messages_.pop_front();
+
186  }
+
187  return s;
+
188 }
+
189 
+
190 } // namespace media
+
191 } // namespace shaka
Status Dispatch(std::unique_ptr< StreamData > stream_data)
- -
bool ValidateOutputStreamIndex(size_t stream_index) const override
Validate if the stream at the specified index actually exists.
-
Status FlushAllDownstreams()
Flush all connected downstreams.
-
void SetError(error::Code error_code, const std::string &error_message)
Definition: status.h:135
-
Status OnFlushRequest(size_t input_stream_index) override
Event handler for flush request at the specific input stream index.
-
Status DispatchStreamInfo(size_t stream_index, std::shared_ptr< const StreamInfo > stream_info)
Dispatch the stream info to downstream handlers.
-
Status DispatchMediaSample(size_t stream_index, std::shared_ptr< const MediaSample > media_sample)
Dispatch the media sample to downstream handlers.
-
static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:45
- -
Holds video stream information.
-
Status SetHandler(size_t output_stream_index, std::shared_ptr< MediaHandler > handler)
Connect downstream handler at the specified output stream index.
-
Status Process(std::unique_ptr< StreamData > stream_data) override
diff --git a/docs/d3/d8d/webm__audio__client_8h_source.html b/docs/d3/d8d/webm__audio__client_8h_source.html index 396587df75..39130e8c9f 100644 --- a/docs/d3/d8d/webm__audio__client_8h_source.html +++ b/docs/d3/d8d/webm__audio__client_8h_source.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d90/ec3__audio__util_8cc_source.html b/docs/d3/d90/ec3__audio__util_8cc_source.html index 91b4760f42..175d97e9e3 100644 --- a/docs/d3/d90/ec3__audio__util_8cc_source.html +++ b/docs/d3/d90/ec3__audio__util_8cc_source.html @@ -245,7 +245,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d91/classshaka_1_1media_1_1H264Parser.html b/docs/d3/d91/classshaka_1_1media_1_1H264Parser.html index 50982c6619..4a255fc4e9 100644 --- a/docs/d3/d91/classshaka_1_1media_1_1H264Parser.html +++ b/docs/d3/d91/classshaka_1_1media_1_1H264Parser.html @@ -135,7 +135,7 @@ Result ParseSEI (const diff --git a/docs/d3/d93/media__handler_8h_source.html b/docs/d3/d93/media__handler_8h_source.html index 14c54c9e24..d7295f6223 100644 --- a/docs/d3/d93/media__handler_8h_source.html +++ b/docs/d3/d93/media__handler_8h_source.html @@ -314,7 +314,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d95/classshaka_1_1hls_1_1MockMediaPlaylist.html b/docs/d3/d95/classshaka_1_1hls_1_1MockMediaPlaylist.html index 2dbcebd13c..7d2b13bade 100644 --- a/docs/d3/d95/classshaka_1_1hls_1_1MockMediaPlaylist.html +++ b/docs/d3/d95/classshaka_1_1hls_1_1MockMediaPlaylist.html @@ -206,7 +206,7 @@ Additional Inherited Members diff --git a/docs/d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.html b/docs/d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.html new file mode 100644 index 0000000000..5d8f27f40c --- /dev/null +++ b/docs/d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.html @@ -0,0 +1,264 @@ + + + + + + +Shaka Packager SDK: shaka::media::MediaHandlerGraphTestBase Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Shaka Packager SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
shaka::media::MediaHandlerGraphTestBase Class Reference
+
+
+
+Inheritance diagram for shaka::media::MediaHandlerGraphTestBase:
+
+
+ + +shaka::media::MediaHandlerTestBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

+void SetUpGraph (size_t num_inputs, size_t num_outputs, std::shared_ptr< MediaHandler > handler)
 Setup a graph using |handler| with |num_inputs| and |num_outputs|.
 
const std::vector
+< std::unique_ptr< StreamData > > & 
GetOutputStreamDataVector () const
 
+void ClearOutputStreamDataVector ()
 Clear the output stream data vector.
 
std::shared_ptr< MediaHandlersome_handler ()
 
std::shared_ptr< FakeMediaHandlernext_handler ()
 
- Protected Member Functions inherited from shaka::media::MediaHandlerTestBase
+bool IsVideoCodec (Codec codec) const
 
+std::unique_ptr< StreamInfoGetVideoStreamInfo (uint32_t time_scale) const
 
+std::unique_ptr< StreamInfoGetVideoStreamInfo (uint32_t time_scale, uint32_t width, uint64_t height) const
 
+std::unique_ptr< StreamInfoGetVideoStreamInfo (uint32_t time_scale, Codec codec) const
 
+std::unique_ptr< StreamInfoGetVideoStreamInfo (uint32_t time_scale, Codec codec, uint32_t width, uint64_t height) const
 
+std::unique_ptr< StreamInfoGetAudioStreamInfo (uint32_t time_scale) const
 
+std::unique_ptr< StreamInfoGetAudioStreamInfo (uint32_t time_scale, Codec codec) const
 
+std::shared_ptr< MediaSampleGetMediaSample (int64_t timestamp, int64_t duration, bool is_keyframe) const
 
+std::shared_ptr< MediaSampleGetMediaSample (int64_t timestamp, int64_t duration, bool is_keyframe, const uint8_t *data, size_t data_length) const
 
+std::unique_ptr< SegmentInfoGetSegmentInfo (int64_t start_timestamp, int64_t duration, bool is_subsegment) const
 
+std::unique_ptr< StreamInfoGetTextStreamInfo () const
 
+std::unique_ptr< TextSampleGetTextSample (const std::string &id, uint64_t start, uint64_t end, const std::string &payload) const
 
+Status SetUpAndInitializeGraph (std::shared_ptr< MediaHandler > handler, size_t input_count, size_t output_count)
 
+FakeInputMediaHandlerInput (size_t index)
 
+MockOutputMediaHandlerOutput (size_t index)
 
+

Detailed Description

+
+

Definition at line 197 of file media_handler_test_base.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< std::unique_ptr< StreamData > > & shaka::media::MediaHandlerGraphTestBase::GetOutputStreamDataVector () const
+
+protected
+
+
Returns
the output stream data vector from handler.
+ +

Definition at line 293 of file media_handler_test_base.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::shared_ptr<FakeMediaHandler> shaka::media::MediaHandlerGraphTestBase::next_handler ()
+
+inlineprotected
+
+
Returns
some a downstream handler that can be used for connecting.
+ +

Definition at line 218 of file media_handler_test_base.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::shared_ptr<MediaHandler> shaka::media::MediaHandlerGraphTestBase::some_handler ()
+
+inlineprotected
+
+
Returns
some random handler that can be used for testing.
+ +

Definition at line 215 of file media_handler_test_base.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/docs/d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.png b/docs/d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.png new file mode 100644 index 0000000000..a97304a555 Binary files /dev/null and b/docs/d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.png differ diff --git a/docs/d3/d9c/encryption__handler_8cc_source.html b/docs/d3/d9c/encryption__handler_8cc_source.html index c5a56d10b1..e4461d8b7c 100644 --- a/docs/d3/d9c/encryption__handler_8cc_source.html +++ b/docs/d3/d9c/encryption__handler_8cc_source.html @@ -98,577 +98,587 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
9 #include <stddef.h>
10 #include <stdint.h>
11 
-
12 #include <limits>
-
13 
-
14 #include "packager/media/base/aes_encryptor.h"
-
15 #include "packager/media/base/aes_pattern_cryptor.h"
-
16 #include "packager/media/base/key_source.h"
-
17 #include "packager/media/base/media_sample.h"
-
18 #include "packager/media/base/audio_stream_info.h"
-
19 #include "packager/media/base/video_stream_info.h"
-
20 #include "packager/media/codecs/video_slice_header_parser.h"
-
21 #include "packager/media/codecs/vp8_parser.h"
-
22 #include "packager/media/codecs/vp9_parser.h"
-
23 
-
24 namespace shaka {
-
25 namespace media {
-
26 
-
27 namespace {
-
28 const size_t kCencBlockSize = 16u;
-
29 
-
30 // The encryption handler only supports a single output.
-
31 const size_t kStreamIndex = 0;
-
32 
-
33 // The default KID for key rotation is all 0s.
-
34 const uint8_t kKeyRotationDefaultKeyId[] = {
-
35  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
36 };
-
37 
-
38 // Adds one or more subsamples to |*decrypt_config|. This may add more than one
-
39 // if one of the values overflows the integer in the subsample.
-
40 void AddSubsample(uint64_t clear_bytes,
-
41  uint64_t cipher_bytes,
-
42  DecryptConfig* decrypt_config) {
-
43  CHECK_LT(cipher_bytes, std::numeric_limits<uint32_t>::max());
-
44  const uint64_t kUInt16Max = std::numeric_limits<uint16_t>::max();
-
45  while (clear_bytes > kUInt16Max) {
-
46  decrypt_config->AddSubsample(kUInt16Max, 0);
-
47  clear_bytes -= kUInt16Max;
-
48  }
-
49 
-
50  if (clear_bytes > 0 || cipher_bytes > 0)
-
51  decrypt_config->AddSubsample(clear_bytes, cipher_bytes);
-
52 }
-
53 
-
54 uint8_t GetNaluLengthSize(const StreamInfo& stream_info) {
-
55  if (stream_info.stream_type() != kStreamVideo)
-
56  return 0;
-
57 
-
58  const VideoStreamInfo& video_stream_info =
-
59  static_cast<const VideoStreamInfo&>(stream_info);
-
60  return video_stream_info.nalu_length_size();
-
61 }
-
62 
-
63 std::string GetStreamLabelForEncryption(
-
64  const StreamInfo& stream_info,
-
65  const std::function<std::string(
-
66  const EncryptionParams::EncryptedStreamAttributes& stream_attributes)>&
-
67  stream_label_func) {
-
68  EncryptionParams::EncryptedStreamAttributes stream_attributes;
-
69  if (stream_info.stream_type() == kStreamAudio) {
-
70  stream_attributes.stream_type =
-
71  EncryptionParams::EncryptedStreamAttributes::kAudio;
-
72  } else if (stream_info.stream_type() == kStreamVideo) {
-
73  const VideoStreamInfo& video_stream_info =
-
74  static_cast<const VideoStreamInfo&>(stream_info);
-
75  stream_attributes.stream_type =
-
76  EncryptionParams::EncryptedStreamAttributes::kVideo;
-
77  stream_attributes.oneof.video.width = video_stream_info.width();
-
78  stream_attributes.oneof.video.height = video_stream_info.height();
-
79  }
-
80  return stream_label_func(stream_attributes);
-
81 }
-
82 } // namespace
-
83 
-
84 EncryptionHandler::EncryptionHandler(const EncryptionParams& encryption_params,
-
85  KeySource* key_source)
-
86  : encryption_params_(encryption_params),
-
87  protection_scheme_(
-
88  static_cast<FourCC>(encryption_params.protection_scheme)),
-
89  key_source_(key_source) {}
-
90 
-
91 EncryptionHandler::~EncryptionHandler() {}
-
92 
- -
94  if (!encryption_params_.stream_label_func) {
-
95  return Status(error::INVALID_ARGUMENT, "Stream label function not set.");
-
96  }
-
97  if (num_input_streams() != 1 || next_output_stream_index() != 1) {
-
98  return Status(error::INVALID_ARGUMENT,
-
99  "Expects exactly one input and output.");
-
100  }
-
101  return Status::OK;
-
102 }
-
103 
-
104 Status EncryptionHandler::Process(std::unique_ptr<StreamData> stream_data) {
-
105  switch (stream_data->stream_data_type) {
-
106  case StreamDataType::kStreamInfo:
-
107  return ProcessStreamInfo(*stream_data->stream_info);
-
108  case StreamDataType::kSegmentInfo: {
-
109  std::shared_ptr<SegmentInfo> segment_info(new SegmentInfo(
-
110  *stream_data->segment_info));
-
111 
-
112  segment_info->is_encrypted = remaining_clear_lead_ <= 0;
-
113 
-
114  const bool key_rotation_enabled = crypto_period_duration_ != 0;
-
115  if (key_rotation_enabled)
-
116  segment_info->key_rotation_encryption_config = encryption_config_;
-
117  if (!segment_info->is_subsegment) {
-
118  if (key_rotation_enabled)
-
119  check_new_crypto_period_ = true;
-
120  if (remaining_clear_lead_ > 0)
-
121  remaining_clear_lead_ -= segment_info->duration;
-
122  }
-
123 
-
124  return DispatchSegmentInfo(kStreamIndex, segment_info);
-
125  }
-
126  case StreamDataType::kMediaSample:
-
127  return ProcessMediaSample(std::move(stream_data->media_sample));
-
128  default:
-
129  VLOG(3) << "Stream data type "
-
130  << static_cast<int>(stream_data->stream_data_type) << " ignored.";
-
131  return Dispatch(std::move(stream_data));
-
132  }
-
133 }
-
134 
-
135 Status EncryptionHandler::ProcessStreamInfo(const StreamInfo& clear_info) {
-
136  if (clear_info.is_encrypted()) {
-
137  return Status(error::INVALID_ARGUMENT,
-
138  "Input stream is already encrypted.");
-
139  }
-
140 
-
141  DCHECK_NE(kStreamUnknown, clear_info.stream_type());
-
142  DCHECK_NE(kStreamText, clear_info.stream_type());
-
143  std::shared_ptr<StreamInfo> stream_info = clear_info.Clone();
-
144 
-
145  remaining_clear_lead_ =
-
146  encryption_params_.clear_lead_in_seconds * stream_info->time_scale();
-
147  crypto_period_duration_ =
-
148  encryption_params_.crypto_period_duration_in_seconds *
-
149  stream_info->time_scale();
-
150  codec_ = stream_info->codec();
-
151  nalu_length_size_ = GetNaluLengthSize(*stream_info);
-
152  stream_label_ = GetStreamLabelForEncryption(
-
153  *stream_info, encryption_params_.stream_label_func);
-
154  switch (codec_) {
-
155  case kCodecVP9:
-
156  if (encryption_params_.vp9_subsample_encryption)
-
157  vpx_parser_.reset(new VP9Parser);
-
158  break;
-
159  case kCodecH264:
-
160  header_parser_.reset(new H264VideoSliceHeaderParser);
-
161  break;
-
162  case kCodecH265:
-
163  header_parser_.reset(new H265VideoSliceHeaderParser);
-
164  break;
-
165  default:
-
166  // Other codecs should have nalu length size == 0.
-
167  if (nalu_length_size_ > 0) {
-
168  LOG(WARNING) << "Unknown video codec '" << codec_ << "'";
-
169  return Status(error::ENCRYPTION_FAILURE, "Unknown video codec.");
-
170  }
-
171  }
-
172  if (header_parser_) {
-
173  CHECK_NE(nalu_length_size_, 0u) << "AnnexB stream is not supported yet";
-
174  if (!header_parser_->Initialize(stream_info->codec_config())) {
-
175  return Status(error::ENCRYPTION_FAILURE,
-
176  "Fail to read SPS and PPS data.");
-
177  }
-
178  }
-
179 
-
180  Status status = SetupProtectionPattern(stream_info->stream_type());
-
181  if (!status.ok())
-
182  return status;
-
183 
-
184  EncryptionKey encryption_key;
-
185  const bool key_rotation_enabled = crypto_period_duration_ != 0;
-
186  if (key_rotation_enabled) {
-
187  check_new_crypto_period_ = true;
-
188  // Setup dummy key id and key to signal encryption for key rotation.
-
189  encryption_key.key_id.assign(
-
190  kKeyRotationDefaultKeyId,
-
191  kKeyRotationDefaultKeyId + sizeof(kKeyRotationDefaultKeyId));
-
192  // The key is not really used to encrypt any data. It is there just for
-
193  // convenience.
-
194  encryption_key.key = encryption_key.key_id;
-
195  } else {
-
196  status = key_source_->GetKey(stream_label_, &encryption_key);
-
197  if (!status.ok())
-
198  return status;
-
199  }
-
200  if (!CreateEncryptor(encryption_key))
-
201  return Status(error::ENCRYPTION_FAILURE, "Failed to create encryptor");
-
202 
-
203  stream_info->set_is_encrypted(true);
-
204  stream_info->set_has_clear_lead(encryption_params_.clear_lead_in_seconds > 0);
-
205  stream_info->set_encryption_config(*encryption_config_);
-
206 
-
207  return DispatchStreamInfo(kStreamIndex, stream_info);
-
208 }
-
209 
-
210 Status EncryptionHandler::ProcessMediaSample(
-
211  std::shared_ptr<const MediaSample> clear_sample) {
-
212  DCHECK(clear_sample);
-
213 
-
214  // We need to parse the frame (which also updates the vpx parser) even if the
-
215  // frame is not encrypted as the next (encrypted) frame may be dependent on
-
216  // this clear frame.
-
217  std::vector<VPxFrameInfo> vpx_frames;
-
218  if (vpx_parser_ && !vpx_parser_->Parse(clear_sample->data(),
-
219  clear_sample->data_size(),
-
220  &vpx_frames)) {
-
221  return Status(error::ENCRYPTION_FAILURE, "Failed to parse vpx frame.");
-
222  }
-
223 
-
224  // Need to setup the encryptor for new segments even if this segment does not
-
225  // need to be encrypted, so we can signal encryption metadata earlier to
-
226  // allows clients to prefetch the keys.
-
227  if (check_new_crypto_period_) {
-
228  const int64_t current_crypto_period_index =
-
229  clear_sample->dts() / crypto_period_duration_;
-
230  if (current_crypto_period_index != prev_crypto_period_index_) {
-
231  EncryptionKey encryption_key;
-
232  Status status = key_source_->GetCryptoPeriodKey(
-
233  current_crypto_period_index, stream_label_, &encryption_key);
-
234  if (!status.ok())
-
235  return status;
-
236  if (!CreateEncryptor(encryption_key))
-
237  return Status(error::ENCRYPTION_FAILURE, "Failed to create encryptor");
-
238  prev_crypto_period_index_ = current_crypto_period_index;
-
239  }
-
240  check_new_crypto_period_ = false;
-
241  }
-
242 
-
243  // Since there is no encryption needed right now, send the clear copy
-
244  // downstream so we can save the costs of copying it.
-
245  if (remaining_clear_lead_ > 0) {
-
246  return DispatchMediaSample(kStreamIndex, std::move(clear_sample));
-
247  }
-
248 
-
249  std::unique_ptr<DecryptConfig> decrypt_config(new DecryptConfig(
-
250  encryption_config_->key_id,
-
251  encryptor_->iv(),
-
252  std::vector<SubsampleEntry>(),
-
253  protection_scheme_,
-
254  crypt_byte_block_,
-
255  skip_byte_block_));
-
256 
-
257  // Now that we know that this sample must be encrypted, make a copy of
-
258  // the sample first so that all the encryption operations can be done
-
259  // in-place.
-
260  std::shared_ptr<MediaSample> cipher_sample =
-
261  MediaSample::CopyFrom(*clear_sample);
-
262 
-
263  Status result;
-
264  if (vpx_parser_) {
-
265  if (EncryptVpxFrame(vpx_frames,
-
266  cipher_sample->writable_data(),
-
267  cipher_sample->data_size(),
-
268  decrypt_config.get())) {
-
269  DCHECK_EQ(decrypt_config->GetTotalSizeOfSubsamples(),
-
270  cipher_sample->data_size());
-
271  } else {
-
272  result = Status(
-
273  error::ENCRYPTION_FAILURE,
-
274  "Failed to encrypt VPX frame.");
-
275  }
+
12 #include <algorithm>
+
13 #include <limits>
+
14 
+
15 #include "packager/media/base/aes_encryptor.h"
+
16 #include "packager/media/base/aes_pattern_cryptor.h"
+
17 #include "packager/media/base/key_source.h"
+
18 #include "packager/media/base/media_sample.h"
+
19 #include "packager/media/base/audio_stream_info.h"
+
20 #include "packager/media/base/video_stream_info.h"
+
21 #include "packager/media/codecs/video_slice_header_parser.h"
+
22 #include "packager/media/codecs/vp8_parser.h"
+
23 #include "packager/media/codecs/vp9_parser.h"
+
24 
+
25 namespace shaka {
+
26 namespace media {
+
27 
+
28 namespace {
+
29 const size_t kCencBlockSize = 16u;
+
30 
+
31 // The encryption handler only supports a single output.
+
32 const size_t kStreamIndex = 0;
+
33 
+
34 // The default KID for key rotation is all 0s.
+
35 const uint8_t kKeyRotationDefaultKeyId[] = {
+
36  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
37 };
+
38 
+
39 // Adds one or more subsamples to |*decrypt_config|. This may add more than one
+
40 // if one of the values overflows the integer in the subsample.
+
41 void AddSubsample(uint64_t clear_bytes,
+
42  uint64_t cipher_bytes,
+
43  DecryptConfig* decrypt_config) {
+
44  CHECK_LT(cipher_bytes, std::numeric_limits<uint32_t>::max());
+
45  const uint64_t kUInt16Max = std::numeric_limits<uint16_t>::max();
+
46  while (clear_bytes > kUInt16Max) {
+
47  decrypt_config->AddSubsample(kUInt16Max, 0);
+
48  clear_bytes -= kUInt16Max;
+
49  }
+
50 
+
51  if (clear_bytes > 0 || cipher_bytes > 0)
+
52  decrypt_config->AddSubsample(clear_bytes, cipher_bytes);
+
53 }
+
54 
+
55 uint8_t GetNaluLengthSize(const StreamInfo& stream_info) {
+
56  if (stream_info.stream_type() != kStreamVideo)
+
57  return 0;
+
58 
+
59  const VideoStreamInfo& video_stream_info =
+
60  static_cast<const VideoStreamInfo&>(stream_info);
+
61  return video_stream_info.nalu_length_size();
+
62 }
+
63 
+
64 std::string GetStreamLabelForEncryption(
+
65  const StreamInfo& stream_info,
+
66  const std::function<std::string(
+
67  const EncryptionParams::EncryptedStreamAttributes& stream_attributes)>&
+
68  stream_label_func) {
+
69  EncryptionParams::EncryptedStreamAttributes stream_attributes;
+
70  if (stream_info.stream_type() == kStreamAudio) {
+
71  stream_attributes.stream_type =
+
72  EncryptionParams::EncryptedStreamAttributes::kAudio;
+
73  } else if (stream_info.stream_type() == kStreamVideo) {
+
74  const VideoStreamInfo& video_stream_info =
+
75  static_cast<const VideoStreamInfo&>(stream_info);
+
76  stream_attributes.stream_type =
+
77  EncryptionParams::EncryptedStreamAttributes::kVideo;
+
78  stream_attributes.oneof.video.width = video_stream_info.width();
+
79  stream_attributes.oneof.video.height = video_stream_info.height();
+
80  }
+
81  return stream_label_func(stream_attributes);
+
82 }
+
83 } // namespace
+
84 
+
85 EncryptionHandler::EncryptionHandler(const EncryptionParams& encryption_params,
+
86  KeySource* key_source)
+
87  : encryption_params_(encryption_params),
+
88  protection_scheme_(
+
89  static_cast<FourCC>(encryption_params.protection_scheme)),
+
90  key_source_(key_source) {}
+
91 
+
92 EncryptionHandler::~EncryptionHandler() {}
+
93 
+ +
95  if (!encryption_params_.stream_label_func) {
+
96  return Status(error::INVALID_ARGUMENT, "Stream label function not set.");
+
97  }
+
98  if (num_input_streams() != 1 || next_output_stream_index() != 1) {
+
99  return Status(error::INVALID_ARGUMENT,
+
100  "Expects exactly one input and output.");
+
101  }
+
102  return Status::OK;
+
103 }
+
104 
+
105 Status EncryptionHandler::Process(std::unique_ptr<StreamData> stream_data) {
+
106  switch (stream_data->stream_data_type) {
+
107  case StreamDataType::kStreamInfo:
+
108  return ProcessStreamInfo(*stream_data->stream_info);
+
109  case StreamDataType::kSegmentInfo: {
+
110  std::shared_ptr<SegmentInfo> segment_info(new SegmentInfo(
+
111  *stream_data->segment_info));
+
112 
+
113  segment_info->is_encrypted = remaining_clear_lead_ <= 0;
+
114 
+
115  const bool key_rotation_enabled = crypto_period_duration_ != 0;
+
116  if (key_rotation_enabled)
+
117  segment_info->key_rotation_encryption_config = encryption_config_;
+
118  if (!segment_info->is_subsegment) {
+
119  if (key_rotation_enabled)
+
120  check_new_crypto_period_ = true;
+
121  if (remaining_clear_lead_ > 0)
+
122  remaining_clear_lead_ -= segment_info->duration;
+
123  }
+
124 
+
125  return DispatchSegmentInfo(kStreamIndex, segment_info);
+
126  }
+
127  case StreamDataType::kMediaSample:
+
128  return ProcessMediaSample(std::move(stream_data->media_sample));
+
129  default:
+
130  VLOG(3) << "Stream data type "
+
131  << static_cast<int>(stream_data->stream_data_type) << " ignored.";
+
132  return Dispatch(std::move(stream_data));
+
133  }
+
134 }
+
135 
+
136 Status EncryptionHandler::ProcessStreamInfo(const StreamInfo& clear_info) {
+
137  if (clear_info.is_encrypted()) {
+
138  return Status(error::INVALID_ARGUMENT,
+
139  "Input stream is already encrypted.");
+
140  }
+
141 
+
142  DCHECK_NE(kStreamUnknown, clear_info.stream_type());
+
143  DCHECK_NE(kStreamText, clear_info.stream_type());
+
144  std::shared_ptr<StreamInfo> stream_info = clear_info.Clone();
+
145 
+
146  remaining_clear_lead_ =
+
147  encryption_params_.clear_lead_in_seconds * stream_info->time_scale();
+
148  crypto_period_duration_ =
+
149  encryption_params_.crypto_period_duration_in_seconds *
+
150  stream_info->time_scale();
+
151  codec_ = stream_info->codec();
+
152  nalu_length_size_ = GetNaluLengthSize(*stream_info);
+
153  stream_label_ = GetStreamLabelForEncryption(
+
154  *stream_info, encryption_params_.stream_label_func);
+
155  switch (codec_) {
+
156  case kCodecVP9:
+
157  if (encryption_params_.vp9_subsample_encryption)
+
158  vpx_parser_.reset(new VP9Parser);
+
159  break;
+
160  case kCodecH264:
+
161  header_parser_.reset(new H264VideoSliceHeaderParser);
+
162  break;
+
163  case kCodecH265:
+
164  header_parser_.reset(new H265VideoSliceHeaderParser);
+
165  break;
+
166  default:
+
167  // Other codecs should have nalu length size == 0.
+
168  if (nalu_length_size_ > 0) {
+
169  LOG(WARNING) << "Unknown video codec '" << codec_ << "'";
+
170  return Status(error::ENCRYPTION_FAILURE, "Unknown video codec.");
+
171  }
+
172  }
+
173  if (header_parser_) {
+
174  CHECK_NE(nalu_length_size_, 0u) << "AnnexB stream is not supported yet";
+
175  if (!header_parser_->Initialize(stream_info->codec_config())) {
+
176  return Status(error::ENCRYPTION_FAILURE,
+
177  "Fail to read SPS and PPS data.");
+
178  }
+
179  }
+
180 
+
181  Status status = SetupProtectionPattern(stream_info->stream_type());
+
182  if (!status.ok())
+
183  return status;
+
184 
+
185  EncryptionKey encryption_key;
+
186  const bool key_rotation_enabled = crypto_period_duration_ != 0;
+
187  if (key_rotation_enabled) {
+
188  check_new_crypto_period_ = true;
+
189  // Setup dummy key id and key to signal encryption for key rotation.
+
190  encryption_key.key_id.assign(
+
191  kKeyRotationDefaultKeyId,
+
192  kKeyRotationDefaultKeyId + sizeof(kKeyRotationDefaultKeyId));
+
193  // The key is not really used to encrypt any data. It is there just for
+
194  // convenience.
+
195  encryption_key.key = encryption_key.key_id;
+
196  } else {
+
197  status = key_source_->GetKey(stream_label_, &encryption_key);
+
198  if (!status.ok())
+
199  return status;
+
200  }
+
201  if (!CreateEncryptor(encryption_key))
+
202  return Status(error::ENCRYPTION_FAILURE, "Failed to create encryptor");
+
203 
+
204  stream_info->set_is_encrypted(true);
+
205  stream_info->set_has_clear_lead(encryption_params_.clear_lead_in_seconds > 0);
+
206  stream_info->set_encryption_config(*encryption_config_);
+
207 
+
208  return DispatchStreamInfo(kStreamIndex, stream_info);
+
209 }
+
210 
+
211 Status EncryptionHandler::ProcessMediaSample(
+
212  std::shared_ptr<const MediaSample> clear_sample) {
+
213  DCHECK(clear_sample);
+
214 
+
215  // We need to parse the frame (which also updates the vpx parser) even if the
+
216  // frame is not encrypted as the next (encrypted) frame may be dependent on
+
217  // this clear frame.
+
218  std::vector<VPxFrameInfo> vpx_frames;
+
219  if (vpx_parser_ && !vpx_parser_->Parse(clear_sample->data(),
+
220  clear_sample->data_size(),
+
221  &vpx_frames)) {
+
222  return Status(error::ENCRYPTION_FAILURE, "Failed to parse vpx frame.");
+
223  }
+
224 
+
225  // Need to setup the encryptor for new segments even if this segment does not
+
226  // need to be encrypted, so we can signal encryption metadata earlier to
+
227  // allows clients to prefetch the keys.
+
228  if (check_new_crypto_period_) {
+
229  const int64_t current_crypto_period_index =
+
230  clear_sample->dts() / crypto_period_duration_;
+
231  if (current_crypto_period_index != prev_crypto_period_index_) {
+
232  EncryptionKey encryption_key;
+
233  Status status = key_source_->GetCryptoPeriodKey(
+
234  current_crypto_period_index, stream_label_, &encryption_key);
+
235  if (!status.ok())
+
236  return status;
+
237  if (!CreateEncryptor(encryption_key))
+
238  return Status(error::ENCRYPTION_FAILURE, "Failed to create encryptor");
+
239  prev_crypto_period_index_ = current_crypto_period_index;
+
240  }
+
241  check_new_crypto_period_ = false;
+
242  }
+
243 
+
244  // Since there is no encryption needed right now, send the clear copy
+
245  // downstream so we can save the costs of copying it.
+
246  if (remaining_clear_lead_ > 0) {
+
247  return DispatchMediaSample(kStreamIndex, std::move(clear_sample));
+
248  }
+
249 
+
250  std::unique_ptr<DecryptConfig> decrypt_config(new DecryptConfig(
+
251  encryption_config_->key_id,
+
252  encryptor_->iv(),
+
253  std::vector<SubsampleEntry>(),
+
254  protection_scheme_,
+
255  crypt_byte_block_,
+
256  skip_byte_block_));
+
257 
+
258  // Now that we know that this sample must be encrypted, make a copy of
+
259  // the sample first so that all the encryption operations can be done
+
260  // in-place.
+
261  std::shared_ptr<MediaSample> cipher_sample(clear_sample->Clone());
+
262  // |cipher_sample| above still contains the old clear sample data. We will
+
263  // use |cipher_sample_data| to hold cipher sample data then transfer it to
+
264  // |cipher_sample| after encryption.
+
265  std::shared_ptr<uint8_t> cipher_sample_data(
+
266  new uint8_t[clear_sample->data_size()], std::default_delete<uint8_t[]>());
+
267 
+
268  if (vpx_parser_) {
+
269  if (!EncryptVpxFrame(vpx_frames, clear_sample->data(),
+
270  clear_sample->data_size(),
+
271  &cipher_sample_data.get()[0], decrypt_config.get())) {
+
272  return Status(error::ENCRYPTION_FAILURE, "Failed to encrypt VPX frame.");
+
273  }
+
274  DCHECK_EQ(decrypt_config->GetTotalSizeOfSubsamples(),
+
275  clear_sample->data_size());
276  } else if (header_parser_) {
-
277  if (EncryptNalFrame(cipher_sample->writable_data(),
-
278  cipher_sample->data_size(),
-
279  decrypt_config.get())) {
-
280  DCHECK_EQ(decrypt_config->GetTotalSizeOfSubsamples(),
-
281  cipher_sample->data_size());
-
282  } else {
-
283  result = Status(
-
284  error::ENCRYPTION_FAILURE,
-
285  "Failed to encrypt NAL frame.");
-
286  }
-
287  } else if (cipher_sample->data_size() > leading_clear_bytes_size_) {
-
288  EncryptBytes(
-
289  cipher_sample->writable_data() + leading_clear_bytes_size_,
-
290  cipher_sample->data_size() - leading_clear_bytes_size_);
+
277  if (!EncryptNalFrame(clear_sample->data(), clear_sample->data_size(),
+
278  &cipher_sample_data.get()[0], decrypt_config.get())) {
+
279  return Status(error::ENCRYPTION_FAILURE, "Failed to encrypt NAL frame.");
+
280  }
+
281  DCHECK_EQ(decrypt_config->GetTotalSizeOfSubsamples(),
+
282  clear_sample->data_size());
+
283  } else {
+
284  memcpy(&cipher_sample_data.get()[0], clear_sample->data(),
+
285  std::min(clear_sample->data_size(), leading_clear_bytes_size_));
+
286  if (clear_sample->data_size() > leading_clear_bytes_size_) {
+
287  EncryptBytes(clear_sample->data() + leading_clear_bytes_size_,
+
288  clear_sample->data_size() - leading_clear_bytes_size_,
+
289  &cipher_sample_data.get()[leading_clear_bytes_size_]);
+
290  }
291  }
292 
-
293  if (!result.ok()) {
-
294  return result;
-
295  }
-
296 
-
297  encryptor_->UpdateIv();
-
298 
-
299  // Finish initializing the sample before sending it downstream. We must
-
300  // wait until now to finish the initialization as we will loose access to
-
301  // |decrypt_config| once we set it.
-
302  cipher_sample->set_is_encrypted(true);
-
303  cipher_sample->set_decrypt_config(std::move(decrypt_config));
-
304 
-
305  return DispatchMediaSample(kStreamIndex, std::move(cipher_sample));
-
306 }
-
307 
-
308 Status EncryptionHandler::SetupProtectionPattern(StreamType stream_type) {
-
309  switch (protection_scheme_) {
-
310  case kAppleSampleAesProtectionScheme: {
-
311  const size_t kH264LeadingClearBytesSize = 32u;
-
312  const size_t kSmallNalUnitSize = 32u + 16u;
-
313  const size_t kAudioLeadingClearBytesSize = 16u;
-
314  switch (codec_) {
-
315  case kCodecH264:
-
316  // Apple Sample AES uses 1:9 pattern for video.
-
317  crypt_byte_block_ = 1u;
-
318  skip_byte_block_ = 9u;
-
319  leading_clear_bytes_size_ = kH264LeadingClearBytesSize;
-
320  min_protected_data_size_ = kSmallNalUnitSize + 1u;
-
321  break;
-
322  case kCodecAAC:
-
323  FALLTHROUGH_INTENDED;
-
324  case kCodecAC3:
-
325  // Audio is whole sample encrypted. We could not use a
-
326  // crypto_byte_block_ of 1 here as if there is one crypto block
-
327  // remaining, it need not be encrypted for video but it needs to be
-
328  // encrypted for audio.
-
329  crypt_byte_block_ = 0u;
-
330  skip_byte_block_ = 0u;
-
331  leading_clear_bytes_size_ = kAudioLeadingClearBytesSize;
-
332  min_protected_data_size_ = leading_clear_bytes_size_ + 1u;
-
333  break;
-
334  default:
-
335  return Status(error::ENCRYPTION_FAILURE,
-
336  "Only AAC/AC3 and H264 are supported in Sample AES.");
-
337  }
-
338  break;
-
339  }
-
340  case FOURCC_cbcs:
-
341  FALLTHROUGH_INTENDED;
-
342  case FOURCC_cens:
-
343  if (stream_type == kStreamVideo) {
-
344  // Use 1:9 pattern for video.
-
345  crypt_byte_block_ = 1u;
-
346  skip_byte_block_ = 9u;
-
347  } else {
-
348  // Tracks other than video are protected using whole-block full-sample
-
349  // encryption, which is essentially a pattern of 1:0. Note that this may
-
350  // not be the same as the non-pattern based encryption counterparts,
-
351  // e.g. in 'cens' for full sample encryption, the whole sample is
-
352  // encrypted up to the last 16-byte boundary, see 23001-7:2016(E) 9.7;
-
353  // while in 'cenc' for full sample encryption, the last partial 16-byte
-
354  // block is also encrypted, see 23001-7:2016(E) 9.4.2. Another
-
355  // difference is the use of constant iv.
-
356  crypt_byte_block_ = 1u;
-
357  skip_byte_block_ = 0u;
-
358  }
-
359  break;
-
360  default:
-
361  // Not using pattern encryption.
-
362  crypt_byte_block_ = 0u;
-
363  skip_byte_block_ = 0u;
-
364  }
-
365  return Status::OK;
-
366 }
-
367 
-
368 bool EncryptionHandler::CreateEncryptor(const EncryptionKey& encryption_key) {
-
369  std::unique_ptr<AesCryptor> encryptor;
-
370  switch (protection_scheme_) {
-
371  case FOURCC_cenc:
-
372  encryptor.reset(new AesCtrEncryptor);
-
373  break;
-
374  case FOURCC_cbc1:
-
375  encryptor.reset(new AesCbcEncryptor(kNoPadding));
-
376  break;
-
377  case FOURCC_cens:
-
378  encryptor.reset(new AesPatternCryptor(
-
379  crypt_byte_block_, skip_byte_block_,
- -
381  AesCryptor::kDontUseConstantIv,
-
382  std::unique_ptr<AesCryptor>(new AesCtrEncryptor())));
-
383  break;
-
384  case FOURCC_cbcs:
-
385  encryptor.reset(new AesPatternCryptor(
-
386  crypt_byte_block_, skip_byte_block_,
- -
388  AesCryptor::kUseConstantIv,
-
389  std::unique_ptr<AesCryptor>(new AesCbcEncryptor(kNoPadding))));
-
390  break;
-
391  case kAppleSampleAesProtectionScheme:
-
392  if (crypt_byte_block_ == 0 && skip_byte_block_ == 0) {
-
393  encryptor.reset(
-
394  new AesCbcEncryptor(kNoPadding, AesCryptor::kUseConstantIv));
-
395  } else {
-
396  encryptor.reset(new AesPatternCryptor(
-
397  crypt_byte_block_, skip_byte_block_,
- -
399  AesCryptor::kUseConstantIv,
-
400  std::unique_ptr<AesCryptor>(new AesCbcEncryptor(kNoPadding))));
-
401  }
-
402  break;
-
403  default:
-
404  LOG(ERROR) << "Unsupported protection scheme.";
-
405  return false;
-
406  }
-
407 
-
408  std::vector<uint8_t> iv = encryption_key.iv;
-
409  if (iv.empty()) {
-
410  if (!AesCryptor::GenerateRandomIv(protection_scheme_, &iv)) {
-
411  LOG(ERROR) << "Failed to generate random iv.";
-
412  return false;
-
413  }
-
414  }
-
415  const bool initialized =
-
416  encryptor->InitializeWithIv(encryption_key.key, iv);
-
417  encryptor_ = std::move(encryptor);
-
418 
-
419  encryption_config_.reset(new EncryptionConfig);
-
420  encryption_config_->protection_scheme = protection_scheme_;
-
421  encryption_config_->crypt_byte_block = crypt_byte_block_;
-
422  encryption_config_->skip_byte_block = skip_byte_block_;
-
423  if (encryptor_->use_constant_iv()) {
-
424  encryption_config_->per_sample_iv_size = 0;
-
425  encryption_config_->constant_iv = iv;
-
426  } else {
-
427  encryption_config_->per_sample_iv_size = static_cast<uint8_t>(iv.size());
-
428  }
-
429  encryption_config_->key_id = encryption_key.key_id;
-
430  encryption_config_->key_system_info = encryption_key.key_system_info;
-
431  return initialized;
-
432 }
-
433 
-
434 bool EncryptionHandler::EncryptVpxFrame(
-
435  const std::vector<VPxFrameInfo>& vpx_frames,
-
436  uint8_t* source,
-
437  size_t source_size,
-
438  DecryptConfig* decrypt_config) {
-
439  uint8_t* data = source;
-
440  for (const VPxFrameInfo& frame : vpx_frames) {
-
441  uint16_t clear_bytes =
-
442  static_cast<uint16_t>(frame.uncompressed_header_size);
-
443  uint32_t cipher_bytes = static_cast<uint32_t>(
-
444  frame.frame_size - frame.uncompressed_header_size);
-
445 
-
446  // "VP Codec ISO Media File Format Binding" document requires that the
-
447  // encrypted bytes of each frame within the superframe must be block
-
448  // aligned so that the counter state can be computed for each frame
-
449  // within the superframe.
-
450  // ISO/IEC 23001-7:2016 10.2 'cbc1' 10.3 'cens'
-
451  // The BytesOfProtectedData size SHALL be a multiple of 16 bytes to
-
452  // avoid partial blocks in Subsamples.
-
453  // For consistency, apply block alignment to all frames.
-
454  const uint16_t misalign_bytes = cipher_bytes % kCencBlockSize;
-
455  clear_bytes += misalign_bytes;
-
456  cipher_bytes -= misalign_bytes;
-
457 
-
458  decrypt_config->AddSubsample(clear_bytes, cipher_bytes);
+
293  cipher_sample->TransferData(std::move(cipher_sample_data),
+
294  clear_sample->data_size());
+
295  // Finish initializing the sample before sending it downstream. We must
+
296  // wait until now to finish the initialization as we will lose access to
+
297  // |decrypt_config| once we set it.
+
298  cipher_sample->set_is_encrypted(true);
+
299  cipher_sample->set_decrypt_config(std::move(decrypt_config));
+
300 
+
301  encryptor_->UpdateIv();
+
302 
+
303  return DispatchMediaSample(kStreamIndex, std::move(cipher_sample));
+
304 }
+
305 
+
306 Status EncryptionHandler::SetupProtectionPattern(StreamType stream_type) {
+
307  switch (protection_scheme_) {
+
308  case kAppleSampleAesProtectionScheme: {
+
309  const size_t kH264LeadingClearBytesSize = 32u;
+
310  const size_t kSmallNalUnitSize = 32u + 16u;
+
311  const size_t kAudioLeadingClearBytesSize = 16u;
+
312  switch (codec_) {
+
313  case kCodecH264:
+
314  // Apple Sample AES uses 1:9 pattern for video.
+
315  crypt_byte_block_ = 1u;
+
316  skip_byte_block_ = 9u;
+
317  leading_clear_bytes_size_ = kH264LeadingClearBytesSize;
+
318  min_protected_data_size_ = kSmallNalUnitSize + 1u;
+
319  break;
+
320  case kCodecAAC:
+
321  FALLTHROUGH_INTENDED;
+
322  case kCodecAC3:
+
323  // Audio is whole sample encrypted. We could not use a
+
324  // crypto_byte_block_ of 1 here as if there is one crypto block
+
325  // remaining, it need not be encrypted for video but it needs to be
+
326  // encrypted for audio.
+
327  crypt_byte_block_ = 0u;
+
328  skip_byte_block_ = 0u;
+
329  leading_clear_bytes_size_ = kAudioLeadingClearBytesSize;
+
330  min_protected_data_size_ = leading_clear_bytes_size_ + 1u;
+
331  break;
+
332  default:
+
333  return Status(error::ENCRYPTION_FAILURE,
+
334  "Only AAC/AC3 and H264 are supported in Sample AES.");
+
335  }
+
336  break;
+
337  }
+
338  case FOURCC_cbcs:
+
339  FALLTHROUGH_INTENDED;
+
340  case FOURCC_cens:
+
341  if (stream_type == kStreamVideo) {
+
342  // Use 1:9 pattern for video.
+
343  crypt_byte_block_ = 1u;
+
344  skip_byte_block_ = 9u;
+
345  } else {
+
346  // Tracks other than video are protected using whole-block full-sample
+
347  // encryption, which is essentially a pattern of 1:0. Note that this may
+
348  // not be the same as the non-pattern based encryption counterparts,
+
349  // e.g. in 'cens' for full sample encryption, the whole sample is
+
350  // encrypted up to the last 16-byte boundary, see 23001-7:2016(E) 9.7;
+
351  // while in 'cenc' for full sample encryption, the last partial 16-byte
+
352  // block is also encrypted, see 23001-7:2016(E) 9.4.2. Another
+
353  // difference is the use of constant iv.
+
354  crypt_byte_block_ = 1u;
+
355  skip_byte_block_ = 0u;
+
356  }
+
357  break;
+
358  default:
+
359  // Not using pattern encryption.
+
360  crypt_byte_block_ = 0u;
+
361  skip_byte_block_ = 0u;
+
362  }
+
363  return Status::OK;
+
364 }
+
365 
+
366 bool EncryptionHandler::CreateEncryptor(const EncryptionKey& encryption_key) {
+
367  std::unique_ptr<AesCryptor> encryptor;
+
368  switch (protection_scheme_) {
+
369  case FOURCC_cenc:
+
370  encryptor.reset(new AesCtrEncryptor);
+
371  break;
+
372  case FOURCC_cbc1:
+
373  encryptor.reset(new AesCbcEncryptor(kNoPadding));
+
374  break;
+
375  case FOURCC_cens:
+
376  encryptor.reset(new AesPatternCryptor(
+
377  crypt_byte_block_, skip_byte_block_,
+ +
379  AesCryptor::kDontUseConstantIv,
+
380  std::unique_ptr<AesCryptor>(new AesCtrEncryptor())));
+
381  break;
+
382  case FOURCC_cbcs:
+
383  encryptor.reset(new AesPatternCryptor(
+
384  crypt_byte_block_, skip_byte_block_,
+ +
386  AesCryptor::kUseConstantIv,
+
387  std::unique_ptr<AesCryptor>(new AesCbcEncryptor(kNoPadding))));
+
388  break;
+
389  case kAppleSampleAesProtectionScheme:
+
390  if (crypt_byte_block_ == 0 && skip_byte_block_ == 0) {
+
391  encryptor.reset(
+
392  new AesCbcEncryptor(kNoPadding, AesCryptor::kUseConstantIv));
+
393  } else {
+
394  encryptor.reset(new AesPatternCryptor(
+
395  crypt_byte_block_, skip_byte_block_,
+ +
397  AesCryptor::kUseConstantIv,
+
398  std::unique_ptr<AesCryptor>(new AesCbcEncryptor(kNoPadding))));
+
399  }
+
400  break;
+
401  default:
+
402  LOG(ERROR) << "Unsupported protection scheme.";
+
403  return false;
+
404  }
+
405 
+
406  std::vector<uint8_t> iv = encryption_key.iv;
+
407  if (iv.empty()) {
+
408  if (!AesCryptor::GenerateRandomIv(protection_scheme_, &iv)) {
+
409  LOG(ERROR) << "Failed to generate random iv.";
+
410  return false;
+
411  }
+
412  }
+
413  const bool initialized =
+
414  encryptor->InitializeWithIv(encryption_key.key, iv);
+
415  encryptor_ = std::move(encryptor);
+
416 
+
417  encryption_config_.reset(new EncryptionConfig);
+
418  encryption_config_->protection_scheme = protection_scheme_;
+
419  encryption_config_->crypt_byte_block = crypt_byte_block_;
+
420  encryption_config_->skip_byte_block = skip_byte_block_;
+
421  if (encryptor_->use_constant_iv()) {
+
422  encryption_config_->per_sample_iv_size = 0;
+
423  encryption_config_->constant_iv = iv;
+
424  } else {
+
425  encryption_config_->per_sample_iv_size = static_cast<uint8_t>(iv.size());
+
426  }
+
427  encryption_config_->key_id = encryption_key.key_id;
+
428  encryption_config_->key_system_info = encryption_key.key_system_info;
+
429  return initialized;
+
430 }
+
431 
+
432 bool EncryptionHandler::EncryptVpxFrame(
+
433  const std::vector<VPxFrameInfo>& vpx_frames,
+
434  const uint8_t* source,
+
435  size_t source_size,
+
436  uint8_t* dest,
+
437  DecryptConfig* decrypt_config) {
+
438  const uint8_t* data = source;
+
439  for (const VPxFrameInfo& frame : vpx_frames) {
+
440  uint16_t clear_bytes =
+
441  static_cast<uint16_t>(frame.uncompressed_header_size);
+
442  uint32_t cipher_bytes = static_cast<uint32_t>(
+
443  frame.frame_size - frame.uncompressed_header_size);
+
444 
+
445  // "VP Codec ISO Media File Format Binding" document requires that the
+
446  // encrypted bytes of each frame within the superframe must be block
+
447  // aligned so that the counter state can be computed for each frame
+
448  // within the superframe.
+
449  // ISO/IEC 23001-7:2016 10.2 'cbc1' 10.3 'cens'
+
450  // The BytesOfProtectedData size SHALL be a multiple of 16 bytes to
+
451  // avoid partial blocks in Subsamples.
+
452  // For consistency, apply block alignment to all frames.
+
453  const uint16_t misalign_bytes = cipher_bytes % kCencBlockSize;
+
454  clear_bytes += misalign_bytes;
+
455  cipher_bytes -= misalign_bytes;
+
456 
+
457  decrypt_config->AddSubsample(clear_bytes, cipher_bytes);
+
458  memcpy(dest, data, clear_bytes);
459  if (cipher_bytes > 0)
-
460  EncryptBytes(data + clear_bytes, cipher_bytes);
+
460  EncryptBytes(data + clear_bytes, cipher_bytes, dest + clear_bytes);
461  data += frame.frame_size;
-
462  }
-
463  // Add subsample for the superframe index if exists.
-
464  const bool is_superframe = vpx_frames.size() > 1;
-
465  if (is_superframe) {
-
466  size_t index_size = source + source_size - data;
-
467  DCHECK_LE(index_size, 2 + vpx_frames.size() * 4);
-
468  DCHECK_GE(index_size, 2 + vpx_frames.size() * 1);
-
469  uint16_t clear_bytes = static_cast<uint16_t>(index_size);
-
470  uint32_t cipher_bytes = 0;
-
471  decrypt_config->AddSubsample(clear_bytes, cipher_bytes);
-
472  }
-
473  return true;
-
474 }
-
475 
-
476 bool EncryptionHandler::EncryptNalFrame(uint8_t* data,
-
477  size_t data_length,
-
478  DecryptConfig* decrypt_config) {
-
479  DCHECK_NE(nalu_length_size_, 0u);
-
480  DCHECK(header_parser_);
-
481  const Nalu::CodecType nalu_type =
-
482  (codec_ == kCodecH265) ? Nalu::kH265 : Nalu::kH264;
-
483  NaluReader reader(nalu_type, nalu_length_size_, data, data_length);
-
484 
-
485  // Store the current length of clear data. This is used to squash
-
486  // multiple unencrypted NAL units into fewer subsample entries.
-
487  uint64_t accumulated_clear_bytes = 0;
-
488 
-
489  Nalu nalu;
-
490  NaluReader::Result result;
-
491  while ((result = reader.Advance(&nalu)) == NaluReader::kOk) {
-
492  const uint64_t nalu_total_size = nalu.header_size() + nalu.payload_size();
-
493  if (nalu.is_video_slice() && nalu_total_size >= min_protected_data_size_) {
-
494  uint64_t current_clear_bytes = leading_clear_bytes_size_;
-
495  if (current_clear_bytes == 0) {
-
496  // For video-slice NAL units, encrypt the video slice. This skips
-
497  // the frame header.
-
498  const int64_t video_slice_header_size =
-
499  header_parser_->GetHeaderSize(nalu);
-
500  if (video_slice_header_size < 0) {
-
501  LOG(ERROR) << "Failed to read slice header.";
-
502  return false;
-
503  }
-
504  current_clear_bytes = nalu.header_size() + video_slice_header_size;
-
505  }
-
506  uint64_t cipher_bytes = nalu_total_size - current_clear_bytes;
-
507 
-
508  // ISO/IEC 23001-7:2016 10.2 'cbc1' 10.3 'cens'
-
509  // The BytesOfProtectedData size SHALL be a multiple of 16 bytes to
-
510  // avoid partial blocks in Subsamples.
-
511  // CMAF requires 'cenc' scheme BytesOfProtectedData SHALL be a multiple
-
512  // of 16 bytes; while 'cbcs' scheme BytesOfProtectedData SHALL start on
-
513  // the first byte of video data following the slice header.
-
514  if (protection_scheme_ == FOURCC_cbc1 ||
-
515  protection_scheme_ == FOURCC_cens ||
-
516  protection_scheme_ == FOURCC_cenc) {
-
517  const uint16_t misalign_bytes = cipher_bytes % kCencBlockSize;
-
518  current_clear_bytes += misalign_bytes;
-
519  cipher_bytes -= misalign_bytes;
-
520  }
-
521 
-
522  const uint8_t* nalu_data = nalu.data() + current_clear_bytes;
-
523  EncryptBytes(const_cast<uint8_t*>(nalu_data), cipher_bytes);
+
462  dest += frame.frame_size;
+
463  }
+
464  // Add subsample for the superframe index if exists.
+
465  const bool is_superframe = vpx_frames.size() > 1;
+
466  if (is_superframe) {
+
467  size_t index_size = source + source_size - data;
+
468  DCHECK_LE(index_size, 2 + vpx_frames.size() * 4);
+
469  DCHECK_GE(index_size, 2 + vpx_frames.size() * 1);
+
470  uint16_t clear_bytes = static_cast<uint16_t>(index_size);
+
471  uint32_t cipher_bytes = 0;
+
472  decrypt_config->AddSubsample(clear_bytes, cipher_bytes);
+
473  memcpy(dest, data, clear_bytes);
+
474  }
+
475  return true;
+
476 }
+
477 
+
478 bool EncryptionHandler::EncryptNalFrame(const uint8_t* source,
+
479  size_t source_size,
+
480  uint8_t* dest,
+
481  DecryptConfig* decrypt_config) {
+
482  DCHECK_NE(nalu_length_size_, 0u);
+
483  DCHECK(header_parser_);
+
484  const Nalu::CodecType nalu_type =
+
485  (codec_ == kCodecH265) ? Nalu::kH265 : Nalu::kH264;
+
486  NaluReader reader(nalu_type, nalu_length_size_, source, source_size);
+
487 
+
488  // Store the current length of clear data. This is used to squash
+
489  // multiple unencrypted NAL units into fewer subsample entries.
+
490  uint64_t accumulated_clear_bytes = 0;
+
491 
+
492  Nalu nalu;
+
493  NaluReader::Result result;
+
494  while ((result = reader.Advance(&nalu)) == NaluReader::kOk) {
+
495  const uint64_t nalu_total_size = nalu.header_size() + nalu.payload_size();
+
496  if (nalu.is_video_slice() && nalu_total_size >= min_protected_data_size_) {
+
497  uint64_t current_clear_bytes = leading_clear_bytes_size_;
+
498  if (current_clear_bytes == 0) {
+
499  // For video-slice NAL units, encrypt the video slice. This skips
+
500  // the frame header.
+
501  const int64_t video_slice_header_size =
+
502  header_parser_->GetHeaderSize(nalu);
+
503  if (video_slice_header_size < 0) {
+
504  LOG(ERROR) << "Failed to read slice header.";
+
505  return false;
+
506  }
+
507  current_clear_bytes = nalu.header_size() + video_slice_header_size;
+
508  }
+
509  uint64_t cipher_bytes = nalu_total_size - current_clear_bytes;
+
510 
+
511  // ISO/IEC 23001-7:2016 10.2 'cbc1' 10.3 'cens'
+
512  // The BytesOfProtectedData size SHALL be a multiple of 16 bytes to
+
513  // avoid partial blocks in Subsamples.
+
514  // CMAF requires 'cenc' scheme BytesOfProtectedData SHALL be a multiple
+
515  // of 16 bytes; while 'cbcs' scheme BytesOfProtectedData SHALL start on
+
516  // the first byte of video data following the slice header.
+
517  if (protection_scheme_ == FOURCC_cbc1 ||
+
518  protection_scheme_ == FOURCC_cens ||
+
519  protection_scheme_ == FOURCC_cenc) {
+
520  const uint16_t misalign_bytes = cipher_bytes % kCencBlockSize;
+
521  current_clear_bytes += misalign_bytes;
+
522  cipher_bytes -= misalign_bytes;
+
523  }
524 
-
525  AddSubsample(
-
526  accumulated_clear_bytes + nalu_length_size_ + current_clear_bytes,
-
527  cipher_bytes, decrypt_config);
-
528  accumulated_clear_bytes = 0;
-
529  } else {
-
530  // For non-video-slice or small NAL units, don't encrypt.
-
531  accumulated_clear_bytes += nalu_length_size_ + nalu_total_size;
-
532  }
-
533  }
-
534  if (result != NaluReader::kEOStream) {
-
535  LOG(ERROR) << "Failed to parse NAL units.";
-
536  return false;
-
537  }
-
538  AddSubsample(accumulated_clear_bytes, 0, decrypt_config);
-
539  return true;
-
540 }
-
541 
-
542 void EncryptionHandler::EncryptBytes(uint8_t* data, size_t size) {
-
543  DCHECK(data);
-
544  DCHECK(encryptor_);
-
545  CHECK(encryptor_->Crypt(data, size, data));
-
546 }
-
547 
-
548 void EncryptionHandler::InjectVpxParserForTesting(
-
549  std::unique_ptr<VPxParser> vpx_parser) {
-
550  vpx_parser_ = std::move(vpx_parser);
-
551 }
-
552 
-
553 void EncryptionHandler::InjectVideoSliceHeaderParserForTesting(
-
554  std::unique_ptr<VideoSliceHeaderParser> header_parser) {
-
555  header_parser_ = std::move(header_parser);
-
556 }
-
557 
-
558 } // namespace media
-
559 } // namespace shaka
+
525  accumulated_clear_bytes += nalu_length_size_ + current_clear_bytes;
+
526  AddSubsample(accumulated_clear_bytes, cipher_bytes, decrypt_config);
+
527  memcpy(dest, source, accumulated_clear_bytes);
+
528  source += accumulated_clear_bytes;
+
529  dest += accumulated_clear_bytes;
+
530  accumulated_clear_bytes = 0;
+
531 
+
532  DCHECK_EQ(nalu.data() + current_clear_bytes, source);
+
533  EncryptBytes(source, cipher_bytes, dest);
+
534  source += cipher_bytes;
+
535  dest += cipher_bytes;
+
536  } else {
+
537  // For non-video-slice or small NAL units, don't encrypt.
+
538  accumulated_clear_bytes += nalu_length_size_ + nalu_total_size;
+
539  }
+
540  }
+
541  if (result != NaluReader::kEOStream) {
+
542  LOG(ERROR) << "Failed to parse NAL units.";
+
543  return false;
+
544  }
+
545  AddSubsample(accumulated_clear_bytes, 0, decrypt_config);
+
546  memcpy(dest, source, accumulated_clear_bytes);
+
547  return true;
+
548 }
+
549 
+
550 void EncryptionHandler::EncryptBytes(const uint8_t* source,
+
551  size_t source_size,
+
552  uint8_t* dest) {
+
553  DCHECK(source);
+
554  DCHECK(dest);
+
555  DCHECK(encryptor_);
+
556  CHECK(encryptor_->Crypt(source, source_size, dest));
+
557 }
+
558 
+
559 void EncryptionHandler::InjectVpxParserForTesting(
+
560  std::unique_ptr<VPxParser> vpx_parser) {
+
561  vpx_parser_ = std::move(vpx_parser);
+
562 }
+
563 
+
564 void EncryptionHandler::InjectVideoSliceHeaderParserForTesting(
+
565  std::unique_ptr<VideoSliceHeaderParser> header_parser) {
+
566  header_parser_ = std::move(header_parser);
+
567 }
+
568 
+
569 } // namespace media
+
570 } // namespace shaka
Abstract class holds stream information.
Definition: stream_info.h:58
virtual std::unique_ptr< StreamInfo > Clone() const =0
-
std::function< std::string(const EncryptedStreamAttributes &stream_attributes)> stream_label_func
+
std::function< std::string(const EncryptedStreamAttributes &stream_attributes)> stream_label_func
virtual Status GetCryptoPeriodKey(uint32_t crypto_period_index, const std::string &stream_label, EncryptionKey *key)=0
Status Dispatch(std::unique_ptr< StreamData > stream_data)
virtual Status GetKey(const std::string &stream_label, EncryptionKey *key)=0
-
double clear_lead_in_seconds
Clear lead duration in seconds.
+
double clear_lead_in_seconds
Clear lead duration in seconds.
-
bool vp9_subsample_encryption
Enable/disable subsample encryption for VP9.
+
bool vp9_subsample_encryption
Enable/disable subsample encryption for VP9.
- -
Status Process(std::unique_ptr< StreamData > stream_data) override
+ +
Status Process(std::unique_ptr< StreamData > stream_data) override
static bool GenerateRandomIv(FourCC protection_scheme, std::vector< uint8_t > *iv)
Definition: aes_cryptor.cc:107
Status DispatchStreamInfo(size_t stream_index, std::shared_ptr< const StreamInfo > stream_info)
Dispatch the stream info to downstream handlers.
Status DispatchMediaSample(size_t stream_index, std::shared_ptr< const MediaSample > media_sample)
Dispatch the media sample to downstream handlers.
-
static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:45
Status DispatchSegmentInfo(size_t stream_index, std::shared_ptr< const SegmentInfo > segment_info)
Dispatch the segment info to downstream handlers.
diff --git a/docs/d3/da0/ec3__audio__util_8h_source.html b/docs/d3/da0/ec3__audio__util_8h_source.html index cc1488714b..29575d9a92 100644 --- a/docs/d3/da0/ec3__audio__util_8h_source.html +++ b/docs/d3/da0/ec3__audio__util_8h_source.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/da1/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter.html b/docs/d3/da1/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter.html index 3b11a30e6d..93b7f77b7e 100644 --- a/docs/d3/da1/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter.html +++ b/docs/d3/da1/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter.html @@ -302,7 +302,7 @@ uint64_t duration () c diff --git a/docs/d3/da2/structshaka_1_1media_1_1mp4_1_1SchemeType.html b/docs/d3/da2/structshaka_1_1media_1_1mp4_1_1SchemeType.html index c6360af9e0..7cdf84b2d9 100644 --- a/docs/d3/da2/structshaka_1_1media_1_1mp4_1_1SchemeType.html +++ b/docs/d3/da2/structshaka_1_1media_1_1mp4_1_1SchemeType.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/d3/dad/structshaka_1_1media_1_1mp4_1_1ID3v2.html b/docs/d3/dad/structshaka_1_1media_1_1mp4_1_1ID3v2.html index a5bcbe89e9..d383b4e42a 100644 --- a/docs/d3/dad/structshaka_1_1media_1_1mp4_1_1ID3v2.html +++ b/docs/d3/dad/structshaka_1_1media_1_1mp4_1_1ID3v2.html @@ -189,7 +189,7 @@ Additional Inherited Members diff --git a/docs/d3/db4/classshaka_1_1media_1_1WebMWebVTTParser-members.html b/docs/d3/db4/classshaka_1_1media_1_1WebMWebVTTParser-members.html index ad500d36f2..27a3028347 100644 --- a/docs/d3/db4/classshaka_1_1media_1_1WebMWebVTTParser-members.html +++ b/docs/d3/db4/classshaka_1_1media_1_1WebMWebVTTParser-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/db5/structshaka_1_1media_1_1mp4_1_1Track.html b/docs/d3/db5/structshaka_1_1media_1_1mp4_1_1Track.html index 99ff0bc74a..42fbb00032 100644 --- a/docs/d3/db5/structshaka_1_1media_1_1mp4_1_1Track.html +++ b/docs/d3/db5/structshaka_1_1media_1_1mp4_1_1Track.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d3/db6/webm__parser_8cc_source.html b/docs/d3/db6/webm__parser_8cc_source.html index d4c44ca0b1..bc14f92e7a 100644 --- a/docs/d3/db6/webm__parser_8cc_source.html +++ b/docs/d3/db6/webm__parser_8cc_source.html @@ -1088,7 +1088,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dbc/seek__head_8cc_source.html b/docs/d3/dbc/seek__head_8cc_source.html index 3159386f4a..a74accfd1d 100644 --- a/docs/d3/dbc/seek__head_8cc_source.html +++ b/docs/d3/dbc/seek__head_8cc_source.html @@ -206,7 +206,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dbe/demuxer_8cc_source.html b/docs/d3/dbe/demuxer_8cc_source.html index 2bd2950ccd..d31cb461f8 100644 --- a/docs/d3/dbe/demuxer_8cc_source.html +++ b/docs/d3/dbe/demuxer_8cc_source.html @@ -447,7 +447,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dbe/structshaka_1_1media_1_1mp4_1_1EditList.html b/docs/d3/dbe/structshaka_1_1media_1_1mp4_1_1EditList.html index 6ec714c54d..a8eee8ffbd 100644 --- a/docs/d3/dbe/structshaka_1_1media_1_1mp4_1_1EditList.html +++ b/docs/d3/dbe/structshaka_1_1media_1_1mp4_1_1EditList.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d3/dc0/structshaka_1_1DecryptionParams-members.html b/docs/d3/dc0/structshaka_1_1DecryptionParams-members.html index 3693fa7e77..2f46d7cd43 100644 --- a/docs/d3/dc0/structshaka_1_1DecryptionParams-members.html +++ b/docs/d3/dc0/structshaka_1_1DecryptionParams-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dc1/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser.html b/docs/d3/dc1/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser.html index ad7af432b3..2e527d7000 100644 --- a/docs/d3/dc1/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser.html +++ b/docs/d3/dc1/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser.html @@ -257,7 +257,7 @@ std::shared_ptr< diff --git a/docs/d3/dd0/classshaka_1_1MpdNotifier.html b/docs/d3/dd0/classshaka_1_1MpdNotifier.html index 9f3f31cc4c..30c2ff68bb 100644 --- a/docs/d3/dd0/classshaka_1_1MpdNotifier.html +++ b/docs/d3/dd0/classshaka_1_1MpdNotifier.html @@ -500,7 +500,7 @@ Public Member Functions diff --git a/docs/d3/dd0/structshaka_1_1media_1_1mp4_1_1SegmentType.html b/docs/d3/dd0/structshaka_1_1media_1_1mp4_1_1SegmentType.html index b573820a71..5698c83b6e 100644 --- a/docs/d3/dd0/structshaka_1_1media_1_1mp4_1_1SegmentType.html +++ b/docs/d3/dd0/structshaka_1_1media_1_1mp4_1_1SegmentType.html @@ -177,7 +177,7 @@ std::vector< FourCC > < diff --git a/docs/d3/de2/structshaka_1_1FileCloser.html b/docs/d3/de2/structshaka_1_1FileCloser.html index 036817b64e..101e36cebf 100644 --- a/docs/d3/de2/structshaka_1_1FileCloser.html +++ b/docs/d3/de2/structshaka_1_1FileCloser.html @@ -112,7 +112,7 @@ void operator() ( diff --git a/docs/d3/de4/seek__head_8h_source.html b/docs/d3/de4/seek__head_8h_source.html index 84e13bd198..7f69067b58 100644 --- a/docs/d3/de4/seek__head_8h_source.html +++ b/docs/d3/de4/seek__head_8h_source.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/de9/classshaka_1_1media_1_1mp4_1_1BoxBuffer-members.html b/docs/d3/de9/classshaka_1_1media_1_1mp4_1_1BoxBuffer-members.html index cead3eb4d4..1f85821200 100644 --- a/docs/d3/de9/classshaka_1_1media_1_1mp4_1_1BoxBuffer-members.html +++ b/docs/d3/de9/classshaka_1_1media_1_1mp4_1_1BoxBuffer-members.html @@ -121,7 +121,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/de9/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription-members.html b/docs/d3/de9/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription-members.html index ee8c9fa347..8a2077cbd4 100644 --- a/docs/d3/de9/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription-members.html +++ b/docs/d3/de9/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/df1/box__reader_8cc_source.html b/docs/d3/df1/box__reader_8cc_source.html index e0368dc212..0cab49e1ab 100644 --- a/docs/d3/df1/box__reader_8cc_source.html +++ b/docs/d3/df1/box__reader_8cc_source.html @@ -259,7 +259,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/df5/structshaka_1_1PlayreadyEncryptionParams.html b/docs/d3/df5/structshaka_1_1PlayreadyEncryptionParams.html index 70258e2863..ed96b0621e 100644 --- a/docs/d3/df5/structshaka_1_1PlayreadyEncryptionParams.html +++ b/docs/d3/df5/structshaka_1_1PlayreadyEncryptionParams.html @@ -130,7 +130,7 @@ std::vector< uint8_t >   

Detailed Description

-

Playready encryption parameters. Two different modes of playready key acquisition is supported: (1) Fetch from a key server. key_server_url and program_identifier are required. The presence of other parameters may be necessary depends on server configuration. (2) Provide the raw key directly. Both key_id and key are required. We are planning to merge this mode with RawKeyEncryptionParams.

+

Playready encryption parameters. Two different modes of playready key acquisition is supported: (1) Fetch from a key server. key_server_url and program_identifier are required. The presence of other parameters may be necessary depends on server configuration. (2) Provide the raw key directly. Both key_id and key are required. We are planning to merge this mode with RawKeyParams.

Definition at line 76 of file crypto_params.h.

Member Data Documentation

@@ -155,7 +155,7 @@ std::vector< uint8_t > 
diff --git a/docs/d3/dfe/classshaka_1_1media_1_1AesPatternCryptor.html b/docs/d3/dfe/classshaka_1_1media_1_1AesPatternCryptor.html index e420df30e7..febfd58386 100644 --- a/docs/d3/dfe/classshaka_1_1media_1_1AesPatternCryptor.html +++ b/docs/d3/dfe/classshaka_1_1media_1_1AesPatternCryptor.html @@ -297,7 +297,7 @@ AES_KEY * mutable_aes_key< diff --git a/docs/d4/d00/mp4_2multi__segment__segmenter_8cc_source.html b/docs/d4/d00/mp4_2multi__segment__segmenter_8cc_source.html index 67fdd68bac..71751b77f1 100644 --- a/docs/d4/d00/mp4_2multi__segment__segmenter_8cc_source.html +++ b/docs/d4/d00/mp4_2multi__segment__segmenter_8cc_source.html @@ -310,7 +310,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d08/classshaka_1_1media_1_1mp4_1_1MP4MediaParser-members.html b/docs/d4/d08/classshaka_1_1media_1_1mp4_1_1MP4MediaParser-members.html index e3746662d4..09dc96824b 100644 --- a/docs/d4/d08/classshaka_1_1media_1_1mp4_1_1MP4MediaParser-members.html +++ b/docs/d4/d08/classshaka_1_1media_1_1mp4_1_1MP4MediaParser-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d0b/classshaka_1_1media_1_1TextTrack.html b/docs/d4/d0b/classshaka_1_1media_1_1TextTrack.html index c56fa25390..113ac5d685 100644 --- a/docs/d4/d0b/classshaka_1_1media_1_1TextTrack.html +++ b/docs/d4/d0b/classshaka_1_1media_1_1TextTrack.html @@ -109,7 +109,7 @@ virtual void addWebVTTCue< diff --git a/docs/d4/d14/classshaka_1_1media_1_1WebVttMediaParser-members.html b/docs/d4/d14/classshaka_1_1media_1_1WebVttMediaParser-members.html index 09f4c5e308..e45d3d660b 100644 --- a/docs/d4/d14/classshaka_1_1media_1_1WebVttMediaParser-members.html +++ b/docs/d4/d14/classshaka_1_1media_1_1WebVttMediaParser-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d15/gflags__hex__bytes_8cc_source.html b/docs/d4/d15/gflags__hex__bytes_8cc_source.html index 3b46f31a85..6abf746ac8 100644 --- a/docs/d4/d15/gflags__hex__bytes_8cc_source.html +++ b/docs/d4/d15/gflags__hex__bytes_8cc_source.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
8 
9 #include "packager/base/strings/string_number_conversions.h"
10 
-
11 namespace shaka {
+
11 namespace shaka {
12 
13 bool ValidateHexString(const char* flagname,
14  const std::string& value,
@@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d18/structshaka_1_1media_1_1mp4_1_1EditListEntry.html b/docs/d4/d18/structshaka_1_1media_1_1mp4_1_1EditListEntry.html index 6c5c6e9aeb..1dde9f0405 100644 --- a/docs/d4/d18/structshaka_1_1media_1_1mp4_1_1EditListEntry.html +++ b/docs/d4/d18/structshaka_1_1media_1_1mp4_1_1EditListEntry.html @@ -118,7 +118,7 @@ int16_t media_rate_fractio diff --git a/docs/d4/d20/classshaka_1_1media_1_1AesCbcEncryptor.html b/docs/d4/d20/classshaka_1_1media_1_1AesCbcEncryptor.html index 46a74a2d81..8731b60b18 100644 --- a/docs/d4/d20/classshaka_1_1media_1_1AesCbcEncryptor.html +++ b/docs/d4/d20/classshaka_1_1media_1_1AesCbcEncryptor.html @@ -235,7 +235,7 @@ AES_KEY * mutable_aes_key< diff --git a/docs/d4/d20/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html b/docs/d4/d20/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html index f17f37f47c..19533fe029 100644 --- a/docs/d4/d20/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html +++ b/docs/d4/d20/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d2c/structshaka_1_1media_1_1mp4_1_1ID3v2-members.html b/docs/d4/d2c/structshaka_1_1media_1_1mp4_1_1ID3v2-members.html index 384240582d..9d83e4090f 100644 --- a/docs/d4/d2c/structshaka_1_1media_1_1mp4_1_1ID3v2-members.html +++ b/docs/d4/d2c/structshaka_1_1media_1_1mp4_1_1ID3v2-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d33/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox.html b/docs/d4/d33/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox.html index fd4fe67d4e..23d7039548 100644 --- a/docs/d4/d33/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox.html +++ b/docs/d4/d33/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d4/d37/io__cache_8cc_source.html b/docs/d4/d37/io__cache_8cc_source.html index 5dcd8197b6..902708099b 100644 --- a/docs/d4/d37/io__cache_8cc_source.html +++ b/docs/d4/d37/io__cache_8cc_source.html @@ -243,7 +243,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d3a/structshaka_1_1media_1_1H264Sps-members.html b/docs/d4/d3a/structshaka_1_1media_1_1H264Sps-members.html index 7a44a33fa7..03aa89f6e4 100644 --- a/docs/d4/d3a/structshaka_1_1media_1_1H264Sps-members.html +++ b/docs/d4/d3a/structshaka_1_1media_1_1H264Sps-members.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d43/classshaka_1_1media_1_1ChunkingHandler.html b/docs/d4/d43/classshaka_1_1media_1_1ChunkingHandler.html index 648cc1142f..ad5c194895 100644 --- a/docs/d4/d43/classshaka_1_1media_1_1ChunkingHandler.html +++ b/docs/d4/d43/classshaka_1_1media_1_1ChunkingHandler.html @@ -273,7 +273,7 @@ class ChunkingHandlerTest< diff --git a/docs/d4/d4a/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html b/docs/d4/d4a/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html index 2076aaa8df..193fc3aaca 100644 --- a/docs/d4/d4a/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html +++ b/docs/d4/d4a/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d4c/structshaka_1_1media_1_1H264WeightingFactors.html b/docs/d4/d4c/structshaka_1_1media_1_1H264WeightingFactors.html index 452d7f57d2..2bd79ba81f 100644 --- a/docs/d4/d4c/structshaka_1_1media_1_1H264WeightingFactors.html +++ b/docs/d4/d4c/structshaka_1_1media_1_1H264WeightingFactors.html @@ -124,7 +124,7 @@ int chroma_offset [32] diff --git a/docs/d4/d58/classshaka_1_1media_1_1Nalu-members.html b/docs/d4/d58/classshaka_1_1media_1_1Nalu-members.html index 249007a02c..a8708e165c 100644 --- a/docs/d4/d58/classshaka_1_1media_1_1Nalu-members.html +++ b/docs/d4/d58/classshaka_1_1media_1_1Nalu-members.html @@ -159,7 +159,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d59/classshaka_1_1media_1_1WebMWebVTTParser.html b/docs/d4/d59/classshaka_1_1media_1_1WebMWebVTTParser.html index 9042ac17a3..50230094a7 100644 --- a/docs/d4/d59/classshaka_1_1media_1_1WebMWebVTTParser.html +++ b/docs/d4/d59/classshaka_1_1media_1_1WebMWebVTTParser.html @@ -111,7 +111,7 @@ static void  diff --git a/docs/d4/d5c/classshaka_1_1media_1_1DecryptConfig-members.html b/docs/d4/d5c/classshaka_1_1media_1_1DecryptConfig-members.html index 5c711f12d0..7174ec59cd 100644 --- a/docs/d4/d5c/classshaka_1_1media_1_1DecryptConfig-members.html +++ b/docs/d4/d5c/classshaka_1_1media_1_1DecryptConfig-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d70/classshaka_1_1DashIopMpdNotifier.html b/docs/d4/d70/classshaka_1_1DashIopMpdNotifier.html index d3b603d35d..6240a668f3 100644 --- a/docs/d4/d70/classshaka_1_1DashIopMpdNotifier.html +++ b/docs/d4/d70/classshaka_1_1DashIopMpdNotifier.html @@ -475,7 +475,7 @@ class DashIopMpdNotifierTe diff --git a/docs/d4/d70/structshaka_1_1SegmentInfo-members.html b/docs/d4/d70/structshaka_1_1SegmentInfo-members.html index 25501a14e2..3055da4d61 100644 --- a/docs/d4/d70/structshaka_1_1SegmentInfo-members.html +++ b/docs/d4/d70/structshaka_1_1SegmentInfo-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d83/cue_8cc_source.html b/docs/d4/d83/cue_8cc_source.html index e339a202e1..b7144b5750 100644 --- a/docs/d4/d83/cue_8cc_source.html +++ b/docs/d4/d83/cue_8cc_source.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d87/nalu__reader_8h_source.html b/docs/d4/d87/nalu__reader_8h_source.html index e8452087e5..d56146e04e 100644 --- a/docs/d4/d87/nalu__reader_8h_source.html +++ b/docs/d4/d87/nalu__reader_8h_source.html @@ -320,7 +320,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d87/text__sample_8cc_source.html b/docs/d4/d87/text__sample_8cc_source.html index d5db8fbf5a..c296000f21 100644 --- a/docs/d4/d87/text__sample_8cc_source.html +++ b/docs/d4/d87/text__sample_8cc_source.html @@ -129,7 +129,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d8a/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord.html b/docs/d4/d8a/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord.html index 632ebb5a23..f946a1cc07 100644 --- a/docs/d4/d8a/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord.html +++ b/docs/d4/d8a/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord.html @@ -171,7 +171,7 @@ void  diff --git a/docs/d4/d8d/structshaka_1_1media_1_1mp4_1_1EC3Specific.html b/docs/d4/d8d/structshaka_1_1media_1_1mp4_1_1EC3Specific.html index dedcefd6c8..20b3c38408 100644 --- a/docs/d4/d8d/structshaka_1_1media_1_1mp4_1_1EC3Specific.html +++ b/docs/d4/d8d/structshaka_1_1media_1_1mp4_1_1EC3Specific.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html b/docs/d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html index 5c53dd053d..8a3cadcb26 100644 --- a/docs/d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html +++ b/docs/d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
shaka::media::MediaHandlerTestBase Class Reference
@@ -99,11 +99,12 @@ Inheritance diagram for shaka::media::MediaHandlerTestBase:
+shaka::media::MediaHandlerGraphTestBase
- + @@ -125,113 +126,42 @@ std::unique_ptr< - - - - + + + + - - - - - - - - - - - - + + + + + + + + + +

-Public Member Functions

+Protected Member Functions

bool IsVideoCodec (Codec codec) const
 
std::unique_ptr< StreamInfoGetAudioStreamInfo (uint32_t time_scale, Codec codec) const
 
-std::unique_ptr< MediaSampleGetMediaSample (int64_t timestamp, int64_t duration, bool is_keyframe) const
 
-std::unique_ptr< MediaSampleGetMediaSample (int64_t timestamp, int64_t duration, bool is_keyframe, const uint8_t *data, size_t data_length) const
 
+std::shared_ptr< MediaSampleGetMediaSample (int64_t timestamp, int64_t duration, bool is_keyframe) const
 
+std::shared_ptr< MediaSampleGetMediaSample (int64_t timestamp, int64_t duration, bool is_keyframe, const uint8_t *data, size_t data_length) const
 
std::unique_ptr< SegmentInfoGetSegmentInfo (int64_t start_timestamp, int64_t duration, bool is_subsegment) const
 
-void SetUpGraph (size_t num_inputs, size_t num_outputs, std::shared_ptr< MediaHandler > handler)
 Setup a graph using |handler| with |num_inputs| and |num_outputs|.
 
const std::vector
-< std::unique_ptr< StreamData > > & 
GetOutputStreamDataVector () const
 
-void ClearOutputStreamDataVector ()
 Clear the output stream data vector.
 
std::shared_ptr< MediaHandlersome_handler ()
 
std::shared_ptr< FakeMediaHandlernext_handler ()
 
+std::unique_ptr< StreamInfoGetTextStreamInfo () const
 
+std::unique_ptr< TextSampleGetTextSample (const std::string &id, uint64_t start, uint64_t end, const std::string &payload) const
 
+Status SetUpAndInitializeGraph (std::shared_ptr< MediaHandler > handler, size_t input_count, size_t output_count)
 
+FakeInputMediaHandlerInput (size_t index)
 
+MockOutputMediaHandlerOutput (size_t index)
 

Detailed Description

-

Definition at line 94 of file media_handler_test_base.h.

-

Member Function Documentation

- -
-
- - - - - - - -
const std::vector< std::unique_ptr< StreamData > > & shaka::media::MediaHandlerTestBase::GetOutputStreamDataVector () const
-
-
Returns
the output stream data vector from handler.
- -

Definition at line 179 of file media_handler_test_base.cc.

- -
-
- -
-
- - - - - -
- - - - - - - -
std::shared_ptr<FakeMediaHandler> shaka::media::MediaHandlerTestBase::next_handler ()
-
-inline
-
-
Returns
some a downstream handler that can be used for connecting.
- -

Definition at line 155 of file media_handler_test_base.h.

- -
-
- -
-
- - - - - -
- - - - - - - -
std::shared_ptr<MediaHandler> shaka::media::MediaHandlerTestBase::some_handler ()
-
-inline
-
-
Returns
some random handler that can be used for testing.
- -

Definition at line 152 of file media_handler_test_base.h.

- -
-
-
The documentation for this class was generated from the following files:
    +

    Definition at line 127 of file media_handler_test_base.h.

    +
    The documentation for this class was generated from the following files: diff --git a/docs/d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.png b/docs/d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.png index 75fe37cbcf..8760b9fd0a 100644 Binary files a/docs/d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.png and b/docs/d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.png differ diff --git a/docs/d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html b/docs/d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html index e0e970bba1..07fa2c00bc 100644 --- a/docs/d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html +++ b/docs/d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html @@ -299,7 +299,7 @@ Static Public Member Functions

    Implements shaka::media::KeySource.

    -

    Definition at line 307 of file playready_key_source.cc.

    +

    Definition at line 306 of file playready_key_source.cc.

    @@ -353,7 +353,7 @@ Static Public Member Functions

    Implements shaka::media::KeySource.

    -

    Definition at line 334 of file playready_key_source.cc.

    +

    Definition at line 333 of file playready_key_source.cc.

    @@ -400,7 +400,7 @@ Static Public Member Functions

    Implements shaka::media::KeySource.

    -

    Definition at line 313 of file playready_key_source.cc.

    +

    Definition at line 312 of file playready_key_source.cc.

    @@ -447,7 +447,7 @@ Static Public Member Functions

    Implements shaka::media::KeySource.

    -

    Definition at line 324 of file playready_key_source.cc.

    +

    Definition at line 323 of file playready_key_source.cc.

    @@ -458,7 +458,7 @@ Static Public Member Functions diff --git a/docs/d4/da7/segmenter__test__base_8cc_source.html b/docs/d4/da7/segmenter__test__base_8cc_source.html index 076251d975..f1a744481b 100644 --- a/docs/d4/da7/segmenter__test__base_8cc_source.html +++ b/docs/d4/da7/segmenter__test__base_8cc_source.html @@ -304,12 +304,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    std::shared_ptr< MediaSample > CreateSample(KeyFrameFlag key_frame_flag, uint64_t duration, SideDataFlag side_data_flag)
    Creates a new media sample.
    std::string temp_dir
    Specify temporary directory for intermediate files.
    Definition: muxer_options.h:39
    MuxerOptions CreateMuxerOptions() const
    Creates a Muxer options object for testing.
    -
    static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
    Definition: media_sample.cc:45
    +
    static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
    Definition: media_sample.cc:42
    Holds video stream information.
    diff --git a/docs/d4/dad/structshaka_1_1media_1_1mp4_1_1SampleEncryption.html b/docs/d4/dad/structshaka_1_1media_1_1mp4_1_1SampleEncryption.html index 0e5c9a425c..1d22ef75a5 100644 --- a/docs/d4/dad/structshaka_1_1media_1_1mp4_1_1SampleEncryption.html +++ b/docs/d4/dad/structshaka_1_1media_1_1mp4_1_1SampleEncryption.html @@ -250,7 +250,7 @@ Additional Inherited Members diff --git a/docs/d4/db1/structshaka_1_1media_1_1mp4_1_1CompactSampleSize-members.html b/docs/d4/db1/structshaka_1_1media_1_1mp4_1_1CompactSampleSize-members.html index a6b617d479..5fd1363bd8 100644 --- a/docs/d4/db1/structshaka_1_1media_1_1mp4_1_1CompactSampleSize-members.html +++ b/docs/d4/db1/structshaka_1_1media_1_1mp4_1_1CompactSampleSize-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/db2/cluster__builder_8h_source.html b/docs/d4/db2/cluster__builder_8h_source.html index 0b2164f717..7a932fd2af 100644 --- a/docs/d4/db2/cluster__builder_8h_source.html +++ b/docs/d4/db2/cluster__builder_8h_source.html @@ -181,7 +181,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/db4/classshaka_1_1MpdNotifierFactory.html b/docs/d4/db4/classshaka_1_1MpdNotifierFactory.html index 9b7518b02e..5458f87aff 100644 --- a/docs/d4/db4/classshaka_1_1MpdNotifierFactory.html +++ b/docs/d4/db4/classshaka_1_1MpdNotifierFactory.html @@ -113,7 +113,7 @@ virtual std::unique_ptr
    diff --git a/docs/d4/db9/structshaka_1_1media_1_1mp4_1_1MediaHeader.html b/docs/d4/db9/structshaka_1_1media_1_1mp4_1_1MediaHeader.html index dcaa84c57d..b34731e3c7 100644 --- a/docs/d4/db9/structshaka_1_1media_1_1mp4_1_1MediaHeader.html +++ b/docs/d4/db9/structshaka_1_1media_1_1mp4_1_1MediaHeader.html @@ -194,7 +194,7 @@ Additional Inherited Members diff --git a/docs/d4/dc8/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter.html b/docs/d4/dc8/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter.html index 4ac751485a..859eb71777 100644 --- a/docs/d4/dc8/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter.html +++ b/docs/d4/dc8/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter.html @@ -140,7 +140,7 @@ static const uint8_t kElem diff --git a/docs/d4/dcb/classshaka_1_1UdpFile.html b/docs/d4/dcb/classshaka_1_1UdpFile.html index 771f280bf5..152a63aa04 100644 --- a/docs/d4/dcb/classshaka_1_1UdpFile.html +++ b/docs/d4/dcb/classshaka_1_1UdpFile.html @@ -470,7 +470,7 @@ Additional Inherited Members diff --git a/docs/d4/dd3/bit__reader_8h_source.html b/docs/d4/dd3/bit__reader_8h_source.html index f44809fdc2..6ebda8e469 100644 --- a/docs/d4/dd3/bit__reader_8h_source.html +++ b/docs/d4/dd3/bit__reader_8h_source.html @@ -186,7 +186,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dd4/structshaka_1_1media_1_1mp4_1_1FullBox-members.html b/docs/d4/dd4/structshaka_1_1media_1_1mp4_1_1FullBox-members.html index e4f7bbc5fb..3e35f55b99 100644 --- a/docs/d4/dd4/structshaka_1_1media_1_1mp4_1_1FullBox-members.html +++ b/docs/d4/dd4/structshaka_1_1media_1_1mp4_1_1FullBox-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dd6/raw__key__source_8cc_source.html b/docs/d4/dd6/raw__key__source_8cc_source.html new file mode 100644 index 0000000000..3ab20b16e2 --- /dev/null +++ b/docs/d4/dd6/raw__key__source_8cc_source.html @@ -0,0 +1,271 @@ + + + + + + +Shaka Packager SDK: packager/media/base/raw_key_source.cc Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Shaka Packager SDK +
    +
    +
    + + + + + + + + + +
    + +
    + + +
    +
    +
    +
    raw_key_source.cc
    +
    +
    +
    1 // Copyright 2016 Google Inc. All rights reserved.
    +
    2 //
    +
    3 // Use of this source code is governed by a BSD-style
    +
    4 // license that can be found in the LICENSE file or at
    +
    5 // https://developers.google.com/open-source/licenses/bsd
    +
    6 
    +
    7 #include "packager/media/base/raw_key_source.h"
    +
    8 
    +
    9 #include <algorithm>
    +
    10 #include "packager/base/logging.h"
    +
    11 #include "packager/base/strings/string_number_conversions.h"
    +
    12 
    +
    13 namespace {
    +
    14 const char kEmptyDrmLabel[] = "";
    +
    15 } // namespace
    +
    16 
    +
    17 namespace shaka {
    +
    18 namespace media {
    +
    19 
    +
    20 RawKeySource::~RawKeySource() {}
    +
    21 
    +
    22 Status RawKeySource::FetchKeys(EmeInitDataType init_data_type,
    +
    23  const std::vector<uint8_t>& init_data) {
    +
    24  // Do nothing for raw key encryption/decryption.
    +
    25  return Status::OK;
    +
    26 }
    +
    27 
    +
    28 Status RawKeySource::GetKey(const std::string& stream_label,
    +
    29  EncryptionKey* key) {
    +
    30  DCHECK(key);
    +
    31  // Try to find the key with label |stream_label|. If it is not available,
    +
    32  // fall back to the default empty label if it is available.
    +
    33  auto iter = encryption_key_map_.find(stream_label);
    +
    34  if (iter == encryption_key_map_.end()) {
    +
    35  iter = encryption_key_map_.find(kEmptyDrmLabel);
    +
    36  if (iter == encryption_key_map_.end()) {
    +
    37  return Status(error::NOT_FOUND,
    +
    38  "Key for '" + stream_label + "' was not found.");
    +
    39  }
    +
    40  }
    +
    41  *key = *iter->second;
    +
    42  return Status::OK;
    +
    43 }
    +
    44 
    +
    45 Status RawKeySource::GetKey(const std::vector<uint8_t>& key_id,
    +
    46  EncryptionKey* key) {
    +
    47  DCHECK(key);
    +
    48  for (const auto& pair : encryption_key_map_) {
    +
    49  if (pair.second->key_id == key_id) {
    +
    50  *key = *pair.second;
    +
    51  return Status::OK;
    +
    52  }
    +
    53  }
    +
    54  return Status(error::INTERNAL_ERROR,
    +
    55  "Key for key_id=" + base::HexEncode(&key_id[0], key_id.size()) +
    +
    56  " was not found.");
    +
    57 }
    +
    58 
    +
    59 Status RawKeySource::GetCryptoPeriodKey(uint32_t crypto_period_index,
    +
    60  const std::string& stream_label,
    +
    61  EncryptionKey* key) {
    +
    62  Status status = GetKey(stream_label, key);
    +
    63  if (!status.ok())
    +
    64  return status;
    +
    65 
    +
    66  // A naive key rotation algorithm is implemented here by left rotating the
    +
    67  // key, key_id and pssh. Note that this implementation is only intended for
    +
    68  // testing purpose. The actual key rotation algorithm can be much more
    +
    69  // complicated.
    +
    70  LOG(WARNING)
    +
    71  << "This naive key rotation algorithm should not be used in production.";
    +
    72  std::rotate(key->key_id.begin(),
    +
    73  key->key_id.begin() + (crypto_period_index % key->key_id.size()),
    +
    74  key->key_id.end());
    +
    75  std::rotate(key->key.begin(),
    +
    76  key->key.begin() + (crypto_period_index % key->key.size()),
    +
    77  key->key.end());
    +
    78 
    +
    79  for (auto& key_system : key->key_system_info) {
    +
    80  std::vector<uint8_t> pssh_data = key_system.pssh_data();
    +
    81  if (!pssh_data.empty()) {
    +
    82  std::rotate(pssh_data.begin(),
    +
    83  pssh_data.begin() + (crypto_period_index % pssh_data.size()),
    +
    84  pssh_data.end());
    +
    85  key_system.set_pssh_data(pssh_data);
    +
    86  }
    +
    87 
    +
    88  // Rotate the key_ids in pssh as well if exists.
    +
    89  // Save a local copy of the key ids before clearing the key ids in
    +
    90  // |key_system|. The key ids will be updated and added back later.
    +
    91  std::vector<std::vector<uint8_t>> key_ids_copy = key_system.key_ids();
    +
    92  key_system.clear_key_ids();
    +
    93  for (std::vector<uint8_t>& key_id : key_ids_copy) {
    +
    94  std::rotate(key_id.begin(),
    +
    95  key_id.begin() + (crypto_period_index % key_id.size()),
    +
    96  key_id.end());
    +
    97  key_system.add_key_id(key_id);
    +
    98  }
    +
    99  }
    +
    100 
    +
    101  return Status::OK;
    +
    102 }
    +
    103 
    +
    104 std::unique_ptr<RawKeySource> RawKeySource::Create(
    +
    105  const RawKeyParams& raw_key) {
    +
    106  std::vector<ProtectionSystemSpecificInfo> key_system_info;
    +
    107  if (!raw_key.pssh.empty()) {
    + +
    109  raw_key.pssh.data(), raw_key.pssh.size(), &key_system_info)) {
    +
    110  LOG(ERROR) << "--pssh argument should be full PSSH boxes.";
    +
    111  return std::unique_ptr<RawKeySource>();
    +
    112  }
    +
    113  } else {
    +
    114  // If there aren't any PSSH boxes given, create one with the common system
    +
    115  // ID.
    +
    116  key_system_info.resize(1);
    +
    117  for (const auto& entry : raw_key.key_map) {
    +
    118  const RawKeyParams::KeyInfo& key_pair = entry.second;
    +
    119  key_system_info.back().add_key_id(key_pair.key_id);
    +
    120  }
    +
    121  key_system_info.back().set_system_id(kCommonSystemId,
    +
    122  arraysize(kCommonSystemId));
    +
    123  key_system_info.back().set_pssh_box_version(1);
    +
    124  }
    +
    125 
    +
    126  EncryptionKeyMap encryption_key_map;
    +
    127  for (const auto& entry : raw_key.key_map) {
    +
    128  const std::string& drm_label = entry.first;
    +
    129  const RawKeyParams::KeyInfo& key_pair = entry.second;
    +
    130 
    +
    131  if (key_pair.key_id.size() != 16) {
    +
    132  LOG(ERROR) << "Invalid key ID size '" << key_pair.key_id.size()
    +
    133  << "', must be 16 bytes.";
    +
    134  return std::unique_ptr<RawKeySource>();
    +
    135  }
    +
    136  if (key_pair.key.size() != 16) {
    +
    137  // CENC only supports AES-128, i.e. 16 bytes.
    +
    138  LOG(ERROR) << "Invalid key size '" << key_pair.key.size()
    +
    139  << "', must be 16 bytes.";
    +
    140  return std::unique_ptr<RawKeySource>();
    +
    141  }
    +
    142 
    +
    143  std::unique_ptr<EncryptionKey> encryption_key(new EncryptionKey);
    +
    144  encryption_key->key_id = key_pair.key_id;
    +
    145  encryption_key->key = key_pair.key;
    +
    146  encryption_key->iv = raw_key.iv;
    +
    147  encryption_key->key_system_info = key_system_info;
    +
    148  encryption_key_map[drm_label] = std::move(encryption_key);
    +
    149  }
    +
    150 
    +
    151  return std::unique_ptr<RawKeySource>(
    +
    152  new RawKeySource(std::move(encryption_key_map)));
    +
    153 }
    +
    154 
    +
    155 RawKeySource::RawKeySource() {}
    +
    156 RawKeySource::RawKeySource(EncryptionKeyMap&& encryption_key_map)
    +
    157  : encryption_key_map_(std::move(encryption_key_map)) {}
    +
    158 
    +
    159 } // namespace media
    +
    160 } // namespace shaka
    +
    Status GetCryptoPeriodKey(uint32_t crypto_period_index, const std::string &stream_label, EncryptionKey *key) override
    + +
    static bool ParseBoxes(const uint8_t *data, size_t data_size, std::vector< ProtectionSystemSpecificInfo > *pssh_boxes)
    + +
    Raw key encryption/decryption parameters, i.e. with key parameters provided.
    Definition: crypto_params.h:99
    +
    std::map< StreamLabel, KeyInfo > key_map
    + +
    std::vector< uint8_t > iv
    +
    A key source that uses raw keys for encryption.
    +
    static std::unique_ptr< RawKeySource > Create(const RawKeyParams &raw_key)
    +
    Status GetKey(const std::string &stream_label, EncryptionKey *key) override
    +
    std::vector< uint8_t > pssh
    +
    Status FetchKeys(EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) override
    +
    + + + + diff --git a/docs/d4/dde/webvtt__util_8h_source.html b/docs/d4/dde/webvtt__util_8h_source.html index da424e4c90..cb10574901 100644 --- a/docs/d4/dde/webvtt__util_8h_source.html +++ b/docs/d4/dde/webvtt__util_8h_source.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/de3/structshaka_1_1media_1_1mp4_1_1DataReference.html b/docs/d4/de3/structshaka_1_1media_1_1mp4_1_1DataReference.html index f6b6884e48..23cd65e1fc 100644 --- a/docs/d4/de3/structshaka_1_1media_1_1mp4_1_1DataReference.html +++ b/docs/d4/de3/structshaka_1_1media_1_1mp4_1_1DataReference.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d4/de6/classshaka_1_1media_1_1ProgressListener.html b/docs/d4/de6/classshaka_1_1media_1_1ProgressListener.html index a91070a78a..4ee2fdc612 100644 --- a/docs/d4/de6/classshaka_1_1media_1_1ProgressListener.html +++ b/docs/d4/de6/classshaka_1_1media_1_1ProgressListener.html @@ -146,7 +146,7 @@ Public Member Functions diff --git a/docs/d4/de7/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html b/docs/d4/de7/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html index 16e56b40f1..c981644540 100644 --- a/docs/d4/de7/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html +++ b/docs/d4/de7/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dec/hls__flags_8h_source.html b/docs/d4/dec/hls__flags_8h_source.html index e3e9bf3f4c..5c01d9a776 100644 --- a/docs/d4/dec/hls__flags_8h_source.html +++ b/docs/d4/dec/hls__flags_8h_source.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/df5/request__signer_8cc_source.html b/docs/d4/df5/request__signer_8cc_source.html index 39e1d40a38..5c2b985bc6 100644 --- a/docs/d4/df5/request__signer_8cc_source.html +++ b/docs/d4/df5/request__signer_8cc_source.html @@ -168,7 +168,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/df5/webvtt__sample__converter_8cc_source.html b/docs/d4/df5/webvtt__sample__converter_8cc_source.html index 905168da63..d7965843fe 100644 --- a/docs/d4/df5/webvtt__sample__converter_8cc_source.html +++ b/docs/d4/df5/webvtt__sample__converter_8cc_source.html @@ -409,14 +409,14 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); -
    static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
    Definition: media_sample.cc:45
    +
    static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
    Definition: media_sample.cc:42
    virtual std::shared_ptr< MediaSample > PopSample()
    diff --git a/docs/d4/df9/structshaka_1_1media_1_1mp4_1_1SegmentIndex.html b/docs/d4/df9/structshaka_1_1media_1_1mp4_1_1SegmentIndex.html index 63e712d071..5611321069 100644 --- a/docs/d4/df9/structshaka_1_1media_1_1mp4_1_1SegmentIndex.html +++ b/docs/d4/df9/structshaka_1_1media_1_1mp4_1_1SegmentIndex.html @@ -194,7 +194,7 @@ Additional Inherited Members diff --git a/docs/d4/dfa/structshaka_1_1media_1_1mp4_1_1AC3Specific.html b/docs/d4/dfa/structshaka_1_1media_1_1mp4_1_1AC3Specific.html index 1d9f02794f..3b7e1ea0ca 100644 --- a/docs/d4/dfa/structshaka_1_1media_1_1mp4_1_1AC3Specific.html +++ b/docs/d4/dfa/structshaka_1_1media_1_1mp4_1_1AC3Specific.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d4/dfd/structshaka_1_1media_1_1H265Sps.html b/docs/d4/dfd/structshaka_1_1media_1_1H265Sps.html index 9808fe61fa..09898ce351 100644 --- a/docs/d4/dfd/structshaka_1_1media_1_1H265Sps.html +++ b/docs/d4/dfd/structshaka_1_1media_1_1H265Sps.html @@ -256,7 +256,7 @@ bool vui_parameters_presen diff --git a/docs/d4/dff/webm__media__parser_8cc_source.html b/docs/d4/dff/webm__media__parser_8cc_source.html index a9cbe51d4c..ff7d113758 100644 --- a/docs/d4/dff/webm__media__parser_8cc_source.html +++ b/docs/d4/dff/webm__media__parser_8cc_source.html @@ -367,7 +367,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d03/structshaka_1_1media_1_1mp4_1_1FileType.html b/docs/d5/d03/structshaka_1_1media_1_1mp4_1_1FileType.html index 7cfe5e47bb..93fb8eaf71 100644 --- a/docs/d5/d03/structshaka_1_1media_1_1mp4_1_1FileType.html +++ b/docs/d5/d03/structshaka_1_1media_1_1mp4_1_1FileType.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d5/d05/structshaka_1_1media_1_1mp4_1_1OriginalFormat.html b/docs/d5/d05/structshaka_1_1media_1_1mp4_1_1OriginalFormat.html index b480039110..531a8f5dce 100644 --- a/docs/d5/d05/structshaka_1_1media_1_1mp4_1_1OriginalFormat.html +++ b/docs/d5/d05/structshaka_1_1media_1_1mp4_1_1OriginalFormat.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d5/d09/structshaka_1_1media_1_1mp4_1_1CueIDBox.html b/docs/d5/d09/structshaka_1_1media_1_1mp4_1_1CueIDBox.html index 2497830982..ca7146a0ed 100644 --- a/docs/d5/d09/structshaka_1_1media_1_1mp4_1_1CueIDBox.html +++ b/docs/d5/d09/structshaka_1_1media_1_1mp4_1_1CueIDBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d5/d0f/structshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes-members.html b/docs/d5/d0f/structshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes-members.html index b5870f9648..1c782a082d 100644 --- a/docs/d5/d0f/structshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes-members.html +++ b/docs/d5/d0f/structshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d11/classshaka_1_1media_1_1WebMInfoParser-members.html b/docs/d5/d11/classshaka_1_1media_1_1WebMInfoParser-members.html index 40e45ff2ac..6a9a9beebe 100644 --- a/docs/d5/d11/classshaka_1_1media_1_1WebMInfoParser-members.html +++ b/docs/d5/d11/classshaka_1_1media_1_1WebMInfoParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d11/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html b/docs/d5/d11/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html index 1096fe739b..13a49af2ea 100644 --- a/docs/d5/d11/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html +++ b/docs/d5/d11/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/d5/d13/classshaka_1_1media_1_1ESDescriptor.html b/docs/d5/d13/classshaka_1_1media_1_1ESDescriptor.html index c5496c2b8e..1c307e6990 100644 --- a/docs/d5/d13/classshaka_1_1media_1_1ESDescriptor.html +++ b/docs/d5/d13/classshaka_1_1media_1_1ESDescriptor.html @@ -181,7 +181,7 @@ bool IsDTS () const diff --git a/docs/d5/d15/producer__consumer__queue_8h_source.html b/docs/d5/d15/producer__consumer__queue_8h_source.html index 35133b933e..628007e616 100644 --- a/docs/d5/d15/producer__consumer__queue_8h_source.html +++ b/docs/d5/d15/producer__consumer__queue_8h_source.html @@ -374,7 +374,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d1a/classshaka_1_1Packager-members.html b/docs/d5/d1a/classshaka_1_1Packager-members.html index 62400d9a60..bfd62efa77 100644 --- a/docs/d5/d1a/classshaka_1_1Packager-members.html +++ b/docs/d5/d1a/classshaka_1_1Packager-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d1a/ts__section_8h_source.html b/docs/d5/d1a/ts__section_8h_source.html index 9a4261921c..3403a687a0 100644 --- a/docs/d5/d1a/ts__section_8h_source.html +++ b/docs/d5/d1a/ts__section_8h_source.html @@ -134,7 +134,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d26/classshaka_1_1media_1_1mp4_1_1TrackRunIterator-members.html b/docs/d5/d26/classshaka_1_1media_1_1mp4_1_1TrackRunIterator-members.html index dc54b55f5d..04dc580a26 100644 --- a/docs/d5/d26/classshaka_1_1media_1_1mp4_1_1TrackRunIterator-members.html +++ b/docs/d5/d26/classshaka_1_1media_1_1mp4_1_1TrackRunIterator-members.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d27/key__fetcher_8cc_source.html b/docs/d5/d27/key__fetcher_8cc_source.html index c9a29ac358..5406dfb546 100644 --- a/docs/d5/d27/key__fetcher_8cc_source.html +++ b/docs/d5/d27/key__fetcher_8cc_source.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html b/docs/d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html index 6d3fa7a5e4..6126273aac 100644 --- a/docs/d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html +++ b/docs/d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html @@ -501,7 +501,7 @@ template<class T > diff --git a/docs/d5/d3b/structshaka_1_1media_1_1mp4_1_1Media-members.html b/docs/d5/d3b/structshaka_1_1media_1_1mp4_1_1Media-members.html index 10e8a1b8d7..2af48bc367 100644 --- a/docs/d5/d3b/structshaka_1_1media_1_1mp4_1_1Media-members.html +++ b/docs/d5/d3b/structshaka_1_1media_1_1mp4_1_1Media-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d40/webm_2single__segment__segmenter_8h_source.html b/docs/d5/d40/webm_2single__segment__segmenter_8h_source.html index 7a48984936..d8520ea519 100644 --- a/docs/d5/d40/webm_2single__segment__segmenter_8h_source.html +++ b/docs/d5/d40/webm_2single__segment__segmenter_8h_source.html @@ -163,7 +163,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d4b/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi-members.html b/docs/d5/d4b/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi-members.html index 3cb376c4ce..08d6eddc11 100644 --- a/docs/d5/d4b/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi-members.html +++ b/docs/d5/d4b/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d4d/box_8cc_source.html b/docs/d5/d4d/box_8cc_source.html index fb69f32aa6..61cad04597 100644 --- a/docs/d5/d4d/box_8cc_source.html +++ b/docs/d5/d4d/box_8cc_source.html @@ -195,7 +195,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d52/ts__section__pes_8h_source.html b/docs/d5/d52/ts__section__pes_8h_source.html index b51715acdb..c046602a36 100644 --- a/docs/d5/d52/ts__section__pes_8h_source.html +++ b/docs/d5/d52/ts__section__pes_8h_source.html @@ -160,7 +160,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d53/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html b/docs/d5/d53/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html index 350d2b5e84..a87cf5c63c 100644 --- a/docs/d5/d53/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html +++ b/docs/d5/d53/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d57/classshaka_1_1RepresentationStateChangeListener-members.html b/docs/d5/d57/classshaka_1_1RepresentationStateChangeListener-members.html index be7ef3ba3e..32d72cbaa9 100644 --- a/docs/d5/d57/classshaka_1_1RepresentationStateChangeListener-members.html +++ b/docs/d5/d57/classshaka_1_1RepresentationStateChangeListener-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d59/classshaka_1_1MockRepresentation-members.html b/docs/d5/d59/classshaka_1_1MockRepresentation-members.html index 2d039f7dc5..a1d693c74b 100644 --- a/docs/d5/d59/classshaka_1_1MockRepresentation-members.html +++ b/docs/d5/d59/classshaka_1_1MockRepresentation-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d5a/webvtt__timestamp_8cc_source.html b/docs/d5/d5a/webvtt__timestamp_8cc_source.html index 2fbea9afda..9b7572a5d6 100644 --- a/docs/d5/d5a/webvtt__timestamp_8cc_source.html +++ b/docs/d5/d5a/webvtt__timestamp_8cc_source.html @@ -176,7 +176,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d5c/continuity__counter_8cc_source.html b/docs/d5/d5c/continuity__counter_8cc_source.html index 6167618f74..7e89279400 100644 --- a/docs/d5/d5c/continuity__counter_8cc_source.html +++ b/docs/d5/d5c/continuity__counter_8cc_source.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d63/classshaka_1_1media_1_1mp2t_1_1EsParserH265.html b/docs/d5/d63/classshaka_1_1media_1_1mp2t_1_1EsParserH265.html index 83857f42ef..89d0ae4599 100644 --- a/docs/d5/d63/classshaka_1_1media_1_1mp2t_1_1EsParserH265.html +++ b/docs/d5/d63/classshaka_1_1media_1_1mp2t_1_1EsParserH265.html @@ -161,7 +161,7 @@ const
    diff --git a/docs/d5/d63/network__util_8cc_source.html b/docs/d5/d63/network__util_8cc_source.html index a6bd8b88fc..cb7bb2aa70 100644 --- a/docs/d5/d63/network__util_8cc_source.html +++ b/docs/d5/d63/network__util_8cc_source.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html b/docs/d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html index d95d6f8497..fb0dedab7e 100644 --- a/docs/d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html +++ b/docs/d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html @@ -298,7 +298,7 @@ class NalUnitToByteStreamC diff --git a/docs/d5/d6f/vlog__flags_8cc_source.html b/docs/d5/d6f/vlog__flags_8cc_source.html index e5a1e13307..f08cca4ff0 100644 --- a/docs/d5/d6f/vlog__flags_8cc_source.html +++ b/docs/d5/d6f/vlog__flags_8cc_source.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d72/avc__decoder__configuration__record_8cc_source.html b/docs/d5/d72/avc__decoder__configuration__record_8cc_source.html index 2186184ebc..8ec3b86387 100644 --- a/docs/d5/d72/avc__decoder__configuration__record_8cc_source.html +++ b/docs/d5/d72/avc__decoder__configuration__record_8cc_source.html @@ -205,7 +205,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d76/classshaka_1_1hls_1_1HlsEntry.html b/docs/d5/d76/classshaka_1_1hls_1_1HlsEntry.html index 28d48ea531..e72bdd90e7 100644 --- a/docs/d5/d76/classshaka_1_1hls_1_1HlsEntry.html +++ b/docs/d5/d76/classshaka_1_1hls_1_1HlsEntry.html @@ -129,7 +129,7 @@ Protected Member Functions diff --git a/docs/d5/d7b/box__definitions_8h_source.html b/docs/d5/d7b/box__definitions_8h_source.html index 3b1a384fbd..a797cb6239 100644 --- a/docs/d5/d7b/box__definitions_8h_source.html +++ b/docs/d5/d7b/box__definitions_8h_source.html @@ -1000,7 +1000,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d86/structshaka_1_1media_1_1mp4_1_1MediaInformation.html b/docs/d5/d86/structshaka_1_1media_1_1mp4_1_1MediaInformation.html index 26928ff3b6..ac8ced29bc 100644 --- a/docs/d5/d86/structshaka_1_1media_1_1mp4_1_1MediaInformation.html +++ b/docs/d5/d86/structshaka_1_1media_1_1mp4_1_1MediaInformation.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/d5/d89/widevine__key__source_8cc_source.html b/docs/d5/d89/widevine__key__source_8cc_source.html index 05dbf5a375..0195915be9 100644 --- a/docs/d5/d89/widevine__key__source_8cc_source.html +++ b/docs/d5/d89/widevine__key__source_8cc_source.html @@ -102,11 +102,11 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    13 #include "packager/base/json/json_reader.h"
    14 #include "packager/base/json/json_writer.h"
    15 #include "packager/base/strings/string_number_conversions.h"
    -
    16 #include "packager/media/base/fixed_key_source.h"
    -
    17 #include "packager/media/base/http_key_fetcher.h"
    -
    18 #include "packager/media/base/network_util.h"
    -
    19 #include "packager/media/base/producer_consumer_queue.h"
    -
    20 #include "packager/media/base/protection_system_specific_info.h"
    +
    16 #include "packager/media/base/http_key_fetcher.h"
    +
    17 #include "packager/media/base/network_util.h"
    +
    18 #include "packager/media/base/producer_consumer_queue.h"
    +
    19 #include "packager/media/base/protection_system_specific_info.h"
    +
    20 #include "packager/media/base/raw_key_source.h"
    21 #include "packager/media/base/rcheck.h"
    22 #include "packager/media/base/request_signer.h"
    23 #include "packager/media/base/widevine_pssh_data.pb.h"
    @@ -647,79 +647,80 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    558  std::string stream_label;
    559  RCHECK(track_dict->GetString("type", &stream_label));
    560  RCHECK(encryption_key_map.find(stream_label) == encryption_key_map.end());
    -
    561 
    -
    562  std::unique_ptr<EncryptionKey> encryption_key(new EncryptionKey());
    -
    563 
    -
    564  if (!GetKeyFromTrack(*track_dict, &encryption_key->key))
    -
    565  return false;
    -
    566 
    -
    567  // Get key ID and PSSH data for CENC content only.
    -
    568  if (!widevine_classic) {
    -
    569  if (!GetKeyIdFromTrack(*track_dict, &encryption_key->key_id))
    -
    570  return false;
    -
    571 
    -
    572  ProtectionSystemSpecificInfo info;
    -
    573  info.add_key_id(encryption_key->key_id);
    -
    574  info.set_system_id(kWidevineSystemId, arraysize(kWidevineSystemId));
    -
    575  info.set_pssh_box_version(0);
    -
    576 
    -
    577  std::vector<uint8_t> pssh_data;
    -
    578  if (!GetPsshDataFromTrack(*track_dict, &pssh_data))
    -
    579  return false;
    -
    580  info.set_pssh_data(pssh_data);
    -
    581 
    -
    582  encryption_key->key_system_info.push_back(info);
    -
    583  }
    -
    584  encryption_key_map[stream_label] = std::move(encryption_key);
    -
    585  }
    -
    586 
    -
    587  // If the flag exists, create a common system ID PSSH box that contains the
    -
    588  // key IDs of all the keys.
    -
    589  if (add_common_pssh_ && !widevine_classic) {
    -
    590  std::set<std::vector<uint8_t>> key_ids;
    -
    591  for (const EncryptionKeyMap::value_type& pair : encryption_key_map) {
    -
    592  key_ids.insert(pair.second->key_id);
    -
    593  }
    -
    594 
    -
    595  // Create a common system PSSH box.
    -
    596  ProtectionSystemSpecificInfo info;
    -
    597  info.set_system_id(kCommonSystemId, arraysize(kCommonSystemId));
    -
    598  info.set_pssh_box_version(1);
    -
    599  for (const std::vector<uint8_t>& key_id : key_ids) {
    -
    600  info.add_key_id(key_id);
    -
    601  }
    -
    602 
    -
    603  for (const EncryptionKeyMap::value_type& pair : encryption_key_map) {
    -
    604  pair.second->key_system_info.push_back(info);
    -
    605  }
    -
    606  }
    -
    607 
    -
    608  DCHECK(!encryption_key_map.empty());
    -
    609  if (!enable_key_rotation) {
    -
    610  // Merge with previously requested keys.
    -
    611  for (auto& pair : encryption_key_map)
    -
    612  encryption_key_map_[pair.first] = std::move(pair.second);
    -
    613  return true;
    -
    614  }
    -
    615  return PushToKeyPool(&encryption_key_map);
    -
    616 }
    -
    617 
    -
    618 bool WidevineKeySource::PushToKeyPool(
    -
    619  EncryptionKeyMap* encryption_key_map) {
    -
    620  DCHECK(key_pool_);
    -
    621  DCHECK(encryption_key_map);
    -
    622  auto encryption_key_map_shared = std::make_shared<EncryptionKeyMap>();
    -
    623  encryption_key_map_shared->swap(*encryption_key_map);
    -
    624  Status status = key_pool_->Push(encryption_key_map_shared, kInfiniteTimeout);
    -
    625  if (!status.ok()) {
    -
    626  DCHECK_EQ(error::STOPPED, status.error_code());
    -
    627  return false;
    -
    628  }
    -
    629  return true;
    -
    630 }
    -
    631 
    -
    632 } // namespace media
    -
    633 } // namespace shaka
    +
    561  VLOG(2) << "drm label:" << stream_label;
    +
    562 
    +
    563  std::unique_ptr<EncryptionKey> encryption_key(new EncryptionKey());
    +
    564 
    +
    565  if (!GetKeyFromTrack(*track_dict, &encryption_key->key))
    +
    566  return false;
    +
    567 
    +
    568  // Get key ID and PSSH data for CENC content only.
    +
    569  if (!widevine_classic) {
    +
    570  if (!GetKeyIdFromTrack(*track_dict, &encryption_key->key_id))
    +
    571  return false;
    +
    572 
    +
    573  ProtectionSystemSpecificInfo info;
    +
    574  info.add_key_id(encryption_key->key_id);
    +
    575  info.set_system_id(kWidevineSystemId, arraysize(kWidevineSystemId));
    +
    576  info.set_pssh_box_version(0);
    +
    577 
    +
    578  std::vector<uint8_t> pssh_data;
    +
    579  if (!GetPsshDataFromTrack(*track_dict, &pssh_data))
    +
    580  return false;
    +
    581  info.set_pssh_data(pssh_data);
    +
    582 
    +
    583  encryption_key->key_system_info.push_back(info);
    +
    584  }
    +
    585  encryption_key_map[stream_label] = std::move(encryption_key);
    +
    586  }
    +
    587 
    +
    588  // If the flag exists, create a common system ID PSSH box that contains the
    +
    589  // key IDs of all the keys.
    +
    590  if (add_common_pssh_ && !widevine_classic) {
    +
    591  std::set<std::vector<uint8_t>> key_ids;
    +
    592  for (const EncryptionKeyMap::value_type& pair : encryption_key_map) {
    +
    593  key_ids.insert(pair.second->key_id);
    +
    594  }
    +
    595 
    +
    596  // Create a common system PSSH box.
    +
    597  ProtectionSystemSpecificInfo info;
    +
    598  info.set_system_id(kCommonSystemId, arraysize(kCommonSystemId));
    +
    599  info.set_pssh_box_version(1);
    +
    600  for (const std::vector<uint8_t>& key_id : key_ids) {
    +
    601  info.add_key_id(key_id);
    +
    602  }
    +
    603 
    +
    604  for (const EncryptionKeyMap::value_type& pair : encryption_key_map) {
    +
    605  pair.second->key_system_info.push_back(info);
    +
    606  }
    +
    607  }
    +
    608 
    +
    609  DCHECK(!encryption_key_map.empty());
    +
    610  if (!enable_key_rotation) {
    +
    611  // Merge with previously requested keys.
    +
    612  for (auto& pair : encryption_key_map)
    +
    613  encryption_key_map_[pair.first] = std::move(pair.second);
    +
    614  return true;
    +
    615  }
    +
    616  return PushToKeyPool(&encryption_key_map);
    +
    617 }
    +
    618 
    +
    619 bool WidevineKeySource::PushToKeyPool(
    +
    620  EncryptionKeyMap* encryption_key_map) {
    +
    621  DCHECK(key_pool_);
    +
    622  DCHECK(encryption_key_map);
    +
    623  auto encryption_key_map_shared = std::make_shared<EncryptionKeyMap>();
    +
    624  encryption_key_map_shared->swap(*encryption_key_map);
    +
    625  Status status = key_pool_->Push(encryption_key_map_shared, kInfiniteTimeout);
    +
    626  if (!status.ok()) {
    +
    627  DCHECK_EQ(error::STOPPED, status.error_code());
    +
    628  return false;
    +
    629  }
    +
    630  return true;
    +
    631 }
    +
    632 
    +
    633 } // namespace media
    +
    634 } // namespace shaka
    @@ -735,7 +736,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d8c/structshaka_1_1media_1_1mp4_1_1CompositionOffset.html b/docs/d5/d8c/structshaka_1_1media_1_1mp4_1_1CompositionOffset.html index c49b44c920..dc7ef67d69 100644 --- a/docs/d5/d8c/structshaka_1_1media_1_1mp4_1_1CompositionOffset.html +++ b/docs/d5/d8c/structshaka_1_1media_1_1mp4_1_1CompositionOffset.html @@ -112,7 +112,7 @@ int64_t sample_offset< diff --git a/docs/d5/d8f/webm__cluster__parser_8cc_source.html b/docs/d5/d8f/webm__cluster__parser_8cc_source.html index e5cb17afb5..bc21bf7f0c 100644 --- a/docs/d5/d8f/webm__cluster__parser_8cc_source.html +++ b/docs/d5/d8f/webm__cluster__parser_8cc_source.html @@ -465,250 +465,263 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    376  return false;
    377  }
    378 
    -
    379  buffer = MediaSample::CopyFrom(data + data_offset, size - data_offset,
    -
    380  additional, additional_size, is_key_frame);
    -
    381 
    -
    382  if (decrypt_config) {
    -
    383  if (!decryptor_source_) {
    -
    384  // If the demuxer does not have the decryptor_source_, store
    -
    385  // decrypt_config so that the demuxed sample can be decrypted later.
    -
    386  buffer->set_decrypt_config(std::move(decrypt_config));
    -
    387  buffer->set_is_encrypted(true);
    -
    388  } else if (!decryptor_source_->DecryptSampleBuffer(
    -
    389  decrypt_config.get(), buffer->writable_data(),
    -
    390  buffer->data_size())) {
    -
    391  LOG(ERROR) << "Cannot decrypt samples";
    -
    392  return false;
    -
    393  }
    -
    394  }
    -
    395  } else {
    -
    396  std::string id, settings, content;
    -
    397  WebMWebVTTParser::Parse(data, size, &id, &settings, &content);
    -
    398 
    -
    399  std::vector<uint8_t> side_data;
    -
    400  MakeSideData(id.begin(), id.end(),
    -
    401  settings.begin(), settings.end(),
    -
    402  &side_data);
    -
    403 
    -
    404  buffer = MediaSample::CopyFrom(
    -
    405  reinterpret_cast<const uint8_t*>(content.data()), content.length(),
    -
    406  &side_data[0], side_data.size(), true);
    -
    407  }
    -
    408 
    -
    409  buffer->set_dts(timestamp);
    -
    410  buffer->set_pts(timestamp);
    -
    411  if (cluster_start_time_ == kNoTimestamp)
    -
    412  cluster_start_time_ = timestamp;
    -
    413  buffer->set_duration(block_duration > 0
    -
    414  ? (block_duration * timecode_multiplier_)
    -
    415  : kNoTimestamp);
    +
    379  const uint8_t* media_data = data + data_offset;
    +
    380  const size_t media_data_size = size - data_offset;
    +
    381  // Use a dummy data size of 0 to avoid copying overhead.
    +
    382  // Actual media data is set later.
    +
    383  const size_t kDummyDataSize = 0;
    +
    384  buffer = MediaSample::CopyFrom(media_data, kDummyDataSize, additional,
    +
    385  additional_size, is_key_frame);
    +
    386 
    +
    387  if (decrypt_config) {
    +
    388  if (!decryptor_source_) {
    +
    389  buffer->SetData(media_data, media_data_size);
    +
    390  // If the demuxer does not have the decryptor_source_, store
    +
    391  // decrypt_config so that the demuxed sample can be decrypted later.
    +
    392  buffer->set_decrypt_config(std::move(decrypt_config));
    +
    393  buffer->set_is_encrypted(true);
    +
    394  } else {
    +
    395  std::shared_ptr<uint8_t> decrypted_media_data(
    +
    396  new uint8_t[media_data_size], std::default_delete<uint8_t[]>());
    +
    397  if (!decryptor_source_->DecryptSampleBuffer(
    +
    398  decrypt_config.get(), media_data, media_data_size,
    +
    399  decrypted_media_data.get())) {
    +
    400  LOG(ERROR) << "Cannot decrypt samples";
    +
    401  return false;
    +
    402  }
    +
    403  buffer->TransferData(std::move(decrypted_media_data), media_data_size);
    +
    404  }
    +
    405  } else {
    +
    406  buffer->SetData(media_data, media_data_size);
    +
    407  }
    +
    408  } else {
    +
    409  std::string id, settings, content;
    +
    410  WebMWebVTTParser::Parse(data, size, &id, &settings, &content);
    +
    411 
    +
    412  std::vector<uint8_t> side_data;
    +
    413  MakeSideData(id.begin(), id.end(),
    +
    414  settings.begin(), settings.end(),
    +
    415  &side_data);
    416 
    -
    417  if (!init_cb_.is_null() && !initialized_) {
    -
    418  std::vector<std::shared_ptr<StreamInfo>> streams;
    -
    419  if (audio_stream_info_)
    -
    420  streams.push_back(audio_stream_info_);
    -
    421  if (video_stream_info_) {
    -
    422  if (stream_type == kStreamVideo) {
    -
    423  std::unique_ptr<VPxParser> vpx_parser;
    -
    424  switch (video_stream_info_->codec()) {
    -
    425  case kCodecVP8:
    -
    426  vpx_parser.reset(new VP8Parser);
    -
    427  break;
    -
    428  case kCodecVP9:
    -
    429  vpx_parser.reset(new VP9Parser);
    -
    430  break;
    -
    431  default:
    -
    432  NOTIMPLEMENTED() << "Unsupported codec "
    -
    433  << video_stream_info_->codec();
    -
    434  return false;
    -
    435  }
    -
    436  std::vector<VPxFrameInfo> vpx_frames;
    -
    437  if (!vpx_parser->Parse(buffer->data(), buffer->data_size(),
    -
    438  &vpx_frames)) {
    -
    439  LOG(ERROR) << "Failed to parse vpx frame.";
    -
    440  return false;
    -
    441  }
    -
    442  if (vpx_frames.size() != 1u || !vpx_frames[0].is_keyframe) {
    -
    443  LOG(ERROR) << "The first frame should be a key frame.";
    -
    444  return false;
    -
    445  }
    -
    446 
    -
    447  vp_config_.MergeFrom(vpx_parser->codec_config());
    -
    448  video_stream_info_->set_codec_string(
    -
    449  vp_config_.GetCodecString(video_stream_info_->codec()));
    -
    450  std::vector<uint8_t> config_serialized;
    -
    451  vp_config_.WriteMP4(&config_serialized);
    -
    452  video_stream_info_->set_codec_config(config_serialized);
    -
    453  streams.push_back(video_stream_info_);
    -
    454  init_cb_.Run(streams);
    -
    455  initialized_ = true;
    -
    456  }
    -
    457  } else {
    -
    458  init_cb_.Run(streams);
    -
    459  initialized_ = true;
    -
    460  }
    -
    461  }
    -
    462 
    -
    463  return track->EmitBuffer(buffer);
    -
    464 }
    -
    465 
    -
    466 WebMClusterParser::Track::Track(int track_num,
    -
    467  bool is_video,
    -
    468  int64_t default_duration,
    -
    469  const MediaParser::NewSampleCB& new_sample_cb)
    -
    470  : track_num_(track_num),
    -
    471  is_video_(is_video),
    -
    472  default_duration_(default_duration),
    -
    473  estimated_next_frame_duration_(kNoTimestamp),
    -
    474  new_sample_cb_(new_sample_cb) {
    -
    475  DCHECK(default_duration_ == kNoTimestamp || default_duration_ > 0);
    -
    476 }
    -
    477 
    -
    478 WebMClusterParser::Track::~Track() {}
    -
    479 
    -
    480 bool WebMClusterParser::Track::EmitBuffer(
    -
    481  const std::shared_ptr<MediaSample>& buffer) {
    -
    482  DVLOG(2) << "EmitBuffer() : " << track_num_
    -
    483  << " ts " << buffer->pts()
    -
    484  << " dur " << buffer->duration()
    -
    485  << " kf " << buffer->is_key_frame()
    -
    486  << " size " << buffer->data_size();
    -
    487 
    -
    488  if (last_added_buffer_missing_duration_.get()) {
    -
    489  int64_t derived_duration =
    -
    490  buffer->pts() - last_added_buffer_missing_duration_->pts();
    -
    491  last_added_buffer_missing_duration_->set_duration(derived_duration);
    +
    417  buffer = MediaSample::CopyFrom(
    +
    418  reinterpret_cast<const uint8_t*>(content.data()), content.length(),
    +
    419  &side_data[0], side_data.size(), true);
    +
    420  }
    +
    421 
    +
    422  buffer->set_dts(timestamp);
    +
    423  buffer->set_pts(timestamp);
    +
    424  if (cluster_start_time_ == kNoTimestamp)
    +
    425  cluster_start_time_ = timestamp;
    +
    426  buffer->set_duration(block_duration > 0
    +
    427  ? (block_duration * timecode_multiplier_)
    +
    428  : kNoTimestamp);
    +
    429 
    +
    430  if (!init_cb_.is_null() && !initialized_) {
    +
    431  std::vector<std::shared_ptr<StreamInfo>> streams;
    +
    432  if (audio_stream_info_)
    +
    433  streams.push_back(audio_stream_info_);
    +
    434  if (video_stream_info_) {
    +
    435  if (stream_type == kStreamVideo) {
    +
    436  std::unique_ptr<VPxParser> vpx_parser;
    +
    437  switch (video_stream_info_->codec()) {
    +
    438  case kCodecVP8:
    +
    439  vpx_parser.reset(new VP8Parser);
    +
    440  break;
    +
    441  case kCodecVP9:
    +
    442  vpx_parser.reset(new VP9Parser);
    +
    443  break;
    +
    444  default:
    +
    445  NOTIMPLEMENTED() << "Unsupported codec "
    +
    446  << video_stream_info_->codec();
    +
    447  return false;
    +
    448  }
    +
    449  std::vector<VPxFrameInfo> vpx_frames;
    +
    450  if (!vpx_parser->Parse(buffer->data(), buffer->data_size(),
    +
    451  &vpx_frames)) {
    +
    452  LOG(ERROR) << "Failed to parse vpx frame.";
    +
    453  return false;
    +
    454  }
    +
    455  if (vpx_frames.size() != 1u || !vpx_frames[0].is_keyframe) {
    +
    456  LOG(ERROR) << "The first frame should be a key frame.";
    +
    457  return false;
    +
    458  }
    +
    459 
    +
    460  vp_config_.MergeFrom(vpx_parser->codec_config());
    +
    461  video_stream_info_->set_codec_string(
    +
    462  vp_config_.GetCodecString(video_stream_info_->codec()));
    +
    463  std::vector<uint8_t> config_serialized;
    +
    464  vp_config_.WriteMP4(&config_serialized);
    +
    465  video_stream_info_->set_codec_config(config_serialized);
    +
    466  streams.push_back(video_stream_info_);
    +
    467  init_cb_.Run(streams);
    +
    468  initialized_ = true;
    +
    469  }
    +
    470  } else {
    +
    471  init_cb_.Run(streams);
    +
    472  initialized_ = true;
    +
    473  }
    +
    474  }
    +
    475 
    +
    476  return track->EmitBuffer(buffer);
    +
    477 }
    +
    478 
    +
    479 WebMClusterParser::Track::Track(int track_num,
    +
    480  bool is_video,
    +
    481  int64_t default_duration,
    +
    482  const MediaParser::NewSampleCB& new_sample_cb)
    +
    483  : track_num_(track_num),
    +
    484  is_video_(is_video),
    +
    485  default_duration_(default_duration),
    +
    486  estimated_next_frame_duration_(kNoTimestamp),
    +
    487  new_sample_cb_(new_sample_cb) {
    +
    488  DCHECK(default_duration_ == kNoTimestamp || default_duration_ > 0);
    +
    489 }
    +
    490 
    +
    491 WebMClusterParser::Track::~Track() {}
    492 
    -
    493  DVLOG(2) << "EmitBuffer() : applied derived duration to held-back buffer : "
    -
    494  << " ts "
    -
    495  << last_added_buffer_missing_duration_->pts()
    -
    496  << " dur "
    -
    497  << last_added_buffer_missing_duration_->duration()
    -
    498  << " kf " << last_added_buffer_missing_duration_->is_key_frame()
    -
    499  << " size " << last_added_buffer_missing_duration_->data_size();
    -
    500  std::shared_ptr<MediaSample> updated_buffer =
    -
    501  last_added_buffer_missing_duration_;
    -
    502  last_added_buffer_missing_duration_ = NULL;
    -
    503  if (!EmitBufferHelp(updated_buffer))
    -
    504  return false;
    -
    505  }
    -
    506 
    -
    507  if (buffer->duration() == kNoTimestamp) {
    -
    508  last_added_buffer_missing_duration_ = buffer;
    -
    509  DVLOG(2) << "EmitBuffer() : holding back buffer that is missing duration";
    -
    510  return true;
    -
    511  }
    -
    512 
    -
    513  return EmitBufferHelp(buffer);
    -
    514 }
    -
    515 
    -
    516 bool WebMClusterParser::Track::ApplyDurationEstimateIfNeeded() {
    -
    517  if (!last_added_buffer_missing_duration_.get())
    -
    518  return true;
    +
    493 bool WebMClusterParser::Track::EmitBuffer(
    +
    494  const std::shared_ptr<MediaSample>& buffer) {
    +
    495  DVLOG(2) << "EmitBuffer() : " << track_num_
    +
    496  << " ts " << buffer->pts()
    +
    497  << " dur " << buffer->duration()
    +
    498  << " kf " << buffer->is_key_frame()
    +
    499  << " size " << buffer->data_size();
    +
    500 
    +
    501  if (last_added_buffer_missing_duration_.get()) {
    +
    502  int64_t derived_duration =
    +
    503  buffer->pts() - last_added_buffer_missing_duration_->pts();
    +
    504  last_added_buffer_missing_duration_->set_duration(derived_duration);
    +
    505 
    +
    506  DVLOG(2) << "EmitBuffer() : applied derived duration to held-back buffer : "
    +
    507  << " ts "
    +
    508  << last_added_buffer_missing_duration_->pts()
    +
    509  << " dur "
    +
    510  << last_added_buffer_missing_duration_->duration()
    +
    511  << " kf " << last_added_buffer_missing_duration_->is_key_frame()
    +
    512  << " size " << last_added_buffer_missing_duration_->data_size();
    +
    513  std::shared_ptr<MediaSample> updated_buffer =
    +
    514  last_added_buffer_missing_duration_;
    +
    515  last_added_buffer_missing_duration_ = NULL;
    +
    516  if (!EmitBufferHelp(updated_buffer))
    +
    517  return false;
    +
    518  }
    519 
    -
    520  int64_t estimated_duration = GetDurationEstimate();
    -
    521  last_added_buffer_missing_duration_->set_duration(estimated_duration);
    -
    522 
    -
    523  VLOG(1) << "Track " << track_num_ << ": Estimating WebM block duration to be "
    -
    524  << estimated_duration / 1000
    -
    525  << "ms for the last (Simple)Block in the Cluster for this Track. Use "
    -
    526  "BlockGroups with BlockDurations at the end of each Track in a "
    -
    527  "Cluster to avoid estimation.";
    +
    520  if (buffer->duration() == kNoTimestamp) {
    +
    521  last_added_buffer_missing_duration_ = buffer;
    +
    522  DVLOG(2) << "EmitBuffer() : holding back buffer that is missing duration";
    +
    523  return true;
    +
    524  }
    +
    525 
    +
    526  return EmitBufferHelp(buffer);
    +
    527 }
    528 
    -
    529  DVLOG(2) << " new dur : ts " << last_added_buffer_missing_duration_->pts()
    -
    530  << " dur " << last_added_buffer_missing_duration_->duration()
    -
    531  << " kf " << last_added_buffer_missing_duration_->is_key_frame()
    -
    532  << " size " << last_added_buffer_missing_duration_->data_size();
    -
    533 
    -
    534  // Don't use the applied duration as a future estimation (don't use
    -
    535  // EmitBufferHelp() here.)
    -
    536  if (!new_sample_cb_.Run(track_num_, last_added_buffer_missing_duration_))
    -
    537  return false;
    -
    538  last_added_buffer_missing_duration_ = NULL;
    -
    539  return true;
    -
    540 }
    +
    529 bool WebMClusterParser::Track::ApplyDurationEstimateIfNeeded() {
    +
    530  if (!last_added_buffer_missing_duration_.get())
    +
    531  return true;
    +
    532 
    +
    533  int64_t estimated_duration = GetDurationEstimate();
    +
    534  last_added_buffer_missing_duration_->set_duration(estimated_duration);
    +
    535 
    +
    536  VLOG(1) << "Track " << track_num_ << ": Estimating WebM block duration to be "
    +
    537  << estimated_duration / 1000
    +
    538  << "ms for the last (Simple)Block in the Cluster for this Track. Use "
    +
    539  "BlockGroups with BlockDurations at the end of each Track in a "
    +
    540  "Cluster to avoid estimation.";
    541 
    -
    542 void WebMClusterParser::Track::Reset() {
    -
    543  last_added_buffer_missing_duration_ = NULL;
    -
    544 }
    -
    545 
    -
    546 bool WebMClusterParser::Track::EmitBufferHelp(
    -
    547  const std::shared_ptr<MediaSample>& buffer) {
    -
    548  DCHECK(!last_added_buffer_missing_duration_.get());
    -
    549 
    -
    550  int64_t duration = buffer->duration();
    -
    551  if (duration < 0 || duration == kNoTimestamp) {
    -
    552  LOG(ERROR) << "Invalid buffer duration: " << duration;
    -
    553  return false;
    -
    554  }
    -
    555 
    -
    556  // The estimated frame duration is the maximum non-zero duration since the
    -
    557  // last initialization segment.
    -
    558  if (duration > 0) {
    -
    559  int64_t orig_duration_estimate = estimated_next_frame_duration_;
    -
    560  if (estimated_next_frame_duration_ == kNoTimestamp) {
    -
    561  estimated_next_frame_duration_ = duration;
    -
    562  } else {
    -
    563  estimated_next_frame_duration_ =
    -
    564  std::max(duration, estimated_next_frame_duration_);
    -
    565  }
    -
    566 
    -
    567  if (orig_duration_estimate != estimated_next_frame_duration_) {
    -
    568  DVLOG(3) << "Updated duration estimate:"
    -
    569  << orig_duration_estimate
    -
    570  << " -> "
    -
    571  << estimated_next_frame_duration_
    -
    572  << " at timestamp: "
    -
    573  << buffer->dts();
    -
    574  }
    -
    575  }
    -
    576 
    -
    577  return new_sample_cb_.Run(track_num_, buffer);
    -
    578 }
    +
    542  DVLOG(2) << " new dur : ts " << last_added_buffer_missing_duration_->pts()
    +
    543  << " dur " << last_added_buffer_missing_duration_->duration()
    +
    544  << " kf " << last_added_buffer_missing_duration_->is_key_frame()
    +
    545  << " size " << last_added_buffer_missing_duration_->data_size();
    +
    546 
    +
    547  // Don't use the applied duration as a future estimation (don't use
    +
    548  // EmitBufferHelp() here.)
    +
    549  if (!new_sample_cb_.Run(track_num_, last_added_buffer_missing_duration_))
    +
    550  return false;
    +
    551  last_added_buffer_missing_duration_ = NULL;
    +
    552  return true;
    +
    553 }
    +
    554 
    +
    555 void WebMClusterParser::Track::Reset() {
    +
    556  last_added_buffer_missing_duration_ = NULL;
    +
    557 }
    +
    558 
    +
    559 bool WebMClusterParser::Track::EmitBufferHelp(
    +
    560  const std::shared_ptr<MediaSample>& buffer) {
    +
    561  DCHECK(!last_added_buffer_missing_duration_.get());
    +
    562 
    +
    563  int64_t duration = buffer->duration();
    +
    564  if (duration < 0 || duration == kNoTimestamp) {
    +
    565  LOG(ERROR) << "Invalid buffer duration: " << duration;
    +
    566  return false;
    +
    567  }
    +
    568 
    +
    569  // The estimated frame duration is the maximum non-zero duration since the
    +
    570  // last initialization segment.
    +
    571  if (duration > 0) {
    +
    572  int64_t orig_duration_estimate = estimated_next_frame_duration_;
    +
    573  if (estimated_next_frame_duration_ == kNoTimestamp) {
    +
    574  estimated_next_frame_duration_ = duration;
    +
    575  } else {
    +
    576  estimated_next_frame_duration_ =
    +
    577  std::max(duration, estimated_next_frame_duration_);
    +
    578  }
    579 
    -
    580 int64_t WebMClusterParser::Track::GetDurationEstimate() {
    -
    581  int64_t duration = kNoTimestamp;
    -
    582  if (default_duration_ != kNoTimestamp) {
    -
    583  duration = default_duration_;
    -
    584  DVLOG(3) << __FUNCTION__ << " : using track default duration " << duration;
    -
    585  } else if (estimated_next_frame_duration_ != kNoTimestamp) {
    -
    586  duration = estimated_next_frame_duration_;
    -
    587  DVLOG(3) << __FUNCTION__ << " : using estimated duration " << duration;
    -
    588  } else {
    -
    589  if (is_video_) {
    -
    590  duration = kDefaultVideoBufferDurationInMs * kMicrosecondsPerMillisecond;
    -
    591  } else {
    -
    592  duration = kDefaultAudioBufferDurationInMs * kMicrosecondsPerMillisecond;
    -
    593  }
    -
    594  DVLOG(3) << __FUNCTION__ << " : using hardcoded default duration "
    -
    595  << duration;
    -
    596  }
    -
    597 
    -
    598  DCHECK_GT(duration, 0);
    -
    599  DCHECK_NE(duration, kNoTimestamp);
    -
    600  return duration;
    -
    601 }
    -
    602 
    -
    603 void WebMClusterParser::ResetTextTracks() {
    -
    604  for (TextTrackMap::iterator it = text_track_map_.begin();
    -
    605  it != text_track_map_.end();
    -
    606  ++it) {
    -
    607  it->second.Reset();
    -
    608  }
    -
    609 }
    +
    580  if (orig_duration_estimate != estimated_next_frame_duration_) {
    +
    581  DVLOG(3) << "Updated duration estimate:"
    +
    582  << orig_duration_estimate
    +
    583  << " -> "
    +
    584  << estimated_next_frame_duration_
    +
    585  << " at timestamp: "
    +
    586  << buffer->dts();
    +
    587  }
    +
    588  }
    +
    589 
    +
    590  return new_sample_cb_.Run(track_num_, buffer);
    +
    591 }
    +
    592 
    +
    593 int64_t WebMClusterParser::Track::GetDurationEstimate() {
    +
    594  int64_t duration = kNoTimestamp;
    +
    595  if (default_duration_ != kNoTimestamp) {
    +
    596  duration = default_duration_;
    +
    597  DVLOG(3) << __FUNCTION__ << " : using track default duration " << duration;
    +
    598  } else if (estimated_next_frame_duration_ != kNoTimestamp) {
    +
    599  duration = estimated_next_frame_duration_;
    +
    600  DVLOG(3) << __FUNCTION__ << " : using estimated duration " << duration;
    +
    601  } else {
    +
    602  if (is_video_) {
    +
    603  duration = kDefaultVideoBufferDurationInMs * kMicrosecondsPerMillisecond;
    +
    604  } else {
    +
    605  duration = kDefaultAudioBufferDurationInMs * kMicrosecondsPerMillisecond;
    +
    606  }
    +
    607  DVLOG(3) << __FUNCTION__ << " : using hardcoded default duration "
    +
    608  << duration;
    +
    609  }
    610 
    -
    611 WebMClusterParser::Track*
    -
    612 WebMClusterParser::FindTextTrack(int track_num) {
    -
    613  const TextTrackMap::iterator it = text_track_map_.find(track_num);
    -
    614 
    -
    615  if (it == text_track_map_.end())
    -
    616  return NULL;
    -
    617 
    -
    618  return &it->second;
    -
    619 }
    -
    620 
    -
    621 } // namespace media
    -
    622 } // namespace shaka
    +
    611  DCHECK_GT(duration, 0);
    +
    612  DCHECK_NE(duration, kNoTimestamp);
    +
    613  return duration;
    +
    614 }
    +
    615 
    +
    616 void WebMClusterParser::ResetTextTracks() {
    +
    617  for (TextTrackMap::iterator it = text_track_map_.begin();
    +
    618  it != text_track_map_.end();
    +
    619  ++it) {
    +
    620  it->second.Reset();
    +
    621  }
    +
    622 }
    +
    623 
    +
    624 WebMClusterParser::Track*
    +
    625 WebMClusterParser::FindTextTrack(int track_num) {
    +
    626  const TextTrackMap::iterator it = text_track_map_.find(track_num);
    +
    627 
    +
    628  if (it == text_track_map_.end())
    +
    629  return NULL;
    +
    630 
    +
    631  return &it->second;
    +
    632 }
    +
    633 
    +
    634 } // namespace media
    +
    635 } // namespace shaka
    Class for parsing or writing VP codec configuration record.
    WebMClusterParser(int64_t timecode_scale, std::shared_ptr< AudioStreamInfo > audio_stream_info, std::shared_ptr< VideoStreamInfo > video_stream_info, const VPCodecConfigurationRecord &vp_config, int64_t audio_default_duration, int64_t video_default_duration, const WebMTracksParser::TextTracks &text_tracks, const std::set< int64_t > &ignored_tracks, const std::string &audio_encryption_key_id, const std::string &video_encryption_key_id, const MediaParser::NewSampleCB &new_sample_cb, const MediaParser::InitCB &init_cb, KeySource *decryption_key_source)
    void WriteMP4(std::vector< uint8_t > *data) const
    @@ -721,7 +734,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    bool Flush() WARN_UNUSED_RESULT
    static void Parse(const uint8_t *payload, int payload_size, std::string *id, std::string *settings, std::string *content)
    Utility function to parse the WebVTT cue from a byte stream.
    void MergeFrom(const VPCodecConfigurationRecord &other)
    -
    static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
    Definition: media_sample.cc:45
    +
    static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
    Definition: media_sample.cc:42
    KeySource is responsible for encryption key acquisition.
    Definition: key_source.h:45
    DecryptorSource wraps KeySource and is responsible for decryptor management.
    @@ -730,7 +743,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d91/es__parser__adts_8cc_source.html b/docs/d5/d91/es__parser__adts_8cc_source.html index fc7a570fbc..a7532e53f3 100644 --- a/docs/d5/d91/es__parser__adts_8cc_source.html +++ b/docs/d5/d91/es__parser__adts_8cc_source.html @@ -359,12 +359,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    void Reset()
    Reset the queue to the empty state.
    Definition: byte_queue.cc:24
    void Peek(const uint8_t **data, int *size) const
    Definition: byte_queue.cc:63
    static std::string GetCodecString(Codec codec, uint8_t audio_object_type)
    -
    static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
    Definition: media_sample.cc:45
    +
    static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
    Definition: media_sample.cc:42
    static size_t GetAdtsHeaderSize(const uint8_t *data, size_t num_bytes)
    Definition: adts_header.cc:31
    diff --git a/docs/d5/d95/structshaka_1_1media_1_1mp4_1_1EditListEntry-members.html b/docs/d5/d95/structshaka_1_1media_1_1mp4_1_1EditListEntry-members.html index d95529ea5c..4f927b3c6b 100644 --- a/docs/d5/d95/structshaka_1_1media_1_1mp4_1_1EditListEntry-members.html +++ b/docs/d5/d95/structshaka_1_1media_1_1mp4_1_1EditListEntry-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d98/encryptor_8cc_source.html b/docs/d5/d98/encryptor_8cc_source.html index e602eebd51..45293fb607 100644 --- a/docs/d5/d98/encryptor_8cc_source.html +++ b/docs/d5/d98/encryptor_8cc_source.html @@ -102,111 +102,110 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    13 namespace shaka {
    14 namespace media {
    15 namespace webm {
    -
    16 
    -
    17 Status UpdateTrackForEncryption(const std::vector<uint8_t>& key_id,
    -
    18  mkvmuxer::Track* track) {
    -
    19  DCHECK_EQ(track->content_encoding_entries_size(), 0u);
    -
    20 
    -
    21  if (!track->AddContentEncoding()) {
    -
    22  return Status(error::INTERNAL_ERROR,
    -
    23  "Could not add ContentEncoding to track.");
    -
    24  }
    -
    25 
    -
    26  mkvmuxer::ContentEncoding* const encoding =
    -
    27  track->GetContentEncodingByIndex(0);
    -
    28  if (!encoding) {
    -
    29  return Status(error::INTERNAL_ERROR,
    -
    30  "Could not add ContentEncoding to track.");
    -
    31  }
    -
    32 
    -
    33  mkvmuxer::ContentEncAESSettings* const aes = encoding->enc_aes_settings();
    -
    34  if (!aes) {
    -
    35  return Status(error::INTERNAL_ERROR,
    -
    36  "Error getting ContentEncAESSettings.");
    -
    37  }
    -
    38  if (aes->cipher_mode() != mkvmuxer::ContentEncAESSettings::kCTR) {
    -
    39  return Status(error::INTERNAL_ERROR, "Cipher Mode is not CTR.");
    -
    40  }
    -
    41 
    -
    42  if (!encoding->SetEncryptionID(key_id.data(), key_id.size())) {
    -
    43  return Status(error::INTERNAL_ERROR, "Error setting encryption ID.");
    -
    44  }
    -
    45  return Status::OK;
    -
    46 }
    -
    47 
    -
    48 void UpdateFrameForEncryption(MediaSample* sample) {
    -
    49  const size_t sample_size = sample->data_size();
    -
    50  if (sample->decrypt_config()) {
    -
    51  auto* decrypt_config = sample->decrypt_config();
    -
    52  const size_t iv_size = decrypt_config->iv().size();
    -
    53  DCHECK_EQ(iv_size, kWebMIvSize);
    -
    54  if (!decrypt_config->subsamples().empty()) {
    -
    55  auto& subsamples = decrypt_config->subsamples();
    -
    56  // Use partitioned subsample encryption: | signal_byte(3) | iv
    -
    57  // | num_partitions | partition_offset * n | enc_data |
    -
    58  DCHECK_LT(subsamples.size(), kWebMMaxSubsamples);
    -
    59  const size_t num_partitions =
    -
    60  2 * subsamples.size() - 1 -
    -
    61  (subsamples.back().cipher_bytes == 0 ? 1 : 0);
    -
    62  const size_t header_size = kWebMSignalByteSize + iv_size +
    -
    63  kWebMNumPartitionsSize +
    -
    64  (kWebMPartitionOffsetSize * num_partitions);
    -
    65  sample->resize_data(header_size + sample_size);
    -
    66  uint8_t* sample_data = sample->writable_data();
    -
    67  memmove(sample_data + header_size, sample_data, sample_size);
    -
    68  sample_data[0] = kWebMEncryptedSignal | kWebMPartitionedSignal;
    -
    69  memcpy(sample_data + kWebMSignalByteSize, decrypt_config->iv().data(),
    -
    70  iv_size);
    -
    71  sample_data[kWebMSignalByteSize + kWebMIvSize] =
    -
    72  static_cast<uint8_t>(num_partitions);
    -
    73 
    -
    74  BufferWriter offsets_buffer;
    -
    75  uint32_t partition_offset = 0;
    -
    76  for (size_t i = 0; i < subsamples.size() - 1; ++i) {
    -
    77  partition_offset += subsamples[i].clear_bytes;
    -
    78  offsets_buffer.AppendInt(partition_offset);
    -
    79  partition_offset += subsamples[i].cipher_bytes;
    -
    80  offsets_buffer.AppendInt(partition_offset);
    -
    81  }
    -
    82  // Add another partition between the clear bytes and cipher bytes if
    -
    83  // cipher bytes is not zero.
    -
    84  if (subsamples.back().cipher_bytes != 0) {
    -
    85  partition_offset += subsamples.back().clear_bytes;
    -
    86  offsets_buffer.AppendInt(partition_offset);
    -
    87  }
    -
    88  DCHECK_EQ(num_partitions * kWebMPartitionOffsetSize,
    -
    89  offsets_buffer.Size());
    -
    90  memcpy(sample_data + kWebMSignalByteSize + kWebMIvSize +
    -
    91  kWebMNumPartitionsSize,
    -
    92  offsets_buffer.Buffer(), offsets_buffer.Size());
    -
    93  } else {
    -
    94  // Use whole-frame encryption: | signal_byte(1) | iv | enc_data |
    -
    95  sample->resize_data(sample_size + iv_size + kWebMSignalByteSize);
    -
    96  uint8_t* sample_data = sample->writable_data();
    -
    97 
    -
    98  // First move the sample data to after the IV; then write the IV and
    -
    99  // signal byte.
    -
    100  memmove(sample_data + iv_size + kWebMSignalByteSize, sample_data,
    -
    101  sample_size);
    -
    102  sample_data[0] = kWebMEncryptedSignal;
    -
    103  memcpy(sample_data + 1, decrypt_config->iv().data(), iv_size);
    -
    104  }
    -
    105  } else {
    -
    106  // Clear sample: | signal_byte(0) | data |
    -
    107  sample->resize_data(sample_size + 1);
    -
    108  uint8_t* sample_data = sample->writable_data();
    -
    109  memmove(sample_data + 1, sample_data, sample_size);
    -
    110  sample_data[0] = 0x00;
    -
    111  }
    -
    112 }
    -
    113 
    -
    114 } // namespace webm
    -
    115 } // namespace media
    -
    116 } // namespace shaka
    +
    16 namespace {
    +
    17 void WriteEncryptedFrameHeader(const DecryptConfig* decrypt_config,
    +
    18  BufferWriter* header_buffer) {
    +
    19  if (decrypt_config) {
    +
    20  const size_t iv_size = decrypt_config->iv().size();
    +
    21  DCHECK_EQ(iv_size, kWebMIvSize);
    +
    22  if (!decrypt_config->subsamples().empty()) {
    +
    23  const auto& subsamples = decrypt_config->subsamples();
    +
    24  // Use partitioned subsample encryption: | signal_byte(3) | iv
    +
    25  // | num_partitions | partition_offset * n | enc_data |
    +
    26  DCHECK_LT(subsamples.size(), kWebMMaxSubsamples);
    +
    27  const size_t num_partitions =
    +
    28  2 * subsamples.size() - 1 -
    +
    29  (subsamples.back().cipher_bytes == 0 ? 1 : 0);
    +
    30  const size_t header_size = kWebMSignalByteSize + iv_size +
    +
    31  kWebMNumPartitionsSize +
    +
    32  (kWebMPartitionOffsetSize * num_partitions);
    +
    33 
    +
    34  const uint8_t signal_byte = kWebMEncryptedSignal | kWebMPartitionedSignal;
    +
    35  header_buffer->AppendInt(signal_byte);
    +
    36  header_buffer->AppendVector(decrypt_config->iv());
    +
    37  header_buffer->AppendInt(static_cast<uint8_t>(num_partitions));
    +
    38 
    +
    39  uint32_t partition_offset = 0;
    +
    40  for (size_t i = 0; i < subsamples.size() - 1; ++i) {
    +
    41  partition_offset += subsamples[i].clear_bytes;
    +
    42  header_buffer->AppendInt(partition_offset);
    +
    43  partition_offset += subsamples[i].cipher_bytes;
    +
    44  header_buffer->AppendInt(partition_offset);
    +
    45  }
    +
    46  // Add another partition between the clear bytes and cipher bytes if
    +
    47  // cipher bytes is not zero.
    +
    48  if (subsamples.back().cipher_bytes != 0) {
    +
    49  partition_offset += subsamples.back().clear_bytes;
    +
    50  header_buffer->AppendInt(partition_offset);
    +
    51  }
    +
    52 
    +
    53  DCHECK_EQ(header_size, header_buffer->Size());
    +
    54  } else {
    +
    55  // Use whole-frame encryption: | signal_byte(1) | iv | enc_data |
    +
    56  const uint8_t signal_byte = kWebMEncryptedSignal;
    +
    57  header_buffer->AppendInt(signal_byte);
    +
    58  header_buffer->AppendVector(decrypt_config->iv());
    +
    59  }
    +
    60  } else {
    +
    61  // Clear sample: | signal_byte(0) | data |
    +
    62  const uint8_t signal_byte = 0x00;
    +
    63  header_buffer->AppendInt(signal_byte);
    +
    64  }
    +
    65 }
    +
    66 } // namespace
    +
    67 
    +
    68 Status UpdateTrackForEncryption(const std::vector<uint8_t>& key_id,
    +
    69  mkvmuxer::Track* track) {
    +
    70  DCHECK_EQ(track->content_encoding_entries_size(), 0u);
    +
    71 
    +
    72  if (!track->AddContentEncoding()) {
    +
    73  return Status(error::INTERNAL_ERROR,
    +
    74  "Could not add ContentEncoding to track.");
    +
    75  }
    +
    76 
    +
    77  mkvmuxer::ContentEncoding* const encoding =
    +
    78  track->GetContentEncodingByIndex(0);
    +
    79  if (!encoding) {
    +
    80  return Status(error::INTERNAL_ERROR,
    +
    81  "Could not add ContentEncoding to track.");
    +
    82  }
    +
    83 
    +
    84  mkvmuxer::ContentEncAESSettings* const aes = encoding->enc_aes_settings();
    +
    85  if (!aes) {
    +
    86  return Status(error::INTERNAL_ERROR,
    +
    87  "Error getting ContentEncAESSettings.");
    +
    88  }
    +
    89  if (aes->cipher_mode() != mkvmuxer::ContentEncAESSettings::kCTR) {
    +
    90  return Status(error::INTERNAL_ERROR, "Cipher Mode is not CTR.");
    +
    91  }
    +
    92 
    +
    93  if (!encoding->SetEncryptionID(key_id.data(), key_id.size())) {
    +
    94  return Status(error::INTERNAL_ERROR, "Error setting encryption ID.");
    +
    95  }
    +
    96  return Status::OK;
    +
    97 }
    +
    98 
    +
    99 void UpdateFrameForEncryption(MediaSample* sample) {
    +
    100  DCHECK(sample);
    +
    101  BufferWriter header_buffer;
    +
    102  WriteEncryptedFrameHeader(sample->decrypt_config(), &header_buffer);
    +
    103 
    +
    104  const size_t sample_size = header_buffer.Size() + sample->data_size();
    +
    105  std::shared_ptr<uint8_t> new_sample_data(new uint8_t[sample_size],
    +
    106  std::default_delete<uint8_t[]>());
    +
    107  memcpy(new_sample_data.get(), header_buffer.Buffer(), header_buffer.Size());
    +
    108  memcpy(&new_sample_data.get()[header_buffer.Size()], sample->data(),
    +
    109  sample->data_size());
    +
    110  sample->TransferData(std::move(new_sample_data), sample_size);
    +
    111 }
    +
    112 
    +
    113 } // namespace webm
    +
    114 } // namespace media
    +
    115 } // namespace shaka
    diff --git a/docs/d5/d9b/vp__codec__configuration__record_8h_source.html b/docs/d5/d9b/vp__codec__configuration__record_8h_source.html index a5623dec4c..503e63a8bd 100644 --- a/docs/d5/d9b/vp__codec__configuration__record_8h_source.html +++ b/docs/d5/d9b/vp__codec__configuration__record_8h_source.html @@ -317,7 +317,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d9d/structshaka_1_1media_1_1H265ReferencePictureListModifications.html b/docs/d5/d9d/structshaka_1_1media_1_1H265ReferencePictureListModifications.html index bcb5d0de6c..bd6f3feee6 100644 --- a/docs/d5/d9d/structshaka_1_1media_1_1H265ReferencePictureListModifications.html +++ b/docs/d5/d9d/structshaka_1_1media_1_1H265ReferencePictureListModifications.html @@ -119,7 +119,7 @@ std::vector< int > l diff --git a/docs/d5/da4/aes__encryptor_8cc_source.html b/docs/d5/da4/aes__encryptor_8cc_source.html index d381339181..c73b7bab8c 100644 --- a/docs/d5/da4/aes__encryptor_8cc_source.html +++ b/docs/d5/da4/aes__encryptor_8cc_source.html @@ -297,7 +297,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dad/structshaka_1_1media_1_1H265ReferencePictureSet.html b/docs/d5/dad/structshaka_1_1media_1_1H265ReferencePictureSet.html index c7bb42a428..85a76e9669 100644 --- a/docs/d5/dad/structshaka_1_1media_1_1H265ReferencePictureSet.html +++ b/docs/d5/dad/structshaka_1_1media_1_1H265ReferencePictureSet.html @@ -127,7 +127,7 @@ int num_delta_pocs diff --git a/docs/d5/db1/classshaka_1_1media_1_1StreamInfo.html b/docs/d5/db1/classshaka_1_1media_1_1StreamInfo.html index 27bc5c444b..24cf13645b 100644 --- a/docs/d5/db1/classshaka_1_1media_1_1StreamInfo.html +++ b/docs/d5/db1/classshaka_1_1media_1_1StreamInfo.html @@ -272,7 +272,7 @@ void set_encryption_config diff --git a/docs/d5/db9/classshaka_1_1media_1_1mp2t_1_1EsParserH264.html b/docs/d5/db9/classshaka_1_1media_1_1mp2t_1_1EsParserH264.html index de78531348..a7e119c9dc 100644 --- a/docs/d5/db9/classshaka_1_1media_1_1mp2t_1_1EsParserH264.html +++ b/docs/d5/db9/classshaka_1_1media_1_1mp2t_1_1EsParserH264.html @@ -161,7 +161,7 @@ const
    diff --git a/docs/d5/dba/ts__packet_8cc_source.html b/docs/d5/dba/ts__packet_8cc_source.html index 5ba1a8f41a..07175304d4 100644 --- a/docs/d5/dba/ts__packet_8cc_source.html +++ b/docs/d5/dba/ts__packet_8cc_source.html @@ -307,7 +307,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dc1/webm__webvtt__parser_8cc_source.html b/docs/d5/dc1/webm__webvtt__parser_8cc_source.html index 4be9573f6e..834e7cede6 100644 --- a/docs/d5/dc1/webm__webvtt__parser_8cc_source.html +++ b/docs/d5/dc1/webm__webvtt__parser_8cc_source.html @@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dc8/structshaka_1_1media_1_1mp4_1_1TrackFragment-members.html b/docs/d5/dc8/structshaka_1_1media_1_1mp4_1_1TrackFragment-members.html index 8feb1fb86f..28386ae9ed 100644 --- a/docs/d5/dc8/structshaka_1_1media_1_1mp4_1_1TrackFragment-members.html +++ b/docs/d5/dc8/structshaka_1_1media_1_1mp4_1_1TrackFragment-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dca/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html b/docs/d5/dca/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html index a54d817716..4d37c282f4 100644 --- a/docs/d5/dca/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html +++ b/docs/d5/dca/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/da/d7a/fixed__key__encryption__flags_8h_source.html b/docs/d5/dcb/raw__key__encryption__flags_8h_source.html similarity index 85% rename from docs/da/d7a/fixed__key__encryption__flags_8h_source.html rename to docs/d5/dcb/raw__key__encryption__flags_8h_source.html index 43fb5e8e2b..4c10b40448 100644 --- a/docs/da/d7a/fixed__key__encryption__flags_8h_source.html +++ b/docs/d5/dcb/raw__key__encryption__flags_8h_source.html @@ -4,7 +4,7 @@ -Shaka Packager SDK: packager/app/fixed_key_encryption_flags.h Source File +Shaka Packager SDK: packager/app/raw_key_encryption_flags.h Source File @@ -84,7 +84,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    -
    fixed_key_encryption_flags.h
    +
    raw_key_encryption_flags.h
    1 // Copyright 2014 Google Inc. All rights reserved.
    @@ -93,35 +93,35 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    4 // license that can be found in the LICENSE file or at
    5 // https://developers.google.com/open-source/licenses/bsd
    6 //
    -
    7 // Defines command line flags for fixed key encryption.
    +
    7 // Defines command line flags for raw key encryption.
    8 
    -
    9 #ifndef APP_FIXED_KEY_ENCRYPTION_FLAGS_H_
    -
    10 #define APP_FIXED_KEY_ENCRYPTION_FLAGS_H_
    +
    9 #ifndef PACKAGER_APP_RAW_KEY_ENCRYPTION_FLAGS_H_
    +
    10 #define PACKAGER_APP_RAW_KEY_ENCRYPTION_FLAGS_H_
    11 
    12 #include <gflags/gflags.h>
    13 
    14 #include "packager/app/gflags_hex_bytes.h"
    15 
    -
    16 // TODO(kqyang): s/fixed/raw/.
    -
    17 DECLARE_bool(enable_fixed_key_encryption);
    -
    18 DECLARE_bool(enable_fixed_key_decryption);
    -
    19 DECLARE_hex_bytes(key_id);
    -
    20 DECLARE_hex_bytes(key);
    +
    16 DECLARE_bool(enable_raw_key_encryption);
    +
    17 DECLARE_bool(enable_raw_key_decryption);
    +
    18 DECLARE_hex_bytes(key_id);
    +
    19 DECLARE_hex_bytes(key);
    +
    20 DECLARE_string(keys);
    21 DECLARE_hex_bytes(iv);
    22 DECLARE_hex_bytes(pssh);
    23 
    24 namespace shaka {
    25 
    - +
    29 
    30 } // namespace shaka
    31 
    -
    32 #endif // APP_FIXED_KEY_ENCRYPTION_FLAGS_H_
    -
    bool ValidateFixedCryptoFlags()
    +
    32 #endif // PACKAGER_APP_RAW_KEY_ENCRYPTION_FLAGS_H_
    +
    bool ValidateRawKeyCryptoFlags()
    diff --git a/docs/d5/dcf/rsa__key_8h_source.html b/docs/d5/dcf/rsa__key_8h_source.html index 75b2b7b0b2..d065a0cc80 100644 --- a/docs/d5/dcf/rsa__key_8h_source.html +++ b/docs/d5/dcf/rsa__key_8h_source.html @@ -165,7 +165,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dda/ts__section__psi_8h_source.html b/docs/d5/dda/ts__section__psi_8h_source.html index fdecc7995e..61e618f08b 100644 --- a/docs/d5/dda/ts__section__psi_8h_source.html +++ b/docs/d5/dda/ts__section__psi_8h_source.html @@ -151,7 +151,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/de0/bit__reader_8cc_source.html b/docs/d5/de0/bit__reader_8cc_source.html index 3b763963d1..ed7b22b6cf 100644 --- a/docs/d5/de0/bit__reader_8cc_source.html +++ b/docs/d5/de0/bit__reader_8cc_source.html @@ -197,7 +197,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html b/docs/d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html index f0c1cc16e2..b7de21d2fd 100644 --- a/docs/d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html +++ b/docs/d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html @@ -271,7 +271,7 @@ class PesPacketGeneratorTe diff --git a/docs/d5/de3/structshaka_1_1PackagingParams.html b/docs/d5/de3/structshaka_1_1PackagingParams.html index 41bceeef76..8ff9565f8b 100644 --- a/docs/d5/de3/structshaka_1_1PackagingParams.html +++ b/docs/d5/de3/structshaka_1_1PackagingParams.html @@ -152,9 +152,9 @@ std::string  @@ -164,7 +164,7 @@ std::string  diff --git a/docs/d5/de9/replicator_8cc_source.html b/docs/d5/de9/replicator_8cc_source.html new file mode 100644 index 0000000000..66ea263dc6 --- /dev/null +++ b/docs/d5/de9/replicator_8cc_source.html @@ -0,0 +1,139 @@ + + + + + + +Shaka Packager SDK: packager/media/replicator/replicator.cc Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Shaka Packager SDK +
    +
    +
    + + + + + + + + + +
    + +
    + + +
    +
    +
    +
    replicator.cc
    +
    +
    +
    1 // Copyright 2017 Google Inc. All rights reserved.
    +
    2 //
    +
    3 // Use of this source code is governed by a BSD-style
    +
    4 // license that can be found in the LICENSE file or at
    +
    5 // https://developers.google.com/open-source/licenses/bsd
    +
    6 
    +
    7 #include "packager/media/replicator/replicator.h"
    +
    8 
    +
    9 namespace shaka {
    +
    10 namespace media {
    +
    11 
    +
    12 Status Replicator::InitializeInternal() {
    +
    13  return Status::OK;
    +
    14 }
    +
    15 
    +
    16 Status Replicator::Process(std::unique_ptr<StreamData> stream_data) {
    +
    17  Status status;
    +
    18 
    +
    19  for (auto& out : output_handlers()) {
    +
    20  std::unique_ptr<StreamData> copy(new StreamData(*stream_data));
    +
    21  copy->stream_index = out.first;
    +
    22 
    +
    23  status.Update(Dispatch(std::move(copy)));
    +
    24  }
    +
    25 
    +
    26  return status;
    +
    27 }
    +
    28 
    +
    29 bool Replicator::ValidateOutputStreamIndex(size_t stream_index) const {
    +
    30  return true;
    +
    31 }
    +
    32 
    +
    33 Status Replicator::OnFlushRequest(size_t input_stream_index) {
    +
    34  DCHECK_EQ(input_stream_index, 0u);
    +
    35  return FlushAllDownstreams();
    +
    36 }
    +
    37 
    +
    38 } // namespace media
    +
    39 } // namespace shaka
    +
    Status Dispatch(std::unique_ptr< StreamData > stream_data)
    +
    Status FlushAllDownstreams()
    Flush all connected downstreams.
    +
    + + + + diff --git a/docs/d5/dec/classshaka_1_1media_1_1WebMParserClient.html b/docs/d5/dec/classshaka_1_1media_1_1WebMParserClient.html index 605ddd0af6..14ba6932c7 100644 --- a/docs/d5/dec/classshaka_1_1media_1_1WebMParserClient.html +++ b/docs/d5/dec/classshaka_1_1media_1_1WebMParserClient.html @@ -151,7 +151,7 @@ Protected Member Functions diff --git a/docs/d5/dec/decoder__configuration__record_8cc_source.html b/docs/d5/dec/decoder__configuration__record_8cc_source.html index 66111d5cf1..cc61268fd7 100644 --- a/docs/d5/dec/decoder__configuration__record_8cc_source.html +++ b/docs/d5/dec/decoder__configuration__record_8cc_source.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dec/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox-members.html b/docs/d5/dec/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox-members.html index 6c8ed94fc8..6c5cf6d879 100644 --- a/docs/d5/dec/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox-members.html +++ b/docs/d5/dec/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/def/ts__section__pmt_8h_source.html b/docs/d5/def/ts__section__pmt_8h_source.html index cd1661ae56..e89c4eb9c4 100644 --- a/docs/d5/def/ts__section__pmt_8h_source.html +++ b/docs/d5/def/ts__section__pmt_8h_source.html @@ -133,7 +133,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/df2/media__playlist_8cc_source.html b/docs/d5/df2/media__playlist_8cc_source.html index 1285255921..8f3c4e7f89 100644 --- a/docs/d5/df2/media__playlist_8cc_source.html +++ b/docs/d5/df2/media__playlist_8cc_source.html @@ -618,7 +618,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dfa/classshaka_1_1media_1_1HlsNotifyMuxerListener.html b/docs/d5/dfa/classshaka_1_1media_1_1HlsNotifyMuxerListener.html index 24e2e8885e..72cd065b82 100644 --- a/docs/d5/dfa/classshaka_1_1media_1_1HlsNotifyMuxerListener.html +++ b/docs/d5/dfa/classshaka_1_1media_1_1HlsNotifyMuxerListener.html @@ -493,7 +493,7 @@ Additional Inherited Members diff --git a/docs/d5/dfa/classshaka_1_1media_1_1MediaParser-members.html b/docs/d5/dfa/classshaka_1_1media_1_1MediaParser-members.html index 2e5a11b247..6fb1b62866 100644 --- a/docs/d5/dfa/classshaka_1_1media_1_1MediaParser-members.html +++ b/docs/d5/dfa/classshaka_1_1media_1_1MediaParser-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dfc/file_8cc_source.html b/docs/d5/dfc/file_8cc_source.html index 1be3b9ef47..69b37c51f9 100644 --- a/docs/d5/dfc/file_8cc_source.html +++ b/docs/d5/dfc/file_8cc_source.html @@ -485,7 +485,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    virtual int64_t Size()=0
    static bool WriteStringToFile(const char *file_name, const std::string &contents)
    Definition: file.cc:234
    static std::string MakeCallbackFileName(const BufferCallbackParams &callback_params, const std::string &name)
    Definition: file.cc:354
    -
    static bool Delete(const char *file_name)
    Definition: local_file.cc:113
    +
    static bool Delete(const char *file_name)
    Definition: local_file.cc:126
    static File * OpenWithNoBuffering(const char *file_name, const char *mode)
    Definition: file.cc:187
    static bool WriteFileAtomically(const char *file_name, const std::string &contents)
    Definition: file.cc:262
    static bool ParseCallbackFileName(const std::string &callback_file_name, const BufferCallbackParams **callback_params, std::string *name)
    Definition: file.cc:364
    @@ -494,7 +494,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dfe/classshaka_1_1File-members.html b/docs/d5/dfe/classshaka_1_1File-members.html index 9358f8459f..ad9b918747 100644 --- a/docs/d5/dfe/classshaka_1_1File-members.html +++ b/docs/d5/dfe/classshaka_1_1File-members.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d02/playready__key__encryption__flags_8h_source.html b/docs/d6/d02/playready__key__encryption__flags_8h_source.html index 423292fd3e..da4370bb04 100644 --- a/docs/d6/d02/playready__key__encryption__flags_8h_source.html +++ b/docs/d6/d02/playready__key__encryption__flags_8h_source.html @@ -123,7 +123,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d03/classshaka_1_1media_1_1AesCbcDecryptor-members.html b/docs/d6/d03/classshaka_1_1media_1_1AesCbcDecryptor-members.html index 8ffdacf102..ed9ca5bfc7 100644 --- a/docs/d6/d03/classshaka_1_1media_1_1AesCbcDecryptor-members.html +++ b/docs/d6/d03/classshaka_1_1media_1_1AesCbcDecryptor-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d09/aes__pattern__cryptor_8h_source.html b/docs/d6/d09/aes__pattern__cryptor_8h_source.html index aebfc3ff1e..96c0489e73 100644 --- a/docs/d6/d09/aes__pattern__cryptor_8h_source.html +++ b/docs/d6/d09/aes__pattern__cryptor_8h_source.html @@ -149,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d16/text__stream__info_8cc_source.html b/docs/d6/d16/text__stream__info_8cc_source.html index 71161501ca..d06348c527 100644 --- a/docs/d6/d16/text__stream__info_8cc_source.html +++ b/docs/d6/d16/text__stream__info_8cc_source.html @@ -130,7 +130,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d17/es__parser__h264_8cc_source.html b/docs/d6/d17/es__parser__h264_8cc_source.html index 6ee5c052d9..55d9716319 100644 --- a/docs/d6/d17/es__parser__h264_8cc_source.html +++ b/docs/d6/d17/es__parser__h264_8cc_source.html @@ -267,7 +267,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d1a/structshaka_1_1media_1_1mp4_1_1MovieHeader.html b/docs/d6/d1a/structshaka_1_1media_1_1mp4_1_1MovieHeader.html index b6d92d98a9..440011b07c 100644 --- a/docs/d6/d1a/structshaka_1_1media_1_1mp4_1_1MovieHeader.html +++ b/docs/d6/d1a/structshaka_1_1media_1_1mp4_1_1MovieHeader.html @@ -200,7 +200,7 @@ Additional Inherited Members diff --git a/docs/d6/d1a/ts__packet__writer__util_8cc_source.html b/docs/d6/d1a/ts__packet__writer__util_8cc_source.html index 699c916c9f..9b8d93ecb8 100644 --- a/docs/d6/d1a/ts__packet__writer__util_8cc_source.html +++ b/docs/d6/d1a/ts__packet__writer__util_8cc_source.html @@ -255,7 +255,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d26/structshaka_1_1media_1_1VideoStreamInfoParameters.html b/docs/d6/d26/structshaka_1_1media_1_1VideoStreamInfoParameters.html index 4626cfd25d..53fd52d189 100644 --- a/docs/d6/d26/structshaka_1_1media_1_1VideoStreamInfoParameters.html +++ b/docs/d6/d26/structshaka_1_1media_1_1VideoStreamInfoParameters.html @@ -146,7 +146,7 @@ bool is_encrypted diff --git a/docs/d6/d2e/mpd__notifier__util_8cc_source.html b/docs/d6/d2e/mpd__notifier__util_8cc_source.html index 914a708919..2a144dbd49 100644 --- a/docs/d6/d2e/mpd__notifier__util_8cc_source.html +++ b/docs/d6/d2e/mpd__notifier__util_8cc_source.html @@ -152,7 +152,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d32/classshaka_1_1media_1_1TextTrack-members.html b/docs/d6/d32/classshaka_1_1media_1_1TextTrack-members.html index 3889789add..350aad6ee9 100644 --- a/docs/d6/d32/classshaka_1_1media_1_1TextTrack-members.html +++ b/docs/d6/d32/classshaka_1_1media_1_1TextTrack-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d35/webm__content__encodings_8cc_source.html b/docs/d6/d35/webm__content__encodings_8cc_source.html index ee299c3177..db6501ea63 100644 --- a/docs/d6/d35/webm__content__encodings_8cc_source.html +++ b/docs/d6/d35/webm__content__encodings_8cc_source.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d37/combined__muxer__listener_8cc_source.html b/docs/d6/d37/combined__muxer__listener_8cc_source.html index d1cfa7b764..6854c2adde 100644 --- a/docs/d6/d37/combined__muxer__listener_8cc_source.html +++ b/docs/d6/d37/combined__muxer__listener_8cc_source.html @@ -168,7 +168,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d3b/chunk__info__iterator_8cc_source.html b/docs/d6/d3b/chunk__info__iterator_8cc_source.html index 51ca3073a8..a2f40b23fc 100644 --- a/docs/d6/d3b/chunk__info__iterator_8cc_source.html +++ b/docs/d6/d3b/chunk__info__iterator_8cc_source.html @@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d47/hls__params_8h_source.html b/docs/d6/d47/hls__params_8h_source.html index e8465d662b..4546dffd71 100644 --- a/docs/d6/d47/hls__params_8h_source.html +++ b/docs/d6/d47/hls__params_8h_source.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d4c/classshaka_1_1media_1_1EncryptionHandler.html b/docs/d6/d4c/classshaka_1_1media_1_1EncryptionHandler.html index 79838ea132..3bad9f50f7 100644 --- a/docs/d6/d4c/classshaka_1_1media_1_1EncryptionHandler.html +++ b/docs/d6/d4c/classshaka_1_1media_1_1EncryptionHandler.html @@ -224,7 +224,7 @@ class EncryptionHandlerTes

    Implements shaka::media::MediaHandler.

    -

    Definition at line 93 of file encryption_handler.cc.

    +

    Definition at line 94 of file encryption_handler.cc.

    @@ -253,7 +253,7 @@ class EncryptionHandlerTes

    Implements shaka::media::MediaHandler.

    -

    Definition at line 104 of file encryption_handler.cc.

    +

    Definition at line 105 of file encryption_handler.cc.

    @@ -264,7 +264,7 @@ class EncryptionHandlerTes diff --git a/docs/d6/d4e/webm_2multi__segment__segmenter_8cc_source.html b/docs/d6/d4e/webm_2multi__segment__segmenter_8cc_source.html index 26f9ad4a8d..0ebf206d74 100644 --- a/docs/d6/d4e/webm_2multi__segment__segmenter_8cc_source.html +++ b/docs/d6/d4e/webm_2multi__segment__segmenter_8cc_source.html @@ -186,7 +186,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d55/aes__cryptor_8cc_source.html b/docs/d6/d55/aes__cryptor_8cc_source.html index cf88e8fc38..6da7a44860 100644 --- a/docs/d6/d55/aes__cryptor_8cc_source.html +++ b/docs/d6/d55/aes__cryptor_8cc_source.html @@ -227,7 +227,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html b/docs/d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html index dabe84e405..f79c42e3b8 100644 --- a/docs/d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html +++ b/docs/d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html @@ -251,7 +251,7 @@ void  diff --git a/docs/d6/d59/protection__system__specific__info_8h_source.html b/docs/d6/d59/protection__system__specific__info_8h_source.html index 3492459676..32a1bd3941 100644 --- a/docs/d6/d59/protection__system__specific__info_8h_source.html +++ b/docs/d6/d59/protection__system__specific__info_8h_source.html @@ -133,29 +133,27 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    50  system_id_.assign(system_id, system_id + system_id_size);
    51  }
    52  void add_key_id(const std::vector<uint8_t>& key_id) {
    -
    53  DCHECK_EQ(16u, key_id.size());
    -
    54  key_ids_.push_back(key_id);
    -
    55  }
    -
    56  void clear_key_ids() { key_ids_.clear(); }
    -
    57  void set_pssh_data(const std::vector<uint8_t>& pssh_data) {
    -
    58  pssh_data_ = pssh_data;
    -
    59  }
    -
    60 
    -
    61  private:
    -
    62  uint8_t version_;
    -
    63  std::vector<uint8_t> system_id_;
    -
    64  std::vector<std::vector<uint8_t>> key_ids_;
    -
    65  std::vector<uint8_t> pssh_data_;
    -
    66 
    -
    67  // Don't use DISALLOW_COPY_AND_ASSIGN since the data stored here should be
    -
    68  // small, so the performance impact should be minimal.
    -
    69 };
    -
    70 
    -
    71 } // namespace media
    -
    72 } // namespace shaka
    -
    73 
    -
    74 #endif // MEDIA_BASE_PSSH_H_
    -
    75 
    +
    53  key_ids_.push_back(key_id);
    +
    54  }
    +
    55  void clear_key_ids() { key_ids_.clear(); }
    +
    56  void set_pssh_data(const std::vector<uint8_t>& pssh_data) {
    +
    57  pssh_data_ = pssh_data;
    +
    58  }
    +
    59 
    +
    60  private:
    +
    61  uint8_t version_;
    +
    62  std::vector<uint8_t> system_id_;
    +
    63  std::vector<std::vector<uint8_t>> key_ids_;
    +
    64  std::vector<uint8_t> pssh_data_;
    +
    65 
    +
    66  // Don't use DISALLOW_COPY_AND_ASSIGN since the data stored here should be
    +
    67  // small, so the performance impact should be minimal.
    +
    68 };
    +
    69 
    +
    70 } // namespace media
    +
    71 } // namespace shaka
    +
    72 
    +
    73 #endif // MEDIA_BASE_PSSH_H_
    std::vector< uint8_t > CreateBox() const
    Creates a PSSH box for the current data.
    static bool ParseBoxes(const uint8_t *data, size_t data_size, std::vector< ProtectionSystemSpecificInfo > *pssh_boxes)
    @@ -163,7 +161,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d5b/classshaka_1_1Status-members.html b/docs/d6/d5b/classshaka_1_1Status-members.html index 15609b4912..6e40b52162 100644 --- a/docs/d6/d5b/classshaka_1_1Status-members.html +++ b/docs/d6/d5b/classshaka_1_1Status-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d60/classshaka_1_1media_1_1VPCodecConfigurationRecord-members.html b/docs/d6/d60/classshaka_1_1media_1_1VPCodecConfigurationRecord-members.html index 1c551fb8c8..4660d0c16b 100644 --- a/docs/d6/d60/classshaka_1_1media_1_1VPCodecConfigurationRecord-members.html +++ b/docs/d6/d60/classshaka_1_1media_1_1VPCodecConfigurationRecord-members.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d62/structshaka_1_1TestParams.html b/docs/d6/d62/structshaka_1_1TestParams.html index 8588d160cf..cce6de78d7 100644 --- a/docs/d6/d62/structshaka_1_1TestParams.html +++ b/docs/d6/d62/structshaka_1_1TestParams.html @@ -151,7 +151,7 @@ bool  diff --git a/docs/dc/dd6/structshaka_1_1RawKeyDecryptionParams_1_1KeyPair-members.html b/docs/d6/d66/structshaka_1_1RawKeyParams_1_1KeyInfo-members.html similarity index 82% rename from docs/dc/dd6/structshaka_1_1RawKeyDecryptionParams_1_1KeyPair-members.html rename to docs/d6/d66/structshaka_1_1RawKeyParams_1_1KeyInfo-members.html index 570ff8f822..f20e69d4c4 100644 --- a/docs/dc/dd6/structshaka_1_1RawKeyDecryptionParams_1_1KeyPair-members.html +++ b/docs/d6/d66/structshaka_1_1RawKeyParams_1_1KeyInfo-members.html @@ -82,23 +82,23 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
-
shaka::RawKeyDecryptionParams::KeyPair Member List
+
shaka::RawKeyParams::KeyInfo Member List
-

This is the complete list of members for shaka::RawKeyDecryptionParams::KeyPair, including all inherited members.

+

This is the complete list of members for shaka::RawKeyParams::KeyInfo, including all inherited members.

- - + +
key (defined in shaka::RawKeyDecryptionParams::KeyPair)shaka::RawKeyDecryptionParams::KeyPair
key_id (defined in shaka::RawKeyDecryptionParams::KeyPair)shaka::RawKeyDecryptionParams::KeyPair
key (defined in shaka::RawKeyParams::KeyInfo)shaka::RawKeyParams::KeyInfo
key_id (defined in shaka::RawKeyParams::KeyInfo)shaka::RawKeyParams::KeyInfo
diff --git a/docs/d6/d6a/cue_8h_source.html b/docs/d6/d6a/cue_8h_source.html index 576cfbdc29..e9ded57ad4 100644 --- a/docs/d6/d6a/cue_8h_source.html +++ b/docs/d6/d6a/cue_8h_source.html @@ -126,7 +126,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d84/structshaka_1_1RawKeyEncryptionParams-members.html b/docs/d6/d6b/classshaka_1_1media_1_1RawKeySource-members.html similarity index 58% rename from docs/de/d84/structshaka_1_1RawKeyEncryptionParams-members.html rename to docs/d6/d6b/classshaka_1_1media_1_1RawKeySource-members.html index 914ee2c638..2714a4fa9d 100644 --- a/docs/de/d84/structshaka_1_1RawKeyEncryptionParams-members.html +++ b/docs/d6/d6b/classshaka_1_1media_1_1RawKeySource-members.html @@ -82,25 +82,30 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
-
shaka::RawKeyEncryptionParams Member List
+
shaka::media::RawKeySource Member List
-

This is the complete list of members for shaka::RawKeyEncryptionParams, including all inherited members.

+

This is the complete list of members for shaka::media::RawKeySource, including all inherited members.

- - - - + + + + + + + + +
ivshaka::RawKeyEncryptionParams
key_mapshaka::RawKeyEncryptionParams
psshshaka::RawKeyEncryptionParams
StreamLabel typedef (defined in shaka::RawKeyEncryptionParams)shaka::RawKeyEncryptionParams
Create(const RawKeyParams &raw_key)shaka::media::RawKeySourcestatic
FetchKeys(EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) overrideshaka::media::RawKeySourcevirtual
GetCryptoPeriodKey(uint32_t crypto_period_index, const std::string &stream_label, EncryptionKey *key) overrideshaka::media::RawKeySourcevirtual
GetKey(const std::string &stream_label, EncryptionKey *key) overrideshaka::media::RawKeySourcevirtual
GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) overrideshaka::media::RawKeySourcevirtual
KeySource() (defined in shaka::media::KeySource)shaka::media::KeySource
RawKeySource() (defined in shaka::media::RawKeySource)shaka::media::RawKeySourceprotected
~KeySource() (defined in shaka::media::KeySource)shaka::media::KeySourcevirtual
~RawKeySource() override (defined in shaka::media::RawKeySource)shaka::media::RawKeySource
diff --git a/docs/d6/d6c/h26x__bit__reader_8cc_source.html b/docs/d6/d6c/h26x__bit__reader_8cc_source.html index 470ae33101..9bd00f95f0 100644 --- a/docs/d6/d6c/h26x__bit__reader_8cc_source.html +++ b/docs/d6/d6c/h26x__bit__reader_8cc_source.html @@ -259,7 +259,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d6e/ts__section__pes_8cc_source.html b/docs/d6/d6e/ts__section__pes_8cc_source.html index 8fc65275c0..b497891d7f 100644 --- a/docs/d6/d6e/ts__section__pes_8cc_source.html +++ b/docs/d6/d6e/ts__section__pes_8cc_source.html @@ -407,7 +407,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d71/scoped__xml__ptr_8h_source.html b/docs/d6/d71/scoped__xml__ptr_8h_source.html index fa921bff31..b3a8069ddd 100644 --- a/docs/d6/d71/scoped__xml__ptr_8h_source.html +++ b/docs/d6/d71/scoped__xml__ptr_8h_source.html @@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d74/classshaka_1_1UdpOptions-members.html b/docs/d6/d74/classshaka_1_1UdpOptions-members.html index 060356d481..aaec5871e8 100644 --- a/docs/d6/d74/classshaka_1_1UdpOptions-members.html +++ b/docs/d6/d74/classshaka_1_1UdpOptions-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d77/dash__iop__mpd__notifier_8h_source.html b/docs/d6/d77/dash__iop__mpd__notifier_8h_source.html index 97447b3230..bb8936bc89 100644 --- a/docs/d6/d77/dash__iop__mpd__notifier_8h_source.html +++ b/docs/d6/d77/dash__iop__mpd__notifier_8h_source.html @@ -226,7 +226,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d79/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox.html b/docs/d6/d79/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox.html index 7e7894e66f..360ebba323 100644 --- a/docs/d6/d79/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox.html +++ b/docs/d6/d79/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d6/d7b/webm__tracks__parser_8h_source.html b/docs/d6/d7b/webm__tracks__parser_8h_source.html index b59c532cae..47d7c894e6 100644 --- a/docs/d6/d7b/webm__tracks__parser_8h_source.html +++ b/docs/d6/d7b/webm__tracks__parser_8h_source.html @@ -205,7 +205,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d7c/structshaka_1_1media_1_1mp4_1_1AC3Specific-members.html b/docs/d6/d7c/structshaka_1_1media_1_1mp4_1_1AC3Specific-members.html index df4f87c05f..c3acca5f84 100644 --- a/docs/d6/d7c/structshaka_1_1media_1_1mp4_1_1AC3Specific-members.html +++ b/docs/d6/d7c/structshaka_1_1media_1_1mp4_1_1AC3Specific-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d86/bandwidth__estimator_8cc_source.html b/docs/d6/d86/bandwidth__estimator_8cc_source.html index 5a91f4cb9b..56859d4978 100644 --- a/docs/d6/d86/bandwidth__estimator_8cc_source.html +++ b/docs/d6/d86/bandwidth__estimator_8cc_source.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d8a/classshaka_1_1media_1_1FakeMediaHandler-members.html b/docs/d6/d8a/classshaka_1_1media_1_1FakeMediaHandler-members.html index bb9e721b6c..0e6bfd9810 100644 --- a/docs/d6/d8a/classshaka_1_1media_1_1FakeMediaHandler-members.html +++ b/docs/d6/d8a/classshaka_1_1media_1_1FakeMediaHandler-members.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d8a/vp9__parser_8cc_source.html b/docs/d6/d8a/vp9__parser_8cc_source.html index 9ce8e53c29..2864a1807b 100644 --- a/docs/d6/d8a/vp9__parser_8cc_source.html +++ b/docs/d6/d8a/vp9__parser_8cc_source.html @@ -697,7 +697,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d8f/classshaka_1_1xml_1_1RepresentationBaseXmlNode-members.html b/docs/d6/d8f/classshaka_1_1xml_1_1RepresentationBaseXmlNode-members.html index 7700cbaca2..acd34bbba9 100644 --- a/docs/d6/d8f/classshaka_1_1xml_1_1RepresentationBaseXmlNode-members.html +++ b/docs/d6/d8f/classshaka_1_1xml_1_1RepresentationBaseXmlNode-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d9b/h264__parser_8h_source.html b/docs/d6/d9b/h264__parser_8h_source.html index 1dbc53e96f..8dc87208a5 100644 --- a/docs/d6/d9b/h264__parser_8h_source.html +++ b/docs/d6/d9b/h264__parser_8h_source.html @@ -443,7 +443,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d9f/hls__flags_8cc_source.html b/docs/d6/d9f/hls__flags_8cc_source.html index 67f731e8ac..b80ede8fd6 100644 --- a/docs/d6/d9f/hls__flags_8cc_source.html +++ b/docs/d6/d9f/hls__flags_8cc_source.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/da0/ts__section__pat_8h_source.html b/docs/d6/da0/ts__section__pat_8h_source.html index 59958a66b9..4303efe472 100644 --- a/docs/d6/da0/ts__section__pat_8h_source.html +++ b/docs/d6/da0/ts__section__pat_8h_source.html @@ -135,7 +135,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/da3/mpd__builder_8h_source.html b/docs/d6/da3/mpd__builder_8h_source.html index ad41af6f01..904c12ea36 100644 --- a/docs/d6/da3/mpd__builder_8h_source.html +++ b/docs/d6/da3/mpd__builder_8h_source.html @@ -517,7 +517,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/da4/classshaka_1_1media_1_1AVCDecoderConfigurationRecord-members.html b/docs/d6/da4/classshaka_1_1media_1_1AVCDecoderConfigurationRecord-members.html index d8a29acf81..14efe40c88 100644 --- a/docs/d6/da4/classshaka_1_1media_1_1AVCDecoderConfigurationRecord-members.html +++ b/docs/d6/da4/classshaka_1_1media_1_1AVCDecoderConfigurationRecord-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/da6/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo-members.html b/docs/d6/da6/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo-members.html index 64433c3c47..656386365b 100644 --- a/docs/d6/da6/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo-members.html +++ b/docs/d6/da6/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/da9/classshaka_1_1media_1_1BitReader.html b/docs/d6/da9/classshaka_1_1media_1_1BitReader.html index 93572310d4..a39090f1bf 100644 --- a/docs/d6/da9/classshaka_1_1media_1_1BitReader.html +++ b/docs/d6/da9/classshaka_1_1media_1_1BitReader.html @@ -365,7 +365,7 @@ template<typename T > diff --git a/docs/d6/daa/structshaka_1_1media_1_1mp4_1_1VTTCueBox.html b/docs/d6/daa/structshaka_1_1media_1_1mp4_1_1VTTCueBox.html index fc0634d707..a6f1ef5643 100644 --- a/docs/d6/daa/structshaka_1_1media_1_1mp4_1_1VTTCueBox.html +++ b/docs/d6/daa/structshaka_1_1media_1_1mp4_1_1VTTCueBox.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html b/docs/d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html index d1a7818604..0ccea04f91 100644 --- a/docs/d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html +++ b/docs/d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html @@ -498,7 +498,7 @@ void set_encryption_config diff --git a/docs/d6/db1/structshaka_1_1media_1_1VideoStreamInfoParameters-members.html b/docs/d6/db1/structshaka_1_1media_1_1VideoStreamInfoParameters-members.html index 12a422efb0..8f51e29553 100644 --- a/docs/d6/db1/structshaka_1_1media_1_1VideoStreamInfoParameters-members.html +++ b/docs/d6/db1/structshaka_1_1media_1_1VideoStreamInfoParameters-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dbe/mp4__output__params_8h_source.html b/docs/d6/dbe/mp4__output__params_8h_source.html index f1a997d38f..4e72d42666 100644 --- a/docs/d6/dbe/mp4__output__params_8h_source.html +++ b/docs/d6/dbe/mp4__output__params_8h_source.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dc0/classshaka_1_1hls_1_1HlsEntry-members.html b/docs/d6/dc0/classshaka_1_1hls_1_1HlsEntry-members.html index 5c993081e3..f788e74976 100644 --- a/docs/d6/dc0/classshaka_1_1hls_1_1HlsEntry-members.html +++ b/docs/d6/dc0/classshaka_1_1hls_1_1HlsEntry-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dc6/structshaka_1_1media_1_1mp2t_1_1EsParserH26x_1_1VideoSliceInfo-members.html b/docs/d6/dc6/structshaka_1_1media_1_1mp2t_1_1EsParserH26x_1_1VideoSliceInfo-members.html index 4b7e032fce..b225e13f9f 100644 --- a/docs/d6/dc6/structshaka_1_1media_1_1mp2t_1_1EsParserH26x_1_1VideoSliceInfo-members.html +++ b/docs/d6/dc6/structshaka_1_1media_1_1mp2t_1_1EsParserH26x_1_1VideoSliceInfo-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dc7/classshaka_1_1media_1_1mp2t_1_1EsParserH26x-members.html b/docs/d6/dc7/classshaka_1_1media_1_1mp2t_1_1EsParserH26x-members.html index 8d085683ae..2be79f3c15 100644 --- a/docs/d6/dc7/classshaka_1_1media_1_1mp2t_1_1EsParserH26x-members.html +++ b/docs/d6/dc7/classshaka_1_1media_1_1mp2t_1_1EsParserH26x-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dc8/mkv__writer_8cc_source.html b/docs/d6/dc8/mkv__writer_8cc_source.html index 46c40008a8..1496d67247 100644 --- a/docs/d6/dc8/mkv__writer_8cc_source.html +++ b/docs/d6/dc8/mkv__writer_8cc_source.html @@ -198,7 +198,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dcb/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry.html b/docs/d6/dcb/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry.html index 8b7566b195..f45f15995c 100644 --- a/docs/d6/dcb/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry.html +++ b/docs/d6/dcb/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry.html @@ -250,7 +250,7 @@ std::vector< diff --git a/docs/d6/dcc/classshaka_1_1media_1_1VP9Parser-members.html b/docs/d6/dcc/classshaka_1_1media_1_1VP9Parser-members.html index 2c6eea1100..641089f500 100644 --- a/docs/d6/dcc/classshaka_1_1media_1_1VP9Parser-members.html +++ b/docs/d6/dcc/classshaka_1_1media_1_1VP9Parser-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dce/structshaka_1_1media_1_1mp4_1_1SegmentReference-members.html b/docs/d6/dce/structshaka_1_1media_1_1mp4_1_1SegmentReference-members.html index 7b38960783..7d7bd46735 100644 --- a/docs/d6/dce/structshaka_1_1media_1_1mp4_1_1SegmentReference-members.html +++ b/docs/d6/dce/structshaka_1_1media_1_1mp4_1_1SegmentReference-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dcf/classshaka_1_1media_1_1mp2t_1_1EsParserAdts.html b/docs/d6/dcf/classshaka_1_1media_1_1mp2t_1_1EsParserAdts.html index 145300cbad..b36d5673a9 100644 --- a/docs/d6/dcf/classshaka_1_1media_1_1mp2t_1_1EsParserAdts.html +++ b/docs/d6/dcf/classshaka_1_1media_1_1mp2t_1_1EsParserAdts.html @@ -148,7 +148,7 @@ const std::shared_ptr
diff --git a/docs/d6/dd0/structshaka_1_1media_1_1H264SEIMessage.html b/docs/d6/dd0/structshaka_1_1media_1_1H264SEIMessage.html index 8a69c1722c..3c01b25844 100644 --- a/docs/d6/dd0/structshaka_1_1media_1_1H264SEIMessage.html +++ b/docs/d6/dd0/structshaka_1_1media_1_1H264SEIMessage.html @@ -127,7 +127,7 @@ union { diff --git a/docs/d6/dd7/structshaka_1_1Mp4OutputParams-members.html b/docs/d6/dd7/structshaka_1_1Mp4OutputParams-members.html index 932755b3d1..8b7084b472 100644 --- a/docs/d6/dd7/structshaka_1_1Mp4OutputParams-members.html +++ b/docs/d6/dd7/structshaka_1_1Mp4OutputParams-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dde/structshaka_1_1media_1_1H265VuiParameters-members.html b/docs/d6/dde/structshaka_1_1media_1_1H265VuiParameters-members.html index 0dcce24edc..d81b1871c1 100644 --- a/docs/d6/dde/structshaka_1_1media_1_1H265VuiParameters-members.html +++ b/docs/d6/dde/structshaka_1_1media_1_1H265VuiParameters-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/de4/structshaka_1_1media_1_1mp4_1_1CueTimeBox-members.html b/docs/d6/de4/structshaka_1_1media_1_1mp4_1_1CueTimeBox-members.html index e5a92c1782..a7bb682a30 100644 --- a/docs/d6/de4/structshaka_1_1media_1_1mp4_1_1CueTimeBox-members.html +++ b/docs/d6/de4/structshaka_1_1media_1_1mp4_1_1CueTimeBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/de7/structshaka_1_1media_1_1VPxFrameInfo-members.html b/docs/d6/de7/structshaka_1_1media_1_1VPxFrameInfo-members.html index db83ffc4e9..aac8931add 100644 --- a/docs/d6/de7/structshaka_1_1media_1_1VPxFrameInfo-members.html +++ b/docs/d6/de7/structshaka_1_1media_1_1VPxFrameInfo-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/de8/local__file_8cc_source.html b/docs/d6/de8/local__file_8cc_source.html index 05974f1c16..cbfbe7db66 100644 --- a/docs/d6/de8/local__file_8cc_source.html +++ b/docs/d6/de8/local__file_8cc_source.html @@ -194,23 +194,36 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
105 LocalFile::~LocalFile() {}
106 
-
108  internal_file_ = base::OpenFile(base::FilePath::FromUTF8Unsafe(file_name()),
-
109  file_mode_.c_str());
-
110  return (internal_file_ != NULL);
-
111 }
-
112 
-
113 bool LocalFile::Delete(const char* file_name) {
-
114  return base::DeleteFile(base::FilePath::FromUTF8Unsafe(file_name), false);
-
115 }
-
116 
-
117 } // namespace shaka
+
108  base::FilePath file_path(base::FilePath::FromUTF8Unsafe(file_name()));
+
109 
+
110  // Create upper level directories for write mode.
+
111  if (file_mode_.find("w") != std::string::npos) {
+
112  base::File::Error error;
+
113  // The function returns success if the directories already exist.
+
114  if (!base::CreateDirectoryAndGetError(file_path.DirName(), &error)) {
+
115  LOG(ERROR) << "Failed to create directories for file '"
+
116  << file_path.AsUTF8Unsafe()
+
117  << "'. Error: " << base::File::ErrorToString(error);
+
118  return false;
+
119  }
+
120  }
+
121 
+
122  internal_file_ = base::OpenFile(file_path, file_mode_.c_str());
+
123  return (internal_file_ != NULL);
+
124 }
+
125 
+
126 bool LocalFile::Delete(const char* file_name) {
+
127  return base::DeleteFile(base::FilePath::FromUTF8Unsafe(file_name), false);
+
128 }
+
129 
+
130 } // namespace shaka
const std::string & file_name() const
Definition: file.h:94
bool Close() override
Definition: local_file.cc:27
bool Seek(uint64_t position) override
Definition: local_file.cc:84
bool Flush() override
Definition: local_file.cc:79
Define an abstract file interface.
Definition: file.h:26
int64_t Size() override
Definition: local_file.cc:61
-
static bool Delete(const char *file_name)
Definition: local_file.cc:113
+
static bool Delete(const char *file_name)
Definition: local_file.cc:126
int64_t Read(void *buffer, uint64_t length) override
Definition: local_file.cc:37
bool Open() override
Internal open. Should not be used directly.
Definition: local_file.cc:107
int64_t Write(const void *buffer, uint64_t length) override
Definition: local_file.cc:49
@@ -219,7 +232,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/de8/network__util_8h_source.html b/docs/d6/de8/network__util_8h_source.html index c514e49d7a..886805fcac 100644 --- a/docs/d6/de8/network__util_8h_source.html +++ b/docs/d6/de8/network__util_8h_source.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/de9/ts__segmenter_8cc_source.html b/docs/d6/de9/ts__segmenter_8cc_source.html index b956f19cbb..2eb7cafd52 100644 --- a/docs/d6/de9/ts__segmenter_8cc_source.html +++ b/docs/d6/de9/ts__segmenter_8cc_source.html @@ -243,7 +243,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/ded/ts__packet_8h_source.html b/docs/d6/ded/ts__packet_8h_source.html index 9605f99f8a..07b68d4bc0 100644 --- a/docs/d6/ded/ts__packet_8h_source.html +++ b/docs/d6/ded/ts__packet_8h_source.html @@ -169,7 +169,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/def/sync__sample__iterator_8cc_source.html b/docs/d6/def/sync__sample__iterator_8cc_source.html index 62cb418d5a..89df4f06d9 100644 --- a/docs/d6/def/sync__sample__iterator_8cc_source.html +++ b/docs/d6/def/sync__sample__iterator_8cc_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/df8/structshaka_1_1StreamDescriptor-members.html b/docs/d6/df8/structshaka_1_1StreamDescriptor-members.html index c1b42acd62..eeb5470795 100644 --- a/docs/d6/df8/structshaka_1_1StreamDescriptor-members.html +++ b/docs/d6/df8/structshaka_1_1StreamDescriptor-members.html @@ -94,21 +94,22 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');

This is the complete list of members for shaka::StreamDescriptor, including all inherited members.

- - - - - - - - - - - + + + + + + + + + + + +
bandwidthshaka::StreamDescriptor
hls_group_idshaka::StreamDescriptor
hls_nameshaka::StreamDescriptor
hls_playlist_nameshaka::StreamDescriptor
inputshaka::StreamDescriptor
languageshaka::StreamDescriptor
outputshaka::StreamDescriptor
output_formatshaka::StreamDescriptor
segment_templateshaka::StreamDescriptor
skip_encryptionshaka::StreamDescriptor
stream_selectorshaka::StreamDescriptor
trick_play_factorshaka::StreamDescriptor
drm_labelshaka::StreamDescriptor
hls_group_idshaka::StreamDescriptor
hls_nameshaka::StreamDescriptor
hls_playlist_nameshaka::StreamDescriptor
inputshaka::StreamDescriptor
languageshaka::StreamDescriptor
outputshaka::StreamDescriptor
output_formatshaka::StreamDescriptor
segment_templateshaka::StreamDescriptor
skip_encryptionshaka::StreamDescriptor
stream_selectorshaka::StreamDescriptor
trick_play_factorshaka::StreamDescriptor
diff --git a/docs/d6/dff/classshaka_1_1media_1_1Nalu.html b/docs/d6/dff/classshaka_1_1media_1_1Nalu.html index 8bbd9e57d6..bb73c92eaa 100644 --- a/docs/d6/dff/classshaka_1_1media_1_1Nalu.html +++ b/docs/d6/dff/classshaka_1_1media_1_1Nalu.html @@ -247,7 +247,7 @@ bool can_start_access_unit diff --git a/docs/d7/d01/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription.html b/docs/d7/d01/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription.html index 3870a9477a..3ec68397b6 100644 --- a/docs/d7/d01/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription.html +++ b/docs/d7/d01/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription.html @@ -194,7 +194,7 @@ Additional Inherited Members diff --git a/docs/d7/d07/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader.html b/docs/d7/d07/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader.html index d8223abb20..25652e7a7b 100644 --- a/docs/d7/d07/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader.html +++ b/docs/d7/d07/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d7/d0b/muxer__listener__test__helper_8h_source.html b/docs/d7/d0b/muxer__listener__test__helper_8h_source.html index 1f2bda2da7..d393844e36 100644 --- a/docs/d7/d0b/muxer__listener__test__helper_8h_source.html +++ b/docs/d7/d0b/muxer__listener__test__helper_8h_source.html @@ -201,7 +201,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d12/media__parser_8h_source.html b/docs/d7/d12/media__parser_8h_source.html index c02e056dd5..18173ec2b8 100644 --- a/docs/d7/d12/media__parser_8h_source.html +++ b/docs/d7/d12/media__parser_8h_source.html @@ -149,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d15/mpd__notifier_8h_source.html b/docs/d7/d15/mpd__notifier_8h_source.html index ad187baf9b..280cd81216 100644 --- a/docs/d7/d15/mpd__notifier_8h_source.html +++ b/docs/d7/d15/mpd__notifier_8h_source.html @@ -169,7 +169,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d16/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry-members.html b/docs/d7/d16/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry-members.html index 6f368a2c25..67ed6f8c5b 100644 --- a/docs/d7/d16/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry-members.html +++ b/docs/d7/d16/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d22/libcrypto__threading_8h_source.html b/docs/d7/d22/libcrypto__threading_8h_source.html index 55c795b42b..9421f54989 100644 --- a/docs/d7/d22/libcrypto__threading_8h_source.html +++ b/docs/d7/d22/libcrypto__threading_8h_source.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d26/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator.html b/docs/d7/d26/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator.html index 70ea17168a..ae89f19a8b 100644 --- a/docs/d7/d26/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator.html +++ b/docs/d7/d26/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator.html @@ -177,7 +177,7 @@ Public Member Functions diff --git a/docs/d7/d29/structshaka_1_1media_1_1H265Sps-members.html b/docs/d7/d29/structshaka_1_1media_1_1H265Sps-members.html index a27c6a5d31..9b6534a495 100644 --- a/docs/d7/d29/structshaka_1_1media_1_1H265Sps-members.html +++ b/docs/d7/d29/structshaka_1_1media_1_1H265Sps-members.html @@ -146,7 +146,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d29/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html b/docs/d7/d29/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html index 4f01e4a306..c22652c8d7 100644 --- a/docs/d7/d29/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html +++ b/docs/d7/d29/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d34/structshaka_1_1media_1_1EncryptionConfig.html b/docs/d7/d34/structshaka_1_1media_1_1EncryptionConfig.html index 304df45d76..77f8d298f4 100644 --- a/docs/d7/d34/structshaka_1_1media_1_1EncryptionConfig.html +++ b/docs/d7/d34/structshaka_1_1media_1_1EncryptionConfig.html @@ -128,7 +128,7 @@ std::vector
diff --git a/docs/d7/d36/classshaka_1_1media_1_1ContentEncoding-members.html b/docs/d7/d36/classshaka_1_1media_1_1ContentEncoding-members.html index 1184daee1b..d854967b56 100644 --- a/docs/d7/d36/classshaka_1_1media_1_1ContentEncoding-members.html +++ b/docs/d7/d36/classshaka_1_1media_1_1ContentEncoding-members.html @@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d42/protection__system__specific__info_8cc_source.html b/docs/d7/d42/protection__system__specific__info_8cc_source.html index 3f40f8bfc6..227e31a80a 100644 --- a/docs/d7/d42/protection__system__specific__info_8cc_source.html +++ b/docs/d7/d42/protection__system__specific__info_8cc_source.html @@ -219,7 +219,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d42/structshaka_1_1media_1_1mp4_1_1SampleSize.html b/docs/d7/d42/structshaka_1_1media_1_1mp4_1_1SampleSize.html index 2f0df7d82d..aadd72cd76 100644 --- a/docs/d7/d42/structshaka_1_1media_1_1mp4_1_1SampleSize.html +++ b/docs/d7/d42/structshaka_1_1media_1_1mp4_1_1SampleSize.html @@ -188,7 +188,7 @@ Additional Inherited Members diff --git a/docs/d7/d44/structshaka_1_1media_1_1mp4_1_1SampleEncryption-members.html b/docs/d7/d44/structshaka_1_1media_1_1mp4_1_1SampleEncryption-members.html index a0ea4854cb..7dd52da767 100644 --- a/docs/d7/d44/structshaka_1_1media_1_1mp4_1_1SampleEncryption-members.html +++ b/docs/d7/d44/structshaka_1_1media_1_1mp4_1_1SampleEncryption-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d46/classshaka_1_1media_1_1WebMListParser-members.html b/docs/d7/d46/classshaka_1_1media_1_1WebMListParser-members.html index eb394511fd..424f0588f5 100644 --- a/docs/d7/d46/classshaka_1_1media_1_1WebMListParser-members.html +++ b/docs/d7/d46/classshaka_1_1media_1_1WebMListParser-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d54/classshaka_1_1media_1_1H26xByteToUnitStreamConverter-members.html b/docs/d7/d54/classshaka_1_1media_1_1H26xByteToUnitStreamConverter-members.html index 6df5cf96ec..c359f41b02 100644 --- a/docs/d7/d54/classshaka_1_1media_1_1H26xByteToUnitStreamConverter-members.html +++ b/docs/d7/d54/classshaka_1_1media_1_1H26xByteToUnitStreamConverter-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d58/structshaka_1_1media_1_1PeriodInfo.html b/docs/d7/d58/structshaka_1_1media_1_1PeriodInfo.html index 20d7a1fecc..7e315e2bf9 100644 --- a/docs/d7/d58/structshaka_1_1media_1_1PeriodInfo.html +++ b/docs/d7/d58/structshaka_1_1media_1_1PeriodInfo.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d59/classshaka_1_1media_1_1DecryptorSource.html b/docs/d7/d59/classshaka_1_1media_1_1DecryptorSource.html index 93728b3f04..c90001f497 100644 --- a/docs/d7/d59/classshaka_1_1media_1_1DecryptorSource.html +++ b/docs/d7/d59/classshaka_1_1media_1_1DecryptorSource.html @@ -101,25 +101,109 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - + - - + +

Public Member Functions

DecryptorSource (KeySource *key_source)
 DecryptorSource (KeySource *key_source)
 
-bool DecryptSampleBuffer (const DecryptConfig *decrypt_config, uint8_t *buffer, size_t buffer_size)
 
bool DecryptSampleBuffer (const DecryptConfig *decrypt_config, const uint8_t *encrypted_buffer, size_t buffer_size, uint8_t *decrypted_buffer)
 

Detailed Description

DecryptorSource wraps KeySource and is responsible for decryptor management.

Definition at line 22 of file decryptor_source.h.

-

The documentation for this class was generated from the following files:
    +

    Constructor & Destructor Documentation

    + +
    +
    + + + + + +
    + + + + + + + + +
    shaka::media::DecryptorSource::DecryptorSource (KeySourcekey_source)
    +
    +explicit
    +
    +

    Constructs a DecryptorSource object.

    +
    Parameters
    + + +
    key_sourcepoints to the key source that contains the keys.
    +
    +
    + +

    Definition at line 28 of file decryptor_source.cc.

    + +
    +
    +

    Member Function Documentation

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    bool shaka::media::DecryptorSource::DecryptSampleBuffer (const DecryptConfigdecrypt_config,
    const uint8_t * encrypted_buffer,
    size_t buffer_size,
    uint8_t * decrypted_buffer 
    )
    +
    +

    Decrypt encrypted buffer.

    +
    Parameters
    + + + + + +
    decrypt_configcontains decrypt configuration, e.g. protection scheme, subsample information etc.
    encrypted_bufferpoints to the encrypted buffer that is to be decrypted. It should not overlap with decrypted_buffer.
    buffer_sizeis the size of encrypted buffer and decrypted buffer.
    decrypted_bufferpoints to the decrypted buffer. It should not overlap with encrypted_buffer.
    +
    +
    +
    Returns
    true if success, false otherwise.
    + +

    Definition at line 34 of file decryptor_source.cc.

    + +
    +
    +
    The documentation for this class was generated from the following files: diff --git a/docs/d7/d5c/classshaka_1_1hls_1_1SimpleHlsNotifier.html b/docs/d7/d5c/classshaka_1_1hls_1_1SimpleHlsNotifier.html index 8322693a31..71a0a986be 100644 --- a/docs/d7/d5c/classshaka_1_1hls_1_1SimpleHlsNotifier.html +++ b/docs/d7/d5c/classshaka_1_1hls_1_1SimpleHlsNotifier.html @@ -225,7 +225,7 @@ class shaka::hls::HlsNotifier.

    -

    Definition at line 412 of file simple_hls_notifier.cc.

    +

    Definition at line 425 of file simple_hls_notifier.cc.

    @@ -320,7 +320,7 @@ class shaka::hls::HlsNotifier.

    -

    Definition at line 355 of file simple_hls_notifier.cc.

    +

    Definition at line 368 of file simple_hls_notifier.cc.

    @@ -393,7 +393,7 @@ class shaka::hls::HlsNotifier.

    -

    Definition at line 306 of file simple_hls_notifier.cc.

    +

    Definition at line 319 of file simple_hls_notifier.cc.

    @@ -471,7 +471,7 @@ class  diff --git a/docs/d7/d6c/structshaka_1_1HlsParams-members.html b/docs/d7/d6c/structshaka_1_1HlsParams-members.html index 6495f9a0af..868bf6fc27 100644 --- a/docs/d7/d6c/structshaka_1_1HlsParams-members.html +++ b/docs/d7/d6c/structshaka_1_1HlsParams-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d6d/classshaka_1_1media_1_1MediaSample.html b/docs/d7/d6d/classshaka_1_1media_1_1MediaSample.html index 067b88e067..c7e309b4bf 100644 --- a/docs/d7/d6d/classshaka_1_1media_1_1MediaSample.html +++ b/docs/d7/d6d/classshaka_1_1media_1_1MediaSample.html @@ -89,6 +89,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    shaka::media::MediaSample Class Reference
    @@ -102,9 +103,16 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - - + + + + + + + + + @@ -132,9 +140,6 @@ bool  - - @@ -147,12 +152,6 @@ size_t  - - - - @@ -171,8 +170,6 @@ const std::string &  - -

    Public Member Functions

    MediaSample (const uint8_t *data, size_t size, const uint8_t *side_data, size_t side_data_size, bool is_key_frame)
     
    +std::shared_ptr< MediaSampleClone () const
     Clone the object and return a new MediaSample.
     
    void TransferData (std::shared_ptr< uint8_t > data, size_t data_size)
     
    void SetData (const uint8_t *data, size_t data_size)
     
    std::string ToString () const
     
    int64_t dts () const
     
    is_encrypted () c
    const uint8_t * data () const
     
    -uint8_t * writable_data ()
     
    size_t data_size () const
     
    side_data_size
    const DecryptConfigdecrypt_config () const
     
    -void set_data (const uint8_t *data, const size_t data_size)
     
    -void resize_data (const size_t data_size)
     
    void set_is_key_frame (bool value)
     
    co
    void set_config_id (const std::string &config_id)
     
    std::string ToString () const
     
    @@ -182,9 +179,6 @@ Static Public Member Functions - - @@ -196,6 +190,12 @@ static std::shared_ptr
    +

    Static Public Member Functions

    static std::shared_ptr
    < MediaSample
    CopyFrom (const uint8_t *data, size_t size, const uint8_t *side_data, size_t side_data_size, bool is_key_frame)
     
    static std::shared_ptr
    -< MediaSample
    CopyFrom (const MediaSample &media_sample)
     
    static std::shared_ptr
    < MediaSample
    FromMetadata (const uint8_t *metadata, size_t metadata_size)
     
    static std::shared_ptr
    < MediaSample
    CreateEOSBuffer ()
     
    + + +

    +Protected Member Functions

    MediaSample (const uint8_t *data, size_t data_size, const uint8_t *side_data, size_t side_data_size, bool is_key_frame)
     

    Detailed Description

    Class to hold a media sample.

    @@ -249,7 +249,7 @@ static std::shared_ptr
    -

    Definition at line 45 of file media_sample.cc.

    +

    Definition at line 42 of file media_sample.cc.

    @@ -314,40 +314,7 @@ static std::shared_ptr
    -

    Definition at line 55 of file media_sample.cc.

    - - - - -
    -
    - - - - - -
    - - - - - - - - -
    std::shared_ptr< MediaSample > shaka::media::MediaSample::CopyFrom (const MediaSamplemedia_sample)
    -
    -static
    -
    -

    Make a copy of MediaSample.

    -
    Parameters
    - - -
    media_sampleis the source MediaSample to copy from.
    -
    -
    - -

    Definition at line 67 of file media_sample.cc.

    +

    Definition at line 52 of file media_sample.cc.

    @@ -373,7 +340,7 @@ static std::shared_ptr

    Create a MediaSample indicating we've reached end of stream. Calling any method other than end_of_stream() on the resulting buffer is disallowed.

    -

    Definition at line 105 of file media_sample.cc.

    +

    Definition at line 76 of file media_sample.cc.

    @@ -417,7 +384,43 @@ static std::shared_ptr
    -

    Definition at line 93 of file media_sample.cc.

    +

    Definition at line 64 of file media_sample.cc.

    + + + + +
    +
    + + + + + + + + + + + + + + + + + + +
    void shaka::media::MediaSample::SetData (const uint8_t * data,
    size_t data_size 
    )
    +
    +

    Set the data in this media sample. Note that this method involves data copying.

    +
    Parameters
    + + + +
    datapoints to the data to be copied.
    data_sizeis the size of the data to be copied.
    +
    +
    + +

    Definition at line 109 of file media_sample.cc.

    @@ -435,7 +438,43 @@ static std::shared_ptr
    Returns
    a human-readable string describing |*this|.
    -

    Definition at line 109 of file media_sample.cc.

    +

    Definition at line 116 of file media_sample.cc.

    + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + +
    void shaka::media::MediaSample::TransferData (std::shared_ptr< uint8_t > data,
    size_t data_size 
    )
    +
    +

    Transfer data to this media sample. No data copying is involved.

    +
    Parameters
    + + + +
    datapoints to the data to be transferred.
    data_sizeis the size of the data to be transferred.
    +
    +
    + +

    Definition at line 103 of file media_sample.cc.

    @@ -446,7 +485,7 @@ static std::shared_ptr
    diff --git a/docs/d7/d6d/structshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes.html b/docs/d7/d6d/structshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes.html index ff325b0dcb..4151a693e9 100644 --- a/docs/d7/d6d/structshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes.html +++ b/docs/d7/d6d/structshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes.html @@ -127,14 +127,14 @@ union

    Detailed Description

    Encrypted stream information that is used to determine stream label.

    -

    Definition at line 145 of file crypto_params.h.

    +

    Definition at line 147 of file crypto_params.h.


    The documentation for this struct was generated from the following file: diff --git a/docs/d7/d75/callback__file_8h_source.html b/docs/d7/d75/callback__file_8h_source.html index 116bbc8de1..eb1ace9ce0 100644 --- a/docs/d7/d75/callback__file_8h_source.html +++ b/docs/d7/d75/callback__file_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d75/structshaka_1_1media_1_1mp4_1_1MediaHeader-members.html b/docs/d7/d75/structshaka_1_1media_1_1mp4_1_1MediaHeader-members.html index f782cf6abd..92baf0c329 100644 --- a/docs/d7/d75/structshaka_1_1media_1_1mp4_1_1MediaHeader-members.html +++ b/docs/d7/d75/structshaka_1_1media_1_1mp4_1_1MediaHeader-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d78/structshaka_1_1media_1_1H264SEIMessage-members.html b/docs/d7/d78/structshaka_1_1media_1_1H264SEIMessage-members.html index fda093e8d2..7a57250a7f 100644 --- a/docs/d7/d78/structshaka_1_1media_1_1H264SEIMessage-members.html +++ b/docs/d7/d78/structshaka_1_1media_1_1H264SEIMessage-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d79/chunking__handler_8h_source.html b/docs/d7/d79/chunking__handler_8h_source.html index 0aa61c4a7a..a293657bba 100644 --- a/docs/d7/d79/chunking__handler_8h_source.html +++ b/docs/d7/d79/chunking__handler_8h_source.html @@ -176,7 +176,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d7c/vlog__flags_8h_source.html b/docs/d7/d7c/vlog__flags_8h_source.html index 9019070a88..c5150589c2 100644 --- a/docs/d7/d7c/vlog__flags_8h_source.html +++ b/docs/d7/d7c/vlog__flags_8h_source.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d87/video__stream__info_8h_source.html b/docs/d7/d87/video__stream__info_8h_source.html index a9c40d44da..9b8cd279da 100644 --- a/docs/d7/d87/video__stream__info_8h_source.html +++ b/docs/d7/d87/video__stream__info_8h_source.html @@ -212,7 +212,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d9c/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo.html b/docs/d7/d9c/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo.html index a45c6e0cca..0b47113c96 100644 --- a/docs/d7/d9c/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo.html +++ b/docs/d7/d9c/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo.html @@ -112,7 +112,7 @@ int delta_poc_msb_cycle_lt diff --git a/docs/d7/d9d/progress__listener_8h_source.html b/docs/d7/d9d/progress__listener_8h_source.html index ccb8fc0631..aa948d2dfc 100644 --- a/docs/d7/d9d/progress__listener_8h_source.html +++ b/docs/d7/d9d/progress__listener_8h_source.html @@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/da4/track__run__iterator_8h_source.html b/docs/d7/da4/track__run__iterator_8h_source.html index af7a02bcb3..fc28fca3a4 100644 --- a/docs/d7/da4/track__run__iterator_8h_source.html +++ b/docs/d7/da4/track__run__iterator_8h_source.html @@ -195,7 +195,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dad/simple__hls__notifier_8cc_source.html b/docs/d7/dad/simple__hls__notifier_8cc_source.html index 90b1941794..6700e4c04e 100644 --- a/docs/d7/dad/simple__hls__notifier_8cc_source.html +++ b/docs/d7/dad/simple__hls__notifier_8cc_source.html @@ -105,8 +105,8 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    16 #include "packager/base/strings/string_number_conversions.h"
    17 #include "packager/base/strings/stringprintf.h"
    18 #include "packager/hls/base/media_playlist.h"
    -
    19 #include "packager/media/base/fixed_key_source.h"
    -
    20 #include "packager/media/base/protection_system_specific_info.h"
    +
    19 #include "packager/media/base/protection_system_specific_info.h"
    +
    20 #include "packager/media/base/raw_key_source.h"
    21 #include "packager/media/base/widevine_key_source.h"
    22 #include "packager/media/base/widevine_pssh_data.pb.h"
    23 
    @@ -364,161 +364,174 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    275  std::unique_ptr<MediaPlaylist> media_playlist =
    276  media_playlist_factory_->Create(playlist_type(), time_shift_buffer_depth_,
    277  playlist_name, name, group_id);
    -
    278  if (!media_playlist->SetMediaInfo(media_info)) {
    -
    279  LOG(ERROR) << "Failed to set media info for playlist " << playlist_name;
    -
    280  return false;
    -
    281  }
    -
    282 
    -
    283  MediaPlaylist::EncryptionMethod encryption_method =
    -
    284  MediaPlaylist::EncryptionMethod::kNone;
    -
    285  if (media_info.protected_content().has_protection_scheme()) {
    -
    286  const std::string& protection_scheme =
    -
    287  media_info.protected_content().protection_scheme();
    -
    288  base::Optional<MediaPlaylist::EncryptionMethod> enc_method =
    -
    289  StringToEncryptionMethod(protection_scheme);
    -
    290  if (!enc_method) {
    -
    291  LOG(ERROR) << "Failed to recognize protection scheme "
    -
    292  << protection_scheme;
    -
    293  return false;
    -
    294  }
    -
    295  encryption_method = enc_method.value();
    -
    296  }
    -
    297 
    -
    298  *stream_id = sequence_number_.GetNext();
    -
    299  base::AutoLock auto_lock(lock_);
    -
    300  master_playlist_->AddMediaPlaylist(media_playlist.get());
    -
    301  stream_map_[*stream_id].reset(
    -
    302  new StreamEntry{std::move(media_playlist), encryption_method});
    -
    303  return true;
    -
    304 }
    -
    305 
    -
    306 bool SimpleHlsNotifier::NotifyNewSegment(uint32_t stream_id,
    -
    307  const std::string& segment_name,
    -
    308  uint64_t start_time,
    -
    309  uint64_t duration,
    -
    310  uint64_t start_byte_offset,
    -
    311  uint64_t size) {
    +
    278 
    +
    279  // Update init_segment_name to be relative to playlist path if needed.
    +
    280  MediaInfo media_info_copy = media_info;
    +
    281  if (media_info_copy.has_init_segment_name()) {
    +
    282  media_info_copy.set_init_segment_name(
    +
    283  GenerateSegmentUrl(media_info_copy.init_segment_name(), prefix_,
    +
    284  output_dir_, media_playlist->file_name()));
    +
    285  }
    +
    286  if (media_info_copy.has_media_file_name()) {
    +
    287  media_info_copy.set_media_file_name(
    +
    288  GenerateSegmentUrl(media_info_copy.media_file_name(), prefix_,
    +
    289  output_dir_, media_playlist->file_name()));
    +
    290  }
    +
    291  if (!media_playlist->SetMediaInfo(media_info_copy)) {
    +
    292  LOG(ERROR) << "Failed to set media info for playlist " << playlist_name;
    +
    293  return false;
    +
    294  }
    +
    295 
    +
    296  MediaPlaylist::EncryptionMethod encryption_method =
    +
    297  MediaPlaylist::EncryptionMethod::kNone;
    +
    298  if (media_info.protected_content().has_protection_scheme()) {
    +
    299  const std::string& protection_scheme =
    +
    300  media_info.protected_content().protection_scheme();
    +
    301  base::Optional<MediaPlaylist::EncryptionMethod> enc_method =
    +
    302  StringToEncryptionMethod(protection_scheme);
    +
    303  if (!enc_method) {
    +
    304  LOG(ERROR) << "Failed to recognize protection scheme "
    +
    305  << protection_scheme;
    +
    306  return false;
    +
    307  }
    +
    308  encryption_method = enc_method.value();
    +
    309  }
    +
    310 
    +
    311  *stream_id = sequence_number_.GetNext();
    312  base::AutoLock auto_lock(lock_);
    -
    313  auto stream_iterator = stream_map_.find(stream_id);
    -
    314  if (stream_iterator == stream_map_.end()) {
    -
    315  LOG(ERROR) << "Cannot find stream with ID: " << stream_id;
    -
    316  return false;
    -
    317  }
    -
    318  auto& media_playlist = stream_iterator->second->media_playlist;
    -
    319  const std::string& segment_url = GenerateSegmentUrl(
    -
    320  segment_name, prefix_, output_dir_, media_playlist->file_name());
    -
    321  media_playlist->AddSegment(segment_url, start_time, duration,
    -
    322  start_byte_offset, size);
    -
    323 
    -
    324  // Update target duration.
    -
    325  uint32_t longest_segment_duration =
    -
    326  static_cast<uint32_t>(ceil(media_playlist->GetLongestSegmentDuration()));
    -
    327  bool target_duration_updated = false;
    -
    328  if (longest_segment_duration > target_duration_) {
    -
    329  target_duration_ = longest_segment_duration;
    -
    330  target_duration_updated = true;
    -
    331  }
    -
    332 
    -
    333  // Update the playlists when there is new segments in live mode.
    -
    334  if (playlist_type() == HlsPlaylistType::kLive ||
    -
    335  playlist_type() == HlsPlaylistType::kEvent) {
    -
    336  if (!master_playlist_->WriteMasterPlaylist(prefix_, output_dir_)) {
    -
    337  LOG(ERROR) << "Failed to write master playlist.";
    -
    338  return false;
    -
    339  }
    -
    340  // Update all playlists if target duration is updated.
    -
    341  if (target_duration_updated) {
    -
    342  for (auto& streams : stream_map_) {
    -
    343  MediaPlaylist* playlist = streams.second->media_playlist.get();
    -
    344  playlist->SetTargetDuration(target_duration_);
    -
    345  if (!WriteMediaPlaylist(output_dir_, playlist))
    -
    346  return false;
    -
    347  }
    -
    348  } else {
    -
    349  return WriteMediaPlaylist(output_dir_, media_playlist.get());
    -
    350  }
    -
    351  }
    -
    352  return true;
    -
    353 }
    -
    354 
    - -
    356  uint32_t stream_id,
    -
    357  const std::vector<uint8_t>& key_id,
    -
    358  const std::vector<uint8_t>& system_id,
    -
    359  const std::vector<uint8_t>& iv,
    -
    360  const std::vector<uint8_t>& protection_system_specific_data) {
    -
    361  base::AutoLock auto_lock(lock_);
    -
    362  auto stream_iterator = stream_map_.find(stream_id);
    -
    363  if (stream_iterator == stream_map_.end()) {
    -
    364  LOG(ERROR) << "Cannot find stream with ID: " << stream_id;
    -
    365  return false;
    -
    366  }
    +
    313  master_playlist_->AddMediaPlaylist(media_playlist.get());
    +
    314  stream_map_[*stream_id].reset(
    +
    315  new StreamEntry{std::move(media_playlist), encryption_method});
    +
    316  return true;
    +
    317 }
    +
    318 
    +
    319 bool SimpleHlsNotifier::NotifyNewSegment(uint32_t stream_id,
    +
    320  const std::string& segment_name,
    +
    321  uint64_t start_time,
    +
    322  uint64_t duration,
    +
    323  uint64_t start_byte_offset,
    +
    324  uint64_t size) {
    +
    325  base::AutoLock auto_lock(lock_);
    +
    326  auto stream_iterator = stream_map_.find(stream_id);
    +
    327  if (stream_iterator == stream_map_.end()) {
    +
    328  LOG(ERROR) << "Cannot find stream with ID: " << stream_id;
    +
    329  return false;
    +
    330  }
    +
    331  auto& media_playlist = stream_iterator->second->media_playlist;
    +
    332  const std::string& segment_url = GenerateSegmentUrl(
    +
    333  segment_name, prefix_, output_dir_, media_playlist->file_name());
    +
    334  media_playlist->AddSegment(segment_url, start_time, duration,
    +
    335  start_byte_offset, size);
    +
    336 
    +
    337  // Update target duration.
    +
    338  uint32_t longest_segment_duration =
    +
    339  static_cast<uint32_t>(ceil(media_playlist->GetLongestSegmentDuration()));
    +
    340  bool target_duration_updated = false;
    +
    341  if (longest_segment_duration > target_duration_) {
    +
    342  target_duration_ = longest_segment_duration;
    +
    343  target_duration_updated = true;
    +
    344  }
    +
    345 
    +
    346  // Update the playlists when there is new segments in live mode.
    +
    347  if (playlist_type() == HlsPlaylistType::kLive ||
    +
    348  playlist_type() == HlsPlaylistType::kEvent) {
    +
    349  if (!master_playlist_->WriteMasterPlaylist(prefix_, output_dir_)) {
    +
    350  LOG(ERROR) << "Failed to write master playlist.";
    +
    351  return false;
    +
    352  }
    +
    353  // Update all playlists if target duration is updated.
    +
    354  if (target_duration_updated) {
    +
    355  for (auto& streams : stream_map_) {
    +
    356  MediaPlaylist* playlist = streams.second->media_playlist.get();
    +
    357  playlist->SetTargetDuration(target_duration_);
    +
    358  if (!WriteMediaPlaylist(output_dir_, playlist))
    +
    359  return false;
    +
    360  }
    +
    361  } else {
    +
    362  return WriteMediaPlaylist(output_dir_, media_playlist.get());
    +
    363  }
    +
    364  }
    +
    365  return true;
    +
    366 }
    367 
    -
    368  std::unique_ptr<MediaPlaylist>& media_playlist =
    -
    369  stream_iterator->second->media_playlist;
    -
    370  const MediaPlaylist::EncryptionMethod encryption_method =
    -
    371  stream_iterator->second->encryption_method;
    -
    372  LOG_IF(WARNING, encryption_method == MediaPlaylist::EncryptionMethod::kNone)
    -
    373  << "Got encryption notification but the encryption method is NONE";
    -
    374  if (IsWidevineSystemId(system_id)) {
    -
    375  return HandleWidevineKeyFormats(encryption_method,
    -
    376  key_id, iv, protection_system_specific_data,
    -
    377  media_playlist.get());
    -
    378  }
    -
    379  if (IsCommonSystemId(system_id)) {
    -
    380  // Use key_id as the key_uri. The player needs to have custom logic to
    -
    381  // convert it to the actual key url.
    -
    382  std::string key_uri_data = VectorToString(key_id);
    -
    383  std::string key_uri_data_base64 =
    -
    384  Base64EncodeData(kUriBase64Prefix, key_uri_data);
    -
    385  NotifyEncryptionToMediaPlaylist(encryption_method,
    -
    386  key_uri_data_base64, std::vector<uint8_t>(),
    -
    387  iv, "identity", "", media_playlist.get());
    -
    388  return true;
    -
    389  }
    -
    390 
    -
    391  if (IsFairplaySystemId(system_id)) {
    -
    392  // Use key_id as the key_uri. The player needs to have custom logic to
    -
    393  // convert it to the actual key url.
    -
    394  std::string key_uri_data = VectorToString(key_id);
    -
    395  std::string key_uri_data_base64 =
    -
    396  Base64EncodeData(kUriFairplayPrefix, key_uri_data);
    -
    397 
    -
    398  // Fairplay defines IV to be carried with the key, not the playlist.
    -
    399  NotifyEncryptionToMediaPlaylist(encryption_method,
    -
    400  key_uri_data_base64, std::vector<uint8_t>(),
    -
    401  std::vector<uint8_t>(),
    -
    402  "com.apple.streamingkeydelivery", "1",
    -
    403  media_playlist.get());
    -
    404  return true;
    -
    405  }
    -
    406 
    -
    407  LOG(ERROR) << "Unknown system ID: "
    -
    408  << base::HexEncode(system_id.data(), system_id.size());
    -
    409  return false;
    -
    410 }
    -
    411 
    - -
    413  base::AutoLock auto_lock(lock_);
    -
    414  if (!master_playlist_->WriteMasterPlaylist(prefix_, output_dir_)) {
    -
    415  LOG(ERROR) << "Failed to write master playlist.";
    -
    416  return false;
    -
    417  }
    -
    418  for (auto& streams : stream_map_) {
    -
    419  MediaPlaylist* playlist = streams.second->media_playlist.get();
    -
    420  playlist->SetTargetDuration(target_duration_);
    -
    421  if (!WriteMediaPlaylist(output_dir_, playlist))
    -
    422  return false;
    -
    423  }
    -
    424  return true;
    -
    425 }
    -
    426 
    -
    427 } // namespace hls
    -
    428 } // namespace shaka
    + +
    369  uint32_t stream_id,
    +
    370  const std::vector<uint8_t>& key_id,
    +
    371  const std::vector<uint8_t>& system_id,
    +
    372  const std::vector<uint8_t>& iv,
    +
    373  const std::vector<uint8_t>& protection_system_specific_data) {
    +
    374  base::AutoLock auto_lock(lock_);
    +
    375  auto stream_iterator = stream_map_.find(stream_id);
    +
    376  if (stream_iterator == stream_map_.end()) {
    +
    377  LOG(ERROR) << "Cannot find stream with ID: " << stream_id;
    +
    378  return false;
    +
    379  }
    +
    380 
    +
    381  std::unique_ptr<MediaPlaylist>& media_playlist =
    +
    382  stream_iterator->second->media_playlist;
    +
    383  const MediaPlaylist::EncryptionMethod encryption_method =
    +
    384  stream_iterator->second->encryption_method;
    +
    385  LOG_IF(WARNING, encryption_method == MediaPlaylist::EncryptionMethod::kNone)
    +
    386  << "Got encryption notification but the encryption method is NONE";
    +
    387  if (IsWidevineSystemId(system_id)) {
    +
    388  return HandleWidevineKeyFormats(encryption_method,
    +
    389  key_id, iv, protection_system_specific_data,
    +
    390  media_playlist.get());
    +
    391  }
    +
    392  if (IsCommonSystemId(system_id)) {
    +
    393  // Use key_id as the key_uri. The player needs to have custom logic to
    +
    394  // convert it to the actual key url.
    +
    395  std::string key_uri_data = VectorToString(key_id);
    +
    396  std::string key_uri_data_base64 =
    +
    397  Base64EncodeData(kUriBase64Prefix, key_uri_data);
    +
    398  NotifyEncryptionToMediaPlaylist(encryption_method,
    +
    399  key_uri_data_base64, std::vector<uint8_t>(),
    +
    400  iv, "identity", "", media_playlist.get());
    +
    401  return true;
    +
    402  }
    +
    403 
    +
    404  if (IsFairplaySystemId(system_id)) {
    +
    405  // Use key_id as the key_uri. The player needs to have custom logic to
    +
    406  // convert it to the actual key url.
    +
    407  std::string key_uri_data = VectorToString(key_id);
    +
    408  std::string key_uri_data_base64 =
    +
    409  Base64EncodeData(kUriFairplayPrefix, key_uri_data);
    +
    410 
    +
    411  // Fairplay defines IV to be carried with the key, not the playlist.
    +
    412  NotifyEncryptionToMediaPlaylist(encryption_method,
    +
    413  key_uri_data_base64, std::vector<uint8_t>(),
    +
    414  std::vector<uint8_t>(),
    +
    415  "com.apple.streamingkeydelivery", "1",
    +
    416  media_playlist.get());
    +
    417  return true;
    +
    418  }
    +
    419 
    +
    420  LOG(ERROR) << "Unknown system ID: "
    +
    421  << base::HexEncode(system_id.data(), system_id.size());
    +
    422  return false;
    +
    423 }
    +
    424 
    + +
    426  base::AutoLock auto_lock(lock_);
    +
    427  if (!master_playlist_->WriteMasterPlaylist(prefix_, output_dir_)) {
    +
    428  LOG(ERROR) << "Failed to write master playlist.";
    +
    429  return false;
    +
    430  }
    +
    431  for (auto& streams : stream_map_) {
    +
    432  MediaPlaylist* playlist = streams.second->media_playlist.get();
    +
    433  playlist->SetTargetDuration(target_duration_);
    +
    434  if (!WriteMediaPlaylist(output_dir_, playlist))
    +
    435  return false;
    +
    436  }
    +
    437  return true;
    +
    438 }
    +
    439 
    +
    440 } // namespace hls
    +
    441 } // namespace shaka
    SimpleHlsNotifier(HlsPlaylistType playlist_type, double time_shift_buffer_depth, const std::string &prefix, const std::string &output_dir, const std::string &master_playlist_name)
    HlsPlaylistType
    Definition: hls_params.h:16
    -
    bool NotifyNewSegment(uint32_t stream_id, const std::string &segment_name, uint64_t start_time, uint64_t duration, uint64_t start_byte_offset, uint64_t size) override
    +
    bool NotifyNewSegment(uint32_t stream_id, const std::string &segment_name, uint64_t start_time, uint64_t duration, uint64_t start_byte_offset, uint64_t size) override
    virtual void SetTargetDuration(uint32_t target_duration)
    @@ -526,12 +539,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    Methods are virtual for mocking.
    HlsPlaylistType playlist_type() const
    Definition: hls_notifier.h:80
    bool NotifyNewStream(const MediaInfo &media_info, const std::string &playlist_name, const std::string &stream_name, const std::string &group_id, uint32_t *stream_id) override
    - -
    bool NotifyEncryptionUpdate(uint32_t stream_id, const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &system_id, const std::vector< uint8_t > &iv, const std::vector< uint8_t > &protection_system_specific_data) override
    + +
    bool NotifyEncryptionUpdate(uint32_t stream_id, const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &system_id, const std::vector< uint8_t > &iv, const std::vector< uint8_t > &protection_system_specific_data) override
    diff --git a/docs/d7/dae/structshaka_1_1media_1_1mp4_1_1MediaData.html b/docs/d7/dae/structshaka_1_1media_1_1mp4_1_1MediaData.html index 9912cbe0e8..e73cd1a912 100644 --- a/docs/d7/dae/structshaka_1_1media_1_1mp4_1_1MediaData.html +++ b/docs/d7/dae/structshaka_1_1media_1_1mp4_1_1MediaData.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d7/db0/mpd__writer_8h_source.html b/docs/d7/db0/mpd__writer_8h_source.html index 410ac45706..4bb3a09599 100644 --- a/docs/d7/db0/mpd__writer_8h_source.html +++ b/docs/d7/db0/mpd__writer_8h_source.html @@ -180,7 +180,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/db7/structshaka_1_1media_1_1mp4_1_1SampleToChunk-members.html b/docs/d7/db7/structshaka_1_1media_1_1mp4_1_1SampleToChunk-members.html index d397f3658c..5ff99a3577 100644 --- a/docs/d7/db7/structshaka_1_1media_1_1mp4_1_1SampleToChunk-members.html +++ b/docs/d7/db7/structshaka_1_1media_1_1mp4_1_1SampleToChunk-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dbd/classshaka_1_1LocalFile.html b/docs/d7/dbd/classshaka_1_1LocalFile.html index a9751631be..e0b68ab36a 100644 --- a/docs/d7/dbd/classshaka_1_1LocalFile.html +++ b/docs/d7/dbd/classshaka_1_1LocalFile.html @@ -276,7 +276,7 @@ bool 
    Returns
    true if successful, or false otherwise.
    -

    Definition at line 113 of file local_file.cc.

    +

    Definition at line 126 of file local_file.cc.

    @@ -510,7 +510,7 @@ bool  diff --git a/docs/d7/dc3/structshaka_1_1media_1_1mp4_1_1TextSampleEntry.html b/docs/d7/dc3/structshaka_1_1media_1_1mp4_1_1TextSampleEntry.html index 2d307b2810..79b9f9572b 100644 --- a/docs/d7/dc3/structshaka_1_1media_1_1mp4_1_1TextSampleEntry.html +++ b/docs/d7/dc3/structshaka_1_1media_1_1mp4_1_1TextSampleEntry.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d7/dc6/byte__queue_8h_source.html b/docs/d7/dc6/byte__queue_8h_source.html index d54deadc84..cb2a8c3ca8 100644 --- a/docs/d7/dc6/byte__queue_8h_source.html +++ b/docs/d7/dc6/byte__queue_8h_source.html @@ -146,7 +146,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dd0/mpd__notifier__util_8h_source.html b/docs/d7/dd0/mpd__notifier__util_8h_source.html index 4fb8250ad2..17a5b52f16 100644 --- a/docs/d7/dd0/mpd__notifier__util_8h_source.html +++ b/docs/d7/dd0/mpd__notifier__util_8h_source.html @@ -128,7 +128,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dd4/request__signer_8h_source.html b/docs/d7/dd4/request__signer_8h_source.html index 72aebcbc05..e19ecb5150 100644 --- a/docs/d7/dd4/request__signer_8h_source.html +++ b/docs/d7/dd4/request__signer_8h_source.html @@ -180,7 +180,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dd5/classshaka_1_1media_1_1mp4_1_1MP4MediaParser.html b/docs/d7/dd5/classshaka_1_1media_1_1mp4_1_1MP4MediaParser.html index 5d46b643e0..6e003fec8a 100644 --- a/docs/d7/dd5/classshaka_1_1media_1_1mp4_1_1MP4MediaParser.html +++ b/docs/d7/dd5/classshaka_1_1media_1_1mp4_1_1MP4MediaParser.html @@ -286,7 +286,7 @@ std::shared_ptr< diff --git a/docs/d7/dd6/key__source_8cc_source.html b/docs/d7/dd6/key__source_8cc_source.html index dc691f6018..6b35748796 100644 --- a/docs/d7/dd6/key__source_8cc_source.html +++ b/docs/d7/dd6/key__source_8cc_source.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dda/classshaka_1_1media_1_1ByteQueue.html b/docs/d7/dda/classshaka_1_1media_1_1ByteQueue.html index f799c4c024..1444eccb31 100644 --- a/docs/d7/dda/classshaka_1_1media_1_1ByteQueue.html +++ b/docs/d7/dda/classshaka_1_1media_1_1ByteQueue.html @@ -177,7 +177,7 @@ void  diff --git a/docs/d7/ddd/classshaka_1_1media_1_1RsaRequestSigner.html b/docs/d7/ddd/classshaka_1_1media_1_1RsaRequestSigner.html index 50950ceb65..3bb4b35852 100644 --- a/docs/d7/ddd/classshaka_1_1media_1_1RsaRequestSigner.html +++ b/docs/d7/ddd/classshaka_1_1media_1_1RsaRequestSigner.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d7/de0/classshaka_1_1media_1_1HttpKeyFetcher.html b/docs/d7/de0/classshaka_1_1media_1_1HttpKeyFetcher.html index 37b4ef1627..95b7179b6a 100644 --- a/docs/d7/de0/classshaka_1_1media_1_1HttpKeyFetcher.html +++ b/docs/d7/de0/classshaka_1_1media_1_1HttpKeyFetcher.html @@ -399,7 +399,7 @@ KeyFetcher implementation overrides. diff --git a/docs/d7/de0/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry.html b/docs/d7/de0/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry.html index 94818cea20..a2d8befdfa 100644 --- a/docs/d7/de0/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry.html +++ b/docs/d7/de0/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry.html @@ -120,7 +120,7 @@ uint32_t group_description diff --git a/docs/d7/dec/h264__byte__to__unit__stream__converter_8h_source.html b/docs/d7/dec/h264__byte__to__unit__stream__converter_8h_source.html index cda4fd04a3..c74520b1db 100644 --- a/docs/d7/dec/h264__byte__to__unit__stream__converter_8h_source.html +++ b/docs/d7/dec/h264__byte__to__unit__stream__converter_8h_source.html @@ -138,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dee/mpd__generator_8cc_source.html b/docs/d7/dee/mpd__generator_8cc_source.html index cb5f58d0a5..f320b3e01e 100644 --- a/docs/d7/dee/mpd__generator_8cc_source.html +++ b/docs/d7/dee/mpd__generator_8cc_source.html @@ -231,7 +231,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/def/mp4__media__parser_8cc_source.html b/docs/d7/def/mp4__media__parser_8cc_source.html index 0e22ba25b8..7f5fbfa5f9 100644 --- a/docs/d7/def/mp4__media__parser_8cc_source.html +++ b/docs/d7/def/mp4__media__parser_8cc_source.html @@ -797,77 +797,92 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    708  return false;
    709  }
    710 
    -
    711  std::shared_ptr<MediaSample> stream_sample(
    -
    712  MediaSample::CopyFrom(buf, runs_->sample_size(), runs_->is_keyframe()));
    -
    713  if (runs_->is_encrypted()) {
    -
    714  std::unique_ptr<DecryptConfig> decrypt_config = runs_->GetDecryptConfig();
    -
    715  if (!decrypt_config) {
    -
    716  *err = true;
    -
    717  LOG(ERROR) << "Missing decrypt config.";
    -
    718  return false;
    -
    719  }
    -
    720 
    -
    721  if (!decryptor_source_) {
    -
    722  // If the demuxer does not have the decryptor_source_, store
    -
    723  // decrypt_config so that the demuxed sample can be decrypted later.
    -
    724  stream_sample->set_decrypt_config(std::move(decrypt_config));
    -
    725  stream_sample->set_is_encrypted(true);
    -
    726  } else if (!decryptor_source_->DecryptSampleBuffer(
    -
    727  decrypt_config.get(), stream_sample->writable_data(),
    -
    728  stream_sample->data_size())) {
    -
    729  *err = true;
    -
    730  LOG(ERROR) << "Cannot decrypt samples.";
    -
    731  return false;
    -
    732  }
    -
    733  }
    -
    734 
    -
    735  stream_sample->set_dts(runs_->dts());
    -
    736  stream_sample->set_pts(runs_->cts());
    -
    737  stream_sample->set_duration(runs_->duration());
    -
    738 
    -
    739  DVLOG(3) << "Pushing frame: "
    -
    740  << ", key=" << runs_->is_keyframe()
    -
    741  << ", dur=" << runs_->duration()
    -
    742  << ", dts=" << runs_->dts()
    -
    743  << ", cts=" << runs_->cts()
    -
    744  << ", size=" << runs_->sample_size();
    -
    745 
    -
    746  if (!new_sample_cb_.Run(runs_->track_id(), stream_sample)) {
    -
    747  *err = true;
    -
    748  LOG(ERROR) << "Failed to process the sample.";
    -
    749  return false;
    -
    750  }
    -
    751 
    -
    752  runs_->AdvanceSample();
    -
    753  return true;
    -
    754 }
    -
    755 
    -
    756 bool MP4MediaParser::ReadAndDiscardMDATsUntil(const int64_t offset) {
    -
    757  bool err = false;
    -
    758  while (mdat_tail_ < offset) {
    -
    759  const uint8_t* buf;
    -
    760  int size;
    -
    761  queue_.PeekAt(mdat_tail_, &buf, &size);
    -
    762 
    -
    763  FourCC type;
    -
    764  uint64_t box_sz;
    -
    765  if (!BoxReader::StartBox(buf, size, &type, &box_sz, &err))
    -
    766  break;
    -
    767 
    -
    768  mdat_tail_ += box_sz;
    -
    769  }
    -
    770  queue_.Trim(std::min(mdat_tail_, offset));
    -
    771  return !err;
    -
    772 }
    -
    773 
    -
    774 void MP4MediaParser::ChangeState(State new_state) {
    -
    775  DVLOG(2) << "Changing state: " << new_state;
    -
    776  state_ = new_state;
    -
    777 }
    -
    778 
    -
    779 } // namespace mp4
    -
    780 } // namespace media
    -
    781 } // namespace shaka
    +
    711  const uint8_t* media_data = buf;
    +
    712  const size_t media_data_size = runs_->sample_size();
    +
    713  // Use a dummy data size of 0 to avoid copying overhead.
    +
    714  // Actual media data is set later.
    +
    715  const size_t kDummyDataSize = 0;
    +
    716  std::shared_ptr<MediaSample> stream_sample(
    +
    717  MediaSample::CopyFrom(media_data, kDummyDataSize, runs_->is_keyframe()));
    +
    718 
    +
    719  if (runs_->is_encrypted()) {
    +
    720  std::shared_ptr<uint8_t> decrypted_media_data(
    +
    721  new uint8_t[media_data_size], std::default_delete<uint8_t[]>());
    +
    722  std::unique_ptr<DecryptConfig> decrypt_config = runs_->GetDecryptConfig();
    +
    723  if (!decrypt_config) {
    +
    724  *err = true;
    +
    725  LOG(ERROR) << "Missing decrypt config.";
    +
    726  return false;
    +
    727  }
    +
    728 
    +
    729  if (!decryptor_source_) {
    +
    730  stream_sample->SetData(media_data, media_data_size);
    +
    731  // If the demuxer does not have the decryptor_source_, store
    +
    732  // decrypt_config so that the demuxed sample can be decrypted later.
    +
    733  stream_sample->set_decrypt_config(std::move(decrypt_config));
    +
    734  stream_sample->set_is_encrypted(true);
    +
    735  } else {
    +
    736  if (!decryptor_source_->DecryptSampleBuffer(decrypt_config.get(),
    +
    737  media_data, media_data_size,
    +
    738  decrypted_media_data.get())) {
    +
    739  *err = true;
    +
    740  LOG(ERROR) << "Cannot decrypt samples.";
    +
    741  return false;
    +
    742  }
    +
    743  stream_sample->TransferData(std::move(decrypted_media_data),
    +
    744  media_data_size);
    +
    745  }
    +
    746  } else {
    +
    747  stream_sample->SetData(media_data, media_data_size);
    +
    748  }
    +
    749 
    +
    750  stream_sample->set_dts(runs_->dts());
    +
    751  stream_sample->set_pts(runs_->cts());
    +
    752  stream_sample->set_duration(runs_->duration());
    +
    753 
    +
    754  DVLOG(3) << "Pushing frame: "
    +
    755  << ", key=" << runs_->is_keyframe()
    +
    756  << ", dur=" << runs_->duration()
    +
    757  << ", dts=" << runs_->dts()
    +
    758  << ", cts=" << runs_->cts()
    +
    759  << ", size=" << runs_->sample_size();
    +
    760 
    +
    761  if (!new_sample_cb_.Run(runs_->track_id(), stream_sample)) {
    +
    762  *err = true;
    +
    763  LOG(ERROR) << "Failed to process the sample.";
    +
    764  return false;
    +
    765  }
    +
    766 
    +
    767  runs_->AdvanceSample();
    +
    768  return true;
    +
    769 }
    +
    770 
    +
    771 bool MP4MediaParser::ReadAndDiscardMDATsUntil(const int64_t offset) {
    +
    772  bool err = false;
    +
    773  while (mdat_tail_ < offset) {
    +
    774  const uint8_t* buf;
    +
    775  int size;
    +
    776  queue_.PeekAt(mdat_tail_, &buf, &size);
    +
    777 
    +
    778  FourCC type;
    +
    779  uint64_t box_sz;
    +
    780  if (!BoxReader::StartBox(buf, size, &type, &box_sz, &err))
    +
    781  break;
    +
    782 
    +
    783  mdat_tail_ += box_sz;
    +
    784  }
    +
    785  queue_.Trim(std::min(mdat_tail_, offset));
    +
    786  return !err;
    +
    787 }
    +
    788 
    +
    789 void MP4MediaParser::ChangeState(State new_state) {
    +
    790  DVLOG(2) << "Changing state: " << new_state;
    +
    791  state_ = new_state;
    +
    792 }
    +
    793 
    +
    794 } // namespace mp4
    +
    795 } // namespace media
    +
    796 } // namespace shaka
    void PeekAt(int64_t offset, const uint8_t **buf, int *size)
    bool Flush() override WARN_UNUSED_RESULT
    @@ -877,7 +892,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    static File * OpenWithNoBuffering(const char *file_name, const char *mode)
    Definition: file.cc:187
    static std::string GetCodecString(Codec codec, uint8_t audio_object_type)
    bool LoadMoov(const std::string &file_path)
    -
    static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
    Definition: media_sample.cc:45
    +
    static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
    Definition: media_sample.cc:42
    KeySource is responsible for encryption key acquisition.
    Definition: key_source.h:45
    void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) override
    DecryptorSource wraps KeySource and is responsible for decryptor management.
    @@ -886,7 +901,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/df9/byte__queue_8cc_source.html b/docs/d7/df9/byte__queue_8cc_source.html index 11368d4de3..33ff9df5d0 100644 --- a/docs/d7/df9/byte__queue_8cc_source.html +++ b/docs/d7/df9/byte__queue_8cc_source.html @@ -182,7 +182,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/df9/structshaka_1_1PlayreadyEncryptionParams-members.html b/docs/d7/df9/structshaka_1_1PlayreadyEncryptionParams-members.html index 6d4d0e9c9f..8f2c205a93 100644 --- a/docs/d7/df9/structshaka_1_1PlayreadyEncryptionParams-members.html +++ b/docs/d7/df9/structshaka_1_1PlayreadyEncryptionParams-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d08/classshaka_1_1media_1_1H264ByteToUnitStreamConverter.html b/docs/d8/d08/classshaka_1_1media_1_1H264ByteToUnitStreamConverter.html index 250b8ab465..93d41b8b7e 100644 --- a/docs/d8/d08/classshaka_1_1media_1_1H264ByteToUnitStreamConverter.html +++ b/docs/d8/d08/classshaka_1_1media_1_1H264ByteToUnitStreamConverter.html @@ -233,7 +233,7 @@ void WarnIfNotMatch (i diff --git a/docs/d8/d08/classshaka_1_1media_1_1WebMClusterParser-members.html b/docs/d8/d08/classshaka_1_1media_1_1WebMClusterParser-members.html index b6ca0ab484..016e295669 100644 --- a/docs/d8/d08/classshaka_1_1media_1_1WebMClusterParser-members.html +++ b/docs/d8/d08/classshaka_1_1media_1_1WebMClusterParser-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d08/classshaka_1_1media_1_1mp2t_1_1TsWriter-members.html b/docs/d8/d08/classshaka_1_1media_1_1mp2t_1_1TsWriter-members.html index 51beb5626f..b7a035c694 100644 --- a/docs/d8/d08/classshaka_1_1media_1_1mp2t_1_1TsWriter-members.html +++ b/docs/d8/d08/classshaka_1_1media_1_1mp2t_1_1TsWriter-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d08/structshaka_1_1media_1_1mp4_1_1MovieHeader-members.html b/docs/d8/d08/structshaka_1_1media_1_1mp4_1_1MovieHeader-members.html index 74a06d991a..31e69ff93b 100644 --- a/docs/d8/d08/structshaka_1_1media_1_1mp4_1_1MovieHeader-members.html +++ b/docs/d8/d08/structshaka_1_1media_1_1mp4_1_1MovieHeader-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d0d/media__sample_8cc_source.html b/docs/d8/d0d/media__sample_8cc_source.html index 48bcdf649c..c3dd573208 100644 --- a/docs/d8/d0d/media__sample_8cc_source.html +++ b/docs/d8/d0d/media__sample_8cc_source.html @@ -104,124 +104,131 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    15 namespace media {
    16 
    17 MediaSample::MediaSample(const uint8_t* data,
    -
    18  size_t size,
    +
    18  size_t data_size,
    19  const uint8_t* side_data,
    20  size_t side_data_size,
    21  bool is_key_frame)
    -
    22  : dts_(0),
    -
    23  pts_(0),
    -
    24  duration_(0),
    -
    25  is_key_frame_(is_key_frame),
    -
    26  is_encrypted_(false) {
    -
    27  if (!data) {
    -
    28  CHECK_EQ(size, 0u);
    -
    29  }
    -
    30 
    -
    31  data_.assign(data, data + size);
    -
    32  if (side_data)
    -
    33  side_data_.assign(side_data, side_data + side_data_size);
    -
    34 }
    -
    35 
    -
    36 MediaSample::MediaSample() : dts_(0),
    -
    37  pts_(0),
    -
    38  duration_(0),
    -
    39  is_key_frame_(false),
    -
    40  is_encrypted_(false) {}
    -
    41 
    -
    42 MediaSample::~MediaSample() {}
    -
    43 
    -
    44 // static
    -
    45 std::shared_ptr<MediaSample> MediaSample::CopyFrom(const uint8_t* data,
    -
    46  size_t data_size,
    -
    47  bool is_key_frame) {
    -
    48  // If you hit this CHECK you likely have a bug in a demuxer. Go fix it.
    -
    49  CHECK(data);
    -
    50  return std::make_shared<MediaSample>(data, data_size, nullptr, 0u,
    -
    51  is_key_frame);
    -
    52 }
    -
    53 
    -
    54 // static
    -
    55 std::shared_ptr<MediaSample> MediaSample::CopyFrom(const uint8_t* data,
    -
    56  size_t data_size,
    -
    57  const uint8_t* side_data,
    -
    58  size_t side_data_size,
    -
    59  bool is_key_frame) {
    -
    60  // If you hit this CHECK you likely have a bug in a demuxer. Go fix it.
    -
    61  CHECK(data);
    -
    62  return std::make_shared<MediaSample>(data, data_size, side_data,
    -
    63  side_data_size, is_key_frame);
    -
    64 }
    -
    65 
    -
    66 // static
    -
    67 std::shared_ptr<MediaSample> MediaSample::CopyFrom(
    -
    68  const MediaSample& media_sample) {
    -
    69  std::shared_ptr<MediaSample> new_media_sample = CopyFrom(
    -
    70  media_sample.data(), media_sample.data_size(), media_sample.side_data(),
    -
    71  media_sample.side_data_size(), media_sample.is_key_frame());
    -
    72 
    -
    73  new_media_sample->set_dts(media_sample.dts());
    -
    74  new_media_sample->set_pts(media_sample.pts());
    -
    75  new_media_sample->set_is_encrypted(media_sample.is_encrypted());
    -
    76  new_media_sample->set_config_id(media_sample.config_id());
    -
    77  new_media_sample->set_duration(media_sample.duration());
    -
    78 
    -
    79  if (media_sample.decrypt_config()) {
    -
    80  std::unique_ptr<DecryptConfig> decrypt_config(
    -
    81  new DecryptConfig(media_sample.decrypt_config()->key_id(),
    -
    82  media_sample.decrypt_config()->iv(),
    -
    83  media_sample.decrypt_config()->subsamples(),
    -
    84  media_sample.decrypt_config()->protection_scheme(),
    -
    85  media_sample.decrypt_config()->crypt_byte_block(),
    -
    86  media_sample.decrypt_config()->skip_byte_block()));
    -
    87  new_media_sample->set_decrypt_config(std::move(decrypt_config));
    -
    88  }
    -
    89  return new_media_sample;
    -
    90 }
    -
    91 
    -
    92 // static
    -
    93 std::shared_ptr<MediaSample> MediaSample::FromMetadata(const uint8_t* metadata,
    -
    94  size_t metadata_size) {
    -
    95  return std::make_shared<MediaSample>(nullptr, 0, metadata, metadata_size,
    -
    96  false);
    -
    97 }
    -
    98 
    -
    99 // static
    -
    100 std::shared_ptr<MediaSample> MediaSample::CreateEmptyMediaSample() {
    -
    101  return std::make_shared<MediaSample>();
    -
    102 }
    -
    103 
    -
    104 // static
    -
    105 std::shared_ptr<MediaSample> MediaSample::CreateEOSBuffer() {
    -
    106  return std::make_shared<MediaSample>(nullptr, 0, nullptr, 0, false);
    +
    22  : is_key_frame_(is_key_frame) {
    +
    23  if (!data) {
    +
    24  CHECK_EQ(data_size, 0u);
    +
    25  }
    +
    26 
    +
    27  SetData(data, data_size);
    +
    28  if (side_data) {
    +
    29  std::shared_ptr<uint8_t> shared_side_data(new uint8_t[side_data_size],
    +
    30  std::default_delete<uint8_t[]>());
    +
    31  memcpy(shared_side_data.get(), side_data, side_data_size);
    +
    32  side_data_ = std::move(shared_side_data);
    +
    33  side_data_size_ = side_data_size;
    +
    34  }
    +
    35 }
    +
    36 
    +
    37 MediaSample::MediaSample() {}
    +
    38 
    +
    39 MediaSample::~MediaSample() {}
    +
    40 
    +
    41 // static
    +
    42 std::shared_ptr<MediaSample> MediaSample::CopyFrom(const uint8_t* data,
    +
    43  size_t data_size,
    +
    44  bool is_key_frame) {
    +
    45  // If you hit this CHECK you likely have a bug in a demuxer. Go fix it.
    +
    46  CHECK(data);
    +
    47  return std::shared_ptr<MediaSample>(
    +
    48  new MediaSample(data, data_size, nullptr, 0u, is_key_frame));
    +
    49 }
    +
    50 
    +
    51 // static
    +
    52 std::shared_ptr<MediaSample> MediaSample::CopyFrom(const uint8_t* data,
    +
    53  size_t data_size,
    +
    54  const uint8_t* side_data,
    +
    55  size_t side_data_size,
    +
    56  bool is_key_frame) {
    +
    57  // If you hit this CHECK you likely have a bug in a demuxer. Go fix it.
    +
    58  CHECK(data);
    +
    59  return std::shared_ptr<MediaSample>(new MediaSample(
    +
    60  data, data_size, side_data, side_data_size, is_key_frame));
    +
    61 }
    +
    62 
    +
    63 // static
    +
    64 std::shared_ptr<MediaSample> MediaSample::FromMetadata(const uint8_t* metadata,
    +
    65  size_t metadata_size) {
    +
    66  return std::shared_ptr<MediaSample>(
    +
    67  new MediaSample(nullptr, 0, metadata, metadata_size, false));
    +
    68 }
    +
    69 
    +
    70 // static
    +
    71 std::shared_ptr<MediaSample> MediaSample::CreateEmptyMediaSample() {
    +
    72  return std::shared_ptr<MediaSample>(new MediaSample);
    +
    73 }
    +
    74 
    +
    75 // static
    +
    76 std::shared_ptr<MediaSample> MediaSample::CreateEOSBuffer() {
    +
    77  return std::shared_ptr<MediaSample>(
    +
    78  new MediaSample(nullptr, 0, nullptr, 0, false));
    +
    79 }
    +
    80 
    +
    81 std::shared_ptr<MediaSample> MediaSample::Clone() const {
    +
    82  std::shared_ptr<MediaSample> new_media_sample(new MediaSample);
    +
    83  new_media_sample->dts_ = dts_;
    +
    84  new_media_sample->pts_ = pts_;
    +
    85  new_media_sample->duration_ = duration_;
    +
    86  new_media_sample->is_key_frame_ = is_key_frame_;
    +
    87  new_media_sample->is_encrypted_ = is_encrypted_;
    +
    88  new_media_sample->data_ = data_;
    +
    89  new_media_sample->data_size_ = data_size_;
    +
    90  new_media_sample->side_data_ = side_data_;
    +
    91  new_media_sample->side_data_size_ = side_data_size_;
    +
    92  new_media_sample->config_id_ = config_id_;
    +
    93  if (decrypt_config_) {
    +
    94  new_media_sample->decrypt_config_.reset(new DecryptConfig(
    +
    95  decrypt_config_->key_id(), decrypt_config_->iv(),
    +
    96  decrypt_config_->subsamples(), decrypt_config_->protection_scheme(),
    +
    97  decrypt_config_->crypt_byte_block(),
    +
    98  decrypt_config_->skip_byte_block()));
    +
    99  }
    +
    100  return new_media_sample;
    +
    101 }
    +
    102 
    +
    103 void MediaSample::TransferData(std::shared_ptr<uint8_t> data,
    +
    104  size_t data_size) {
    +
    105  data_ = std::move(data);
    +
    106  data_size_ = data_size;
    107 }
    108 
    -
    109 std::string MediaSample::ToString() const {
    -
    110  if (end_of_stream())
    -
    111  return "End of stream sample\n";
    -
    112  return base::StringPrintf(
    -
    113  "dts: %" PRId64 "\n pts: %" PRId64 "\n duration: %" PRId64 "\n "
    -
    114  "is_key_frame: %s\n size: %zu\n side_data_size: %zu\n",
    -
    115  dts_,
    -
    116  pts_,
    -
    117  duration_,
    -
    118  is_key_frame_ ? "true" : "false",
    -
    119  data_.size(),
    -
    120  side_data_.size());
    -
    121 }
    -
    122 
    -
    123 } // namespace media
    -
    124 } // namespace shaka
    +
    109 void MediaSample::SetData(const uint8_t* data, size_t data_size) {
    +
    110  std::shared_ptr<uint8_t> shared_data(new uint8_t[data_size],
    +
    111  std::default_delete<uint8_t[]>());
    +
    112  memcpy(shared_data.get(), data, data_size);
    +
    113  TransferData(std::move(shared_data), data_size);
    +
    114 }
    +
    115 
    +
    116 std::string MediaSample::ToString() const {
    +
    117  if (end_of_stream())
    +
    118  return "End of stream sample\n";
    +
    119  return base::StringPrintf(
    +
    120  "dts: %" PRId64 "\n pts: %" PRId64 "\n duration: %" PRId64
    +
    121  "\n "
    +
    122  "is_key_frame: %s\n size: %zu\n side_data_size: %zu\n",
    +
    123  dts_, pts_, duration_, is_key_frame_ ? "true" : "false", data_size_,
    +
    124  side_data_size_);
    +
    125 }
    +
    126 
    +
    127 } // namespace media
    +
    128 } // namespace shaka
    -
    static std::shared_ptr< MediaSample > CreateEOSBuffer()
    -
    static std::shared_ptr< MediaSample > CreateEmptyMediaSample()
    Create a MediaSample object with default members.
    -
    std::string ToString() const
    -
    static std::shared_ptr< MediaSample > FromMetadata(const uint8_t *metadata, size_t metadata_size)
    Definition: media_sample.cc:93
    +
    static std::shared_ptr< MediaSample > CreateEOSBuffer()
    Definition: media_sample.cc:76
    +
    static std::shared_ptr< MediaSample > CreateEmptyMediaSample()
    Create a MediaSample object with default members.
    Definition: media_sample.cc:71
    +
    void SetData(const uint8_t *data, size_t data_size)
    +
    std::string ToString() const
    +
    std::shared_ptr< MediaSample > Clone() const
    Clone the object and return a new MediaSample.
    Definition: media_sample.cc:81
    +
    static std::shared_ptr< MediaSample > FromMetadata(const uint8_t *metadata, size_t metadata_size)
    Definition: media_sample.cc:64
    +
    void TransferData(std::shared_ptr< uint8_t > data, size_t data_size)
    Class to hold a media sample.
    Definition: media_sample.h:22
    -
    static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
    Definition: media_sample.cc:45
    +
    static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
    Definition: media_sample.cc:42
    diff --git a/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1DecodingTime.html b/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1DecodingTime.html index 6ccdd78089..cc2edacd38 100644 --- a/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1DecodingTime.html +++ b/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1DecodingTime.html @@ -112,7 +112,7 @@ uint32_t sample_delta< diff --git a/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1PrivFrame-members.html b/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1PrivFrame-members.html index b6f245921e..d85b4e3c96 100644 --- a/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1PrivFrame-members.html +++ b/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1PrivFrame-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d13/classshaka_1_1media_1_1BitReader-members.html b/docs/d8/d13/classshaka_1_1media_1_1BitReader-members.html index 8f2ac45371..65e881b7c8 100644 --- a/docs/d8/d13/classshaka_1_1media_1_1BitReader-members.html +++ b/docs/d8/d13/classshaka_1_1media_1_1BitReader-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d14/classshaka_1_1media_1_1VP8Parser.html b/docs/d8/d14/classshaka_1_1media_1_1VP8Parser.html index 254827fb27..5b9f29be86 100644 --- a/docs/d8/d14/classshaka_1_1media_1_1VP8Parser.html +++ b/docs/d8/d14/classshaka_1_1media_1_1VP8Parser.html @@ -235,7 +235,7 @@ Additional Inherited Members diff --git a/docs/d8/d16/structshaka_1_1media_1_1MuxerOptions-members.html b/docs/d8/d16/structshaka_1_1media_1_1MuxerOptions-members.html index fd4906d9f6..7e3e2f1e35 100644 --- a/docs/d8/d16/structshaka_1_1media_1_1MuxerOptions-members.html +++ b/docs/d8/d16/structshaka_1_1media_1_1MuxerOptions-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d19/bandwidth__estimator_8h_source.html b/docs/d8/d19/bandwidth__estimator_8h_source.html index b608953209..2c9fbc8ecb 100644 --- a/docs/d8/d19/bandwidth__estimator_8h_source.html +++ b/docs/d8/d19/bandwidth__estimator_8h_source.html @@ -133,7 +133,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d1c/crypto__flags_8cc_source.html b/docs/d8/d1c/crypto__flags_8cc_source.html index bd5131d184..cd04be40f9 100644 --- a/docs/d8/d1c/crypto__flags_8cc_source.html +++ b/docs/d8/d1c/crypto__flags_8cc_source.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d20/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox.html b/docs/d8/d20/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox.html index 53d4313a80..62d0976ce6 100644 --- a/docs/d8/d20/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox.html +++ b/docs/d8/d20/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d8/d23/structshaka_1_1media_1_1SubsampleEntry-members.html b/docs/d8/d23/structshaka_1_1media_1_1SubsampleEntry-members.html index ca92f92b4f..5284c5690b 100644 --- a/docs/d8/d23/structshaka_1_1media_1_1SubsampleEntry-members.html +++ b/docs/d8/d23/structshaka_1_1media_1_1SubsampleEntry-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d28/es__parser__h265_8h_source.html b/docs/d8/d28/es__parser__h265_8h_source.html index 89370d21c1..e19cb25cd9 100644 --- a/docs/d8/d28/es__parser__h265_8h_source.html +++ b/docs/d8/d28/es__parser__h265_8h_source.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d33/webm__content__encodings__client_8h_source.html b/docs/d8/d33/webm__content__encodings__client_8h_source.html index 2fbd044650..c5cc6ec90a 100644 --- a/docs/d8/d33/webm__content__encodings__client_8h_source.html +++ b/docs/d8/d33/webm__content__encodings__client_8h_source.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d48/structshaka_1_1WidevineDecryptionParams.html b/docs/d8/d48/structshaka_1_1WidevineDecryptionParams.html index 48ab3bd4c9..23dfe0fa1b 100644 --- a/docs/d8/d48/structshaka_1_1WidevineDecryptionParams.html +++ b/docs/d8/d48/structshaka_1_1WidevineDecryptionParams.html @@ -113,14 +113,14 @@ std::string 

    Detailed Description

    Widevine decryption parameters.

    -

    Definition at line 178 of file crypto_params.h.

    +

    Definition at line 180 of file crypto_params.h.


    The documentation for this struct was generated from the following file: diff --git a/docs/d8/d4d/aes__decryptor_8h_source.html b/docs/d8/d4d/aes__decryptor_8h_source.html index ab2addaedd..89b38e59de 100644 --- a/docs/d8/d4d/aes__decryptor_8h_source.html +++ b/docs/d8/d4d/aes__decryptor_8h_source.html @@ -147,7 +147,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d4f/classshaka_1_1media_1_1TextSample-members.html b/docs/d8/d4f/classshaka_1_1media_1_1TextSample-members.html index 781c370b60..1e24aa015a 100644 --- a/docs/d8/d4f/classshaka_1_1media_1_1TextSample-members.html +++ b/docs/d8/d4f/classshaka_1_1media_1_1TextSample-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d53/crypto__flags_8h_source.html b/docs/d8/d53/crypto__flags_8h_source.html index ef5190b68c..68178962f5 100644 --- a/docs/d8/d53/crypto__flags_8h_source.html +++ b/docs/d8/d53/crypto__flags_8h_source.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d5b/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry.html b/docs/d8/d5b/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry.html index cd70f23ebc..c8cd9a41fd 100644 --- a/docs/d8/d5b/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry.html +++ b/docs/d8/d5b/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry.html @@ -206,7 +206,7 @@ Additional Inherited Members diff --git a/docs/d8/d66/classshaka_1_1UdpFile-members.html b/docs/d8/d66/classshaka_1_1UdpFile-members.html index 4a161fe3b2..e590bef884 100644 --- a/docs/d8/d66/classshaka_1_1UdpFile-members.html +++ b/docs/d8/d66/classshaka_1_1UdpFile-members.html @@ -121,7 +121,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d6a/classshaka_1_1media_1_1ClusterBuilder-members.html b/docs/d8/d6a/classshaka_1_1media_1_1ClusterBuilder-members.html index c132497ada..e4e19e902d 100644 --- a/docs/d8/d6a/classshaka_1_1media_1_1ClusterBuilder-members.html +++ b/docs/d8/d6a/classshaka_1_1media_1_1ClusterBuilder-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d6d/structshaka_1_1media_1_1mp4_1_1DataInformation.html b/docs/d8/d6d/structshaka_1_1media_1_1mp4_1_1DataInformation.html index 7a4a474454..baa530c3ec 100644 --- a/docs/d8/d6d/structshaka_1_1media_1_1mp4_1_1DataInformation.html +++ b/docs/d8/d6d/structshaka_1_1media_1_1mp4_1_1DataInformation.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d8/d6f/origin__handler_8h_source.html b/docs/d8/d6f/origin__handler_8h_source.html index 9054d21b64..9b57810404 100644 --- a/docs/d8/d6f/origin__handler_8h_source.html +++ b/docs/d8/d6f/origin__handler_8h_source.html @@ -137,7 +137,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d70/structshaka_1_1media_1_1mp4_1_1Metadata-members.html b/docs/d8/d70/structshaka_1_1media_1_1mp4_1_1Metadata-members.html index d46f08f77e..8f57142948 100644 --- a/docs/d8/d70/structshaka_1_1media_1_1mp4_1_1Metadata-members.html +++ b/docs/d8/d70/structshaka_1_1media_1_1mp4_1_1Metadata-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d74/classshaka_1_1media_1_1TracksBuilder.html b/docs/d8/d74/classshaka_1_1media_1_1TracksBuilder.html index 2caceaac9e..52d8b0d97a 100644 --- a/docs/d8/d74/classshaka_1_1media_1_1TracksBuilder.html +++ b/docs/d8/d74/classshaka_1_1media_1_1TracksBuilder.html @@ -123,7 +123,7 @@ std::vector< uint8_t >  diff --git a/docs/d8/d81/classshaka_1_1LocalFile-members.html b/docs/d8/d81/classshaka_1_1LocalFile-members.html index 023e6cfb7e..d784d4d67e 100644 --- a/docs/d8/d81/classshaka_1_1LocalFile-members.html +++ b/docs/d8/d81/classshaka_1_1LocalFile-members.html @@ -121,7 +121,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d86/classshaka_1_1media_1_1WebMTracksParser.html b/docs/d8/d86/classshaka_1_1media_1_1WebMTracksParser.html index 67d380891b..163566b4c2 100644 --- a/docs/d8/d86/classshaka_1_1media_1_1WebMTracksParser.html +++ b/docs/d8/d86/classshaka_1_1media_1_1WebMTracksParser.html @@ -228,7 +228,7 @@ The number of bytes parsed on success. diff --git a/docs/d8/d88/structshaka_1_1media_1_1mp4_1_1MovieExtends-members.html b/docs/d8/d88/structshaka_1_1media_1_1mp4_1_1MovieExtends-members.html index a375818153..ed9f1a0ec0 100644 --- a/docs/d8/d88/structshaka_1_1media_1_1mp4_1_1MovieExtends-members.html +++ b/docs/d8/d88/structshaka_1_1media_1_1mp4_1_1MovieExtends-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d8b/structshaka_1_1RawKeyDecryptionParams_1_1KeyPair.html b/docs/d8/d8b/structshaka_1_1RawKeyDecryptionParams_1_1KeyPair.html deleted file mode 100644 index 1136867e11..0000000000 --- a/docs/d8/d8b/structshaka_1_1RawKeyDecryptionParams_1_1KeyPair.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -Shaka Packager SDK: shaka::RawKeyDecryptionParams::KeyPair Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Shaka Packager SDK -
    -
    -
    - - - - - - - - - -
    - -
    - - -
    -
    - -
    -
    shaka::RawKeyDecryptionParams::KeyPair Struct Reference
    -
    -
    - - - - - - -

    -Public Attributes

    -std::vector< uint8_t > key_id
     
    -std::vector< uint8_t > key
     
    -

    Detailed Description

    -
    -

    Definition at line 188 of file crypto_params.h.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/d8/d8e/classshaka_1_1AdaptationSet.html b/docs/d8/d8e/classshaka_1_1AdaptationSet.html index 7249fab2a0..a97a40b7a7 100644 --- a/docs/d8/d8e/classshaka_1_1AdaptationSet.html +++ b/docs/d8/d8e/classshaka_1_1AdaptationSet.html @@ -603,7 +603,7 @@ template<DashProfile profile> diff --git a/docs/d8/d91/classshaka_1_1media_1_1AesCtrEncryptor-members.html b/docs/d8/d91/classshaka_1_1media_1_1AesCtrEncryptor-members.html index bfa373fbeb..2a49c949b3 100644 --- a/docs/d8/d91/classshaka_1_1media_1_1AesCtrEncryptor-members.html +++ b/docs/d8/d91/classshaka_1_1media_1_1AesCtrEncryptor-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d92/classshaka_1_1media_1_1AesRequestSigner-members.html b/docs/d8/d92/classshaka_1_1media_1_1AesRequestSigner-members.html index ae4e213971..1ef52c017e 100644 --- a/docs/d8/d92/classshaka_1_1media_1_1AesRequestSigner-members.html +++ b/docs/d8/d92/classshaka_1_1media_1_1AesRequestSigner-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d92/structshaka_1_1media_1_1H264DecRefPicMarking-members.html b/docs/d8/d92/structshaka_1_1media_1_1H264DecRefPicMarking-members.html index 5ea2ab46b5..343f9c464f 100644 --- a/docs/d8/d92/structshaka_1_1media_1_1H264DecRefPicMarking-members.html +++ b/docs/d8/d92/structshaka_1_1media_1_1H264DecRefPicMarking-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d93/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader-members.html b/docs/d8/d93/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader-members.html index 52bf2a4310..57cd3c2818 100644 --- a/docs/d8/d93/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader-members.html +++ b/docs/d8/d93/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d94/adts__constants_8cc_source.html b/docs/d8/d94/adts__constants_8cc_source.html index ea482eccf7..7fcabed5bb 100644 --- a/docs/d8/d94/adts__constants_8cc_source.html +++ b/docs/d8/d94/adts__constants_8cc_source.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d94/pes__packet_8h_source.html b/docs/d8/d94/pes__packet_8h_source.html index 32e8987b2e..2c051a2dd6 100644 --- a/docs/d8/d94/pes__packet_8h_source.html +++ b/docs/d8/d94/pes__packet_8h_source.html @@ -159,7 +159,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d99/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox-members.html b/docs/d8/d99/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox-members.html index 471ffc727c..53185b5dd2 100644 --- a/docs/d8/d99/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox-members.html +++ b/docs/d8/d99/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d9a/fragmenter_8cc_source.html b/docs/d8/d9a/fragmenter_8cc_source.html index ec44402d5c..db48f22b05 100644 --- a/docs/d8/d9a/fragmenter_8cc_source.html +++ b/docs/d8/d9a/fragmenter_8cc_source.html @@ -390,7 +390,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d9c/webm__tracks__parser_8cc_source.html b/docs/d8/d9c/webm__tracks__parser_8cc_source.html index 0824c1a822..b2c60c14b4 100644 --- a/docs/d8/d9c/webm__tracks__parser_8cc_source.html +++ b/docs/d8/d9c/webm__tracks__parser_8cc_source.html @@ -313,7 +313,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    224  video_default_duration_ = default_duration_;
    225 
    226  DCHECK(!video_stream_info_);
    -
    227  vp_config_ = video_client_.GetVpCodecConfig(codec_private_);
    +
    227  vp_config_ = video_client_.GetVpCodecConfig(codec_private_);
    228  video_stream_info_ = video_client_.GetVideoStreamInfo(
    229  video_track_num_, codec_id_, !video_encryption_key_id_.empty());
    230  if (!video_stream_info_)
    @@ -429,19 +429,19 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    340 } // namespace media
    341 } // namespace shaka
    int64_t GetAudioDefaultDuration(const double timecode_scale_in_us) const
    +
    VPCodecConfigurationRecord GetVpCodecConfig(const std::vector< uint8_t > &codec_private)
    -
    void Reset()
    Reset this object's state so it can process a new video track element.
    -
    std::shared_ptr< VideoStreamInfo > GetVideoStreamInfo(int64_t track_num, const std::string &codec_id, bool is_encrypted)
    +
    void Reset()
    Reset this object's state so it can process a new video track element.
    +
    std::shared_ptr< VideoStreamInfo > GetVideoStreamInfo(int64_t track_num, const std::string &codec_id, bool is_encrypted)
    std::shared_ptr< AudioStreamInfo > GetAudioStreamInfo(int64_t track_num, const std::string &codec_id, const std::vector< uint8_t > &codec_private, int64_t seek_preroll, int64_t codec_delay, const std::string &language, bool is_encrypted)
    int Parse(const uint8_t *buf, int size)
    Definition: webm_parser.cc:738
    int Parse(const uint8_t *buf, int size)
    -
    const VPCodecConfigurationRecord & GetVpCodecConfig(const std::vector< uint8_t > &codec_private)
    void Reset()
    Reset this object's state so it can process a new audio track element.
    diff --git a/docs/d8/d9f/udp__file_8h_source.html b/docs/d8/d9f/udp__file_8h_source.html index 54ba584475..54d655e75f 100644 --- a/docs/d8/d9f/udp__file_8h_source.html +++ b/docs/d8/d9f/udp__file_8h_source.html @@ -151,7 +151,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/da3/classshaka_1_1media_1_1DecryptorSource-members.html b/docs/d8/da3/classshaka_1_1media_1_1DecryptorSource-members.html index 315520941b..079b21b19d 100644 --- a/docs/d8/da3/classshaka_1_1media_1_1DecryptorSource-members.html +++ b/docs/d8/da3/classshaka_1_1media_1_1DecryptorSource-members.html @@ -93,13 +93,13 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');

    This is the complete list of members for shaka::media::DecryptorSource, including all inherited members.

    - - + +
    DecryptorSource(KeySource *key_source) (defined in shaka::media::DecryptorSource)shaka::media::DecryptorSourceexplicit
    DecryptSampleBuffer(const DecryptConfig *decrypt_config, uint8_t *buffer, size_t buffer_size) (defined in shaka::media::DecryptorSource)shaka::media::DecryptorSource
    DecryptorSource(KeySource *key_source)shaka::media::DecryptorSourceexplicit
    DecryptSampleBuffer(const DecryptConfig *decrypt_config, const uint8_t *encrypted_buffer, size_t buffer_size, uint8_t *decrypted_buffer)shaka::media::DecryptorSource
    ~DecryptorSource() (defined in shaka::media::DecryptorSource)shaka::media::DecryptorSource
    diff --git a/docs/d8/da5/structshaka_1_1media_1_1mp4_1_1SampleSize-members.html b/docs/d8/da5/structshaka_1_1media_1_1mp4_1_1SampleSize-members.html index 3f5143d227..9685a0857c 100644 --- a/docs/d8/da5/structshaka_1_1media_1_1mp4_1_1SampleSize-members.html +++ b/docs/d8/da5/structshaka_1_1media_1_1mp4_1_1SampleSize-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/da6/classshaka_1_1media_1_1NaluReader-members.html b/docs/d8/da6/classshaka_1_1media_1_1NaluReader-members.html index 0f2d8c9c04..d8682f6d51 100644 --- a/docs/d8/da6/classshaka_1_1media_1_1NaluReader-members.html +++ b/docs/d8/da6/classshaka_1_1media_1_1NaluReader-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/daa/stream__info_8h_source.html b/docs/d8/daa/stream__info_8h_source.html index a436a996f6..6f6e176a4e 100644 --- a/docs/d8/daa/stream__info_8h_source.html +++ b/docs/d8/daa/stream__info_8h_source.html @@ -228,7 +228,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/daf/namespaceshaka.html b/docs/d8/daf/namespaceshaka.html index 64f15464a7..1f083e925e 100644 --- a/docs/d8/daf/namespaceshaka.html +++ b/docs/d8/daf/namespaceshaka.html @@ -134,8 +134,8 @@ Classes   struct  PlayreadyEncryptionParams   -struct  RawKeyEncryptionParams - Raw key encryption parameters, i.e. with key parameters provided. More...
    +struct  RawKeyParams + Raw key encryption/decryption parameters, i.e. with key parameters provided. More...
      struct  EncryptionParams  Encryption parameters. More...
    @@ -143,9 +143,6 @@ Classes struct  WidevineDecryptionParams  Widevine decryption parameters. More...
      -struct  RawKeyDecryptionParams - Raw key decryption parameters, i.e. with key parameters provided. More...
    -  struct  DecryptionParams  Decryption parameters. More...
      @@ -246,17 +243,19 @@ Enumerations - - + + + + @@ -604,7 +603,7 @@ const char 

    Functions

    bool ValidateFixedCryptoFlags ()
     
    bool ValidateHexString (const char *flagname, const std::string &value, std::vector< uint8_t > *value_bytes)
     
    bool ValidatePRCryptoFlags ()
     
    bool ValidateRawKeyCryptoFlags ()
     
    base::Optional< StreamDescriptorParseStreamDescriptor (const std::string &descriptor_string)
     
    void PrintError (const std::string &error_message)
     
    void PrintWarning (const std::string &warning_message)
     
    template<class FlagType >
    bool ValidateFlag (const char *flag_name, const FlagType &flag_value, bool condition, bool optional, const char *label)
     
    kPsshElementNam
    Returns
    true if successful, false otherwise. May print error messages.
    -

    Definition at line 74 of file stream_descriptor.cc.

    +

    Definition at line 76 of file stream_descriptor.cc.

    @@ -631,6 +630,31 @@ const char 
    kPsshElementNam

    Definition at line 15 of file validate_flag.cc.

    + + + +
    +
    + + + + + + + + +
    void shaka::PrintWarning (const std::string & warning_message)
    +
    +

    Format and print warning message.

    +
    Parameters
    + + +
    warning_messagespecifies the warning message.
    +
    +
    + +

    Definition at line 19 of file validate_flag.cc.

    +
    @@ -668,25 +692,6 @@ const char 
    kPsshElementNam

    Definition at line 30 of file file_util.cc.

    - - - -
    -
    - - - - - - - -
    bool shaka::ValidateFixedCryptoFlags ()
    -
    -

    Validate fixed encryption/decryption flags.

    -
    Returns
    true on success, false otherwise.
    - -

    Definition at line 35 of file fixed_key_encryption_flags.cc.

    -
    @@ -744,7 +749,7 @@ template<class FlagType >
    Returns
    true on success, false otherwise.
    -

    Definition at line 33 of file validate_flag.h.

    +

    Definition at line 37 of file validate_flag.h.

    @@ -765,6 +770,25 @@ template<class FlagType >

    Definition at line 33 of file playready_key_encryption_flags.cc.

    + + + +
    +
    + + + + + + + +
    bool shaka::ValidateRawKeyCryptoFlags ()
    +
    +

    Validate raw encryption/decryption flags.

    +
    Returns
    true on success, false otherwise.
    + +

    Definition at line 51 of file raw_key_encryption_flags.cc.

    +
    @@ -825,7 +849,7 @@ template<class FlagType > diff --git a/docs/d8/db7/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html b/docs/d8/db7/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html index d57597722d..e5d9b6c8a2 100644 --- a/docs/d8/db7/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html +++ b/docs/d8/db7/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html @@ -264,7 +264,7 @@ void 
    set_progress_target diff --git a/docs/d8/db9/classshaka_1_1media_1_1WebMContentEncodingsClient-members.html b/docs/d8/db9/classshaka_1_1media_1_1WebMContentEncodingsClient-members.html index b99cec0f5a..972031b55b 100644 --- a/docs/d8/db9/classshaka_1_1media_1_1WebMContentEncodingsClient-members.html +++ b/docs/d8/db9/classshaka_1_1media_1_1WebMContentEncodingsClient-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    diff --git a/docs/d8/dc2/classshaka_1_1media_1_1Replicator-members.html b/docs/d8/dc2/classshaka_1_1media_1_1Replicator-members.html new file mode 100644 index 0000000000..795b4b9fee --- /dev/null +++ b/docs/d8/dc2/classshaka_1_1media_1_1Replicator-members.html @@ -0,0 +1,123 @@ + + + + + + +Shaka Packager SDK: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Shaka Packager SDK +
    +
    +
    + + + + + + + + + +
    + +
    + + +
    +
    +
    +
    shaka::media::Replicator Member List
    +
    +
    + +

    This is the complete list of members for shaka::media::Replicator, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + +
    AddHandler(std::shared_ptr< MediaHandler > handler)shaka::media::MediaHandlerinline
    Dispatch(std::unique_ptr< StreamData > stream_data)shaka::media::MediaHandlerprotected
    DispatchMediaEvent(size_t stream_index, std::shared_ptr< const MediaEvent > media_event)shaka::media::MediaHandlerinlineprotected
    DispatchMediaSample(size_t stream_index, std::shared_ptr< const MediaSample > media_sample)shaka::media::MediaHandlerinlineprotected
    DispatchPeriodInfo(size_t stream_index, std::shared_ptr< const PeriodInfo > period_info)shaka::media::MediaHandlerinlineprotected
    DispatchSegmentInfo(size_t stream_index, std::shared_ptr< const SegmentInfo > segment_info)shaka::media::MediaHandlerinlineprotected
    DispatchStreamInfo(size_t stream_index, std::shared_ptr< const StreamInfo > stream_info)shaka::media::MediaHandlerinlineprotected
    DispatchTextSample(size_t stream_index, std::shared_ptr< const TextSample > text_sample)shaka::media::MediaHandlerinlineprotected
    FlushAllDownstreams()shaka::media::MediaHandlerprotected
    FlushDownstream(size_t output_stream_index)shaka::media::MediaHandlerprotected
    Initialize()shaka::media::MediaHandler
    initialized() (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected
    IsConnected()shaka::media::MediaHandlerinline
    MediaHandler()=default (defined in shaka::media::MediaHandler)shaka::media::MediaHandler
    next_output_stream_index() const (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected
    num_input_streams() const (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected
    output_handlers() (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected
    SetHandler(size_t output_stream_index, std::shared_ptr< MediaHandler > handler)shaka::media::MediaHandler
    ~MediaHandler()=default (defined in shaka::media::MediaHandler)shaka::media::MediaHandlervirtual
    + + + + diff --git a/docs/d8/dc2/structshaka_1_1media_1_1mp2t_1_1EsParserH26x_1_1VideoSliceInfo.html b/docs/d8/dc2/structshaka_1_1media_1_1mp2t_1_1EsParserH26x_1_1VideoSliceInfo.html index 651890277c..1634408e0f 100644 --- a/docs/d8/dc2/structshaka_1_1media_1_1mp2t_1_1EsParserH26x_1_1VideoSliceInfo.html +++ b/docs/d8/dc2/structshaka_1_1media_1_1mp2t_1_1EsParserH26x_1_1VideoSliceInfo.html @@ -118,7 +118,7 @@ int frame_num = 0 diff --git a/docs/d8/dc3/structshaka_1_1media_1_1mp4_1_1CueTimeBox.html b/docs/d8/dc3/structshaka_1_1media_1_1mp4_1_1CueTimeBox.html index eee5d0c9ae..b751a7ad4f 100644 --- a/docs/d8/dc3/structshaka_1_1media_1_1mp4_1_1CueTimeBox.html +++ b/docs/d8/dc3/structshaka_1_1media_1_1mp4_1_1CueTimeBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d8/dca/ts__writer_8h_source.html b/docs/d8/dca/ts__writer_8h_source.html index 11e600589a..3eed19b833 100644 --- a/docs/d8/dca/ts__writer_8h_source.html +++ b/docs/d8/dca/ts__writer_8h_source.html @@ -164,7 +164,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1DecodingTime-members.html b/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1DecodingTime-members.html index bde822d181..176e70a711 100644 --- a/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1DecodingTime-members.html +++ b/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1DecodingTime-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1TrackExtends-members.html b/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1TrackExtends-members.html index b631a0a54d..ee8de8f323 100644 --- a/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1TrackExtends-members.html +++ b/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1TrackExtends-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dd6/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter.html b/docs/d8/dd6/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter.html index 41cc9064d3..b62f893a6a 100644 --- a/docs/d8/dd6/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter.html +++ b/docs/d8/dd6/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter.html @@ -129,7 +129,7 @@ Public Member Functions diff --git a/docs/d8/dd6/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html b/docs/d8/dd6/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html index 4212a81aa2..932a55f435 100644 --- a/docs/d8/dd6/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html +++ b/docs/d8/dd6/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html @@ -135,7 +135,7 @@ std::vector< uint8_t >  diff --git a/docs/d8/de1/classshaka_1_1SimpleMpdNotifier.html b/docs/d8/de1/classshaka_1_1SimpleMpdNotifier.html index 1a282bc794..1840e74e30 100644 --- a/docs/d8/de1/classshaka_1_1SimpleMpdNotifier.html +++ b/docs/d8/de1/classshaka_1_1SimpleMpdNotifier.html @@ -473,7 +473,7 @@ class SimpleMpdNotifierTes diff --git a/docs/d8/de6/webm__crypto__helpers_8h_source.html b/docs/d8/de6/webm__crypto__helpers_8h_source.html index f980f0270e..b2d46d35ac 100644 --- a/docs/d8/de6/webm__crypto__helpers_8h_source.html +++ b/docs/d8/de6/webm__crypto__helpers_8h_source.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/deb/classshaka_1_1media_1_1mp2t_1_1EsParser-members.html b/docs/d8/deb/classshaka_1_1media_1_1mp2t_1_1EsParser-members.html index ed4cf86e81..fd81321545 100644 --- a/docs/d8/deb/classshaka_1_1media_1_1mp2t_1_1EsParser-members.html +++ b/docs/d8/deb/classshaka_1_1media_1_1mp2t_1_1EsParser-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/deb/retired__flags_8cc_source.html b/docs/d8/deb/retired__flags_8cc_source.html index 5aad7cb010..de034ebf32 100644 --- a/docs/d8/deb/retired__flags_8cc_source.html +++ b/docs/d8/deb/retired__flags_8cc_source.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dee/classshaka_1_1media_1_1AudioTimestampHelper-members.html b/docs/d8/dee/classshaka_1_1media_1_1AudioTimestampHelper-members.html index ca27c04ead..b2344d86bc 100644 --- a/docs/d8/dee/classshaka_1_1media_1_1AudioTimestampHelper-members.html +++ b/docs/d8/dee/classshaka_1_1media_1_1AudioTimestampHelper-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dee/classshaka_1_1media_1_1VPxParser-members.html b/docs/d8/dee/classshaka_1_1media_1_1VPxParser-members.html index e0bcbc2bc1..ee91e02685 100644 --- a/docs/d8/dee/classshaka_1_1media_1_1VPxParser-members.html +++ b/docs/d8/dee/classshaka_1_1media_1_1VPxParser-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/df0/webm_2single__segment__segmenter_8cc_source.html b/docs/d8/df0/webm_2single__segment__segmenter_8cc_source.html index a431551090..fd124bad98 100644 --- a/docs/d8/df0/webm_2single__segment__segmenter_8cc_source.html +++ b/docs/d8/df0/webm_2single__segment__segmenter_8cc_source.html @@ -221,7 +221,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/df7/classshaka_1_1media_1_1SegmentTestBase-members.html b/docs/d8/df7/classshaka_1_1media_1_1SegmentTestBase-members.html index 6e7d35ebab..2d24746be5 100644 --- a/docs/d8/df7/classshaka_1_1media_1_1SegmentTestBase-members.html +++ b/docs/d8/df7/classshaka_1_1media_1_1SegmentTestBase-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dfa/nal__unit__to__byte__stream__converter_8h_source.html b/docs/d8/dfa/nal__unit__to__byte__stream__converter_8h_source.html index a808fd4aee..1092d8fcc7 100644 --- a/docs/d8/dfa/nal__unit__to__byte__stream__converter_8h_source.html +++ b/docs/d8/dfa/nal__unit__to__byte__stream__converter_8h_source.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d00/structshaka_1_1media_1_1OnMediaEndParameters-members.html b/docs/d9/d00/structshaka_1_1media_1_1OnMediaEndParameters-members.html index 7bc3857142..2eed9ad856 100644 --- a/docs/d9/d00/structshaka_1_1media_1_1OnMediaEndParameters-members.html +++ b/docs/d9/d00/structshaka_1_1media_1_1OnMediaEndParameters-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d01/mp4_2single__segment__segmenter_8h_source.html b/docs/d9/d01/mp4_2single__segment__segmenter_8h_source.html index 09eb6edcd6..ea3d24838f 100644 --- a/docs/d9/d01/mp4_2single__segment__segmenter_8h_source.html +++ b/docs/d9/d01/mp4_2single__segment__segmenter_8h_source.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d08/mock__mpd__builder_8h_source.html b/docs/d9/d08/mock__mpd__builder_8h_source.html index 39651c7384..7c3c621e73 100644 --- a/docs/d9/d08/mock__mpd__builder_8h_source.html +++ b/docs/d9/d08/mock__mpd__builder_8h_source.html @@ -174,7 +174,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d0b/classshaka_1_1media_1_1HlsNotifyMuxerListener-members.html b/docs/d9/d0b/classshaka_1_1media_1_1HlsNotifyMuxerListener-members.html index f36feeaf23..f7c9c332ba 100644 --- a/docs/d9/d0b/classshaka_1_1media_1_1HlsNotifyMuxerListener-members.html +++ b/docs/d9/d0b/classshaka_1_1media_1_1HlsNotifyMuxerListener-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d0c/classshaka_1_1media_1_1RsaPublicKey.html b/docs/d9/d0c/classshaka_1_1media_1_1RsaPublicKey.html index e984e5ed44..46afc0d9de 100644 --- a/docs/d9/d0c/classshaka_1_1media_1_1RsaPublicKey.html +++ b/docs/d9/d0c/classshaka_1_1media_1_1RsaPublicKey.html @@ -218,7 +218,7 @@ Static Public Member Functions diff --git a/docs/d9/d12/chunking__handler_8cc_source.html b/docs/d9/d12/chunking__handler_8cc_source.html index 19071b29cf..a43337a1e6 100644 --- a/docs/d9/d12/chunking__handler_8cc_source.html +++ b/docs/d9/d12/chunking__handler_8cc_source.html @@ -357,7 +357,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d13/classshaka_1_1media_1_1BufferReader.html b/docs/d9/d13/classshaka_1_1media_1_1BufferReader.html index 992253d4b4..2530cdc8e0 100644 --- a/docs/d9/d13/classshaka_1_1media_1_1BufferReader.html +++ b/docs/d9/d13/classshaka_1_1media_1_1BufferReader.html @@ -276,7 +276,7 @@ bool ReadNBytesInto8s diff --git a/docs/d9/d1f/structshaka_1_1media_1_1mp4_1_1MovieFragment.html b/docs/d9/d1f/structshaka_1_1media_1_1mp4_1_1MovieFragment.html index 9a41f504dc..fb24d74311 100644 --- a/docs/d9/d1f/structshaka_1_1media_1_1mp4_1_1MovieFragment.html +++ b/docs/d9/d1f/structshaka_1_1media_1_1mp4_1_1MovieFragment.html @@ -180,7 +180,7 @@ Additional Inherited Members diff --git a/docs/d9/d26/classshaka_1_1media_1_1AesEncryptor-members.html b/docs/d9/d26/classshaka_1_1media_1_1AesEncryptor-members.html index 9ae8b3d03f..5d093d3193 100644 --- a/docs/d9/d26/classshaka_1_1media_1_1AesEncryptor-members.html +++ b/docs/d9/d26/classshaka_1_1media_1_1AesEncryptor-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html b/docs/d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html index 296825fe73..5a1dd09a23 100644 --- a/docs/d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html +++ b/docs/d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html @@ -437,7 +437,7 @@ void set_progress_target diff --git a/docs/d9/d36/classshaka_1_1media_1_1TracksBuilder-members.html b/docs/d9/d36/classshaka_1_1media_1_1TracksBuilder-members.html index c6c118a490..c3eaa4c996 100644 --- a/docs/d9/d36/classshaka_1_1media_1_1TracksBuilder-members.html +++ b/docs/d9/d36/classshaka_1_1media_1_1TracksBuilder-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d3b/webm__content__encodings_8h_source.html b/docs/d9/d3b/webm__content__encodings_8h_source.html index fe4b3e42af..230157bbf7 100644 --- a/docs/d9/d3b/webm__content__encodings_8h_source.html +++ b/docs/d9/d3b/webm__content__encodings_8h_source.html @@ -179,7 +179,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d3c/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox.html b/docs/d9/d3c/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox.html index 93548c9672..4eb3958e5c 100644 --- a/docs/d9/d3c/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox.html +++ b/docs/d9/d3c/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox.html @@ -166,7 +166,7 @@ Additional Inherited Members diff --git a/docs/d9/d3e/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox.html b/docs/d9/d3e/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox.html index 453103c8bf..6dc636bd6e 100644 --- a/docs/d9/d3e/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox.html +++ b/docs/d9/d3e/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d9/d57/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator.html b/docs/d9/d57/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator.html index 0ca19b74d9..2661c5aa83 100644 --- a/docs/d9/d57/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator.html +++ b/docs/d9/d57/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator.html @@ -320,7 +320,7 @@ Public Member Functions diff --git a/docs/d9/d65/structshaka_1_1media_1_1MuxerListener_1_1MediaRanges-members.html b/docs/d9/d65/structshaka_1_1media_1_1MuxerListener_1_1MediaRanges-members.html index b8d0cbcc04..03691376b5 100644 --- a/docs/d9/d65/structshaka_1_1media_1_1MuxerListener_1_1MediaRanges-members.html +++ b/docs/d9/d65/structshaka_1_1media_1_1MuxerListener_1_1MediaRanges-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d66/classshaka_1_1media_1_1mp2t_1_1EsParserAdts-members.html b/docs/d9/d66/classshaka_1_1media_1_1mp2t_1_1EsParserAdts-members.html index 3fcf4fe74b..fd595ebe65 100644 --- a/docs/d9/d66/classshaka_1_1media_1_1mp2t_1_1EsParserAdts-members.html +++ b/docs/d9/d66/classshaka_1_1media_1_1mp2t_1_1EsParserAdts-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d67/structshaka_1_1media_1_1H265VuiParameters.html b/docs/d9/d67/structshaka_1_1media_1_1H265VuiParameters.html index 0b164b5229..1854ba3fc9 100644 --- a/docs/d9/d67/structshaka_1_1media_1_1H265VuiParameters.html +++ b/docs/d9/d67/structshaka_1_1media_1_1H265VuiParameters.html @@ -131,7 +131,7 @@ int min_spatial_segmentati diff --git a/docs/d9/d68/classshaka_1_1media_1_1CombinedMuxerListener.html b/docs/d9/d68/classshaka_1_1media_1_1CombinedMuxerListener.html index b17859a4c1..273dee7af6 100644 --- a/docs/d9/d68/classshaka_1_1media_1_1CombinedMuxerListener.html +++ b/docs/d9/d68/classshaka_1_1media_1_1CombinedMuxerListener.html @@ -437,7 +437,7 @@ Additional Inherited Members diff --git a/docs/d9/d6a/structshaka_1_1media_1_1H264SliceHeader-members.html b/docs/d9/d6a/structshaka_1_1media_1_1H264SliceHeader-members.html index 784115a703..89d991f4ce 100644 --- a/docs/d9/d6a/structshaka_1_1media_1_1H264SliceHeader-members.html +++ b/docs/d9/d6a/structshaka_1_1media_1_1H264SliceHeader-members.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d76/ts__muxer_8cc_source.html b/docs/d9/d76/ts__muxer_8cc_source.html index ebbf99cfb7..6a35a39c3b 100644 --- a/docs/d9/d76/ts__muxer_8cc_source.html +++ b/docs/d9/d76/ts__muxer_8cc_source.html @@ -160,7 +160,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d81/classshaka_1_1media_1_1ClosureThread-members.html b/docs/d9/d81/classshaka_1_1media_1_1ClosureThread-members.html index 59af32efd5..dd93d94077 100644 --- a/docs/d9/d81/classshaka_1_1media_1_1ClosureThread-members.html +++ b/docs/d9/d81/classshaka_1_1media_1_1ClosureThread-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d86/limits_8h_source.html b/docs/d9/d86/limits_8h_source.html index 20aa5f3900..2f8f6d3bd7 100644 --- a/docs/d9/d86/limits_8h_source.html +++ b/docs/d9/d86/limits_8h_source.html @@ -141,7 +141,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d87/classshaka_1_1media_1_1WebMContentEncodingsClient.html b/docs/d9/d87/classshaka_1_1media_1_1WebMContentEncodingsClient.html index ffd2c65583..989de3539b 100644 --- a/docs/d9/d87/classshaka_1_1media_1_1WebMContentEncodingsClient.html +++ b/docs/d9/d87/classshaka_1_1media_1_1WebMContentEncodingsClient.html @@ -152,7 +152,7 @@ Additional Inherited Members diff --git a/docs/d9/d8c/classshaka_1_1media_1_1AesRequestSigner.html b/docs/d9/d8c/classshaka_1_1media_1_1AesRequestSigner.html index 293a59c357..7aba3c8607 100644 --- a/docs/d9/d8c/classshaka_1_1media_1_1AesRequestSigner.html +++ b/docs/d9/d8c/classshaka_1_1media_1_1AesRequestSigner.html @@ -188,7 +188,7 @@ Additional Inherited Members diff --git a/docs/d9/d90/classshaka_1_1media_1_1ProtectionSystemSpecificInfo-members.html b/docs/d9/d90/classshaka_1_1media_1_1ProtectionSystemSpecificInfo-members.html index 54bcf949a5..57f1dcafeb 100644 --- a/docs/d9/d90/classshaka_1_1media_1_1ProtectionSystemSpecificInfo-members.html +++ b/docs/d9/d90/classshaka_1_1media_1_1ProtectionSystemSpecificInfo-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d90/text__track_8h_source.html b/docs/d9/d90/text__track_8h_source.html index 33eb1a3dfa..6ede93bcee 100644 --- a/docs/d9/d90/text__track_8h_source.html +++ b/docs/d9/d90/text__track_8h_source.html @@ -134,7 +134,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d9b/classshaka_1_1hls_1_1MediaPlaylistFactory.html b/docs/d9/d9b/classshaka_1_1hls_1_1MediaPlaylistFactory.html index 43b622bf1c..79d28e82dd 100644 --- a/docs/d9/d9b/classshaka_1_1hls_1_1MediaPlaylistFactory.html +++ b/docs/d9/d9b/classshaka_1_1hls_1_1MediaPlaylistFactory.html @@ -114,7 +114,7 @@ virtual std::unique_ptr
    diff --git a/docs/d9/da4/stream__descriptor_8h_source.html b/docs/d9/da4/stream__descriptor_8h_source.html index f2fcb86032..6ea4ab1306 100644 --- a/docs/d9/da4/stream__descriptor_8h_source.html +++ b/docs/d9/da4/stream__descriptor_8h_source.html @@ -109,11 +109,11 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    27 } // namespace shaka
    28 
    29 #endif // APP_STREAM_DESCRIPTOR_H_
    -
    base::Optional< StreamDescriptor > ParseStreamDescriptor(const std::string &descriptor_string)
    +
    base::Optional< StreamDescriptor > ParseStreamDescriptor(const std::string &descriptor_string)
    diff --git a/docs/d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html b/docs/d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html index 1d4205106d..296bd071d7 100644 --- a/docs/d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html +++ b/docs/d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html @@ -471,7 +471,7 @@ Additional Inherited Members diff --git a/docs/d9/da6/structshaka_1_1media_1_1Cue-members.html b/docs/d9/da6/structshaka_1_1media_1_1Cue-members.html index 917428b088..29792a1eb0 100644 --- a/docs/d9/da6/structshaka_1_1media_1_1Cue-members.html +++ b/docs/d9/da6/structshaka_1_1media_1_1Cue-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/da7/classshaka_1_1media_1_1mp4_1_1Segmenter-members.html b/docs/d9/da7/classshaka_1_1media_1_1mp4_1_1Segmenter-members.html index e91f70d6bd..5de4189d7d 100644 --- a/docs/d9/da7/classshaka_1_1media_1_1mp4_1_1Segmenter-members.html +++ b/docs/d9/da7/classshaka_1_1media_1_1mp4_1_1Segmenter-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/da8/structshaka_1_1BufferCallbackParams.html b/docs/d9/da8/structshaka_1_1BufferCallbackParams.html index bf7bb60ef3..eec84bb05e 100644 --- a/docs/d9/da8/structshaka_1_1BufferCallbackParams.html +++ b/docs/d9/da8/structshaka_1_1BufferCallbackParams.html @@ -151,7 +151,7 @@ std::string &name, const void
    diff --git a/docs/d9/da8/structshaka_1_1RawKeyDecryptionParams.html b/docs/d9/da8/structshaka_1_1RawKeyDecryptionParams.html deleted file mode 100644 index e6156d205c..0000000000 --- a/docs/d9/da8/structshaka_1_1RawKeyDecryptionParams.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - -Shaka Packager SDK: shaka::RawKeyDecryptionParams Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Shaka Packager SDK -
    -
    -
    - - - - - - - - - -
    - -
    - - -
    -
    - -
    -
    shaka::RawKeyDecryptionParams Struct Reference
    -
    -
    - -

    Raw key decryption parameters, i.e. with key parameters provided. - More...

    - -

    #include <crypto_params.h>

    - - - - -

    -Classes

    struct  KeyPair
     
    - - - -

    -Public Types

    -using StreamLabel = std::string
     
    - - - -

    -Public Attributes

    std::map< StreamLabel, KeyPairkey_map
     
    -

    Detailed Description

    -

    Raw key decryption parameters, i.e. with key parameters provided.

    - -

    Definition at line 186 of file crypto_params.h.

    -

    Member Data Documentation

    - -
    -
    - - - - -
    std::map<StreamLabel, KeyPair> shaka::RawKeyDecryptionParams::key_map
    -
    -

    Defines the KeyPair for the streams. An empty StreamLabel indicates the default KeyPair, which applies to all the StreamLabels not present in key_map.

    - -

    Definition at line 195 of file crypto_params.h.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/d9/db2/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html b/docs/d9/db2/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html index 2b2a5de18b..6c27958e10 100644 --- a/docs/d9/db2/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html +++ b/docs/d9/db2/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/db9/content__protection__element_8cc_source.html b/docs/d9/db9/content__protection__element_8cc_source.html index e6d2bb3a48..a20ac2bfbf 100644 --- a/docs/d9/db9/content__protection__element_8cc_source.html +++ b/docs/d9/db9/content__protection__element_8cc_source.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/db9/muxer_8cc_source.html b/docs/d9/db9/muxer_8cc_source.html index 315a4d5dad..71b2ea2b89 100644 --- a/docs/d9/db9/muxer_8cc_source.html +++ b/docs/d9/db9/muxer_8cc_source.html @@ -181,7 +181,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/dc4/classshaka_1_1media_1_1BufferReader-members.html b/docs/d9/dc4/classshaka_1_1media_1_1BufferReader-members.html index f54e3d4a1a..181f38d117 100644 --- a/docs/d9/dc4/classshaka_1_1media_1_1BufferReader-members.html +++ b/docs/d9/dc4/classshaka_1_1media_1_1BufferReader-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/dc4/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry-members.html b/docs/d9/dc4/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry-members.html index d75bf5cfaf..fdd0d5a6a5 100644 --- a/docs/d9/dc4/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry-members.html +++ b/docs/d9/dc4/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/dc8/webm__constants_8cc_source.html b/docs/d9/dc8/webm__constants_8cc_source.html index 35b8f0fe87..fe9810b5ef 100644 --- a/docs/d9/dc8/webm__constants_8cc_source.html +++ b/docs/d9/dc8/webm__constants_8cc_source.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/dcc/webm__video__client_8h_source.html b/docs/d9/dcc/webm__video__client_8h_source.html index fff40e7e01..ebc515b428 100644 --- a/docs/d9/dcc/webm__video__client_8h_source.html +++ b/docs/d9/dcc/webm__video__client_8h_source.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    37  const std::string& codec_id,
    38  bool is_encrypted);
    39 
    - +
    43  const std::vector<uint8_t>& codec_private);
    44 
    45  private:
    @@ -129,40 +129,44 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    50  bool OnBinary(int id, const uint8_t* data, int size) override;
    51  bool OnFloat(int id, double val) override;
    52 
    -
    53  int64_t pixel_width_;
    -
    54  int64_t pixel_height_;
    -
    55  int64_t crop_bottom_;
    -
    56  int64_t crop_top_;
    -
    57  int64_t crop_left_;
    -
    58  int64_t crop_right_;
    -
    59  int64_t display_width_;
    -
    60  int64_t display_height_;
    -
    61  int64_t display_unit_;
    -
    62  int64_t alpha_mode_;
    +
    53  int64_t pixel_width_ = -1;
    +
    54  int64_t pixel_height_ = -1;
    +
    55  int64_t crop_bottom_ = -1;
    +
    56  int64_t crop_top_ = -1;
    +
    57  int64_t crop_left_ = -1;
    +
    58  int64_t crop_right_ = -1;
    +
    59  int64_t display_width_ = -1;
    +
    60  int64_t display_height_ = -1;
    +
    61  int64_t display_unit_ = -1;
    +
    62  int64_t alpha_mode_ = -1;
    63 
    -
    64  VPCodecConfigurationRecord vp_config_;
    -
    65  int64_t chroma_subsampling_horz_;
    -
    66  int64_t chroma_subsampling_vert_;
    -
    67  int64_t chroma_siting_horz_;
    -
    68  int64_t chroma_siting_vert_;
    -
    69 
    -
    70  DISALLOW_COPY_AND_ASSIGN(WebMVideoClient);
    -
    71 };
    -
    72 
    -
    73 } // namespace media
    -
    74 } // namespace shaka
    -
    75 
    -
    76 #endif // MEDIA_FORMATS_WEBM_WEBM_VIDEO_CLIENT_H_
    -
    void Reset()
    Reset this object's state so it can process a new video track element.
    +
    64  int64_t matrix_coefficients_ = -1;
    +
    65  int64_t bits_per_channel_ = -1;
    +
    66  int64_t chroma_subsampling_horz_ = -1;
    +
    67  int64_t chroma_subsampling_vert_ = -1;
    +
    68  int64_t chroma_siting_horz_ = -1;
    +
    69  int64_t chroma_siting_vert_ = -1;
    +
    70  int64_t color_range_ = -1;
    +
    71  int64_t transfer_characteristics_ = -1;
    +
    72  int64_t color_primaries_ = -1;
    +
    73 
    +
    74  DISALLOW_COPY_AND_ASSIGN(WebMVideoClient);
    +
    75 };
    +
    76 
    +
    77 } // namespace media
    +
    78 } // namespace shaka
    +
    79 
    +
    80 #endif // MEDIA_FORMATS_WEBM_WEBM_VIDEO_CLIENT_H_
    +
    VPCodecConfigurationRecord GetVpCodecConfig(const std::vector< uint8_t > &codec_private)
    +
    void Reset()
    Reset this object's state so it can process a new video track element.
    Class for parsing or writing VP codec configuration record.
    -
    std::shared_ptr< VideoStreamInfo > GetVideoStreamInfo(int64_t track_num, const std::string &codec_id, bool is_encrypted)
    +
    std::shared_ptr< VideoStreamInfo > GetVideoStreamInfo(int64_t track_num, const std::string &codec_id, bool is_encrypted)
    Helper class used to parse a Video element inside a TrackEntry element.
    -
    const VPCodecConfigurationRecord & GetVpCodecConfig(const std::vector< uint8_t > &codec_private)
    diff --git a/docs/d9/dd2/structshaka_1_1WidevineEncryptionParams.html b/docs/d9/dd2/structshaka_1_1WidevineEncryptionParams.html index 6796cb34b4..f69ea658d2 100644 --- a/docs/d9/dd2/structshaka_1_1WidevineEncryptionParams.html +++ b/docs/d9/dd2/structshaka_1_1WidevineEncryptionParams.html @@ -150,7 +150,7 @@ std::vector< uint8_t >  diff --git a/docs/d9/de0/structshaka_1_1media_1_1Range.html b/docs/d9/de0/structshaka_1_1media_1_1Range.html index f04e3ad9da..6bed0537ce 100644 --- a/docs/d9/de0/structshaka_1_1media_1_1Range.html +++ b/docs/d9/de0/structshaka_1_1media_1_1Range.html @@ -115,7 +115,7 @@ uint64_t end diff --git a/docs/d9/de2/mock__media__playlist_8cc_source.html b/docs/d9/de2/mock__media__playlist_8cc_source.html index 241e7826ef..d40a71453f 100644 --- a/docs/d9/de2/mock__media__playlist_8cc_source.html +++ b/docs/d9/de2/mock__media__playlist_8cc_source.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/de3/muxer__listener__internal_8cc_source.html b/docs/d9/de3/muxer__listener__internal_8cc_source.html index 85479c2ad1..1d9e3157fc 100644 --- a/docs/d9/de3/muxer__listener__internal_8cc_source.html +++ b/docs/d9/de3/muxer__listener__internal_8cc_source.html @@ -364,7 +364,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/dea/classshaka_1_1media_1_1FixedKeySource-members.html b/docs/d9/dea/classshaka_1_1media_1_1FixedKeySource-members.html deleted file mode 100644 index 48a7546571..0000000000 --- a/docs/d9/dea/classshaka_1_1media_1_1FixedKeySource-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - -Shaka Packager SDK: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Shaka Packager SDK -
    -
    -
    - - - - - - - - - -
    - -
    - - -
    -
    -
    -
    shaka::media::FixedKeySource Member List
    -
    -
    - -

    This is the complete list of members for shaka::media::FixedKeySource, including all inherited members.

    - - - - - - - - - - -
    Create(const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &key, const std::vector< uint8_t > &pssh_boxes, const std::vector< uint8_t > &iv)shaka::media::FixedKeySourcestatic
    FetchKeys(EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) overrideshaka::media::FixedKeySourcevirtual
    FixedKeySource() (defined in shaka::media::FixedKeySource)shaka::media::FixedKeySourceprotected
    GetCryptoPeriodKey(uint32_t crypto_period_index, const std::string &stream_label, EncryptionKey *key) overrideshaka::media::FixedKeySourcevirtual
    GetKey(const std::string &stream_label, EncryptionKey *key) overrideshaka::media::FixedKeySourcevirtual
    GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) overrideshaka::media::FixedKeySourcevirtual
    KeySource() (defined in shaka::media::KeySource)shaka::media::KeySource
    ~FixedKeySource() override (defined in shaka::media::FixedKeySource)shaka::media::FixedKeySource
    ~KeySource() (defined in shaka::media::KeySource)shaka::media::KeySourcevirtual
    - - - - diff --git a/docs/d9/deb/classshaka_1_1hls_1_1HlsNotifier.html b/docs/d9/deb/classshaka_1_1hls_1_1HlsNotifier.html index ecf8a0fea4..de1c45e814 100644 --- a/docs/d9/deb/classshaka_1_1hls_1_1HlsNotifier.html +++ b/docs/d9/deb/classshaka_1_1hls_1_1HlsNotifier.html @@ -411,7 +411,7 @@ Public Member Functions diff --git a/docs/d9/ded/aac__audio__specific__config_8cc_source.html b/docs/d9/ded/aac__audio__specific__config_8cc_source.html index 2a0180bd00..214dd8fde1 100644 --- a/docs/d9/ded/aac__audio__specific__config_8cc_source.html +++ b/docs/d9/ded/aac__audio__specific__config_8cc_source.html @@ -363,7 +363,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/df8/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html b/docs/d9/df8/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html index 1679eb3268..89decb5f61 100644 --- a/docs/d9/df8/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html +++ b/docs/d9/df8/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/df9/classshaka_1_1media_1_1OffsetByteQueue.html b/docs/d9/df9/classshaka_1_1media_1_1OffsetByteQueue.html index 7b7b7a6436..766ebf2cda 100644 --- a/docs/d9/df9/classshaka_1_1media_1_1OffsetByteQueue.html +++ b/docs/d9/df9/classshaka_1_1media_1_1OffsetByteQueue.html @@ -242,7 +242,7 @@ false if max_offset > diff --git a/docs/d9/dfe/classshaka_1_1UdpOptions.html b/docs/d9/dfe/classshaka_1_1UdpOptions.html index ab1fb296b9..0aaa0fc234 100644 --- a/docs/d9/dfe/classshaka_1_1UdpOptions.html +++ b/docs/d9/dfe/classshaka_1_1UdpOptions.html @@ -170,7 +170,7 @@ Static Public Member Functions diff --git a/docs/d9/dff/structshaka_1_1media_1_1H264ModificationOfPicNum.html b/docs/d9/dff/structshaka_1_1media_1_1H264ModificationOfPicNum.html index 5e13da67f3..a80900a3b4 100644 --- a/docs/d9/dff/structshaka_1_1media_1_1H264ModificationOfPicNum.html +++ b/docs/d9/dff/structshaka_1_1media_1_1H264ModificationOfPicNum.html @@ -119,7 +119,7 @@ union { diff --git a/docs/da/d04/audio__stream__info_8cc_source.html b/docs/da/d04/audio__stream__info_8cc_source.html index d91242a2ec..15d9018c54 100644 --- a/docs/da/d04/audio__stream__info_8cc_source.html +++ b/docs/da/d04/audio__stream__info_8cc_source.html @@ -228,7 +228,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d05/classshaka_1_1hls_1_1MediaPlaylist-members.html b/docs/da/d05/classshaka_1_1hls_1_1MediaPlaylist-members.html index 2056fa5dfb..0cc01aeda7 100644 --- a/docs/da/d05/classshaka_1_1hls_1_1MediaPlaylist-members.html +++ b/docs/da/d05/classshaka_1_1hls_1_1MediaPlaylist-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d10/classshaka_1_1media_1_1mp2t_1_1EsParser.html b/docs/da/d10/classshaka_1_1media_1_1mp2t_1_1EsParser.html index c4902731e7..a274e9f0bc 100644 --- a/docs/da/d10/classshaka_1_1media_1_1mp2t_1_1EsParser.html +++ b/docs/da/d10/classshaka_1_1media_1_1mp2t_1_1EsParser.html @@ -146,7 +146,7 @@ uint32_t pid () diff --git a/docs/da/d1a/structshaka_1_1media_1_1mp4_1_1Language.html b/docs/da/d1a/structshaka_1_1media_1_1mp4_1_1Language.html index 8b6acfbed9..7525961827 100644 --- a/docs/da/d1a/structshaka_1_1media_1_1mp4_1_1Language.html +++ b/docs/da/d1a/structshaka_1_1media_1_1mp4_1_1Language.html @@ -120,7 +120,7 @@ std::string code< diff --git a/docs/da/d1c/classshaka_1_1media_1_1mp2t_1_1TsSection.html b/docs/da/d1c/classshaka_1_1media_1_1mp2t_1_1TsSection.html index 2be8456f1c..ec88a4f90c 100644 --- a/docs/da/d1c/classshaka_1_1media_1_1mp2t_1_1TsSection.html +++ b/docs/da/d1c/classshaka_1_1media_1_1mp2t_1_1TsSection.html @@ -141,7 +141,7 @@ virtual void Reset ()= diff --git a/docs/da/d1d/udp__options_8cc_source.html b/docs/da/d1d/udp__options_8cc_source.html index 8bd18d1bb6..03dd505b85 100644 --- a/docs/da/d1d/udp__options_8cc_source.html +++ b/docs/da/d1d/udp__options_8cc_source.html @@ -223,7 +223,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d23/classshaka_1_1media_1_1mp2t_1_1EsParserH26x.html b/docs/da/d23/classshaka_1_1media_1_1mp2t_1_1EsParserH26x.html index 57b3b36865..317d9476ea 100644 --- a/docs/da/d23/classshaka_1_1media_1_1mp2t_1_1EsParserH26x.html +++ b/docs/da/d23/classshaka_1_1media_1_1mp2t_1_1EsParserH26x.html @@ -164,7 +164,7 @@ const std::shared_ptr
    diff --git a/docs/da/d23/ts__muxer_8h_source.html b/docs/da/d23/ts__muxer_8h_source.html index b7b750aeea..06b69206bb 100644 --- a/docs/da/d23/ts__muxer_8h_source.html +++ b/docs/da/d23/ts__muxer_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d24/h265__parser_8h_source.html b/docs/da/d24/h265__parser_8h_source.html index 7294a2d754..eef4e8adb2 100644 --- a/docs/da/d24/h265__parser_8h_source.html +++ b/docs/da/d24/h265__parser_8h_source.html @@ -454,7 +454,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d2a/text__stream__info_8h_source.html b/docs/da/d2a/text__stream__info_8h_source.html index 18d51005dc..ce247e164d 100644 --- a/docs/da/d2a/text__stream__info_8h_source.html +++ b/docs/da/d2a/text__stream__info_8h_source.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d2d/classshaka_1_1media_1_1webm_1_1WebMMuxer-members.html b/docs/da/d2d/classshaka_1_1media_1_1webm_1_1WebMMuxer-members.html index a0c210cec3..7e23d41c2d 100644 --- a/docs/da/d2d/classshaka_1_1media_1_1webm_1_1WebMMuxer-members.html +++ b/docs/da/d2d/classshaka_1_1media_1_1webm_1_1WebMMuxer-members.html @@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d3e/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio-members.html b/docs/da/d3e/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio-members.html index 4ea97c1277..51abe40111 100644 --- a/docs/da/d3e/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio-members.html +++ b/docs/da/d3e/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d41/mp4_2multi__segment__segmenter_8h_source.html b/docs/da/d41/mp4_2multi__segment__segmenter_8h_source.html index 56a3f458b5..ffd3f472b1 100644 --- a/docs/da/d41/mp4_2multi__segment__segmenter_8h_source.html +++ b/docs/da/d41/mp4_2multi__segment__segmenter_8h_source.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d43/structshaka_1_1ContentProtectionElement.html b/docs/da/d43/structshaka_1_1ContentProtectionElement.html index f6b2f8ef21..628e250250 100644 --- a/docs/da/d43/structshaka_1_1ContentProtectionElement.html +++ b/docs/da/d43/structshaka_1_1ContentProtectionElement.html @@ -123,7 +123,7 @@ std::vector< El diff --git a/docs/da/d4a/media__playlist_8h_source.html b/docs/da/d4a/media__playlist_8h_source.html index c104dbe990..7648b9fe14 100644 --- a/docs/da/d4a/media__playlist_8h_source.html +++ b/docs/da/d4a/media__playlist_8h_source.html @@ -247,7 +247,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html b/docs/da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html index 35447c6c17..c39622cf81 100644 --- a/docs/da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html +++ b/docs/da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html @@ -358,7 +358,7 @@ Static Public Member Functions diff --git a/docs/da/d50/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader.html b/docs/da/d50/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader.html index 63dc59cc78..ab1232b018 100644 --- a/docs/da/d50/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader.html +++ b/docs/da/d50/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/da/d53/es__parser__h265_8cc_source.html b/docs/da/d53/es__parser__h265_8cc_source.html index 03169cb133..582a9da473 100644 --- a/docs/da/d53/es__parser__h265_8cc_source.html +++ b/docs/da/d53/es__parser__h265_8cc_source.html @@ -265,7 +265,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d55/simple__hls__notifier_8h_source.html b/docs/da/d55/simple__hls__notifier_8h_source.html index fe9e727cbc..bac1a33d37 100644 --- a/docs/da/d55/simple__hls__notifier_8h_source.html +++ b/docs/da/d55/simple__hls__notifier_8h_source.html @@ -184,19 +184,19 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    SimpleHlsNotifier(HlsPlaylistType playlist_type, double time_shift_buffer_depth, const std::string &prefix, const std::string &output_dir, const std::string &master_playlist_name)
    HlsPlaylistType
    Definition: hls_params.h:16
    -
    bool NotifyNewSegment(uint32_t stream_id, const std::string &segment_name, uint64_t start_time, uint64_t duration, uint64_t start_byte_offset, uint64_t size) override
    +
    bool NotifyNewSegment(uint32_t stream_id, const std::string &segment_name, uint64_t start_time, uint64_t duration, uint64_t start_byte_offset, uint64_t size) override
    HlsPlaylistType playlist_type() const
    Definition: hls_notifier.h:80
    bool NotifyNewStream(const MediaInfo &media_info, const std::string &playlist_name, const std::string &stream_name, const std::string &group_id, uint32_t *stream_id) override
    - -
    bool NotifyEncryptionUpdate(uint32_t stream_id, const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &system_id, const std::vector< uint8_t > &iv, const std::vector< uint8_t > &protection_system_specific_data) override
    + +
    bool NotifyEncryptionUpdate(uint32_t stream_id, const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &system_id, const std::vector< uint8_t > &iv, const std::vector< uint8_t > &protection_system_specific_data) override
    diff --git a/docs/da/d59/structshaka_1_1media_1_1mp4_1_1CompactSampleSize.html b/docs/da/d59/structshaka_1_1media_1_1mp4_1_1CompactSampleSize.html index ccd2c369c2..c7c2d3f1b2 100644 --- a/docs/da/d59/structshaka_1_1media_1_1mp4_1_1CompactSampleSize.html +++ b/docs/da/d59/structshaka_1_1media_1_1mp4_1_1CompactSampleSize.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/da/d5c/widevine__key__source_8h_source.html b/docs/da/d5c/widevine__key__source_8h_source.html index 5ec5203c28..13173afc11 100644 --- a/docs/da/d5c/widevine__key__source_8h_source.html +++ b/docs/da/d5c/widevine__key__source_8h_source.html @@ -230,7 +230,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d5e/classshaka_1_1media_1_1H264VideoSliceHeaderParser-members.html b/docs/da/d5e/classshaka_1_1media_1_1H264VideoSliceHeaderParser-members.html index c90e8adaa3..26f17084f0 100644 --- a/docs/da/d5e/classshaka_1_1media_1_1H264VideoSliceHeaderParser-members.html +++ b/docs/da/d5e/classshaka_1_1media_1_1H264VideoSliceHeaderParser-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d60/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html b/docs/da/d60/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html index c609aa303d..b5c1129090 100644 --- a/docs/da/d60/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html +++ b/docs/da/d60/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d64/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter-members.html b/docs/da/d64/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter-members.html index fad47fb004..33b1f37fc9 100644 --- a/docs/da/d64/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter-members.html +++ b/docs/da/d64/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d6e/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry.html b/docs/da/d6e/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry.html index 2481f17b7e..18de080120 100644 --- a/docs/da/d6e/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry.html +++ b/docs/da/d6e/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry.html @@ -120,7 +120,7 @@ int16_t roll_distance< diff --git a/docs/da/d85/classshaka_1_1media_1_1mp2t_1_1TsSegmenter-members.html b/docs/da/d85/classshaka_1_1media_1_1mp2t_1_1TsSegmenter-members.html index 38599179a2..9419fab95a 100644 --- a/docs/da/d85/classshaka_1_1media_1_1mp2t_1_1TsSegmenter-members.html +++ b/docs/da/d85/classshaka_1_1media_1_1mp2t_1_1TsSegmenter-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d88/mp4__muxer_8cc_source.html b/docs/da/d88/mp4__muxer_8cc_source.html index 400bc90212..23c3575c05 100644 --- a/docs/da/d88/mp4__muxer_8cc_source.html +++ b/docs/da/d88/mp4__muxer_8cc_source.html @@ -587,7 +587,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d8b/classshaka_1_1media_1_1WebMMediaParser-members.html b/docs/da/d8b/classshaka_1_1media_1_1WebMMediaParser-members.html index 23ee16356c..27efbd978c 100644 --- a/docs/da/d8b/classshaka_1_1media_1_1WebMMediaParser-members.html +++ b/docs/da/d8b/classshaka_1_1media_1_1WebMMediaParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d8e/container__names_8cc_source.html b/docs/da/d8e/container__names_8cc_source.html index d10144d3e7..59401f47b5 100644 --- a/docs/da/d8e/container__names_8cc_source.html +++ b/docs/da/d8e/container__names_8cc_source.html @@ -1866,7 +1866,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d93/origin__handler_8cc_source.html b/docs/da/d93/origin__handler_8cc_source.html index 3941cff27e..84d0cb6815 100644 --- a/docs/da/d93/origin__handler_8cc_source.html +++ b/docs/da/d93/origin__handler_8cc_source.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d9b/structshaka_1_1media_1_1mp4_1_1CompositionOffset-members.html b/docs/da/d9b/structshaka_1_1media_1_1mp4_1_1CompositionOffset-members.html index cdc874db3e..2de986f246 100644 --- a/docs/da/d9b/structshaka_1_1media_1_1mp4_1_1CompositionOffset-members.html +++ b/docs/da/d9b/structshaka_1_1media_1_1mp4_1_1CompositionOffset-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d9d/structshaka_1_1media_1_1mp4_1_1EC3Specific-members.html b/docs/da/d9d/structshaka_1_1media_1_1mp4_1_1EC3Specific-members.html index 30c56f2c37..752f1de02b 100644 --- a/docs/da/d9d/structshaka_1_1media_1_1mp4_1_1EC3Specific-members.html +++ b/docs/da/d9d/structshaka_1_1media_1_1mp4_1_1EC3Specific-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d9f/classshaka_1_1MpdNotifierFactory-members.html b/docs/da/d9f/classshaka_1_1MpdNotifierFactory-members.html index 29786eeb02..8d37328b20 100644 --- a/docs/da/d9f/classshaka_1_1MpdNotifierFactory-members.html +++ b/docs/da/d9f/classshaka_1_1MpdNotifierFactory-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d9f/classshaka_1_1media_1_1MockMuxerListener-members.html b/docs/da/d9f/classshaka_1_1media_1_1MockMuxerListener-members.html index 39946d13c4..045dc96dea 100644 --- a/docs/da/d9f/classshaka_1_1media_1_1MockMuxerListener-members.html +++ b/docs/da/d9f/classshaka_1_1media_1_1MockMuxerListener-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/da1/classshaka_1_1media_1_1mp2t_1_1TsPacket.html b/docs/da/da1/classshaka_1_1media_1_1mp2t_1_1TsPacket.html index 3694f39972..c4ddee3204 100644 --- a/docs/da/da1/classshaka_1_1media_1_1mp2t_1_1TsPacket.html +++ b/docs/da/da1/classshaka_1_1media_1_1mp2t_1_1TsPacket.html @@ -145,7 +145,7 @@ static const int kPacketSi diff --git a/docs/da/db2/classshaka_1_1Representation-members.html b/docs/da/db2/classshaka_1_1Representation-members.html index aaff0b9efb..3e0ed97cd8 100644 --- a/docs/da/db2/classshaka_1_1Representation-members.html +++ b/docs/da/db2/classshaka_1_1Representation-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dbb/structshaka_1_1media_1_1mp4_1_1HandlerReference.html b/docs/da/dbb/structshaka_1_1media_1_1mp4_1_1HandlerReference.html index c51dd682d3..22a30f0c28 100644 --- a/docs/da/dbb/structshaka_1_1media_1_1mp4_1_1HandlerReference.html +++ b/docs/da/dbb/structshaka_1_1media_1_1mp4_1_1HandlerReference.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/da/dc3/status_8cc_source.html b/docs/da/dc3/status_8cc_source.html index 612606f31a..da22832f22 100644 --- a/docs/da/dc3/status_8cc_source.html +++ b/docs/da/dc3/status_8cc_source.html @@ -174,7 +174,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dc4/structshaka_1_1media_1_1mp4_1_1TrackHeader.html b/docs/da/dc4/structshaka_1_1media_1_1mp4_1_1TrackHeader.html index c4e3fe21f8..24c416e46a 100644 --- a/docs/da/dc4/structshaka_1_1media_1_1mp4_1_1TrackHeader.html +++ b/docs/da/dc4/structshaka_1_1media_1_1mp4_1_1TrackHeader.html @@ -215,7 +215,7 @@ Additional Inherited Members diff --git a/docs/da/dca/classshaka_1_1media_1_1OriginHandler-members.html b/docs/da/dca/classshaka_1_1media_1_1OriginHandler-members.html index a0825489fd..1f3a0b7293 100644 --- a/docs/da/dca/classshaka_1_1media_1_1OriginHandler-members.html +++ b/docs/da/dca/classshaka_1_1media_1_1OriginHandler-members.html @@ -121,7 +121,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dcb/es__descriptor_8h_source.html b/docs/da/dcb/es__descriptor_8h_source.html index bb137b72c2..b6356ff9e8 100644 --- a/docs/da/dcb/es__descriptor_8h_source.html +++ b/docs/da/dcb/es__descriptor_8h_source.html @@ -183,7 +183,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dd0/playready__key__source_8cc_source.html b/docs/da/dd0/playready__key__source_8cc_source.html index 0edcd3ec31..3b205105f2 100644 --- a/docs/da/dd0/playready__key__source_8cc_source.html +++ b/docs/da/dd0/playready__key__source_8cc_source.html @@ -368,81 +368,80 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    279  const std::string& program_identifier) {
    280  std::unique_ptr<EncryptionKey> encryption_key(new EncryptionKey);
    281  HttpKeyFetcher key_fetcher(kHttpFetchTimeout);
    -
    282  if (!client_cert_file_.empty() && !client_cert_private_key_file_.empty() &&
    -
    283  !client_cert_private_key_password_.empty()) {
    -
    284  key_fetcher.SetClientCertInfo(client_cert_file_,
    -
    285  client_cert_private_key_file_,
    -
    286  client_cert_private_key_password_);
    -
    287  }
    -
    288  if (!ca_file_.empty()) {
    -
    289  key_fetcher.SetCaFile(ca_file_);
    -
    290  }
    -
    291  std::string acquire_license_request = kAcquireLicenseRequest;
    -
    292  base::ReplaceFirstSubstringAfterOffset(
    -
    293  &acquire_license_request, 0, "$0", program_identifier);
    -
    294  std::string acquire_license_response;
    -
    295  Status status = key_fetcher.FetchKeys(server_url_, acquire_license_request,
    -
    296  &acquire_license_response);
    -
    297  if (!status.ok()) {
    -
    298  LOG(ERROR) << "Server response: " << acquire_license_response;
    -
    299  return status;
    -
    300  }
    -
    301  status = SetKeyInformationFromServerResponse(acquire_license_response,
    -
    302  encryption_key.get());
    -
    303  encryption_key_ = std::move(encryption_key);
    -
    304  return Status::OK;
    -
    305 }
    -
    306 
    -
    307 Status PlayReadyKeySource::FetchKeys(EmeInitDataType init_data_type,
    -
    308  const std::vector<uint8_t>& init_data) {
    -
    309  // Do nothing for playready encryption/decryption.
    -
    310  return Status::OK;
    -
    311 }
    -
    312 
    -
    313 Status PlayReadyKeySource::GetKey(const std::string& stream_label,
    -
    314  EncryptionKey* key) {
    -
    315  // TODO(robinconnell): Currently all tracks are encrypted using the same
    -
    316  // key_id and key. Add the ability to encrypt each stream_label using a
    -
    317  // different key_id and key.
    -
    318  DCHECK(key);
    -
    319  DCHECK(encryption_key_);
    -
    320  *key = *encryption_key_;
    -
    321  return Status::OK;
    -
    322 }
    -
    323 
    -
    324 Status PlayReadyKeySource::GetKey(const std::vector<uint8_t>& key_id,
    -
    325  EncryptionKey* key) {
    -
    326  // TODO(robinconnell): Currently all tracks are encrypted using the same
    -
    327  // key_id and key. Add the ability to encrypt using multiple key_id/keys.
    -
    328  DCHECK(key);
    -
    329  DCHECK(encryption_key_);
    -
    330  *key = *encryption_key_;
    -
    331  return Status::OK;
    -
    332 }
    -
    333 
    -
    334 Status PlayReadyKeySource::GetCryptoPeriodKey(uint32_t crypto_period_index,
    -
    335  const std::string& stream_label,
    -
    336  EncryptionKey* key) {
    -
    337  // TODO(robinconnell): Implement key rotation.
    -
    338  *key = *encryption_key_;
    -
    339  return Status::OK;
    -
    340 }
    -
    341 
    -
    342 } // namespace media
    -
    343 } // namespace shaka
    -
    Status GetKey(const std::string &stream_label, EncryptionKey *key) override
    +
    282  if (!client_cert_file_.empty() && !client_cert_private_key_file_.empty()) {
    +
    283  key_fetcher.SetClientCertInfo(client_cert_file_,
    +
    284  client_cert_private_key_file_,
    +
    285  client_cert_private_key_password_);
    +
    286  }
    +
    287  if (!ca_file_.empty()) {
    +
    288  key_fetcher.SetCaFile(ca_file_);
    +
    289  }
    +
    290  std::string acquire_license_request = kAcquireLicenseRequest;
    +
    291  base::ReplaceFirstSubstringAfterOffset(
    +
    292  &acquire_license_request, 0, "$0", program_identifier);
    +
    293  std::string acquire_license_response;
    +
    294  Status status = key_fetcher.FetchKeys(server_url_, acquire_license_request,
    +
    295  &acquire_license_response);
    +
    296  if (!status.ok()) {
    +
    297  LOG(ERROR) << "Server response: " << acquire_license_response;
    +
    298  return status;
    +
    299  }
    +
    300  status = SetKeyInformationFromServerResponse(acquire_license_response,
    +
    301  encryption_key.get());
    +
    302  encryption_key_ = std::move(encryption_key);
    +
    303  return Status::OK;
    +
    304 }
    +
    305 
    +
    306 Status PlayReadyKeySource::FetchKeys(EmeInitDataType init_data_type,
    +
    307  const std::vector<uint8_t>& init_data) {
    +
    308  // Do nothing for playready encryption/decryption.
    +
    309  return Status::OK;
    +
    310 }
    +
    311 
    +
    312 Status PlayReadyKeySource::GetKey(const std::string& stream_label,
    +
    313  EncryptionKey* key) {
    +
    314  // TODO(robinconnell): Currently all tracks are encrypted using the same
    +
    315  // key_id and key. Add the ability to encrypt each stream_label using a
    +
    316  // different key_id and key.
    +
    317  DCHECK(key);
    +
    318  DCHECK(encryption_key_);
    +
    319  *key = *encryption_key_;
    +
    320  return Status::OK;
    +
    321 }
    +
    322 
    +
    323 Status PlayReadyKeySource::GetKey(const std::vector<uint8_t>& key_id,
    +
    324  EncryptionKey* key) {
    +
    325  // TODO(robinconnell): Currently all tracks are encrypted using the same
    +
    326  // key_id and key. Add the ability to encrypt using multiple key_id/keys.
    +
    327  DCHECK(key);
    +
    328  DCHECK(encryption_key_);
    +
    329  *key = *encryption_key_;
    +
    330  return Status::OK;
    +
    331 }
    +
    332 
    +
    333 Status PlayReadyKeySource::GetCryptoPeriodKey(uint32_t crypto_period_index,
    +
    334  const std::string& stream_label,
    +
    335  EncryptionKey* key) {
    +
    336  // TODO(robinconnell): Implement key rotation.
    +
    337  *key = *encryption_key_;
    +
    338  return Status::OK;
    +
    339 }
    +
    340 
    +
    341 } // namespace media
    +
    342 } // namespace shaka
    +
    Status GetKey(const std::string &stream_label, EncryptionKey *key) override
    std::string ToString() const
    Definition: status.cc:67
    PlayReadyKeySource(const std::string &server_url)
    -
    Status GetCryptoPeriodKey(uint32_t crypto_period_index, const std::string &stream_label, EncryptionKey *key) override
    +
    Status GetCryptoPeriodKey(uint32_t crypto_period_index, const std::string &stream_label, EncryptionKey *key) override
    -
    Status FetchKeys(EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) override
    +
    Status FetchKeys(EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) override
    static std::unique_ptr< PlayReadyKeySource > CreateFromKeyAndKeyId(const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &key)
    diff --git a/docs/da/dd0/structshaka_1_1media_1_1mp4_1_1Edit.html b/docs/da/dd0/structshaka_1_1media_1_1mp4_1_1Edit.html index f4e1708e6c..d58f1b0c69 100644 --- a/docs/da/dd0/structshaka_1_1media_1_1mp4_1_1Edit.html +++ b/docs/da/dd0/structshaka_1_1media_1_1mp4_1_1Edit.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/da/dd0/webm__info__parser_8h_source.html b/docs/da/dd0/webm__info__parser_8h_source.html index 7dd7690815..5117f4f4fc 100644 --- a/docs/da/dd0/webm__info__parser_8h_source.html +++ b/docs/da/dd0/webm__info__parser_8h_source.html @@ -138,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dd1/fragmenter_8h_source.html b/docs/da/dd1/fragmenter_8h_source.html index 0219434d7f..0d67aa70e2 100644 --- a/docs/da/dd1/fragmenter_8h_source.html +++ b/docs/da/dd1/fragmenter_8h_source.html @@ -209,7 +209,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dd2/classshaka_1_1media_1_1mp2t_1_1TsPacket-members.html b/docs/da/dd2/classshaka_1_1media_1_1mp2t_1_1TsPacket-members.html index 020546aa6a..5b2ceb6de6 100644 --- a/docs/da/dd2/classshaka_1_1media_1_1mp2t_1_1TsPacket-members.html +++ b/docs/da/dd2/classshaka_1_1media_1_1mp2t_1_1TsPacket-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dd6/classshaka_1_1media_1_1H264ByteToUnitStreamConverter-members.html b/docs/da/dd6/classshaka_1_1media_1_1H264ByteToUnitStreamConverter-members.html index 861c2ed427..f5a7508eb7 100644 --- a/docs/da/dd6/classshaka_1_1media_1_1H264ByteToUnitStreamConverter-members.html +++ b/docs/da/dd6/classshaka_1_1media_1_1H264ByteToUnitStreamConverter-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dd8/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html b/docs/da/dd8/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html index af39eb388d..7d04a612ad 100644 --- a/docs/da/dd8/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html +++ b/docs/da/dd8/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dda/structshaka_1_1media_1_1H264SEIRecoveryPoint-members.html b/docs/da/dda/structshaka_1_1media_1_1H264SEIRecoveryPoint-members.html index bce954e520..a1a7e93ccc 100644 --- a/docs/da/dda/structshaka_1_1media_1_1H264SEIRecoveryPoint-members.html +++ b/docs/da/dda/structshaka_1_1media_1_1H264SEIRecoveryPoint-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/ddd/classshaka_1_1media_1_1WidevineKeySource.html b/docs/da/ddd/classshaka_1_1media_1_1WidevineKeySource.html index 923fdf66c7..c3ee692093 100644 --- a/docs/da/ddd/classshaka_1_1media_1_1WidevineKeySource.html +++ b/docs/da/ddd/classshaka_1_1media_1_1WidevineKeySource.html @@ -461,7 +461,7 @@ void set_group_id (con diff --git a/docs/da/ddf/structshaka_1_1media_1_1mp4_1_1SampleDescription-members.html b/docs/da/ddf/structshaka_1_1media_1_1mp4_1_1SampleDescription-members.html index 49d6f3d6f3..8bd593a121 100644 --- a/docs/da/ddf/structshaka_1_1media_1_1mp4_1_1SampleDescription-members.html +++ b/docs/da/ddf/structshaka_1_1media_1_1mp4_1_1SampleDescription-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/de2/mock__mpd__builder_8cc_source.html b/docs/da/de2/mock__mpd__builder_8cc_source.html index 01ab032e5c..862d1f6b6e 100644 --- a/docs/da/de2/mock__mpd__builder_8cc_source.html +++ b/docs/da/de2/mock__mpd__builder_8cc_source.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/de4/classshaka_1_1media_1_1WebMClusterParser.html b/docs/da/de4/classshaka_1_1media_1_1WebMClusterParser.html index a1d8fadd73..8b6309d00a 100644 --- a/docs/da/de4/classshaka_1_1media_1_1WebMClusterParser.html +++ b/docs/da/de4/classshaka_1_1media_1_1WebMClusterParser.html @@ -372,7 +372,7 @@ The number of bytes parsed on success. diff --git a/docs/da/de6/structshaka_1_1media_1_1mp4_1_1SchemeType-members.html b/docs/da/de6/structshaka_1_1media_1_1mp4_1_1SchemeType-members.html index acb9ad0e7d..1864be506e 100644 --- a/docs/da/de6/structshaka_1_1media_1_1mp4_1_1SchemeType-members.html +++ b/docs/da/de6/structshaka_1_1media_1_1mp4_1_1SchemeType-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/de8/classshaka_1_1media_1_1AudioStreamInfo-members.html b/docs/da/de8/classshaka_1_1media_1_1AudioStreamInfo-members.html index 64fe198ba4..d8be8b4d94 100644 --- a/docs/da/de8/classshaka_1_1media_1_1AudioStreamInfo-members.html +++ b/docs/da/de8/classshaka_1_1media_1_1AudioStreamInfo-members.html @@ -134,7 +134,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/de9/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html b/docs/da/de9/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html index 2a2ab0e520..168624a910 100644 --- a/docs/da/de9/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html +++ b/docs/da/de9/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html @@ -179,7 +179,7 @@ Additional Inherited Members diff --git a/docs/da/df0/classshaka_1_1media_1_1H264VideoSliceHeaderParser.html b/docs/da/df0/classshaka_1_1media_1_1H264VideoSliceHeaderParser.html index 14453380fc..35a2e4e1e7 100644 --- a/docs/da/df0/classshaka_1_1media_1_1H264VideoSliceHeaderParser.html +++ b/docs/da/df0/classshaka_1_1media_1_1H264VideoSliceHeaderParser.html @@ -152,7 +152,7 @@ int64_t  diff --git a/docs/da/df4/aes__decryptor_8cc_source.html b/docs/da/df4/aes__decryptor_8cc_source.html index 2eb9305f1f..6a95d82f86 100644 --- a/docs/da/df4/aes__decryptor_8cc_source.html +++ b/docs/da/df4/aes__decryptor_8cc_source.html @@ -258,7 +258,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/df5/structshaka_1_1media_1_1mp4_1_1SampleDescription.html b/docs/da/df5/structshaka_1_1media_1_1mp4_1_1SampleDescription.html index 8f513df692..3d97f6dc99 100644 --- a/docs/da/df5/structshaka_1_1media_1_1mp4_1_1SampleDescription.html +++ b/docs/da/df5/structshaka_1_1media_1_1mp4_1_1SampleDescription.html @@ -191,7 +191,7 @@ Additional Inherited Members diff --git a/docs/da/df9/classshaka_1_1media_1_1AesPatternCryptor-members.html b/docs/da/df9/classshaka_1_1media_1_1AesPatternCryptor-members.html index 68c0ff5455..e66fd61b6f 100644 --- a/docs/da/df9/classshaka_1_1media_1_1AesPatternCryptor-members.html +++ b/docs/da/df9/classshaka_1_1media_1_1AesPatternCryptor-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dfd/classshaka_1_1media_1_1MediaHandler.html b/docs/da/dfd/classshaka_1_1media_1_1MediaHandler.html index 19be082ab0..6751915443 100644 --- a/docs/da/dfd/classshaka_1_1media_1_1MediaHandler.html +++ b/docs/da/dfd/classshaka_1_1media_1_1MediaHandler.html @@ -102,16 +102,15 @@ Inheritance diagram for shaka::media::MediaHandler:
    -shaka::media::ChunkingHandler -shaka::media::EncryptionHandler -shaka::media::FakeMediaHandler -shaka::media::Muxer -shaka::media::OriginHandler -shaka::media::TrickPlayHandler -shaka::media::mp2t::TsMuxer -shaka::media::mp4::MP4Muxer -shaka::media::webm::WebMMuxer -shaka::media::Demuxer +shaka::media::ChunkingHandler +shaka::media::EncryptionHandler +shaka::media::FakeInputMediaHandler +shaka::media::FakeMediaHandler +shaka::media::MockOutputMediaHandler +shaka::media::Muxer +shaka::media::OriginHandler +shaka::media::Replicator +shaka::media::TrickPlayHandler
    @@ -267,7 +266,7 @@ std::pair< std::shared_ptr
    @@ -294,7 +293,7 @@ std::pair< std::shared_ptr

    Process the incoming stream data. Note that (1) stream_data.stream_index should be the input stream index; (2) The implementation needs to call DispatchXxx to dispatch the processed stream data to the downstream handlers after finishing processing if needed.

    -

    Implemented in shaka::media::FakeMediaHandler, shaka::media::Demuxer, shaka::media::Muxer, shaka::media::ChunkingHandler, shaka::media::TrickPlayHandler, and shaka::media::EncryptionHandler.

    +

    Implemented in shaka::media::FakeMediaHandler, shaka::media::Demuxer, shaka::media::Muxer, shaka::media::ChunkingHandler, and shaka::media::EncryptionHandler.

    @@ -305,7 +304,7 @@ std::pair< std::shared_ptr
    diff --git a/docs/da/dfd/classshaka_1_1media_1_1MediaHandler.png b/docs/da/dfd/classshaka_1_1media_1_1MediaHandler.png index ed408c40c0..5e81fb1fe9 100644 Binary files a/docs/da/dfd/classshaka_1_1media_1_1MediaHandler.png and b/docs/da/dfd/classshaka_1_1media_1_1MediaHandler.png differ diff --git a/docs/db/d05/structshaka_1_1media_1_1H265SliceHeader.html b/docs/db/d05/structshaka_1_1media_1_1H265SliceHeader.html index 11e5b39cf5..1781d1fcbc 100644 --- a/docs/db/d05/structshaka_1_1media_1_1H265SliceHeader.html +++ b/docs/db/d05/structshaka_1_1media_1_1H265SliceHeader.html @@ -236,7 +236,7 @@ std::vector< int >  diff --git a/docs/db/d14/classshaka_1_1media_1_1H265Parser-members.html b/docs/db/d14/classshaka_1_1media_1_1H265Parser-members.html index acf6d97668..3636e075a6 100644 --- a/docs/db/d14/classshaka_1_1media_1_1H265Parser-members.html +++ b/docs/db/d14/classshaka_1_1media_1_1H265Parser-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    e diff --git a/docs/db/d0b/webvtt__sample__converter_8h_source.html b/docs/db/d0b/webvtt__sample__converter_8h_source.html index 896f35212f..da34d5a563 100644 --- a/docs/db/d0b/webvtt__sample__converter_8h_source.html +++ b/docs/db/d0b/webvtt__sample__converter_8h_source.html @@ -173,7 +173,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d11/structshaka_1_1media_1_1mp4_1_1CodecConfiguration.html b/docs/db/d11/structshaka_1_1media_1_1mp4_1_1CodecConfiguration.html index d260e73153..9f53ea734b 100644 --- a/docs/db/d11/structshaka_1_1media_1_1mp4_1_1CodecConfiguration.html +++ b/docs/db/d11/structshaka_1_1media_1_1mp4_1_1CodecConfiguration.html @@ -176,7 +176,7 @@ Additional Inherited Members
    diff --git a/docs/db/d14/structshaka_1_1media_1_1H264WeightingFactors-members.html b/docs/db/d14/structshaka_1_1media_1_1H264WeightingFactors-members.html index 959904742f..d01fd87ecc 100644 --- a/docs/db/d14/structshaka_1_1media_1_1H264WeightingFactors-members.html +++ b/docs/db/d14/structshaka_1_1media_1_1H264WeightingFactors-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d1b/classshaka_1_1MemoryFile-members.html b/docs/db/d1b/classshaka_1_1MemoryFile-members.html index b9129db095..e26734aa43 100644 --- a/docs/db/d1b/classshaka_1_1MemoryFile-members.html +++ b/docs/db/d1b/classshaka_1_1MemoryFile-members.html @@ -123,7 +123,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d1f/classshaka_1_1media_1_1TextSample.html b/docs/db/d1f/classshaka_1_1media_1_1TextSample.html index 47c13e73ba..3b43c3b124 100644 --- a/docs/db/d1f/classshaka_1_1media_1_1TextSample.html +++ b/docs/db/d1f/classshaka_1_1media_1_1TextSample.html @@ -137,7 +137,7 @@ void AppendPayload (co diff --git a/docs/db/d21/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader.html b/docs/db/d21/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader.html index d9800d866b..649af708ea 100644 --- a/docs/db/d21/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader.html +++ b/docs/db/d21/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader.html @@ -175,7 +175,7 @@ uint32_t flags diff --git a/docs/db/d30/classshaka_1_1media_1_1mp4_1_1MP4Muxer.html b/docs/db/d30/classshaka_1_1media_1_1mp4_1_1MP4Muxer.html index a18dc69033..7ca2934e68 100644 --- a/docs/db/d30/classshaka_1_1media_1_1mp4_1_1MP4Muxer.html +++ b/docs/db/d30/classshaka_1_1media_1_1mp4_1_1MP4Muxer.html @@ -233,7 +233,7 @@ std::pair< std::shared_ptr
    diff --git a/docs/db/d31/h26x__byte__to__unit__stream__converter_8h_source.html b/docs/db/d31/h26x__byte__to__unit__stream__converter_8h_source.html index 49692165b0..1673fe80d0 100644 --- a/docs/db/d31/h26x__byte__to__unit__stream__converter_8h_source.html +++ b/docs/db/d31/h26x__byte__to__unit__stream__converter_8h_source.html @@ -163,7 +163,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d31/track__run__iterator_8cc_source.html b/docs/db/d31/track__run__iterator_8cc_source.html index 3a29337d31..fbd8b1e629 100644 --- a/docs/db/d31/track__run__iterator_8cc_source.html +++ b/docs/db/d31/track__run__iterator_8cc_source.html @@ -775,7 +775,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d38/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator-members.html b/docs/db/d38/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator-members.html index 8ec9ff4533..d8be6fe73c 100644 --- a/docs/db/d38/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator-members.html +++ b/docs/db/d38/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d3b/classshaka_1_1media_1_1VideoSliceHeaderParser-members.html b/docs/db/d3b/classshaka_1_1media_1_1VideoSliceHeaderParser-members.html index ba62354c7e..8ffe0449a5 100644 --- a/docs/db/d3b/classshaka_1_1media_1_1VideoSliceHeaderParser-members.html +++ b/docs/db/d3b/classshaka_1_1media_1_1VideoSliceHeaderParser-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d45/mpd__notify__muxer__listener_8h_source.html b/docs/db/d45/mpd__notify__muxer__listener_8h_source.html index 1d02fd2445..9b00f135f9 100644 --- a/docs/db/d45/mpd__notify__muxer__listener_8h_source.html +++ b/docs/db/d45/mpd__notify__muxer__listener_8h_source.html @@ -184,7 +184,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d4b/classshaka_1_1MockAdaptationSet.html b/docs/db/d4b/classshaka_1_1MockAdaptationSet.html index d3dd6b404b..4b7c749ac3 100644 --- a/docs/db/d4b/classshaka_1_1MockAdaptationSet.html +++ b/docs/db/d4b/classshaka_1_1MockAdaptationSet.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/db/d4e/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator.html b/docs/db/d4e/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator.html index 815bc306d4..c9f5399511 100644 --- a/docs/db/d4e/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator.html +++ b/docs/db/d4e/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator.html @@ -225,7 +225,7 @@ Public Member Functions diff --git a/docs/db/d51/mp2t__media__parser_8h_source.html b/docs/db/d51/mp2t__media__parser_8h_source.html index ec4ba092a8..b53182a97b 100644 --- a/docs/db/d51/mp2t__media__parser_8h_source.html +++ b/docs/db/d51/mp2t__media__parser_8h_source.html @@ -191,7 +191,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d51/two__pass__single__segment__segmenter_8h_source.html b/docs/db/d51/two__pass__single__segment__segmenter_8h_source.html index d74a55a712..7ca3016d02 100644 --- a/docs/db/d51/two__pass__single__segment__segmenter_8h_source.html +++ b/docs/db/d51/two__pass__single__segment__segmenter_8h_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d59/media__handler__test__base_8h_source.html b/docs/db/d59/media__handler__test__base_8h_source.html index a02a3caad3..ac7312831f 100644 --- a/docs/db/d59/media__handler__test__base_8h_source.html +++ b/docs/db/d59/media__handler__test__base_8h_source.html @@ -163,110 +163,180 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
    74  arg->media_sample->is_encrypted() == encrypted;
    75 }
    76 
    -
    77 // A fake media handler definition used for testing.
    - -
    79  public:
    -
    80  const std::vector<std::unique_ptr<StreamData>>& stream_data_vector() const {
    -
    81  return stream_data_vector_;
    -
    82  }
    -
    83  void clear_stream_data_vector() { stream_data_vector_.clear(); }
    -
    84 
    -
    85  protected:
    -
    86  Status InitializeInternal() override;
    -
    87  Status Process(std::unique_ptr<StreamData> stream_data) override;
    -
    88  Status OnFlushRequest(size_t input_stream_index) override;
    -
    89  bool ValidateOutputStreamIndex(size_t stream_index) const override;
    -
    90 
    -
    91  std::vector<std::unique_ptr<StreamData>> stream_data_vector_;
    -
    92 };
    -
    93 
    -
    94 class MediaHandlerTestBase : public ::testing::Test {
    -
    95  public:
    - +
    77 MATCHER_P5(IsTextSample, id, start_time, end_time, settings, payload, "") {
    +
    78  return arg->stream_data_type == StreamDataType::kTextSample &&
    +
    79  arg->text_sample->id() == id &&
    +
    80  arg->text_sample->start_time() == start_time &&
    +
    81  arg->text_sample->EndTime() == end_time &&
    +
    82  arg->text_sample->settings() == settings &&
    +
    83  arg->text_sample->payload() == payload;
    +
    84 }
    +
    85 
    + +
    87  public:
    + + + +
    91 
    +
    92  private:
    +
    93  bool ValidateOutputStreamIndex(size_t index) const override;
    +
    94  Status InitializeInternal() override;
    +
    95  Status Process(std::unique_ptr<StreamData> stream_data) override;
    +
    96 };
    97 
    -
    98  bool IsVideoCodec(Codec codec) const;
    -
    99 
    -
    100  std::unique_ptr<StreamInfo> GetVideoStreamInfo(
    -
    101  uint32_t time_scale) const;
    + +
    99  public:
    +
    100  MOCK_METHOD1(OnProcess, void(const StreamData*));
    +
    101  MOCK_METHOD1(OnFlush, void(size_t index));
    102 
    -
    103  std::unique_ptr<StreamInfo> GetVideoStreamInfo(
    -
    104  uint32_t time_scale, uint32_t width, uint64_t height) const;
    -
    105 
    -
    106  std::unique_ptr<StreamInfo> GetVideoStreamInfo(
    -
    107  uint32_t time_scale, Codec codec) const;
    +
    103  private:
    +
    104  Status InitializeInternal() override;
    +
    105  Status Process(std::unique_ptr<StreamData> stream_data) override;
    +
    106  Status OnFlushRequest(size_t index) override;
    +
    107 };
    108 
    -
    109  std::unique_ptr<StreamInfo> GetVideoStreamInfo(
    -
    110  uint32_t time_scale,
    -
    111  Codec codec,
    -
    112  uint32_t width,
    -
    113  uint64_t height) const;
    -
    114 
    -
    115  std::unique_ptr<StreamInfo> GetAudioStreamInfo(
    -
    116  uint32_t time_scale) const;
    +
    109 // TODO(vaage) : Remove this test handler and convert other tests to use
    +
    110 // FakeInputMediaHandler and MockOutputMediaHandler.
    + +
    112  public:
    +
    113  const std::vector<std::unique_ptr<StreamData>>& stream_data_vector() const {
    +
    114  return stream_data_vector_;
    +
    115  }
    +
    116  void clear_stream_data_vector() { stream_data_vector_.clear(); }
    117 
    -
    118  std::unique_ptr<StreamInfo> GetAudioStreamInfo(
    -
    119  uint32_t time_scale,
    -
    120  Codec codec) const;
    -
    121 
    -
    122  std::unique_ptr<MediaSample> GetMediaSample(
    -
    123  int64_t timestamp,
    -
    124  int64_t duration,
    -
    125  bool is_keyframe) const;
    +
    118  protected:
    +
    119  Status InitializeInternal() override;
    +
    120  Status Process(std::unique_ptr<StreamData> stream_data) override;
    +
    121  Status OnFlushRequest(size_t input_stream_index) override;
    +
    122  bool ValidateOutputStreamIndex(size_t stream_index) const override;
    +
    123 
    +
    124  std::vector<std::unique_ptr<StreamData>> stream_data_vector_;
    +
    125 };
    126 
    -
    127  std::unique_ptr<MediaSample> GetMediaSample(
    -
    128  int64_t timestamp,
    -
    129  int64_t duration,
    -
    130  bool is_keyframe,
    -
    131  const uint8_t* data,
    -
    132  size_t data_length) const;
    +
    127 class MediaHandlerTestBase : public ::testing::Test {
    +
    128  public:
    +
    129  MediaHandlerTestBase() = default;
    +
    130 
    +
    131  protected:
    +
    132  bool IsVideoCodec(Codec codec) const;
    133 
    -
    134  std::unique_ptr<SegmentInfo> GetSegmentInfo(
    -
    135  int64_t start_timestamp,
    -
    136  int64_t duration,
    -
    137  bool is_subsegment) const;
    -
    138 
    -
    140  void SetUpGraph(size_t num_inputs,
    -
    141  size_t num_outputs,
    -
    142  std::shared_ptr<MediaHandler> handler);
    -
    143 
    -
    145  const std::vector<std::unique_ptr<StreamData>>& GetOutputStreamDataVector()
    -
    146  const;
    +
    134  std::unique_ptr<StreamInfo> GetVideoStreamInfo(uint32_t time_scale) const;
    +
    135 
    +
    136  std::unique_ptr<StreamInfo> GetVideoStreamInfo(uint32_t time_scale,
    +
    137  uint32_t width,
    +
    138  uint64_t height) const;
    +
    139 
    +
    140  std::unique_ptr<StreamInfo> GetVideoStreamInfo(uint32_t time_scale,
    +
    141  Codec codec) const;
    +
    142 
    +
    143  std::unique_ptr<StreamInfo> GetVideoStreamInfo(uint32_t time_scale,
    +
    144  Codec codec,
    +
    145  uint32_t width,
    +
    146  uint64_t height) const;
    147 
    - -
    150 
    -
    152  std::shared_ptr<MediaHandler> some_handler() { return some_handler_; }
    -
    153 
    -
    155  std::shared_ptr<FakeMediaHandler> next_handler() { return next_handler_; }
    +
    148  std::unique_ptr<StreamInfo> GetAudioStreamInfo(uint32_t time_scale) const;
    +
    149 
    +
    150  std::unique_ptr<StreamInfo> GetAudioStreamInfo(uint32_t time_scale,
    +
    151  Codec codec) const;
    +
    152 
    +
    153  std::shared_ptr<MediaSample> GetMediaSample(int64_t timestamp,
    +
    154  int64_t duration,
    +
    155  bool is_keyframe) const;
    156 
    -
    157  private:
    - -
    159  MediaHandlerTestBase& operator=(const MediaHandlerTestBase&) = delete;
    -
    160 
    -
    161  // Downstream handler used in testing graph.
    -
    162  std::shared_ptr<FakeMediaHandler> next_handler_;
    -
    163  // Some random handler which can be used for testing.
    -
    164  std::shared_ptr<MediaHandler> some_handler_;
    -
    165 };
    +
    157  std::shared_ptr<MediaSample> GetMediaSample(int64_t timestamp,
    +
    158  int64_t duration,
    +
    159  bool is_keyframe,
    +
    160  const uint8_t* data,
    +
    161  size_t data_length) const;
    +
    162 
    +
    163  std::unique_ptr<SegmentInfo> GetSegmentInfo(int64_t start_timestamp,
    +
    164  int64_t duration,
    +
    165  bool is_subsegment) const;
    166 
    -
    167 } // namespace media
    -
    168 } // namespace shaka
    -
    void ClearOutputStreamDataVector()
    Clear the output stream data vector.
    -
    void SetUpGraph(size_t num_inputs, size_t num_outputs, std::shared_ptr< MediaHandler > handler)
    Setup a graph using |handler| with |num_inputs| and |num_outputs|.
    -
    std::shared_ptr< MediaHandler > some_handler()
    +
    167  std::unique_ptr<StreamInfo> GetTextStreamInfo() const;
    +
    168 
    +
    169  std::unique_ptr<TextSample> GetTextSample(const std::string& id,
    +
    170  uint64_t start,
    +
    171  uint64_t end,
    +
    172  const std::string& payload) const;
    +
    173 
    +
    174  // Connect and initialize all handlers.
    +
    175  Status SetUpAndInitializeGraph(std::shared_ptr<MediaHandler> handler,
    +
    176  size_t input_count,
    +
    177  size_t output_count);
    +
    178 
    +
    179  // Get the input handler at |index|. The values of |index| will match the
    +
    180  // call to |AddInput|.
    +
    181  FakeInputMediaHandler* Input(size_t index);
    +
    182 
    +
    183  // Get the output handler at |index|. The values of |index| will match the
    +
    184  // call to |AddOutput|.
    +
    185  MockOutputMediaHandler* Output(size_t index);
    +
    186 
    +
    187  private:
    + +
    189  MediaHandlerTestBase& operator=(const MediaHandlerTestBase&) = delete;
    +
    190 
    +
    191  std::shared_ptr<MediaHandler> handler_;
    +
    192 
    +
    193  std::vector<std::shared_ptr<FakeInputMediaHandler>> inputs_;
    +
    194  std::vector<std::shared_ptr<MockOutputMediaHandler>> outputs_;
    +
    195 };
    +
    196 
    + +
    198  public:
    + +
    200 
    +
    201  protected:
    +
    203  void SetUpGraph(size_t num_inputs,
    +
    204  size_t num_outputs,
    +
    205  std::shared_ptr<MediaHandler> handler);
    +
    206 
    +
    208  const std::vector<std::unique_ptr<StreamData>>& GetOutputStreamDataVector()
    +
    209  const;
    +
    210 
    + +
    213 
    +
    215  std::shared_ptr<MediaHandler> some_handler() { return some_handler_; }
    +
    216 
    +
    218  std::shared_ptr<FakeMediaHandler> next_handler() { return next_handler_; }
    +
    219 
    +
    220  private:
    + +
    222  MediaHandlerGraphTestBase& operator=(const MediaHandlerTestBase&) = delete;
    +
    223 
    +
    224  // Downstream handler used in testing graph.
    +
    225  std::shared_ptr<FakeMediaHandler> next_handler_;
    +
    226  // Some random handler which can be used for testing.
    +
    227  std::shared_ptr<MediaHandler> some_handler_;
    +
    228 };
    +
    229 
    +
    230 } // namespace media
    +
    231 } // namespace shaka
    + +
    Status Dispatch(std::unique_ptr< StreamData > stream_data)
    + + +
    std::shared_ptr< FakeMediaHandler > next_handler()
    +
    void ClearOutputStreamDataVector()
    Clear the output stream data vector.
    - -
    Status OnFlushRequest(size_t input_stream_index) override
    Event handler for flush request at the specific input stream index.
    - - -
    Status Process(std::unique_ptr< StreamData > stream_data) override
    -
    bool ValidateOutputStreamIndex(size_t stream_index) const override
    Validate if the stream at the specified index actually exists.
    -
    std::shared_ptr< FakeMediaHandler > next_handler()
    -
    const std::vector< std::unique_ptr< StreamData > > & GetOutputStreamDataVector() const
    + +
    Status FlushAllDownstreams()
    Flush all connected downstreams.
    +
    Status OnFlushRequest(size_t input_stream_index) override
    Event handler for flush request at the specific input stream index.
    +
    Status FlushDownstream(size_t output_stream_index)
    Flush the downstream connected at the specified output stream index.
    + + + +
    Status Process(std::unique_ptr< StreamData > stream_data) override
    +
    std::shared_ptr< MediaHandler > some_handler()
    +
    bool ValidateOutputStreamIndex(size_t stream_index) const override
    Validate if the stream at the specified index actually exists.
    +
    void SetUpGraph(size_t num_inputs, size_t num_outputs, std::shared_ptr< MediaHandler > handler)
    Setup a graph using |handler| with |num_inputs| and |num_outputs|.
    +
    const std::vector< std::unique_ptr< StreamData > > & GetOutputStreamDataVector() const
    diff --git a/docs/db/d5a/classshaka_1_1media_1_1VP9Parser.html b/docs/db/d5a/classshaka_1_1media_1_1VP9Parser.html index 11d38fbe8a..a42fa26656 100644 --- a/docs/db/d5a/classshaka_1_1media_1_1VP9Parser.html +++ b/docs/db/d5a/classshaka_1_1media_1_1VP9Parser.html @@ -238,7 +238,7 @@ Additional Inherited Members diff --git a/docs/db/d60/mpd__options_8h_source.html b/docs/db/d60/mpd__options_8h_source.html index 5ec5b91189..57ef869c62 100644 --- a/docs/db/d60/mpd__options_8h_source.html +++ b/docs/db/d60/mpd__options_8h_source.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d64/webvtt__media__parser_8h_source.html b/docs/db/d64/webvtt__media__parser_8h_source.html index fc2dc6d78a..1f0e058bd6 100644 --- a/docs/db/d64/webvtt__media__parser_8h_source.html +++ b/docs/db/d64/webvtt__media__parser_8h_source.html @@ -180,7 +180,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d66/structshaka_1_1media_1_1mp4_1_1SegmentType-members.html b/docs/db/d66/structshaka_1_1media_1_1mp4_1_1SegmentType-members.html index c880eff8d3..3ff87512b1 100644 --- a/docs/db/d66/structshaka_1_1media_1_1mp4_1_1SegmentType-members.html +++ b/docs/db/d66/structshaka_1_1media_1_1mp4_1_1SegmentType-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d66/udp__file_8cc_source.html b/docs/db/d66/udp__file_8cc_source.html index 01ea6ac253..482f2a6e63 100644 --- a/docs/db/d66/udp__file_8cc_source.html +++ b/docs/db/d66/udp__file_8cc_source.html @@ -362,7 +362,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d6b/structshaka_1_1MpdParams-members.html b/docs/db/d6b/structshaka_1_1MpdParams-members.html index 9a72171d68..e43049415a 100644 --- a/docs/db/d6b/structshaka_1_1MpdParams-members.html +++ b/docs/db/d6b/structshaka_1_1MpdParams-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d71/http__key__fetcher_8h_source.html b/docs/db/d71/http__key__fetcher_8h_source.html index 67d9b52132..ed896fe299 100644 --- a/docs/db/d71/http__key__fetcher_8h_source.html +++ b/docs/db/d71/http__key__fetcher_8h_source.html @@ -167,7 +167,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d74/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord-members.html b/docs/db/d74/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord-members.html index bd046541aa..7bae56e9df 100644 --- a/docs/db/d74/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord-members.html +++ b/docs/db/d74/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d75/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter-members.html b/docs/db/d75/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter-members.html index ee849b94de..4e0ec8ecd4 100644 --- a/docs/db/d75/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter-members.html +++ b/docs/db/d75/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter-members.html @@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d78/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter-members.html b/docs/db/d78/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter-members.html index 79f6d57a04..44d11501f8 100644 --- a/docs/db/d78/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter-members.html +++ b/docs/db/d78/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d79/chunking__params_8h_source.html b/docs/db/d79/chunking__params_8h_source.html index 86c3f510d3..5fb4b05ce1 100644 --- a/docs/db/d79/chunking__params_8h_source.html +++ b/docs/db/d79/chunking__params_8h_source.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d7e/muxer__options_8cc_source.html b/docs/db/d7e/muxer__options_8cc_source.html index ba7accd0f3..c541a68a0b 100644 --- a/docs/db/d7e/muxer__options_8cc_source.html +++ b/docs/db/d7e/muxer__options_8cc_source.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d84/classshaka_1_1media_1_1AACAudioSpecificConfig-members.html b/docs/db/d84/classshaka_1_1media_1_1AACAudioSpecificConfig-members.html index 4a685e811d..c2622b374e 100644 --- a/docs/db/d84/classshaka_1_1media_1_1AACAudioSpecificConfig-members.html +++ b/docs/db/d84/classshaka_1_1media_1_1AACAudioSpecificConfig-members.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d86/classshaka_1_1media_1_1NaluReader.html b/docs/db/d86/classshaka_1_1media_1_1NaluReader.html index 9026c084d4..9f33ee82cf 100644 --- a/docs/db/d86/classshaka_1_1media_1_1NaluReader.html +++ b/docs/db/d86/classshaka_1_1media_1_1NaluReader.html @@ -350,7 +350,7 @@ static bool FindStartCode< diff --git a/docs/db/d8f/mp4__muxer_8h_source.html b/docs/db/d8f/mp4__muxer_8h_source.html index 5af973d216..e79c0c780d 100644 --- a/docs/db/d8f/mp4__muxer_8h_source.html +++ b/docs/db/d8f/mp4__muxer_8h_source.html @@ -181,7 +181,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d94/classshaka_1_1media_1_1ClusterBuilder.html b/docs/db/d94/classshaka_1_1media_1_1ClusterBuilder.html index ab9d38a354..a8e98745fc 100644 --- a/docs/db/d94/classshaka_1_1media_1_1ClusterBuilder.html +++ b/docs/db/d94/classshaka_1_1media_1_1ClusterBuilder.html @@ -125,7 +125,7 @@ std::unique_ptr< diff --git a/docs/db/d95/classshaka_1_1media_1_1mp4_1_1Fragmenter.html b/docs/db/d95/classshaka_1_1media_1_1mp4_1_1Fragmenter.html index 85b94cb679..920c9d43f3 100644 --- a/docs/db/d95/classshaka_1_1media_1_1mp4_1_1Fragmenter.html +++ b/docs/db/d95/classshaka_1_1media_1_1mp4_1_1Fragmenter.html @@ -312,7 +312,7 @@ template<typename T > diff --git a/docs/db/d95/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset.html b/docs/db/d95/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset.html index afc88b6888..3c09a524f4 100644 --- a/docs/db/d95/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset.html +++ b/docs/db/d95/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/db/d96/wvm__media__parser_8h_source.html b/docs/db/d96/wvm__media__parser_8h_source.html index 3794a1aee1..7f484a5178 100644 --- a/docs/db/d96/wvm__media__parser_8h_source.html +++ b/docs/db/d96/wvm__media__parser_8h_source.html @@ -362,7 +362,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/da4/classBandwidthEstimator-members.html b/docs/db/da4/classBandwidthEstimator-members.html index d27ba260ef..10d6a0c805 100644 --- a/docs/db/da4/classBandwidthEstimator-members.html +++ b/docs/db/da4/classBandwidthEstimator-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/da6/memory__file_8h_source.html b/docs/db/da6/memory__file_8h_source.html index 27c0179fea..40b35996d4 100644 --- a/docs/db/da6/memory__file_8h_source.html +++ b/docs/db/da6/memory__file_8h_source.html @@ -151,7 +151,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/da9/classshaka_1_1media_1_1WebVttSampleConverter-members.html b/docs/db/da9/classshaka_1_1media_1_1WebVttSampleConverter-members.html index 51c5f472e9..ab2cbe2891 100644 --- a/docs/db/da9/classshaka_1_1media_1_1WebVttSampleConverter-members.html +++ b/docs/db/da9/classshaka_1_1media_1_1WebVttSampleConverter-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dab/classshaka_1_1media_1_1TextStreamInfo.html b/docs/db/dab/classshaka_1_1media_1_1TextStreamInfo.html index 3c824c013a..6d015b0c62 100644 --- a/docs/db/dab/classshaka_1_1media_1_1TextStreamInfo.html +++ b/docs/db/dab/classshaka_1_1media_1_1TextStreamInfo.html @@ -334,7 +334,7 @@ void set_encryption_config diff --git a/docs/db/dae/classshaka_1_1media_1_1WebMInfoParser.html b/docs/db/dae/classshaka_1_1media_1_1WebMInfoParser.html index 6174a19282..04ff0d2432 100644 --- a/docs/db/dae/classshaka_1_1media_1_1WebMInfoParser.html +++ b/docs/db/dae/classshaka_1_1media_1_1WebMInfoParser.html @@ -175,7 +175,7 @@ The number of bytes parsed on success. diff --git a/docs/db/dae/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader-members.html b/docs/db/dae/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader-members.html index a3029eab3a..8052e168ef 100644 --- a/docs/db/dae/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader-members.html +++ b/docs/db/dae/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/db1/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html b/docs/db/db1/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html index 76f0696673..5d1d16e898 100644 --- a/docs/db/db1/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html +++ b/docs/db/db1/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/db8/structshaka_1_1media_1_1OnMediaEndParameters.html b/docs/db/db8/structshaka_1_1media_1_1OnMediaEndParameters.html index 8f6706bb7f..05b63a96dd 100644 --- a/docs/db/db8/structshaka_1_1media_1_1OnMediaEndParameters.html +++ b/docs/db/db8/structshaka_1_1media_1_1OnMediaEndParameters.html @@ -112,7 +112,7 @@ float duration_seconds diff --git a/docs/db/db8/structshaka_1_1media_1_1mp4_1_1TrackEncryption.html b/docs/db/db8/structshaka_1_1media_1_1mp4_1_1TrackEncryption.html index a3d634d983..17abf0b82a 100644 --- a/docs/db/db8/structshaka_1_1media_1_1mp4_1_1TrackEncryption.html +++ b/docs/db/db8/structshaka_1_1media_1_1mp4_1_1TrackEncryption.html @@ -197,7 +197,7 @@ Additional Inherited Members diff --git a/docs/db/dcb/classshaka_1_1media_1_1VPxParser.html b/docs/db/dcb/classshaka_1_1media_1_1VPxParser.html index 497647e8e2..2f703968ab 100644 --- a/docs/db/dcb/classshaka_1_1media_1_1VPxParser.html +++ b/docs/db/dcb/classshaka_1_1media_1_1VPxParser.html @@ -205,7 +205,7 @@ Protected Member Functions diff --git a/docs/db/dcd/classshaka_1_1MpdWriter.html b/docs/db/dcd/classshaka_1_1MpdWriter.html index 3155f0f967..8577973295 100644 --- a/docs/db/dcd/classshaka_1_1MpdWriter.html +++ b/docs/db/dcd/classshaka_1_1MpdWriter.html @@ -123,7 +123,7 @@ class MpdWriterTest diff --git a/docs/db/dcd/structshaka_1_1media_1_1mp4_1_1DTSSpecific-members.html b/docs/db/dcd/structshaka_1_1media_1_1mp4_1_1DTSSpecific-members.html index de5cc2dd16..99936dd4aa 100644 --- a/docs/db/dcd/structshaka_1_1media_1_1mp4_1_1DTSSpecific-members.html +++ b/docs/db/dcd/structshaka_1_1media_1_1mp4_1_1DTSSpecific-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dd0/classshaka_1_1Packager.html b/docs/db/dd0/classshaka_1_1Packager.html index 93f7ed6804..bc5bef7370 100644 --- a/docs/db/dd0/classshaka_1_1Packager.html +++ b/docs/db/dd0/classshaka_1_1Packager.html @@ -115,7 +115,7 @@ Static Public Member Functions

    Detailed Description

    -

    Definition at line 110 of file packager.h.

    +

    Definition at line 113 of file packager.h.

    Member Function Documentation

    @@ -172,7 +172,7 @@ Static Public Member Functions
    Returns
    the stream label associated with stream_info. Can be "AUDIO", "SD", "HD", "UHD1" or "UHD2".
    -

    Definition at line 808 of file packager.cc.

    +

    Definition at line 893 of file packager.cc.

    @@ -198,7 +198,7 @@ Static Public Member Functions
    Returns
    The version of the library.
    -

    Definition at line 804 of file packager.cc.

    +

    Definition at line 889 of file packager.cc.

    @@ -235,7 +235,7 @@ Static Public Member Functions
    Returns
    OK on success, an appropriate error code on failure.
    -

    Definition at line 669 of file packager.cc.

    +

    Definition at line 743 of file packager.cc.

    @@ -254,7 +254,7 @@ Static Public Member Functions

    Run the pipeline to completion (or failed / been cancelled). Note that it blocks until completion.

    Returns
    OK on success, an appropriate error code on failure.
    -

    Definition at line 777 of file packager.cc.

    +

    Definition at line 862 of file packager.cc.

    @@ -265,7 +265,7 @@ Static Public Member Functions diff --git a/docs/d0/dac/classshaka_1_1media_1_1FixedKeySource.html b/docs/db/dd0/classshaka_1_1media_1_1RawKeySource.html similarity index 66% rename from docs/d0/dac/classshaka_1_1media_1_1FixedKeySource.html rename to docs/db/dd0/classshaka_1_1media_1_1RawKeySource.html index 314ef4e8ae..e71d486bbe 100644 --- a/docs/d0/dac/classshaka_1_1media_1_1FixedKeySource.html +++ b/docs/db/dd0/classshaka_1_1media_1_1RawKeySource.html @@ -4,7 +4,7 @@ -Shaka Packager SDK: shaka::media::FixedKeySource Class Reference +Shaka Packager SDK: shaka::media::RawKeySource Class Reference @@ -82,56 +82,56 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
-
shaka::media::FixedKeySource Class Reference
+
shaka::media::RawKeySource Class Reference
-

A key source that uses fixed keys for encryption. - More...

+

A key source that uses raw keys for encryption. + More...

-

#include <fixed_key_source.h>

+

#include <raw_key_source.h>

-Inheritance diagram for shaka::media::FixedKeySource:
+Inheritance diagram for shaka::media::RawKeySource:
- - -shaka::media::KeySource + + +shaka::media::KeySource
- - - - - - - - + + + + + + + +

Public Member Functions

KeySource implementation overrides.
Status FetchKeys (EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) override
 
Status GetKey (const std::string &stream_label, EncryptionKey *key) override
 
Status GetKey (const std::vector< uint8_t > &key_id, EncryptionKey *key) override
 
Status GetCryptoPeriodKey (uint32_t crypto_period_index, const std::string &stream_label, EncryptionKey *key) override
 
Status FetchKeys (EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) override
 
Status GetKey (const std::string &stream_label, EncryptionKey *key) override
 
Status GetKey (const std::vector< uint8_t > &key_id, EncryptionKey *key) override
 
Status GetCryptoPeriodKey (uint32_t crypto_period_index, const std::string &stream_label, EncryptionKey *key) override
 
- - + +

Static Public Member Functions

static std::unique_ptr
-< FixedKeySource
Create (const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &key, const std::vector< uint8_t > &pssh_boxes, const std::vector< uint8_t > &iv)
 
static std::unique_ptr
+< RawKeySource
Create (const RawKeyParams &raw_key)
 

Detailed Description

-

A key source that uses fixed keys for encryption.

+

A key source that uses raw keys for encryption.

-

Definition at line 33 of file fixed_key_source.h.

+

Definition at line 34 of file raw_key_source.h.

Member Function Documentation

- +
@@ -139,33 +139,11 @@ Static Public Member Functions @@ -174,22 +152,19 @@ Static Public Member Functions
- + - - - - - + + - - - - - - - - - - - - - - - - - - -
std::unique_ptr< FixedKeySource > shaka::media::FixedKeySource::Create std::unique_ptr< RawKeySource > shaka::media::RawKeySource::Create (const std::vector< uint8_t > & key_id,
const RawKeyParamsraw_key) const std::vector< uint8_t > & key,
const std::vector< uint8_t > & pssh_boxes,
const std::vector< uint8_t > & iv 
)
-

Creates a new FixedKeySource from the given data. Returns null if the strings are invalid.

+

Creates a new RawKeySource from the given data. Returns null if the parameter is malformed.

Parameters
- - - - +
key_idis the key identifier. Must be 16 bytes.
keyis the encryption / decryption key. Must be 16 bytes.
pssh_boxesis the concatenated pssh boxes.
ivis the initialization vector. If not specified, a randomly generated IV with the default length will be used. Note: GetKey on the created key source will always return the same key for all track types.
raw_keycontains parameters to setup the key source.
-

Definition at line 78 of file fixed_key_source.cc.

+

Definition at line 104 of file raw_key_source.cc.

- +
@@ -197,7 +172,7 @@ Static Public Member Functions
- + @@ -232,11 +207,11 @@ Static Public Member Functions

Implements shaka::media::KeySource.

-

Definition at line 18 of file fixed_key_source.cc.

+

Definition at line 22 of file raw_key_source.cc.

- +
Status shaka::media::FixedKeySource::FetchKeys Status shaka::media::RawKeySource::FetchKeys ( EmeInitDataType  init_data_type,
@@ -244,7 +219,7 @@ Static Public Member Functions
- + @@ -286,11 +261,11 @@ Static Public Member Functions

Implements shaka::media::KeySource.

-

Definition at line 46 of file fixed_key_source.cc.

+

Definition at line 59 of file raw_key_source.cc.

- +
Status shaka::media::FixedKeySource::GetCryptoPeriodKey Status shaka::media::RawKeySource::GetCryptoPeriodKey ( uint32_t  crypto_period_index,
@@ -298,7 +273,7 @@ Static Public Member Functions
- + @@ -333,11 +308,11 @@ Static Public Member Functions

Implements shaka::media::KeySource.

-

Definition at line 24 of file fixed_key_source.cc.

+

Definition at line 28 of file raw_key_source.cc.

- +
Status shaka::media::FixedKeySource::GetKey Status shaka::media::RawKeySource::GetKey ( const std::string &  stream_label,
@@ -345,7 +320,7 @@ Static Public Member Functions
- + @@ -380,18 +355,18 @@ Static Public Member Functions

Implements shaka::media::KeySource.

-

Definition at line 32 of file fixed_key_source.cc.

+

Definition at line 45 of file raw_key_source.cc.


The documentation for this class was generated from the following files: diff --git a/docs/db/dd0/classshaka_1_1media_1_1RawKeySource.png b/docs/db/dd0/classshaka_1_1media_1_1RawKeySource.png new file mode 100644 index 0000000000..03a27564a9 Binary files /dev/null and b/docs/db/dd0/classshaka_1_1media_1_1RawKeySource.png differ diff --git a/docs/db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html b/docs/db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html index 1792025e19..3f5e58c551 100644 --- a/docs/db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html +++ b/docs/db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html @@ -489,7 +489,7 @@ Additional Inherited Members diff --git a/docs/db/dd2/chunk__info__iterator_8h_source.html b/docs/db/dd2/chunk__info__iterator_8h_source.html index cadb11f1b5..7380346524 100644 --- a/docs/db/dd2/chunk__info__iterator_8h_source.html +++ b/docs/db/dd2/chunk__info__iterator_8h_source.html @@ -161,7 +161,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dd9/sync__sample__iterator_8h_source.html b/docs/db/dd9/sync__sample__iterator_8h_source.html index 677d91ed84..d07d54386f 100644 --- a/docs/db/dd9/sync__sample__iterator_8h_source.html +++ b/docs/db/dd9/sync__sample__iterator_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dde/h265__parser_8cc_source.html b/docs/db/dde/h265__parser_8cc_source.html index a6fe813d5b..35cde53423 100644 --- a/docs/db/dde/h265__parser_8cc_source.html +++ b/docs/db/dde/h265__parser_8cc_source.html @@ -1213,7 +1213,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dea/classshaka_1_1media_1_1TrickPlayHandler.html b/docs/db/dea/classshaka_1_1media_1_1TrickPlayHandler.html index 902ec8d3f5..dfe59d1dc4 100644 --- a/docs/db/dea/classshaka_1_1media_1_1TrickPlayHandler.html +++ b/docs/db/dea/classshaka_1_1media_1_1TrickPlayHandler.html @@ -88,7 +88,6 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
shaka::media::TrickPlayHandler Class Reference
@@ -108,12 +107,9 @@ Inheritance diagram for shaka::media::TrickPlayHandler:
Status shaka::media::FixedKeySource::GetKey Status shaka::media::RawKeySource::GetKey ( const std::vector< uint8_t > &  key_id,
- - - - + + @@ -130,22 +126,13 @@ bool 

Public Member Functions

-void SetHandlerForMainStream (std::shared_ptr< MediaHandler > handler)
 
-void SetHandlerForTrickPlay (uint32_t trick_play_factor, std::shared_ptr< MediaHandler > handler)
 
TrickPlayHandler (uint32_t factor)
 
- Public Member Functions inherited from shaka::media::MediaHandler
Status SetHandler (size_t output_stream_index, std::shared_ptr< MediaHandler > handler)
 Validate if the handler is connected to its upstream handler.
 
- - - - - - - - - - - - + + + + -

-Protected Member Functions

MediaHandler implementation overrides.
Status InitializeInternal () override
 
Status Process (std::unique_ptr< StreamData > stream_data) override
 
-bool ValidateOutputStreamIndex (size_t stream_index) const override
 Validate if the stream at the specified index actually exists.
 
-Status OnFlushRequest (size_t input_stream_index) override
 Event handler for flush request at the specific input stream index.
 

+Additional Inherited Members

- Protected Member Functions inherited from shaka::media::MediaHandler
+virtual bool ValidateOutputStreamIndex (size_t stream_index) const
 Validate if the stream at the specified index actually exists.
 
Status Dispatch (std::unique_ptr< StreamData > stream_data)
 
@@ -194,83 +181,19 @@ const std::map< size_t,
std::pair< std::shared_ptr
< MediaHandler >, size_t > > & 
output_handlers ()
 
- - -

-Friends

-class TrickPlayHandlerTest
 

Detailed Description

-

TrickPlayHandler is a single-input-multiple-output media handler. It creates trick play streams from the input.

+

TrickPlayHandler is a single-input single-output media handler. It takes the input stream and converts it to a trick play stream by limiting which samples get passed downstream.

-

Definition at line 23 of file trick_play_handler.h.

-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - -
Status shaka::media::TrickPlayHandler::InitializeInternal ()
-
-overrideprotectedvirtual
-
-

Internal implementation of initialize. Note that it should only initialize the MediaHandler itself. Downstream handlers are handled in Initialize().

- -

Implements shaka::media::MediaHandler.

- -

Definition at line 36 of file trick_play_handler.cc.

- -
-
- -
-
- - - - - -
- - - - - - - - -
Status shaka::media::TrickPlayHandler::Process (std::unique_ptr< StreamDatastream_data)
-
-overrideprotectedvirtual
-
-

Process the incoming stream data. Note that (1) stream_data.stream_index should be the input stream index; (2) The implementation needs to call DispatchXxx to dispatch the processed stream data to the downstream handlers after finishing processing if needed.

- -

Implements shaka::media::MediaHandler.

- -

Definition at line 52 of file trick_play_handler.cc.

- -
-
-
The documentation for this class was generated from the following files:

The documentation for this class was generated from the following files: diff --git a/docs/db/dec/audio__timestamp__helper_8cc_source.html b/docs/db/dec/audio__timestamp__helper_8cc_source.html index 4e60c072e9..36212ee3f1 100644 --- a/docs/db/dec/audio__timestamp__helper_8cc_source.html +++ b/docs/db/dec/audio__timestamp__helper_8cc_source.html @@ -165,7 +165,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dee/pes__packet_8cc_source.html b/docs/db/dee/pes__packet_8cc_source.html index a7f954478c..c5ff638b05 100644 --- a/docs/db/dee/pes__packet_8cc_source.html +++ b/docs/db/dee/pes__packet_8cc_source.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/df2/structshaka_1_1media_1_1H265SliceHeader-members.html b/docs/db/df2/structshaka_1_1media_1_1H265SliceHeader-members.html index 1715995b1f..574fd22339 100644 --- a/docs/db/df2/structshaka_1_1media_1_1H265SliceHeader-members.html +++ b/docs/db/df2/structshaka_1_1media_1_1H265SliceHeader-members.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
diff --git a/docs/db/df6/classshaka_1_1media_1_1Cluster-members.html b/docs/db/df6/classshaka_1_1media_1_1Cluster-members.html index 56a425b6c3..05e46b36e4 100644 --- a/docs/db/df6/classshaka_1_1media_1_1Cluster-members.html +++ b/docs/db/df6/classshaka_1_1media_1_1Cluster-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
diff --git a/docs/db/df6/muxer_8h_source.html b/docs/db/df6/muxer_8h_source.html index 98d951ab7d..8b227a3cb3 100644 --- a/docs/db/df6/muxer_8h_source.html +++ b/docs/db/df6/muxer_8h_source.html @@ -191,7 +191,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/df8/classshaka_1_1media_1_1H265ByteToUnitStreamConverter.html b/docs/db/df8/classshaka_1_1media_1_1H265ByteToUnitStreamConverter.html index 9f914af9b4..9432239dcb 100644 --- a/docs/db/df8/classshaka_1_1media_1_1H265ByteToUnitStreamConverter.html +++ b/docs/db/df8/classshaka_1_1media_1_1H265ByteToUnitStreamConverter.html @@ -233,7 +233,7 @@ void 
WarnIfNotMatch (i diff --git a/docs/db/dfb/mpd__utils_8cc_source.html b/docs/db/dfb/mpd__utils_8cc_source.html index a01f24e02e..535ce076af 100644 --- a/docs/db/dfb/mpd__utils_8cc_source.html +++ b/docs/db/dfb/mpd__utils_8cc_source.html @@ -469,7 +469,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dfc/mpd__notify__muxer__listener_8cc_source.html b/docs/db/dfc/mpd__notify__muxer__listener_8cc_source.html index d0ba8c1529..bc4553c917 100644 --- a/docs/db/dfc/mpd__notify__muxer__listener_8cc_source.html +++ b/docs/db/dfc/mpd__notify__muxer__listener_8cc_source.html @@ -270,7 +270,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dff/structshaka_1_1media_1_1mp4_1_1ChunkInfo-members.html b/docs/db/dff/structshaka_1_1media_1_1mp4_1_1ChunkInfo-members.html index fa72b4ed9f..f2f6769441 100644 --- a/docs/db/dff/structshaka_1_1media_1_1mp4_1_1ChunkInfo-members.html +++ b/docs/db/dff/structshaka_1_1media_1_1mp4_1_1ChunkInfo-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
diff --git a/docs/dc/d03/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter.html b/docs/dc/d03/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter.html index 1e2ce04b2b..4b246ea886 100644 --- a/docs/dc/d03/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter.html +++ b/docs/dc/d03/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter.html @@ -138,7 +138,7 @@ static const uint8_t 
kElem diff --git a/docs/dc/d06/classshaka_1_1media_1_1StreamInfo-members.html b/docs/dc/d06/classshaka_1_1media_1_1StreamInfo-members.html index 804dced76a..7bdd664d98 100644 --- a/docs/dc/d06/classshaka_1_1media_1_1StreamInfo-members.html +++ b/docs/dc/d06/classshaka_1_1media_1_1StreamInfo-members.html @@ -121,7 +121,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
diff --git a/docs/dc/d3b/fixed__key__encryption__flags_8cc_source.html b/docs/dc/d08/raw__key__encryption__flags_8cc_source.html similarity index 50% rename from docs/dc/d3b/fixed__key__encryption__flags_8cc_source.html rename to docs/dc/d08/raw__key__encryption__flags_8cc_source.html index ac75848ac7..958583aeea 100644 --- a/docs/dc/d3b/fixed__key__encryption__flags_8cc_source.html +++ b/docs/dc/d08/raw__key__encryption__flags_8cc_source.html @@ -4,7 +4,7 @@ -Shaka Packager SDK: packager/app/fixed_key_encryption_flags.cc Source File +Shaka Packager SDK: packager/app/raw_key_encryption_flags.cc Source File @@ -84,7 +84,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
-
fixed_key_encryption_flags.cc
+
raw_key_encryption_flags.cc
1 // Copyright 2014 Google Inc. All rights reserved.
@@ -93,79 +93,119 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
4 // license that can be found in the LICENSE file or at
5 // https://developers.google.com/open-source/licenses/bsd
6 //
-
7 // Defines command line flags for fixed key encryption/decryption.
+
7 // Defines command line flags for raw key encryption/decryption.
8 
-
9 #include "packager/app/fixed_key_encryption_flags.h"
+
9 #include "packager/app/raw_key_encryption_flags.h"
10 
11 #include "packager/app/validate_flag.h"
12 
13 DEFINE_bool(enable_fixed_key_encryption,
14  false,
-
15  "Enable encryption with fixed key.");
+
15  "Same as --enable_raw_key_encryption. Will be deprecated.");
16 DEFINE_bool(enable_fixed_key_decryption,
17  false,
-
18  "Enable decryption with fixed key.");
-
19 DEFINE_hex_bytes(key_id, "", "Key id in hex string format.");
-
20 DEFINE_hex_bytes(key, "", "Key in hex string format.");
-
21 DEFINE_hex_bytes(
-
22  iv,
-
23  "",
-
24  "IV in hex string format. If not specified, a random IV will be "
-
25  "generated. This flag should only be used for testing.");
-
26 DEFINE_hex_bytes(
-
27  pssh,
-
28  "",
-
29  "One or more PSSH boxes in hex string format. If not specified, "
-
30  "will generate a v1 common PSSH box as specified in "
-
31  "https://goo.gl/s8RIhr.");
-
32 
-
33 namespace shaka {
-
34 
- -
36  bool success = true;
-
37 
-
38  const bool fixed_crypto =
-
39  FLAGS_enable_fixed_key_encryption || FLAGS_enable_fixed_key_decryption;
-
40  const char fixed_crypto_label[] = "--enable_fixed_key_encryption/decryption";
-
41  // --key_id and --key are associated with --enable_fixed_key_encryption and
-
42  // --enable_fixed_key_decryption.
-
43  if (!ValidateFlag("key_id", FLAGS_key_id_bytes, fixed_crypto, false,
-
44  fixed_crypto_label)) {
-
45  success = false;
-
46  }
-
47  if (!ValidateFlag("key", FLAGS_key_bytes, fixed_crypto, false,
-
48  fixed_crypto_label)) {
-
49  success = false;
-
50  }
-
51  if (!ValidateFlag("iv", FLAGS_iv_bytes, FLAGS_enable_fixed_key_encryption,
-
52  true, "--enable_fixed_key_encryption")) {
-
53  success = false;
-
54  }
-
55  if (!FLAGS_iv_bytes.empty()) {
-
56  if (FLAGS_iv_bytes.size() != 8 && FLAGS_iv_bytes.size() != 16) {
-
57  PrintError(
-
58  "--iv should be either 8 bytes (16 hex digits) or 16 bytes (32 hex "
-
59  "digits).");
-
60  success = false;
-
61  }
-
62  }
-
63 
-
64  // --pssh is associated with --enable_fix_key_encryption.
-
65  if (!ValidateFlag("pssh", FLAGS_pssh_bytes, FLAGS_enable_fixed_key_encryption,
-
66  true, "--enable_fixed_key_encryption")) {
-
67  success = false;
-
68  }
-
69  return success;
-
70 }
-
71 
-
72 } // namespace shaka
+
18  "Same as --enable_raw_key_decryption. Will be deprecated.");
+
19 DEFINE_bool(enable_raw_key_encryption,
+
20  false,
+
21  "Enable encryption with raw key (key provided in command line).");
+
22 DEFINE_bool(enable_raw_key_decryption,
+
23  false,
+
24  "Enable decryption with raw key (key provided in command line).");
+
25 DEFINE_hex_bytes(
+
26  key_id,
+
27  "",
+
28  "Key id in hex string format. Will be deprecated. Use --keys.");
+
29 DEFINE_hex_bytes(key,
+
30  "",
+
31  "Key in hex string format. Will be deprecated. Use --keys.");
+
32 DEFINE_string(keys,
+
33  "",
+
34  "A list of key information in the form of label=<drm "
+
35  "label>:key_id=<32-digit key id in hex>:key=<32-digit key in "
+
36  "hex>,label=...");
+
37 DEFINE_hex_bytes(
+
38  iv,
+
39  "",
+
40  "IV in hex string format. If not specified, a random IV will be "
+
41  "generated. This flag should only be used for testing.");
+
42 DEFINE_hex_bytes(
+
43  pssh,
+
44  "",
+
45  "One or more PSSH boxes in hex string format. If not specified, "
+
46  "will generate a v1 common PSSH box as specified in "
+
47  "https://goo.gl/s8RIhr.");
+
48 
+
49 namespace shaka {
+
50 
+ +
52  bool success = true;
+
53 
+
54  if (FLAGS_enable_fixed_key_encryption)
+
55  FLAGS_enable_raw_key_encryption = true;
+
56  if (FLAGS_enable_fixed_key_decryption)
+
57  FLAGS_enable_raw_key_decryption = true;
+
58  if (FLAGS_enable_fixed_key_encryption || FLAGS_enable_fixed_key_decryption) {
+ +
60  "--enable_fixed_key_encryption and --enable_fixed_key_decryption are "
+
61  "going to be deprecated. Please switch to --enable_raw_key_encryption "
+
62  "and --enable_raw_key_decryption as soon as possible.");
+
63  }
+
64 
+
65  const bool raw_key_crypto =
+
66  FLAGS_enable_raw_key_encryption || FLAGS_enable_raw_key_decryption;
+
67  const char raw_key_crypto_label[] = "--enable_raw_key_encryption/decryption";
+
68  // --key_id and --key are associated with --enable_raw_key_encryption and
+
69  // --enable_raw_key_decryption.
+
70  if (FLAGS_keys.empty()) {
+
71  if (!ValidateFlag("key_id", FLAGS_key_id_bytes, raw_key_crypto, false,
+
72  raw_key_crypto_label)) {
+
73  success = false;
+
74  }
+
75  if (!ValidateFlag("key", FLAGS_key_bytes, raw_key_crypto, false,
+
76  raw_key_crypto_label)) {
+
77  success = false;
+
78  }
+
79  if (success && (!FLAGS_key_id_bytes.empty() || !FLAGS_key_bytes.empty())) {
+ +
81  "--key_id and --key are going to be deprecated. Please switch to "
+
82  "--keys as soon as possible.");
+
83  }
+
84  } else {
+
85  if (!FLAGS_key_id_bytes.empty() || !FLAGS_key_bytes.empty()) {
+
86  PrintError("--key_id or --key cannot be used together with --keys.");
+
87  success = false;
+
88  }
+
89  }
+
90  if (!ValidateFlag("iv", FLAGS_iv_bytes, FLAGS_enable_raw_key_encryption, true,
+
91  "--enable_raw_key_encryption")) {
+
92  success = false;
+
93  }
+
94  if (!FLAGS_iv_bytes.empty()) {
+
95  if (FLAGS_iv_bytes.size() != 8 && FLAGS_iv_bytes.size() != 16) {
+
96  PrintError(
+
97  "--iv should be either 8 bytes (16 hex digits) or 16 bytes (32 hex "
+
98  "digits).");
+
99  success = false;
+
100  }
+
101  }
+
102 
+
103  // --pssh is associated with --enable_raw_key_encryption.
+
104  if (!ValidateFlag("pssh", FLAGS_pssh_bytes, FLAGS_enable_raw_key_encryption,
+
105  true, "--enable_raw_key_encryption")) {
+
106  success = false;
+
107  }
+
108  return success;
+
109 }
+
110 
+
111 } // namespace shaka
void PrintError(const std::string &error_message)
-
bool ValidateFlag(const char *flag_name, const FlagType &flag_value, bool condition, bool optional, const char *label)
Definition: validate_flag.h:33
-
bool ValidateFixedCryptoFlags()
+
bool ValidateFlag(const char *flag_name, const FlagType &flag_value, bool condition, bool optional, const char *label)
Definition: validate_flag.h:37
+
bool ValidateRawKeyCryptoFlags()
+
void PrintWarning(const std::string &warning_message)
diff --git a/docs/dc/d0b/classshaka_1_1media_1_1ESDescriptor-members.html b/docs/dc/d0b/classshaka_1_1media_1_1ESDescriptor-members.html index a6ee798628..c69470bd76 100644 --- a/docs/dc/d0b/classshaka_1_1media_1_1ESDescriptor-members.html +++ b/docs/dc/d0b/classshaka_1_1media_1_1ESDescriptor-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d16/classshaka_1_1media_1_1SeekHead.html b/docs/dc/d16/classshaka_1_1media_1_1SeekHead.html index d386760652..ee430f91ee 100644 --- a/docs/dc/d16/classshaka_1_1media_1_1SeekHead.html +++ b/docs/dc/d16/classshaka_1_1media_1_1SeekHead.html @@ -149,7 +149,7 @@ void set_tracks_pos (u diff --git a/docs/dc/d17/status__test__util_8h_source.html b/docs/dc/d17/status__test__util_8h_source.html index ba15d58cb5..c05601511f 100644 --- a/docs/dc/d17/status__test__util_8h_source.html +++ b/docs/dc/d17/status__test__util_8h_source.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d18/classshaka_1_1media_1_1wvm_1_1WvmMediaParser.html b/docs/dc/d18/classshaka_1_1media_1_1wvm_1_1WvmMediaParser.html index 36d4924c59..c1a06d0917 100644 --- a/docs/dc/d18/classshaka_1_1media_1_1wvm_1_1WvmMediaParser.html +++ b/docs/dc/d18/classshaka_1_1media_1_1wvm_1_1WvmMediaParser.html @@ -257,7 +257,7 @@ std::shared_ptr< diff --git a/docs/dc/d18/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html b/docs/dc/d18/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html index cfa9075d12..9589dc0571 100644 --- a/docs/dc/d18/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html +++ b/docs/dc/d18/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d19/box_8h_source.html b/docs/dc/d19/box_8h_source.html index c4dd37d8d9..4d34656099 100644 --- a/docs/dc/d19/box_8h_source.html +++ b/docs/dc/d19/box_8h_source.html @@ -184,7 +184,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d1c/replicator_8h_source.html b/docs/dc/d1c/replicator_8h_source.html new file mode 100644 index 0000000000..4479f557e3 --- /dev/null +++ b/docs/dc/d1c/replicator_8h_source.html @@ -0,0 +1,127 @@ + + + + + + +Shaka Packager SDK: packager/media/replicator/replicator.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Shaka Packager SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
replicator.h
+
+
+
1 // Copyright 2017 Google Inc. All rights reserved.
+
2 //
+
3 // Use of this source code is governed by a BSD-style
+
4 // license that can be found in the LICENSE file or at
+
5 // https://developers.google.com/open-source/licenses/bsd
+
6 
+
7 #ifndef PACKAGER_MEDIA_REPLICATOR_HANDLER_H_
+
8 #define PACKAGER_MEDIA_REPLICATOR_HANDLER_H_
+
9 
+
10 #include "packager/media/base/media_handler.h"
+
11 
+
12 namespace shaka {
+
13 namespace media {
+
14 
+
19 class Replicator : public MediaHandler {
+
20  private:
+
21  Status InitializeInternal() override;
+
22  Status Process(std::unique_ptr<StreamData> stream_data) override;
+
23  bool ValidateOutputStreamIndex(size_t stream_index) const override;
+
24  Status OnFlushRequest(size_t input_stream_index) override;
+
25 };
+
26 
+
27 } // namespace media
+
28 } // namespace shaka
+
29 
+
30 #endif // PACKAGER_MEDIA_REPLICATOR_HANDLER_H_
+ + + +
+ + + + diff --git a/docs/dc/d22/dash__iop__mpd__notifier_8cc_source.html b/docs/dc/d22/dash__iop__mpd__notifier_8cc_source.html index 965e2792a4..9863c82ec2 100644 --- a/docs/dc/d22/dash__iop__mpd__notifier_8cc_source.html +++ b/docs/dc/d22/dash__iop__mpd__notifier_8cc_source.html @@ -422,7 +422,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d35/structshaka_1_1EncryptionParams-members.html b/docs/dc/d35/structshaka_1_1EncryptionParams-members.html index a4d53b5f1f..54be87bde2 100644 --- a/docs/dc/d35/structshaka_1_1EncryptionParams-members.html +++ b/docs/dc/d35/structshaka_1_1EncryptionParams-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d3c/webm__cluster__parser_8h_source.html b/docs/dc/d3c/webm__cluster__parser_8h_source.html index d900ee6323..c5c888ce00 100644 --- a/docs/dc/d3c/webm__cluster__parser_8h_source.html +++ b/docs/dc/d3c/webm__cluster__parser_8h_source.html @@ -304,7 +304,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d3f/key__source_8h_source.html b/docs/dc/d3f/key__source_8h_source.html index e16e5854d8..7e7021749c 100644 --- a/docs/dc/d3f/key__source_8h_source.html +++ b/docs/dc/d3f/key__source_8h_source.html @@ -159,7 +159,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d40/classshaka_1_1hls_1_1HlsNotifier-members.html b/docs/dc/d40/classshaka_1_1hls_1_1HlsNotifier-members.html index 7a37d1b4f1..ff038ed757 100644 --- a/docs/dc/d40/classshaka_1_1hls_1_1HlsNotifier-members.html +++ b/docs/dc/d40/classshaka_1_1hls_1_1HlsNotifier-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d40/classshaka_1_1xml_1_1XmlNode-members.html b/docs/dc/d40/classshaka_1_1xml_1_1XmlNode-members.html index 405a9e02c3..1b58f38170 100644 --- a/docs/dc/d40/classshaka_1_1xml_1_1XmlNode-members.html +++ b/docs/dc/d40/classshaka_1_1xml_1_1XmlNode-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d41/classshaka_1_1media_1_1BufferWriter.html b/docs/dc/d41/classshaka_1_1media_1_1BufferWriter.html index 3b78ddbf2d..1786243a0f 100644 --- a/docs/dc/d41/classshaka_1_1media_1_1BufferWriter.html +++ b/docs/dc/d41/classshaka_1_1media_1_1BufferWriter.html @@ -301,7 +301,7 @@ void AppendInt (int64_ diff --git a/docs/dc/d4a/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html b/docs/dc/d4a/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html index 8dab6bdf44..907c47d884 100644 --- a/docs/dc/d4a/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html +++ b/docs/dc/d4a/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d4f/structshaka_1_1media_1_1mp4_1_1TrackHeader-members.html b/docs/dc/d4f/structshaka_1_1media_1_1mp4_1_1TrackHeader-members.html index ad1890bce4..7a6f452f1e 100644 --- a/docs/dc/d4f/structshaka_1_1media_1_1mp4_1_1TrackHeader-members.html +++ b/docs/dc/d4f/structshaka_1_1media_1_1mp4_1_1TrackHeader-members.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d51/h265__byte__to__unit__stream__converter_8cc_source.html b/docs/dc/d51/h265__byte__to__unit__stream__converter_8cc_source.html index b16ef72dbb..97b2b7acb9 100644 --- a/docs/dc/d51/h265__byte__to__unit__stream__converter_8cc_source.html +++ b/docs/dc/d51/h265__byte__to__unit__stream__converter_8cc_source.html @@ -239,7 +239,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d52/decoding__time__iterator_8h_source.html b/docs/dc/d52/decoding__time__iterator_8h_source.html index fabca9b95a..2c101d372a 100644 --- a/docs/dc/d52/decoding__time__iterator_8h_source.html +++ b/docs/dc/d52/decoding__time__iterator_8h_source.html @@ -147,7 +147,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d53/webm_2segmenter_8cc_source.html b/docs/dc/d53/webm_2segmenter_8cc_source.html index 27551c4240..e0d23ce115 100644 --- a/docs/dc/d53/webm_2segmenter_8cc_source.html +++ b/docs/dc/d53/webm_2segmenter_8cc_source.html @@ -246,7 +246,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
157 }
158 
159 Status Segmenter::AddSample(const MediaSample& source_sample) {
-
160  std::shared_ptr<MediaSample> sample = MediaSample::CopyFrom(source_sample);
+
160  std::shared_ptr<MediaSample> sample(source_sample.Clone());
161 
162  if (sample_duration_ == 0) {
163  first_timestamp_ = sample->pts();
@@ -535,6 +535,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
This class listens to progress updates events.
mkvmuxer::int64 Position() const override
Definition: mkv_writer.cc:74
+
std::shared_ptr< MediaSample > Clone() const
Clone the object and return a new MediaSample.
Definition: media_sample.cc:81
void WriteWebM(std::vector< uint8_t > *data) const
An implementation of IMkvWriter using our File type.
Definition: mkv_writer.h:21
bool ParseMP4(const std::vector< uint8_t > &data)
@@ -543,13 +544,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
virtual void OnProgress(double progress)=0
Status FinalizeSegment(size_t stream_id, const SegmentInfo &segment_info)
Definition: segmenter.cc:139
-
static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:45
Holds video stream information.
diff --git a/docs/dc/d54/structshaka_1_1media_1_1H264DecRefPicMarking.html b/docs/dc/d54/structshaka_1_1media_1_1H264DecRefPicMarking.html index 0f096992ce..80958077ab 100644 --- a/docs/dc/d54/structshaka_1_1media_1_1H264DecRefPicMarking.html +++ b/docs/dc/d54/structshaka_1_1media_1_1H264DecRefPicMarking.html @@ -121,7 +121,7 @@ int max_long_term_frame_id diff --git a/docs/dc/d58/webm__media__parser_8h_source.html b/docs/dc/d58/webm__media__parser_8h_source.html index 8698563914..43dac46b34 100644 --- a/docs/dc/d58/webm__media__parser_8h_source.html +++ b/docs/dc/d58/webm__media__parser_8h_source.html @@ -178,7 +178,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d5c/classshaka_1_1MockMpdNotifier.html b/docs/dc/d5c/classshaka_1_1MockMpdNotifier.html index 9e814dd003..d8861738b4 100644 --- a/docs/dc/d5c/classshaka_1_1MockMpdNotifier.html +++ b/docs/dc/d5c/classshaka_1_1MockMpdNotifier.html @@ -162,7 +162,7 @@ Public Member Functions diff --git a/docs/dc/d69/structshaka_1_1media_1_1mp4_1_1CueSettingsBox-members.html b/docs/dc/d69/structshaka_1_1media_1_1mp4_1_1CueSettingsBox-members.html index b803a8eb08..e4fff71e6b 100644 --- a/docs/dc/d69/structshaka_1_1media_1_1mp4_1_1CueSettingsBox-members.html +++ b/docs/dc/d69/structshaka_1_1media_1_1mp4_1_1CueSettingsBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d6f/classshaka_1_1media_1_1webm_1_1Segmenter-members.html b/docs/dc/d6f/classshaka_1_1media_1_1webm_1_1Segmenter-members.html index 5d12511b40..cf68e495a0 100644 --- a/docs/dc/d6f/classshaka_1_1media_1_1webm_1_1Segmenter-members.html +++ b/docs/dc/d6f/classshaka_1_1media_1_1webm_1_1Segmenter-members.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d71/classshaka_1_1media_1_1mp2t_1_1TsSection-members.html b/docs/dc/d71/classshaka_1_1media_1_1mp2t_1_1TsSection-members.html index 857c861dfc..571f47202c 100644 --- a/docs/dc/d71/classshaka_1_1media_1_1mp2t_1_1TsSection-members.html +++ b/docs/dc/d71/classshaka_1_1media_1_1mp2t_1_1TsSection-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d73/classshaka_1_1media_1_1MockMuxerListener.html b/docs/dc/d73/classshaka_1_1media_1_1MockMuxerListener.html index 8c486faa9c..5199663cf1 100644 --- a/docs/dc/d73/classshaka_1_1media_1_1MockMuxerListener.html +++ b/docs/dc/d73/classshaka_1_1media_1_1MockMuxerListener.html @@ -204,7 +204,7 @@ Additional Inherited Members diff --git a/docs/dc/d7b/closure__thread_8cc_source.html b/docs/dc/d7b/closure__thread_8cc_source.html index e157565020..4def24a012 100644 --- a/docs/dc/d7b/closure__thread_8cc_source.html +++ b/docs/dc/d7b/closure__thread_8cc_source.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d7b/h264__parser_8cc_source.html b/docs/dc/d7b/h264__parser_8cc_source.html index c025a614e8..cd9779ef6e 100644 --- a/docs/dc/d7b/h264__parser_8cc_source.html +++ b/docs/dc/d7b/h264__parser_8cc_source.html @@ -1256,7 +1256,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d86/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html b/docs/dc/d86/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html index ca5f0867c2..616ea5ea0a 100644 --- a/docs/dc/d86/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html +++ b/docs/dc/d86/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d8f/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader.html b/docs/dc/d8f/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader.html index b22b42e270..d7cc981ee8 100644 --- a/docs/dc/d8f/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader.html +++ b/docs/dc/d8f/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/dc/d9a/structshaka_1_1media_1_1Range-members.html b/docs/dc/d9a/structshaka_1_1media_1_1Range-members.html index 97e711816d..458d77d8cf 100644 --- a/docs/dc/d9a/structshaka_1_1media_1_1Range-members.html +++ b/docs/dc/d9a/structshaka_1_1media_1_1Range-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/da0/structshaka_1_1EncryptionParams.html b/docs/dc/da0/structshaka_1_1EncryptionParams.html index 5a90bf33d6..0ede2f92b5 100644 --- a/docs/dc/da0/structshaka_1_1EncryptionParams.html +++ b/docs/dc/da0/structshaka_1_1EncryptionParams.html @@ -117,9 +117,9 @@ Public Attributes PlayreadyEncryptionParams playready   - -RawKeyEncryptionParams raw_key -  + +RawKeyParams raw_key double clear_lead_in_seconds = 0  Clear lead duration in seconds.
@@ -160,7 +160,7 @@ static constexpr uint32_t 

Detailed Description

Encryption parameters.

-

Definition at line 119 of file crypto_params.h.

+

Definition at line 121 of file crypto_params.h.

Member Data Documentation

@@ -173,7 +173,7 @@ static constexpr uint32_t 

Specifies the key provider, which determines which key provider is used and which encryption params is valid. 'kNone' means not to encrypt the streams.

-

Definition at line 123 of file crypto_params.h.

+

Definition at line 125 of file crypto_params.h.

@@ -196,7 +196,7 @@ static constexpr uint32_t 

Crypto period duration in seconds. A positive value means key rotation is enabled, the key provider must support key rotation in this case.

-

Definition at line 139 of file crypto_params.h.

+

Definition at line 141 of file crypto_params.h.

@@ -211,7 +211,7 @@ static constexpr uint32_t 

Stream label function assigns a stream label to the stream to be encrypted. Stream label is used to associate KeyPair with streams. Streams with the same stream label always uses the same keyPair; Streams with different stream label could use the same or different KeyPairs. A default stream label function will be generated if not set.

-

Definition at line 174 of file crypto_params.h.

+

Definition at line 176 of file crypto_params.h.

@@ -221,7 +221,7 @@ static constexpr uint32_t  diff --git a/docs/dc/da0/structshaka_1_1media_1_1mp4_1_1DTSSpecific.html b/docs/dc/da0/structshaka_1_1media_1_1mp4_1_1DTSSpecific.html index 867048367a..7c9a203306 100644 --- a/docs/dc/da0/structshaka_1_1media_1_1mp4_1_1DTSSpecific.html +++ b/docs/dc/da0/structshaka_1_1media_1_1mp4_1_1DTSSpecific.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/dc/da1/classshaka_1_1MpdBuilder.html b/docs/dc/da1/classshaka_1_1MpdBuilder.html index 786d86f90c..0bfe0acd8c 100644 --- a/docs/dc/da1/classshaka_1_1MpdBuilder.html +++ b/docs/dc/da1/classshaka_1_1MpdBuilder.html @@ -323,7 +323,7 @@ template<DashProfile profile> diff --git a/docs/dc/da3/buffer__callback__params_8h_source.html b/docs/dc/da3/buffer__callback__params_8h_source.html index 13653ca23c..91e7d8a381 100644 --- a/docs/dc/da3/buffer__callback__params_8h_source.html +++ b/docs/dc/da3/buffer__callback__params_8h_source.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/da6/classshaka_1_1media_1_1ContentEncoding.html b/docs/dc/da6/classshaka_1_1media_1_1ContentEncoding.html index 1758a8b31f..6453ee8420 100644 --- a/docs/dc/da6/classshaka_1_1media_1_1ContentEncoding.html +++ b/docs/dc/da6/classshaka_1_1media_1_1ContentEncoding.html @@ -208,7 +208,7 @@ Static Public Attributes diff --git a/docs/dc/dbf/box__buffer_8h_source.html b/docs/dc/dbf/box__buffer_8h_source.html index 5c9cc2d7ed..0d90e77d25 100644 --- a/docs/dc/dbf/box__buffer_8h_source.html +++ b/docs/dc/dbf/box__buffer_8h_source.html @@ -294,7 +294,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/dc1/classshaka_1_1xml_1_1RepresentationXmlNode-members.html b/docs/dc/dc1/classshaka_1_1xml_1_1RepresentationXmlNode-members.html index bfb6e412c8..440eb05ff1 100644 --- a/docs/dc/dc1/classshaka_1_1xml_1_1RepresentationXmlNode-members.html +++ b/docs/dc/dc1/classshaka_1_1xml_1_1RepresentationXmlNode-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/dca/classshaka_1_1media_1_1WebMListParser.html b/docs/dc/dca/classshaka_1_1media_1_1WebMListParser.html index 8e6cc87a26..7bafcf649a 100644 --- a/docs/dc/dca/classshaka_1_1media_1_1WebMListParser.html +++ b/docs/dc/dca/classshaka_1_1media_1_1WebMListParser.html @@ -210,7 +210,7 @@ void  diff --git a/docs/dc/dd9/rsa__key_8cc_source.html b/docs/dc/dd9/rsa__key_8cc_source.html index 86ba0d9753..0db25faf2d 100644 --- a/docs/dc/dd9/rsa__key_8cc_source.html +++ b/docs/dc/dd9/rsa__key_8cc_source.html @@ -340,7 +340,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/ddf/structshaka_1_1media_1_1mp4_1_1Media.html b/docs/dc/ddf/structshaka_1_1media_1_1mp4_1_1Media.html index 4308a068bc..6b569fc041 100644 --- a/docs/dc/ddf/structshaka_1_1media_1_1mp4_1_1Media.html +++ b/docs/dc/ddf/structshaka_1_1media_1_1mp4_1_1Media.html @@ -179,7 +179,7 @@ Additional Inherited Members diff --git a/docs/dc/de1/structshaka_1_1SegmentInfo.html b/docs/dc/de1/structshaka_1_1SegmentInfo.html index 6205e70253..d6b677a165 100644 --- a/docs/dc/de1/structshaka_1_1SegmentInfo.html +++ b/docs/dc/de1/structshaka_1_1SegmentInfo.html @@ -118,7 +118,7 @@ uint64_t repeat diff --git a/docs/dc/deb/classshaka_1_1media_1_1mp4_1_1Fragmenter-members.html b/docs/dc/deb/classshaka_1_1media_1_1mp4_1_1Fragmenter-members.html index aaeaf10db3..b10a17a394 100644 --- a/docs/dc/deb/classshaka_1_1media_1_1mp4_1_1Fragmenter-members.html +++ b/docs/dc/deb/classshaka_1_1media_1_1mp4_1_1Fragmenter-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/deb/h265__byte__to__unit__stream__converter_8h_source.html b/docs/dc/deb/h265__byte__to__unit__stream__converter_8h_source.html index 092d6c9204..1eafb6db32 100644 --- a/docs/dc/deb/h265__byte__to__unit__stream__converter_8h_source.html +++ b/docs/dc/deb/h265__byte__to__unit__stream__converter_8h_source.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/dec/ts__section__pmt_8cc_source.html b/docs/dc/dec/ts__section__pmt_8cc_source.html index aface5a81e..d69153b14c 100644 --- a/docs/dc/dec/ts__section__pmt_8cc_source.html +++ b/docs/dc/dec/ts__section__pmt_8cc_source.html @@ -208,7 +208,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/df0/classshaka_1_1media_1_1ClosureThread.html b/docs/dc/df0/classshaka_1_1media_1_1ClosureThread.html index 28d9dface5..95f9b893fa 100644 --- a/docs/dc/df0/classshaka_1_1media_1_1ClosureThread.html +++ b/docs/dc/df0/classshaka_1_1media_1_1ClosureThread.html @@ -179,7 +179,7 @@ void  diff --git a/docs/dc/df0/structshaka_1_1TestParams-members.html b/docs/dc/df0/structshaka_1_1TestParams-members.html index 55995fc93c..e190bd7ca7 100644 --- a/docs/dc/df0/structshaka_1_1TestParams-members.html +++ b/docs/dc/df0/structshaka_1_1TestParams-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/df2/classshaka_1_1media_1_1WebVttMediaParser.html b/docs/dc/df2/classshaka_1_1media_1_1WebVttMediaParser.html index 16b498d904..7591a6cbb8 100644 --- a/docs/dc/df2/classshaka_1_1media_1_1WebVttMediaParser.html +++ b/docs/dc/df2/classshaka_1_1media_1_1WebVttMediaParser.html @@ -261,7 +261,7 @@ std::shared_ptr< diff --git a/docs/dc/df4/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter-members.html b/docs/dc/df4/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter-members.html index f0db0c4ac5..d18baf1aed 100644 --- a/docs/dc/df4/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter-members.html +++ b/docs/dc/df4/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter-members.html @@ -130,7 +130,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/df7/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun-members.html b/docs/dc/df7/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun-members.html index 1daaea03e1..7e467c7418 100644 --- a/docs/dc/df7/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun-members.html +++ b/docs/dc/df7/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun-members.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/df8/closure__thread_8h_source.html b/docs/dc/df8/closure__thread_8h_source.html index d0d7f2b78f..653372574f 100644 --- a/docs/dc/df8/closure__thread_8h_source.html +++ b/docs/dc/df8/closure__thread_8h_source.html @@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d05/encryption__config_8h_source.html b/docs/dd/d05/encryption__config_8h_source.html index 6cce5eb130..ec2e4593da 100644 --- a/docs/dd/d05/encryption__config_8h_source.html +++ b/docs/dd/d05/encryption__config_8h_source.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d06/structshaka_1_1media_1_1mp4_1_1ChunkOffset.html b/docs/dd/d06/structshaka_1_1media_1_1mp4_1_1ChunkOffset.html index 2752650499..b5af69623a 100644 --- a/docs/dd/d06/structshaka_1_1media_1_1mp4_1_1ChunkOffset.html +++ b/docs/dd/d06/structshaka_1_1media_1_1mp4_1_1ChunkOffset.html @@ -180,7 +180,7 @@ uint32_t flags diff --git a/docs/dd/d0c/classshaka_1_1ThreadedIoFile.html b/docs/dd/d0c/classshaka_1_1ThreadedIoFile.html index 11093f6040..57044a29e7 100644 --- a/docs/dd/d0c/classshaka_1_1ThreadedIoFile.html +++ b/docs/dd/d0c/classshaka_1_1ThreadedIoFile.html @@ -446,7 +446,7 @@ Additional Inherited Members diff --git a/docs/dd/d11/mpd__builder_8cc_source.html b/docs/dd/d11/mpd__builder_8cc_source.html index 9b1a2e9d0d..089484cae2 100644 --- a/docs/dd/d11/mpd__builder_8cc_source.html +++ b/docs/dd/d11/mpd__builder_8cc_source.html @@ -1522,7 +1522,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d12/mpd__writer_8cc_source.html b/docs/dd/d12/mpd__writer_8cc_source.html index c83692dd27..f0fc4e1727 100644 --- a/docs/dd/d12/mpd__writer_8cc_source.html +++ b/docs/dd/d12/mpd__writer_8cc_source.html @@ -215,7 +215,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d13/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html b/docs/dd/d13/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html index 838f6ac0a5..5d5fefaf8f 100644 --- a/docs/dd/d13/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html +++ b/docs/dd/d13/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html @@ -188,7 +188,7 @@ Additional Inherited Members diff --git a/docs/dd/d17/classshaka_1_1media_1_1Demuxer.html b/docs/dd/d17/classshaka_1_1media_1_1Demuxer.html index 0706195a0b..a434f17238 100644 --- a/docs/dd/d17/classshaka_1_1media_1_1Demuxer.html +++ b/docs/dd/d17/classshaka_1_1media_1_1Demuxer.html @@ -488,7 +488,7 @@ std::pair< std::shared_ptr
diff --git a/docs/dd/d18/es__parser__adts_8h_source.html b/docs/dd/d18/es__parser__adts_8h_source.html index f0a20981c0..488bfe6173 100644 --- a/docs/dd/d18/es__parser__adts_8h_source.html +++ b/docs/dd/d18/es__parser__adts_8h_source.html @@ -172,7 +172,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d19/video__stream__info_8cc_source.html b/docs/dd/d19/video__stream__info_8cc_source.html index 2e842718a8..baf4cb9c1b 100644 --- a/docs/dd/d19/video__stream__info_8cc_source.html +++ b/docs/dd/d19/video__stream__info_8cc_source.html @@ -192,7 +192,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.html b/docs/dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.html index a1a2491746..6f121567ff 100644 --- a/docs/dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.html +++ b/docs/dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.html @@ -592,7 +592,7 @@ void  diff --git a/docs/dd/d30/wvm__media__parser_8cc_source.html b/docs/dd/d30/wvm__media__parser_8cc_source.html index 7a683f2025..3d0fbd4487 100644 --- a/docs/dd/d30/wvm__media__parser_8cc_source.html +++ b/docs/dd/d30/wvm__media__parser_8cc_source.html @@ -905,7 +905,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
816 
817 bool WvmMediaParser::Output(bool output_encrypted_sample) {
818  if (output_encrypted_sample) {
-
819  media_sample_->set_data(sample_data_.data(), sample_data_.size());
+
819  media_sample_->SetData(sample_data_.data(), sample_data_.size());
820  media_sample_->set_is_encrypted(true);
821  } else {
822  if ((prev_pes_stream_id_ & kPesStreamIdVideoMask) == kPesStreamIdVideo) {
@@ -916,7 +916,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
827  LOG(ERROR) << "Could not convert h.264 byte stream sample";
828  return false;
829  }
-
830  media_sample_->set_data(nal_unit_stream.data(), nal_unit_stream.size());
+
830  media_sample_->SetData(nal_unit_stream.data(), nal_unit_stream.size());
831  if (!is_initialized_) {
832  // Set extra data for video stream from AVC Decoder Config Record.
833  // Also, set codec string from the AVC Decoder Config Record.
@@ -1003,276 +1003,275 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
914  }
915  size_t header_size = adts_header.GetAdtsHeaderSize(frame_ptr,
916  frame_size);
-
917  media_sample_->set_data(frame_ptr + header_size,
-
918  frame_size - header_size);
-
919  if (!is_initialized_) {
-
920  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
-
921  if (stream_infos_[i]->stream_type() == kStreamAudio &&
-
922  stream_infos_[i]->codec_string().empty()) {
-
923  AudioStreamInfo* audio_stream_info =
-
924  reinterpret_cast<AudioStreamInfo*>(stream_infos_[i].get());
-
925  if (audio_stream_info->codec_config().empty()) {
-
926  // Set AudioStreamInfo fields using information from the ADTS
-
927  // header.
-
928  audio_stream_info->set_sampling_frequency(
-
929  adts_header.GetSamplingFrequency());
-
930  std::vector<uint8_t> audio_specific_config;
-
931  if (!adts_header.GetAudioSpecificConfig(&audio_specific_config)) {
-
932  LOG(ERROR) << "Could not compute AACAudiospecificconfig";
-
933  return false;
-
934  }
-
935  audio_stream_info->set_codec_config(audio_specific_config);
-
936  audio_stream_info->set_codec_string(
- -
938  kCodecAAC, adts_header.GetObjectType()));
-
939  } else {
-
940  // Set AudioStreamInfo fields using information from the
-
941  // AACAudioSpecificConfig record.
-
942  AACAudioSpecificConfig aac_config;
-
943  if (!aac_config.Parse(stream_infos_[i]->codec_config())) {
-
944  LOG(ERROR) << "Could not parse AACAudioSpecificconfig";
-
945  return false;
-
946  }
-
947  audio_stream_info->set_sampling_frequency(
-
948  aac_config.GetSamplesPerSecond());
-
949  audio_stream_info->set_codec_string(
- -
951  kCodecAAC, aac_config.GetAudioObjectType()));
-
952  }
-
953  }
-
954  }
-
955  }
-
956  }
-
957  }
-
958 
-
959  if (!is_initialized_) {
-
960  bool all_streams_have_config = true;
-
961  // Check if all collected stream infos have codec_config set.
-
962  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
-
963  if (stream_infos_[i]->codec_string().empty()) {
-
964  all_streams_have_config = false;
-
965  break;
-
966  }
-
967  }
-
968  if (all_streams_have_config) {
-
969  init_cb_.Run(stream_infos_);
-
970  is_initialized_ = true;
-
971  }
-
972  }
-
973 
-
974  DCHECK_GT(media_sample_->data_size(), 0UL);
-
975  std::string key = base::UintToString(current_program_id_).append(":")
-
976  .append(base::UintToString(prev_pes_stream_id_));
-
977  std::map<std::string, uint32_t>::iterator it =
-
978  program_demux_stream_map_.find(key);
-
979  if (it == program_demux_stream_map_.end()) {
-
980  // TODO(ramjic): Log error message here and in other error cases through
-
981  // this method.
-
982  return false;
-
983  }
-
984  DemuxStreamIdMediaSample demux_stream_media_sample;
-
985  demux_stream_media_sample.parsed_audio_or_video_stream_id =
-
986  prev_pes_stream_id_;
-
987  demux_stream_media_sample.demux_stream_id = (*it).second;
-
988  demux_stream_media_sample.media_sample = media_sample_;
-
989  // Check if sample can be emitted.
-
990  if (!is_initialized_) {
-
991  media_sample_queue_.push_back(demux_stream_media_sample);
-
992  } else {
-
993  // flush the sample queue and emit all queued samples.
-
994  while (!media_sample_queue_.empty()) {
-
995  if (!EmitPendingSamples())
-
996  return false;
-
997  }
-
998  // Emit current sample.
-
999  if (!EmitSample(prev_pes_stream_id_, (*it).second, media_sample_, false))
-
1000  return false;
-
1001  }
-
1002  return true;
-
1003 }
-
1004 
-
1005 bool WvmMediaParser::EmitSample(uint32_t parsed_audio_or_video_stream_id,
-
1006  uint32_t stream_id,
-
1007  const std::shared_ptr<MediaSample>& new_sample,
-
1008  bool isLastSample) {
-
1009  DCHECK(new_sample);
-
1010  if (isLastSample) {
-
1011  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
-
1012  kPesStreamIdVideo) {
-
1013  new_sample->set_duration(prev_media_sample_data_.video_sample_duration);
-
1014  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
-
1015  kPesStreamIdAudio) {
-
1016  new_sample->set_duration(prev_media_sample_data_.audio_sample_duration);
-
1017  }
-
1018  if (!new_sample_cb_.Run(stream_id, new_sample)) {
-
1019  LOG(ERROR) << "Failed to process the last sample.";
-
1020  return false;
-
1021  }
-
1022  return true;
-
1023  }
-
1024 
-
1025  // Cannot emit current sample. Compute duration first and then,
-
1026  // emit previous sample.
-
1027  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
-
1028  kPesStreamIdVideo) {
-
1029  if (prev_media_sample_data_.video_sample == NULL) {
-
1030  prev_media_sample_data_.video_sample = new_sample;
-
1031  prev_media_sample_data_.video_stream_id = stream_id;
-
1032  return true;
-
1033  }
-
1034  prev_media_sample_data_.video_sample->set_duration(
-
1035  new_sample->dts() - prev_media_sample_data_.video_sample->dts());
-
1036  prev_media_sample_data_.video_sample_duration =
-
1037  prev_media_sample_data_.video_sample->duration();
-
1038  if (!new_sample_cb_.Run(prev_media_sample_data_.video_stream_id,
-
1039  prev_media_sample_data_.video_sample)) {
-
1040  LOG(ERROR) << "Failed to process the video sample.";
-
1041  return false;
-
1042  }
-
1043  prev_media_sample_data_.video_sample = new_sample;
-
1044  prev_media_sample_data_.video_stream_id = stream_id;
-
1045  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
-
1046  kPesStreamIdAudio) {
-
1047  if (prev_media_sample_data_.audio_sample == NULL) {
-
1048  prev_media_sample_data_.audio_sample = new_sample;
-
1049  prev_media_sample_data_.audio_stream_id = stream_id;
-
1050  return true;
-
1051  }
-
1052  prev_media_sample_data_.audio_sample->set_duration(
-
1053  new_sample->dts() - prev_media_sample_data_.audio_sample->dts());
-
1054  prev_media_sample_data_.audio_sample_duration =
-
1055  prev_media_sample_data_.audio_sample->duration();
-
1056  if (!new_sample_cb_.Run(prev_media_sample_data_.audio_stream_id,
-
1057  prev_media_sample_data_.audio_sample)) {
-
1058  LOG(ERROR) << "Failed to process the audio sample.";
-
1059  return false;
-
1060  }
-
1061  prev_media_sample_data_.audio_sample = new_sample;
-
1062  prev_media_sample_data_.audio_stream_id = stream_id;
-
1063  }
-
1064  return true;
-
1065 }
-
1066 
-
1067 bool WvmMediaParser::GetAssetKey(const uint8_t* asset_id,
-
1068  EncryptionKey* encryption_key) {
-
1069  DCHECK(decryption_key_source_);
-
1070  Status status = decryption_key_source_->FetchKeys(
-
1071  EmeInitDataType::WIDEVINE_CLASSIC,
-
1072  std::vector<uint8_t>(asset_id, asset_id + sizeof(uint32_t)));
-
1073  if (!status.ok()) {
-
1074  LOG(ERROR) << "Fetch Key(s) failed for AssetID = "
-
1075  << ntohlFromBuffer(asset_id) << ", error = " << status;
-
1076  return false;
-
1077  }
-
1078 
-
1079  const char kHdStreamLabel[] = "HD";
-
1080  status = decryption_key_source_->GetKey(kHdStreamLabel, encryption_key);
-
1081  if (!status.ok()) {
-
1082  LOG(ERROR) << "Fetch Key(s) failed for AssetID = "
-
1083  << ntohlFromBuffer(asset_id) << ", error = " << status;
-
1084  return false;
-
1085  }
-
1086 
-
1087  return true;
-
1088 }
-
1089 
-
1090 bool WvmMediaParser::ProcessEcm() {
-
1091  // An error will be returned later if the samples need to be decrypted.
-
1092  if (!decryption_key_source_)
-
1093  return true;
-
1094 
-
1095  if (current_program_id_ > 0) {
-
1096  return true;
-
1097  }
-
1098  if (ecm_.size() != kEcmSizeBytes) {
-
1099  LOG(ERROR) << "Unexpected ECM size = " << ecm_.size()
-
1100  << ", expected size = " << kEcmSizeBytes;
-
1101  return false;
-
1102  }
-
1103  const uint8_t* ecm_data = ecm_.data();
-
1104  DCHECK(ecm_data);
-
1105  ecm_data += sizeof(uint32_t); // old version field - skip.
-
1106  ecm_data += sizeof(uint32_t); // clear lead - skip.
-
1107  ecm_data += sizeof(uint32_t); // system id(includes ECM version) - skip.
-
1108  EncryptionKey encryption_key;
-
1109  if (!GetAssetKey(ecm_data, &encryption_key)) {
-
1110  return false;
-
1111  }
-
1112  if (encryption_key.key.size() < kAssetKeySizeBytes) {
-
1113  LOG(ERROR) << "Asset Key size of " << encryption_key.key.size()
-
1114  << " for AssetID = " << ntohlFromBuffer(ecm_data)
-
1115  << " is less than minimum asset key size.";
-
1116  return false;
-
1117  }
-
1118  ecm_data += sizeof(uint32_t); // asset_id.
-
1119  // Legacy WVM content may have asset keys > 16 bytes.
-
1120  // Use only the first 16 bytes of the asset key to get
-
1121  // the content key.
-
1122  std::vector<uint8_t> asset_key(
-
1123  encryption_key.key.begin(),
-
1124  encryption_key.key.begin() + kAssetKeySizeBytes);
-
1125  // WVM format always uses all zero IV.
-
1126  std::vector<uint8_t> zero_iv(kInitializationVectorSizeBytes, 0);
-
1127  AesCbcDecryptor asset_decryptor(kCtsPadding, AesCryptor::kUseConstantIv);
-
1128  if (!asset_decryptor.InitializeWithIv(asset_key, zero_iv)) {
-
1129  LOG(ERROR) << "Failed to initialize asset_decryptor.";
-
1130  return false;
-
1131  }
-
1132 
-
1133  const size_t content_key_buffer_size =
-
1134  kEcmFlagsSizeBytes + kEcmContentKeySizeBytes +
-
1135  kEcmPaddingSizeBytes; // flags + contentKey + padding.
-
1136  std::vector<uint8_t> content_key_buffer(content_key_buffer_size);
-
1137  CHECK(asset_decryptor.Crypt(ecm_data, content_key_buffer_size,
-
1138  content_key_buffer.data()));
-
1139 
-
1140  std::vector<uint8_t> decrypted_content_key_vec(
-
1141  content_key_buffer.begin() + 4,
-
1142  content_key_buffer.begin() + 20);
-
1143  std::unique_ptr<AesCbcDecryptor> content_decryptor(
-
1144  new AesCbcDecryptor(kCtsPadding, AesCryptor::kUseConstantIv));
-
1145  if (!content_decryptor->InitializeWithIv(decrypted_content_key_vec,
-
1146  zero_iv)) {
-
1147  LOG(ERROR) << "Failed to initialize content decryptor.";
-
1148  return false;
-
1149  }
-
1150 
-
1151  content_decryptor_ = std::move(content_decryptor);
-
1152  return true;
-
1153 }
-
1154 
-
1155 DemuxStreamIdMediaSample::DemuxStreamIdMediaSample() :
-
1156  demux_stream_id(0),
-
1157  parsed_audio_or_video_stream_id(0) {}
-
1158 
-
1159 DemuxStreamIdMediaSample::~DemuxStreamIdMediaSample() {}
-
1160 
-
1161 PrevSampleData::PrevSampleData() {
-
1162  Reset();
-
1163 }
-
1164 
-
1165 PrevSampleData::~PrevSampleData() {}
-
1166 
-
1167 void PrevSampleData::Reset() {
-
1168  audio_sample = NULL;
-
1169  video_sample = NULL;
-
1170  audio_stream_id = 0;
-
1171  video_stream_id = 0;
-
1172  audio_sample_duration = 0;
-
1173  video_sample_duration = 0;
-
1174 }
-
1175 
-
1176 } // namespace wvm
-
1177 } // namespace media
-
1178 } // namespace shaka
-
static std::shared_ptr< MediaSample > CreateEmptyMediaSample()
Create a MediaSample object with default members.
+
917  media_sample_->SetData(frame_ptr + header_size, frame_size - header_size);
+
918  if (!is_initialized_) {
+
919  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
+
920  if (stream_infos_[i]->stream_type() == kStreamAudio &&
+
921  stream_infos_[i]->codec_string().empty()) {
+
922  AudioStreamInfo* audio_stream_info =
+
923  reinterpret_cast<AudioStreamInfo*>(stream_infos_[i].get());
+
924  if (audio_stream_info->codec_config().empty()) {
+
925  // Set AudioStreamInfo fields using information from the ADTS
+
926  // header.
+
927  audio_stream_info->set_sampling_frequency(
+
928  adts_header.GetSamplingFrequency());
+
929  std::vector<uint8_t> audio_specific_config;
+
930  if (!adts_header.GetAudioSpecificConfig(&audio_specific_config)) {
+
931  LOG(ERROR) << "Could not compute AACAudiospecificconfig";
+
932  return false;
+
933  }
+
934  audio_stream_info->set_codec_config(audio_specific_config);
+
935  audio_stream_info->set_codec_string(
+ +
937  kCodecAAC, adts_header.GetObjectType()));
+
938  } else {
+
939  // Set AudioStreamInfo fields using information from the
+
940  // AACAudioSpecificConfig record.
+
941  AACAudioSpecificConfig aac_config;
+
942  if (!aac_config.Parse(stream_infos_[i]->codec_config())) {
+
943  LOG(ERROR) << "Could not parse AACAudioSpecificconfig";
+
944  return false;
+
945  }
+
946  audio_stream_info->set_sampling_frequency(
+
947  aac_config.GetSamplesPerSecond());
+
948  audio_stream_info->set_codec_string(
+ +
950  kCodecAAC, aac_config.GetAudioObjectType()));
+
951  }
+
952  }
+
953  }
+
954  }
+
955  }
+
956  }
+
957 
+
958  if (!is_initialized_) {
+
959  bool all_streams_have_config = true;
+
960  // Check if all collected stream infos have codec_config set.
+
961  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
+
962  if (stream_infos_[i]->codec_string().empty()) {
+
963  all_streams_have_config = false;
+
964  break;
+
965  }
+
966  }
+
967  if (all_streams_have_config) {
+
968  init_cb_.Run(stream_infos_);
+
969  is_initialized_ = true;
+
970  }
+
971  }
+
972 
+
973  DCHECK_GT(media_sample_->data_size(), 0UL);
+
974  std::string key = base::UintToString(current_program_id_).append(":")
+
975  .append(base::UintToString(prev_pes_stream_id_));
+
976  std::map<std::string, uint32_t>::iterator it =
+
977  program_demux_stream_map_.find(key);
+
978  if (it == program_demux_stream_map_.end()) {
+
979  // TODO(ramjic): Log error message here and in other error cases through
+
980  // this method.
+
981  return false;
+
982  }
+
983  DemuxStreamIdMediaSample demux_stream_media_sample;
+
984  demux_stream_media_sample.parsed_audio_or_video_stream_id =
+
985  prev_pes_stream_id_;
+
986  demux_stream_media_sample.demux_stream_id = (*it).second;
+
987  demux_stream_media_sample.media_sample = media_sample_;
+
988  // Check if sample can be emitted.
+
989  if (!is_initialized_) {
+
990  media_sample_queue_.push_back(demux_stream_media_sample);
+
991  } else {
+
992  // flush the sample queue and emit all queued samples.
+
993  while (!media_sample_queue_.empty()) {
+
994  if (!EmitPendingSamples())
+
995  return false;
+
996  }
+
997  // Emit current sample.
+
998  if (!EmitSample(prev_pes_stream_id_, (*it).second, media_sample_, false))
+
999  return false;
+
1000  }
+
1001  return true;
+
1002 }
+
1003 
+
1004 bool WvmMediaParser::EmitSample(uint32_t parsed_audio_or_video_stream_id,
+
1005  uint32_t stream_id,
+
1006  const std::shared_ptr<MediaSample>& new_sample,
+
1007  bool isLastSample) {
+
1008  DCHECK(new_sample);
+
1009  if (isLastSample) {
+
1010  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
+
1011  kPesStreamIdVideo) {
+
1012  new_sample->set_duration(prev_media_sample_data_.video_sample_duration);
+
1013  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
+
1014  kPesStreamIdAudio) {
+
1015  new_sample->set_duration(prev_media_sample_data_.audio_sample_duration);
+
1016  }
+
1017  if (!new_sample_cb_.Run(stream_id, new_sample)) {
+
1018  LOG(ERROR) << "Failed to process the last sample.";
+
1019  return false;
+
1020  }
+
1021  return true;
+
1022  }
+
1023 
+
1024  // Cannot emit current sample. Compute duration first and then,
+
1025  // emit previous sample.
+
1026  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
+
1027  kPesStreamIdVideo) {
+
1028  if (prev_media_sample_data_.video_sample == NULL) {
+
1029  prev_media_sample_data_.video_sample = new_sample;
+
1030  prev_media_sample_data_.video_stream_id = stream_id;
+
1031  return true;
+
1032  }
+
1033  prev_media_sample_data_.video_sample->set_duration(
+
1034  new_sample->dts() - prev_media_sample_data_.video_sample->dts());
+
1035  prev_media_sample_data_.video_sample_duration =
+
1036  prev_media_sample_data_.video_sample->duration();
+
1037  if (!new_sample_cb_.Run(prev_media_sample_data_.video_stream_id,
+
1038  prev_media_sample_data_.video_sample)) {
+
1039  LOG(ERROR) << "Failed to process the video sample.";
+
1040  return false;
+
1041  }
+
1042  prev_media_sample_data_.video_sample = new_sample;
+
1043  prev_media_sample_data_.video_stream_id = stream_id;
+
1044  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
+
1045  kPesStreamIdAudio) {
+
1046  if (prev_media_sample_data_.audio_sample == NULL) {
+
1047  prev_media_sample_data_.audio_sample = new_sample;
+
1048  prev_media_sample_data_.audio_stream_id = stream_id;
+
1049  return true;
+
1050  }
+
1051  prev_media_sample_data_.audio_sample->set_duration(
+
1052  new_sample->dts() - prev_media_sample_data_.audio_sample->dts());
+
1053  prev_media_sample_data_.audio_sample_duration =
+
1054  prev_media_sample_data_.audio_sample->duration();
+
1055  if (!new_sample_cb_.Run(prev_media_sample_data_.audio_stream_id,
+
1056  prev_media_sample_data_.audio_sample)) {
+
1057  LOG(ERROR) << "Failed to process the audio sample.";
+
1058  return false;
+
1059  }
+
1060  prev_media_sample_data_.audio_sample = new_sample;
+
1061  prev_media_sample_data_.audio_stream_id = stream_id;
+
1062  }
+
1063  return true;
+
1064 }
+
1065 
+
1066 bool WvmMediaParser::GetAssetKey(const uint8_t* asset_id,
+
1067  EncryptionKey* encryption_key) {
+
1068  DCHECK(decryption_key_source_);
+
1069  Status status = decryption_key_source_->FetchKeys(
+
1070  EmeInitDataType::WIDEVINE_CLASSIC,
+
1071  std::vector<uint8_t>(asset_id, asset_id + sizeof(uint32_t)));
+
1072  if (!status.ok()) {
+
1073  LOG(ERROR) << "Fetch Key(s) failed for AssetID = "
+
1074  << ntohlFromBuffer(asset_id) << ", error = " << status;
+
1075  return false;
+
1076  }
+
1077 
+
1078  const char kHdStreamLabel[] = "HD";
+
1079  status = decryption_key_source_->GetKey(kHdStreamLabel, encryption_key);
+
1080  if (!status.ok()) {
+
1081  LOG(ERROR) << "Fetch Key(s) failed for AssetID = "
+
1082  << ntohlFromBuffer(asset_id) << ", error = " << status;
+
1083  return false;
+
1084  }
+
1085 
+
1086  return true;
+
1087 }
+
1088 
+
1089 bool WvmMediaParser::ProcessEcm() {
+
1090  // An error will be returned later if the samples need to be decrypted.
+
1091  if (!decryption_key_source_)
+
1092  return true;
+
1093 
+
1094  if (current_program_id_ > 0) {
+
1095  return true;
+
1096  }
+
1097  if (ecm_.size() != kEcmSizeBytes) {
+
1098  LOG(ERROR) << "Unexpected ECM size = " << ecm_.size()
+
1099  << ", expected size = " << kEcmSizeBytes;
+
1100  return false;
+
1101  }
+
1102  const uint8_t* ecm_data = ecm_.data();
+
1103  DCHECK(ecm_data);
+
1104  ecm_data += sizeof(uint32_t); // old version field - skip.
+
1105  ecm_data += sizeof(uint32_t); // clear lead - skip.
+
1106  ecm_data += sizeof(uint32_t); // system id(includes ECM version) - skip.
+
1107  EncryptionKey encryption_key;
+
1108  if (!GetAssetKey(ecm_data, &encryption_key)) {
+
1109  return false;
+
1110  }
+
1111  if (encryption_key.key.size() < kAssetKeySizeBytes) {
+
1112  LOG(ERROR) << "Asset Key size of " << encryption_key.key.size()
+
1113  << " for AssetID = " << ntohlFromBuffer(ecm_data)
+
1114  << " is less than minimum asset key size.";
+
1115  return false;
+
1116  }
+
1117  ecm_data += sizeof(uint32_t); // asset_id.
+
1118  // Legacy WVM content may have asset keys > 16 bytes.
+
1119  // Use only the first 16 bytes of the asset key to get
+
1120  // the content key.
+
1121  std::vector<uint8_t> asset_key(
+
1122  encryption_key.key.begin(),
+
1123  encryption_key.key.begin() + kAssetKeySizeBytes);
+
1124  // WVM format always uses all zero IV.
+
1125  std::vector<uint8_t> zero_iv(kInitializationVectorSizeBytes, 0);
+
1126  AesCbcDecryptor asset_decryptor(kCtsPadding, AesCryptor::kUseConstantIv);
+
1127  if (!asset_decryptor.InitializeWithIv(asset_key, zero_iv)) {
+
1128  LOG(ERROR) << "Failed to initialize asset_decryptor.";
+
1129  return false;
+
1130  }
+
1131 
+
1132  const size_t content_key_buffer_size =
+
1133  kEcmFlagsSizeBytes + kEcmContentKeySizeBytes +
+
1134  kEcmPaddingSizeBytes; // flags + contentKey + padding.
+
1135  std::vector<uint8_t> content_key_buffer(content_key_buffer_size);
+
1136  CHECK(asset_decryptor.Crypt(ecm_data, content_key_buffer_size,
+
1137  content_key_buffer.data()));
+
1138 
+
1139  std::vector<uint8_t> decrypted_content_key_vec(
+
1140  content_key_buffer.begin() + 4,
+
1141  content_key_buffer.begin() + 20);
+
1142  std::unique_ptr<AesCbcDecryptor> content_decryptor(
+
1143  new AesCbcDecryptor(kCtsPadding, AesCryptor::kUseConstantIv));
+
1144  if (!content_decryptor->InitializeWithIv(decrypted_content_key_vec,
+
1145  zero_iv)) {
+
1146  LOG(ERROR) << "Failed to initialize content decryptor.";
+
1147  return false;
+
1148  }
+
1149 
+
1150  content_decryptor_ = std::move(content_decryptor);
+
1151  return true;
+
1152 }
+
1153 
+
1154 DemuxStreamIdMediaSample::DemuxStreamIdMediaSample() :
+
1155  demux_stream_id(0),
+
1156  parsed_audio_or_video_stream_id(0) {}
+
1157 
+
1158 DemuxStreamIdMediaSample::~DemuxStreamIdMediaSample() {}
+
1159 
+
1160 PrevSampleData::PrevSampleData() {
+
1161  Reset();
+
1162 }
+
1163 
+
1164 PrevSampleData::~PrevSampleData() {}
+
1165 
+
1166 void PrevSampleData::Reset() {
+
1167  audio_sample = NULL;
+
1168  video_sample = NULL;
+
1169  audio_stream_id = 0;
+
1170  video_stream_id = 0;
+
1171  audio_sample_duration = 0;
+
1172  video_sample_duration = 0;
+
1173 }
+
1174 
+
1175 } // namespace wvm
+
1176 } // namespace media
+
1177 } // namespace shaka
+
static std::shared_ptr< MediaSample > CreateEmptyMediaSample()
Create a MediaSample object with default members.
Definition: media_sample.cc:71
static size_t GetAdtsFrameSize(const uint8_t *data, size_t num_bytes)
Definition: adts_header.cc:23
static std::string GetCodecString(Codec codec, uint8_t audio_object_type)
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:45
diff --git a/docs/dd/d3a/gflags__hex__bytes_8h_source.html b/docs/dd/d3a/gflags__hex__bytes_8h_source.html index 84603e83c4..2ff96b67d1 100644 --- a/docs/dd/d3a/gflags__hex__bytes_8h_source.html +++ b/docs/dd/d3a/gflags__hex__bytes_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d3b/mp4_2segmenter_8h_source.html b/docs/dd/d3b/mp4_2segmenter_8h_source.html index dc16fd1eec..2c4fd71d0b 100644 --- a/docs/dd/d3b/mp4_2segmenter_8h_source.html +++ b/docs/dd/d3b/mp4_2segmenter_8h_source.html @@ -228,7 +228,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d3e/callback__file_8cc_source.html b/docs/dd/d3e/callback__file_8cc_source.html index 73eb9f2432..941d40a9e5 100644 --- a/docs/dd/d3e/callback__file_8cc_source.html +++ b/docs/dd/d3e/callback__file_8cc_source.html @@ -172,7 +172,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d3f/structshaka_1_1media_1_1mp4_1_1SyncSample.html b/docs/dd/d3f/structshaka_1_1media_1_1mp4_1_1SyncSample.html index c0e7b47967..ac0dd31044 100644 --- a/docs/dd/d3f/structshaka_1_1media_1_1mp4_1_1SyncSample.html +++ b/docs/dd/d3f/structshaka_1_1media_1_1mp4_1_1SyncSample.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/dd/d40/classshaka_1_1CallbackFile.html b/docs/dd/d40/classshaka_1_1CallbackFile.html index a2e22ec548..7505e20add 100644 --- a/docs/dd/d40/classshaka_1_1CallbackFile.html +++ b/docs/dd/d40/classshaka_1_1CallbackFile.html @@ -470,7 +470,7 @@ Additional Inherited Members diff --git a/docs/dd/d42/encryptor_8h_source.html b/docs/dd/d42/encryptor_8h_source.html index 545b177c77..447ed01dd0 100644 --- a/docs/dd/d42/encryptor_8h_source.html +++ b/docs/dd/d42/encryptor_8h_source.html @@ -121,7 +121,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d46/webm__parser_8h_source.html b/docs/dd/d46/webm__parser_8h_source.html index 02f0dfc2dc..9e267109d9 100644 --- a/docs/dd/d46/webm__parser_8h_source.html +++ b/docs/dd/d46/webm__parser_8h_source.html @@ -227,7 +227,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d4d/structshaka_1_1media_1_1mp4_1_1MovieFragment-members.html b/docs/dd/d4d/structshaka_1_1media_1_1mp4_1_1MovieFragment-members.html index 76e9df8032..30667014e2 100644 --- a/docs/dd/d4d/structshaka_1_1media_1_1mp4_1_1MovieFragment-members.html +++ b/docs/dd/d4d/structshaka_1_1media_1_1mp4_1_1MovieFragment-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d4f/classshaka_1_1hls_1_1SimpleHlsNotifier-members.html b/docs/dd/d4f/classshaka_1_1hls_1_1SimpleHlsNotifier-members.html index 94102b62f4..d639f3bd0d 100644 --- a/docs/dd/d4f/classshaka_1_1hls_1_1SimpleHlsNotifier-members.html +++ b/docs/dd/d4f/classshaka_1_1hls_1_1SimpleHlsNotifier-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d53/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html b/docs/dd/d53/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html index e1cfeedada..d81363c2b0 100644 --- a/docs/dd/d53/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html +++ b/docs/dd/d53/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d54/widevine__encryption__flags_8h_source.html b/docs/dd/d54/widevine__encryption__flags_8h_source.html index 2d2b94a239..0727439a8f 100644 --- a/docs/dd/d54/widevine__encryption__flags_8h_source.html +++ b/docs/dd/d54/widevine__encryption__flags_8h_source.html @@ -129,7 +129,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d58/crypto__params_8h_source.html b/docs/dd/d58/crypto__params_8h_source.html index 1793d63e56..57863b3cc3 100644 --- a/docs/dd/d58/crypto__params_8h_source.html +++ b/docs/dd/d58/crypto__params_8h_source.html @@ -152,126 +152,114 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
95  std::vector<uint8_t> key;
96 };
97 
- -
102  std::vector<uint8_t> iv;
-
105  std::vector<uint8_t> pssh;
-
106 
-
107  using StreamLabel = std::string;
-
108  struct KeyPair {
-
109  std::vector<uint8_t> key_id;
-
110  std::vector<uint8_t> key;
-
111  };
-
115  std::map<StreamLabel, KeyPair> key_map;
-
116 };
-
117 
- -
123  KeyProvider key_provider = KeyProvider::kNone;
-
124  // Only one of the three fields is valid.
-
125  WidevineEncryptionParams widevine;
-
126  PlayreadyEncryptionParams playready;
-
127  RawKeyEncryptionParams raw_key;
-
128 
- -
132  static constexpr uint32_t kProtectionSchemeCenc = 0x63656E63;
-
133  static constexpr uint32_t kProtectionSchemeCbc1 = 0x63626331;
-
134  static constexpr uint32_t kProtectionSchemeCens = 0x63656E73;
-
135  static constexpr uint32_t kProtectionSchemeCbcs = 0x63626373;
-
136  uint32_t protection_scheme = kProtectionSchemeCenc;
-
139  static constexpr double kNoKeyRotation = 0;
-
140  double crypto_period_duration_in_seconds = kNoKeyRotation;
- -
143 
- -
146  enum StreamType {
-
147  kUnknown,
-
148  kVideo,
-
149  kAudio,
-
150  };
-
151 
-
152  StreamType stream_type = kUnknown;
-
153  union OneOf {
-
154  OneOf() {}
-
155 
-
156  struct {
-
157  int width = 0;
-
158  int height = 0;
-
159  float frame_rate = 0;
-
160  int bit_depth = 0;
-
161  } video;
-
162 
-
163  struct {
-
164  int number_of_channels = 0;
-
165  } audio;
-
166  } oneof;
-
167  };
-
173  std::function<std::string(const EncryptedStreamAttributes& stream_attributes)>
- -
175 };
-
176 
- -
180  std::string key_server_url;
- -
183 };
-
184 
- -
187  using StreamLabel = std::string;
-
188  struct KeyPair {
-
189  std::vector<uint8_t> key_id;
-
190  std::vector<uint8_t> key;
-
191  };
-
195  std::map<StreamLabel, KeyPair> key_map;
+
99 struct RawKeyParams {
+
103  std::vector<uint8_t> iv;
+
107  std::vector<uint8_t> pssh;
+
108 
+
109  using StreamLabel = std::string;
+
110  struct KeyInfo {
+
111  std::vector<uint8_t> key_id;
+
112  std::vector<uint8_t> key;
+
113  };
+
117  std::map<StreamLabel, KeyInfo> key_map;
+
118 };
+
119 
+ +
125  KeyProvider key_provider = KeyProvider::kNone;
+
126  // Only one of the three fields is valid.
+
127  WidevineEncryptionParams widevine;
+
128  PlayreadyEncryptionParams playready;
+
129  RawKeyParams raw_key;
+
130 
+ +
134  static constexpr uint32_t kProtectionSchemeCenc = 0x63656E63;
+
135  static constexpr uint32_t kProtectionSchemeCbc1 = 0x63626331;
+
136  static constexpr uint32_t kProtectionSchemeCens = 0x63656E73;
+
137  static constexpr uint32_t kProtectionSchemeCbcs = 0x63626373;
+
138  uint32_t protection_scheme = kProtectionSchemeCenc;
+
141  static constexpr double kNoKeyRotation = 0;
+
142  double crypto_period_duration_in_seconds = kNoKeyRotation;
+ +
145 
+ +
148  enum StreamType {
+
149  kUnknown,
+
150  kVideo,
+
151  kAudio,
+
152  };
+
153 
+
154  StreamType stream_type = kUnknown;
+
155  union OneOf {
+
156  OneOf() {}
+
157 
+
158  struct {
+
159  int width = 0;
+
160  int height = 0;
+
161  float frame_rate = 0;
+
162  int bit_depth = 0;
+
163  } video;
+
164 
+
165  struct {
+
166  int number_of_channels = 0;
+
167  } audio;
+
168  } oneof;
+
169  };
+
175  std::function<std::string(const EncryptedStreamAttributes& stream_attributes)>
+ +
177 };
+
178 
+ +
182  std::string key_server_url;
+ +
185 };
+
186 
+ +
192  KeyProvider key_provider = KeyProvider::kNone;
+
193  // Only one of the two fields is valid.
+
194  WidevineDecryptionParams widevine;
+
195  RawKeyParams raw_key;
196 };
197 
- -
203  KeyProvider key_provider = KeyProvider::kNone;
-
204  // Only one of the two fields is valid.
-
205  WidevineDecryptionParams widevine;
-
206  RawKeyDecryptionParams raw_key;
-
207 };
-
208 
-
209 } // namespace shaka
-
210 
-
211 #endif // PACKAGER_MEDIA_PUBLIC_CRYPTO_PARAMS_H_
+
198 } // namespace shaka
+
199 
+
200 #endif // PACKAGER_MEDIA_PUBLIC_CRYPTO_PARAMS_H_
std::string client_cert_private_key_file
Absolute path to the private key file.
Definition: crypto_params.h:87
-
std::vector< uint8_t > iv
std::string key_server_url
Widevine license / key server URL.
Definition: crypto_params.h:53
- +
std::string key_server_url
Playready license / key server URL.
Definition: crypto_params.h:78
KeyProvider
Encryption / decryption key providers.
Definition: crypto_params.h:18
-
Widevine decryption parameters.
-
std::function< std::string(const EncryptedStreamAttributes &stream_attributes)> stream_label_func
-
static constexpr double kNoKeyRotation
+
Widevine decryption parameters.
+
std::function< std::string(const EncryptedStreamAttributes &stream_attributes)> stream_label_func
+
static constexpr double kNoKeyRotation
WidevineSigner signer
Signer credential for Widevine license / key server.
Definition: crypto_params.h:64
std::vector< uint8_t > content_id
Content identifier.
Definition: crypto_params.h:60
std::string client_cert_private_key_password
Password to the private key file.
Definition: crypto_params.h:89
-
double clear_lead_in_seconds
Clear lead duration in seconds.
-
WidevineSigner signer
Signer credential for Widevine license / key server.
-
bool vp9_subsample_encryption
Enable/disable subsample encryption for VP9.
-
std::map< StreamLabel, KeyPair > key_map
-
std::string key_server_url
Widevine license / key server URL.
-
std::vector< uint8_t > pssh
- -
std::map< StreamLabel, KeyPair > key_map
+
double clear_lead_in_seconds
Clear lead duration in seconds.
+
WidevineSigner signer
Signer credential for Widevine license / key server.
+
bool vp9_subsample_encryption
Enable/disable subsample encryption for VP9.
+ +
std::string key_server_url
Widevine license / key server URL.
+
Raw key encryption/decryption parameters, i.e. with key parameters provided.
Definition: crypto_params.h:99
+
std::string signer_name
Name of the signer / content provider.
Definition: crypto_params.h:28
+
std::map< StreamLabel, KeyInfo > key_map
std::vector< uint8_t > key
Provides a raw Playready Key.
Definition: crypto_params.h:95
SigningKeyType signing_key_type
Definition: crypto_params.h:37
- +
std::vector< uint8_t > iv
Widevine encryption parameters.
Definition: crypto_params.h:51
-
Raw key decryption parameters, i.e. with key parameters provided.
- -
Decryption parameters.
-
Raw key encryption parameters, i.e. with key parameters provided.
Definition: crypto_params.h:99
-
Encryption parameters.
- +
Decryption parameters.
+
Encryption parameters.
+
std::vector< uint8_t > key_id
Provides a raw Playready KeyId.
Definition: crypto_params.h:93
-
Encrypted stream information that is used to determine stream label.
+
Encrypted stream information that is used to determine stream label.
std::vector< uint8_t > key
AES signing key.
Definition: crypto_params.h:40
std::string policy
The name of a stored policy, which specifies DRM content rights.
Definition: crypto_params.h:62
-
static constexpr uint32_t kProtectionSchemeCenc
The protection scheme: "cenc", "cens", "cbc1", "cbcs".
+
static constexpr uint32_t kProtectionSchemeCenc
The protection scheme: "cenc", "cens", "cbc1", "cbcs".
std::string program_identifier
Playready program identifier.
Definition: crypto_params.h:80
std::string key
RSA signing private key.
Definition: crypto_params.h:46
+
std::vector< uint8_t > pssh
Signer credential for Widevine license server.
Definition: crypto_params.h:26
std::vector< uint8_t > group_id
Group identifier, if present licenses will belong to this group.
Definition: crypto_params.h:66
@@ -280,7 +268,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d59/classshaka_1_1media_1_1mp2t_1_1EsParserH265-members.html b/docs/dd/d59/classshaka_1_1media_1_1mp2t_1_1EsParserH265-members.html index dca8a0d457..621d0b521d 100644 --- a/docs/dd/d59/classshaka_1_1media_1_1mp2t_1_1EsParserH265-members.html +++ b/docs/dd/d59/classshaka_1_1media_1_1mp2t_1_1EsParserH265-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d59/structshaka_1_1media_1_1mp4_1_1SchemeInfo-members.html b/docs/dd/d59/structshaka_1_1media_1_1mp4_1_1SchemeInfo-members.html index 9710c9c618..e755010833 100644 --- a/docs/dd/d59/structshaka_1_1media_1_1mp4_1_1SchemeInfo-members.html +++ b/docs/dd/d59/structshaka_1_1media_1_1mp4_1_1SchemeInfo-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d72/fixed__key__source_8h_source.html b/docs/dd/d60/raw__key__source_8h_source.html similarity index 56% rename from docs/d3/d72/fixed__key__source_8h_source.html rename to docs/dd/d60/raw__key__source_8h_source.html index 40eff15fa6..65a7a59790 100644 --- a/docs/d3/d72/fixed__key__source_8h_source.html +++ b/docs/dd/d60/raw__key__source_8h_source.html @@ -4,7 +4,7 @@ -Shaka Packager SDK: packager/media/base/fixed_key_source.h Source File +Shaka Packager SDK: packager/media/base/raw_key_source.h Source File @@ -84,7 +84,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
-
fixed_key_source.h
+
raw_key_source.h
1 // Copyright 2016 Google Inc. All rights reserved.
@@ -93,78 +93,78 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
4 // license that can be found in the LICENSE file or at
5 // https://developers.google.com/open-source/licenses/bsd
6 
-
7 #ifndef MEDIA_BASE_FIXED_KEY_SOURCE_H_
-
8 #define MEDIA_BASE_FIXED_KEY_SOURCE_H_
+
7 #ifndef PACKAGER_MEDIA_BASE_RAW_KEY_SOURCE_H_
+
8 #define PACKAGER_MEDIA_BASE_RAW_KEY_SOURCE_H_
9 
10 #include <memory>
11 #include <string>
12 #include <vector>
13 
14 #include "packager/media/base/key_source.h"
-
15 
-
16 namespace shaka {
-
17 namespace media {
-
18 
-
19 // Common SystemID defined by EME, which requires Key System implementations
-
20 // supporting ISO Common Encryption to support this SystemID and format.
-
21 // https://goo.gl/kUv2Xd
-
22 const uint8_t kCommonSystemId[] = {0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2,
-
23  0x4d, 0x02, 0xac, 0xe3, 0x3c, 0x1e,
-
24  0x52, 0xe2, 0xfb, 0x4b};
-
25 
-
26 // Unofficial fairplay system id extracted from
-
27 // https://forums.developer.apple.com/thread/6185.
-
28 const uint8_t kFairplaySystemId[] = {0x29, 0x70, 0x1F, 0xE4, 0x3C, 0xC7,
-
29  0x4A, 0x34, 0x8C, 0x5B, 0xAE, 0x90,
-
30  0xC7, 0x43, 0x9A, 0x47};
-
31 
-
33 class FixedKeySource : public KeySource {
-
34  public:
-
35  ~FixedKeySource() override;
-
36 
-
39  Status FetchKeys(EmeInitDataType init_data_type,
-
40  const std::vector<uint8_t>& init_data) override;
-
41  Status GetKey(const std::string& stream_label, EncryptionKey* key) override;
-
42  Status GetKey(const std::vector<uint8_t>& key_id,
-
43  EncryptionKey* key) override;
-
44  Status GetCryptoPeriodKey(uint32_t crypto_period_index,
-
45  const std::string& stream_label,
-
46  EncryptionKey* key) override;
-
48 
-
58  static std::unique_ptr<FixedKeySource> Create(
-
59  const std::vector<uint8_t>& key_id,
-
60  const std::vector<uint8_t>& key,
-
61  const std::vector<uint8_t>& pssh_boxes,
-
62  const std::vector<uint8_t>& iv);
-
63 
-
64  protected:
-
65  // Allow default constructor for mock key sources.
- -
67 
-
68  private:
-
69  explicit FixedKeySource(std::unique_ptr<EncryptionKey> key);
-
70 
-
71  std::unique_ptr<EncryptionKey> encryption_key_;
-
72 
-
73  DISALLOW_COPY_AND_ASSIGN(FixedKeySource);
-
74 };
-
75 
-
76 } // namespace media
-
77 } // namespace shaka
-
78 
-
79 #endif // MEDIA_BASE_FIXED_KEY_SOURCE_H_
-
Status GetCryptoPeriodKey(uint32_t crypto_period_index, const std::string &stream_label, EncryptionKey *key) override
-
Status GetKey(const std::string &stream_label, EncryptionKey *key) override
+
15 #include "packager/media/public/crypto_params.h"
+
16 
+
17 namespace shaka {
+
18 namespace media {
+
19 
+
20 // Common SystemID defined by EME, which requires Key System implementations
+
21 // supporting ISO Common Encryption to support this SystemID and format.
+
22 // https://goo.gl/kUv2Xd
+
23 const uint8_t kCommonSystemId[] = {0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2,
+
24  0x4d, 0x02, 0xac, 0xe3, 0x3c, 0x1e,
+
25  0x52, 0xe2, 0xfb, 0x4b};
+
26 
+
27 // Unofficial fairplay system id extracted from
+
28 // https://forums.developer.apple.com/thread/6185.
+
29 const uint8_t kFairplaySystemId[] = {0x29, 0x70, 0x1F, 0xE4, 0x3C, 0xC7,
+
30  0x4A, 0x34, 0x8C, 0x5B, 0xAE, 0x90,
+
31  0xC7, 0x43, 0x9A, 0x47};
+
32 
+
34 class RawKeySource : public KeySource {
+
35  public:
+
36  ~RawKeySource() override;
+
37 
+
40  Status FetchKeys(EmeInitDataType init_data_type,
+
41  const std::vector<uint8_t>& init_data) override;
+
42  Status GetKey(const std::string& stream_label, EncryptionKey* key) override;
+
43  Status GetKey(const std::vector<uint8_t>& key_id,
+
44  EncryptionKey* key) override;
+
45  Status GetCryptoPeriodKey(uint32_t crypto_period_index,
+
46  const std::string& stream_label,
+
47  EncryptionKey* key) override;
+
49 
+
53  static std::unique_ptr<RawKeySource> Create(const RawKeyParams& raw_key);
+
54 
+
55  protected:
+
56  // Allow default constructor for mock key sources.
+
57  RawKeySource();
+
58 
+
59  private:
+
60  typedef std::map<std::string, std::unique_ptr<EncryptionKey>>
+
61  EncryptionKeyMap;
+
62  explicit RawKeySource(EncryptionKeyMap&& encryption_key_map);
+
63  RawKeySource(const RawKeySource&) = delete;
+
64  RawKeySource& operator=(const RawKeySource&) = delete;
+
65 
+
66  EncryptionKeyMap encryption_key_map_;
+
67 };
+
68 
+
69 } // namespace media
+
70 } // namespace shaka
+
71 
+
72 #endif // PACKAGER_MEDIA_BASE_RAW_KEY_SOURCE_H_
+
Status GetCryptoPeriodKey(uint32_t crypto_period_index, const std::string &stream_label, EncryptionKey *key) override
-
Status FetchKeys(EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) override
-
A key source that uses fixed keys for encryption.
+
Raw key encryption/decryption parameters, i.e. with key parameters provided.
Definition: crypto_params.h:99
+
A key source that uses raw keys for encryption.
+
static std::unique_ptr< RawKeySource > Create(const RawKeyParams &raw_key)
+
Status GetKey(const std::string &stream_label, EncryptionKey *key) override
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:45
-
static std::unique_ptr< FixedKeySource > Create(const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &key, const std::vector< uint8_t > &pssh_boxes, const std::vector< uint8_t > &iv)
+
Status FetchKeys(EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) override
diff --git a/docs/dd/d64/structshaka_1_1media_1_1mp4_1_1SyncSample-members.html b/docs/dd/d64/structshaka_1_1media_1_1mp4_1_1SyncSample-members.html index cbefbcf983..103559b55f 100644 --- a/docs/dd/d64/structshaka_1_1media_1_1mp4_1_1SyncSample-members.html +++ b/docs/dd/d64/structshaka_1_1media_1_1mp4_1_1SyncSample-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d65/vp8__parser_8h_source.html b/docs/dd/d65/vp8__parser_8h_source.html index 4b1e172fc0..642067c018 100644 --- a/docs/dd/d65/vp8__parser_8h_source.html +++ b/docs/dd/d65/vp8__parser_8h_source.html @@ -136,7 +136,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d67/h264__byte__to__unit__stream__converter_8cc_source.html b/docs/dd/d67/h264__byte__to__unit__stream__converter_8cc_source.html index e38aff3e3d..58206c6b03 100644 --- a/docs/dd/d67/h264__byte__to__unit__stream__converter_8cc_source.html +++ b/docs/dd/d67/h264__byte__to__unit__stream__converter_8cc_source.html @@ -188,7 +188,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d6e/classshaka_1_1media_1_1H265VideoSliceHeaderParser-members.html b/docs/dd/d6e/classshaka_1_1media_1_1H265VideoSliceHeaderParser-members.html index 1ed62032ed..7260a98c75 100644 --- a/docs/dd/d6e/classshaka_1_1media_1_1H265VideoSliceHeaderParser-members.html +++ b/docs/dd/d6e/classshaka_1_1media_1_1H265VideoSliceHeaderParser-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d71/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio.html b/docs/dd/d71/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio.html index 3fd4753d5b..d4e042513b 100644 --- a/docs/dd/d71/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio.html +++ b/docs/dd/d71/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio.html @@ -176,7 +176,7 @@ Additional Inherited Members diff --git a/docs/dd/d74/classshaka_1_1media_1_1MediaHandlerGraphTestBase-members.html b/docs/dd/d74/classshaka_1_1media_1_1MediaHandlerGraphTestBase-members.html new file mode 100644 index 0000000000..64dfeb4485 --- /dev/null +++ b/docs/dd/d74/classshaka_1_1media_1_1MediaHandlerGraphTestBase-members.html @@ -0,0 +1,126 @@ + + + + + + +Shaka Packager SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
Shaka Packager SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
shaka::media::MediaHandlerGraphTestBase Member List
+
+
+ +

This is the complete list of members for shaka::media::MediaHandlerGraphTestBase, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
ClearOutputStreamDataVector()shaka::media::MediaHandlerGraphTestBaseprotected
GetAudioStreamInfo(uint32_t time_scale) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetAudioStreamInfo(uint32_t time_scale, Codec codec) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetMediaSample(int64_t timestamp, int64_t duration, bool is_keyframe) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetMediaSample(int64_t timestamp, int64_t duration, bool is_keyframe, const uint8_t *data, size_t data_length) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetOutputStreamDataVector() const shaka::media::MediaHandlerGraphTestBaseprotected
GetSegmentInfo(int64_t start_timestamp, int64_t duration, bool is_subsegment) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetTextSample(const std::string &id, uint64_t start, uint64_t end, const std::string &payload) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetTextStreamInfo() const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetVideoStreamInfo(uint32_t time_scale) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetVideoStreamInfo(uint32_t time_scale, uint32_t width, uint64_t height) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetVideoStreamInfo(uint32_t time_scale, Codec codec) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
GetVideoStreamInfo(uint32_t time_scale, Codec codec, uint32_t width, uint64_t height) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
Input(size_t index) (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
IsVideoCodec(Codec codec) const (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
MediaHandlerGraphTestBase() (defined in shaka::media::MediaHandlerGraphTestBase)shaka::media::MediaHandlerGraphTestBase
MediaHandlerTestBase()=default (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBase
next_handler()shaka::media::MediaHandlerGraphTestBaseinlineprotected
Output(size_t index) (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
SetUpAndInitializeGraph(std::shared_ptr< MediaHandler > handler, size_t input_count, size_t output_count) (defined in shaka::media::MediaHandlerTestBase)shaka::media::MediaHandlerTestBaseprotected
SetUpGraph(size_t num_inputs, size_t num_outputs, std::shared_ptr< MediaHandler > handler)shaka::media::MediaHandlerGraphTestBaseprotected
some_handler()shaka::media::MediaHandlerGraphTestBaseinlineprotected
+ + + + diff --git a/docs/dd/d7a/classshaka_1_1media_1_1MuxerListener.html b/docs/dd/d7a/classshaka_1_1media_1_1MuxerListener.html index c0d13b66ad..96fa341b0a 100644 --- a/docs/dd/d7a/classshaka_1_1media_1_1MuxerListener.html +++ b/docs/dd/d7a/classshaka_1_1media_1_1MuxerListener.html @@ -434,7 +434,7 @@ Public Member Functions diff --git a/docs/dd/d80/media__sample_8h_source.html b/docs/dd/d80/media__sample_8h_source.html index 387d7987cf..12c9b37836 100644 --- a/docs/dd/d80/media__sample_8h_source.html +++ b/docs/dd/d80/media__sample_8h_source.html @@ -119,160 +119,152 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
45  size_t side_data_size,
46  bool is_key_frame);
47 
-
50  static std::shared_ptr<MediaSample> CopyFrom(const MediaSample& media_sample);
-
51 
-
58  static std::shared_ptr<MediaSample> FromMetadata(const uint8_t* metadata,
-
59  size_t metadata_size);
-
60 
-
62  static std::shared_ptr<MediaSample> CreateEmptyMediaSample();
-
63 
-
67  static std::shared_ptr<MediaSample> CreateEOSBuffer();
-
68 
-
69  // Create a MediaSample. Buffer will be padded and aligned as necessary.
-
70  // |data|,|side_data| can be NULL, which indicates an empty sample.
-
71  // |size|,|side_data_size| should not be negative.
-
72  MediaSample(const uint8_t* data,
-
73  size_t size,
-
74  const uint8_t* side_data,
-
75  size_t side_data_size,
-
76  bool is_key_frame);
-
77  MediaSample();
-
78  virtual ~MediaSample();
-
79 
-
80  int64_t dts() const {
-
81  DCHECK(!end_of_stream());
-
82  return dts_;
-
83  }
-
84 
-
85  void set_dts(int64_t dts) { dts_ = dts; }
-
86 
-
87  int64_t pts() const {
-
88  DCHECK(!end_of_stream());
-
89  return pts_;
-
90  }
-
91 
-
92  void set_pts(int64_t pts) { pts_ = pts; }
-
93 
-
94  int64_t duration() const {
-
95  DCHECK(!end_of_stream());
-
96  return duration_;
-
97  }
-
98 
-
99  void set_duration(int64_t duration) {
-
100  DCHECK(!end_of_stream());
-
101  duration_ = duration;
-
102  }
-
103 
-
104  bool is_key_frame() const {
-
105  DCHECK(!end_of_stream());
-
106  return is_key_frame_;
-
107  }
-
108 
-
109  bool is_encrypted() const {
-
110  DCHECK(!end_of_stream());
-
111  return is_encrypted_;
-
112  }
-
113  const uint8_t* data() const {
+
54  static std::shared_ptr<MediaSample> FromMetadata(const uint8_t* metadata,
+
55  size_t metadata_size);
+
56 
+
58  static std::shared_ptr<MediaSample> CreateEmptyMediaSample();
+
59 
+
63  static std::shared_ptr<MediaSample> CreateEOSBuffer();
+
64 
+
65  virtual ~MediaSample();
+
66 
+
68  std::shared_ptr<MediaSample> Clone() const;
+
69 
+
73  void TransferData(std::shared_ptr<uint8_t> data, size_t data_size);
+
74 
+
79  void SetData(const uint8_t* data, size_t data_size);
+
80 
+
82  std::string ToString() const;
+
83 
+
84  int64_t dts() const {
+
85  DCHECK(!end_of_stream());
+
86  return dts_;
+
87  }
+
88 
+
89  void set_dts(int64_t dts) { dts_ = dts; }
+
90 
+
91  int64_t pts() const {
+
92  DCHECK(!end_of_stream());
+
93  return pts_;
+
94  }
+
95 
+
96  void set_pts(int64_t pts) { pts_ = pts; }
+
97 
+
98  int64_t duration() const {
+
99  DCHECK(!end_of_stream());
+
100  return duration_;
+
101  }
+
102 
+
103  void set_duration(int64_t duration) {
+
104  DCHECK(!end_of_stream());
+
105  duration_ = duration;
+
106  }
+
107 
+
108  bool is_key_frame() const {
+
109  DCHECK(!end_of_stream());
+
110  return is_key_frame_;
+
111  }
+
112 
+
113  bool is_encrypted() const {
114  DCHECK(!end_of_stream());
-
115  return data_.data();
+
115  return is_encrypted_;
116  }
-
117 
-
118  uint8_t* writable_data() {
-
119  DCHECK(!end_of_stream());
-
120  return data_.data();
-
121  }
-
122 
-
123  size_t data_size() const {
-
124  DCHECK(!end_of_stream());
-
125  return data_.size();
-
126  }
-
127 
-
128  const uint8_t* side_data() const {
-
129  return side_data_.data();
-
130  }
-
131 
-
132  size_t side_data_size() const {
-
133  return side_data_.size();
-
134  }
-
135 
-
136  const DecryptConfig* decrypt_config() const {
-
137  return decrypt_config_.get();
-
138  }
-
139 
-
140  void set_data(const uint8_t* data, const size_t data_size) {
-
141  data_.assign(data, data + data_size);
-
142  }
-
143 
-
144  void resize_data(const size_t data_size) {
-
145  data_.resize(data_size);
-
146  }
+
117  const uint8_t* data() const {
+
118  DCHECK(!end_of_stream());
+
119  return data_.get();
+
120  }
+
121 
+
122  size_t data_size() const {
+
123  DCHECK(!end_of_stream());
+
124  return data_size_;
+
125  }
+
126 
+
127  const uint8_t* side_data() const { return side_data_.get(); }
+
128 
+
129  size_t side_data_size() const { return side_data_size_; }
+
130 
+
131  const DecryptConfig* decrypt_config() const { return decrypt_config_.get(); }
+
132 
+
133  void set_is_key_frame(bool value) {
+
134  is_key_frame_ = value;
+
135  }
+
136 
+
137  void set_is_encrypted(bool value) {
+
138  is_encrypted_ = value;
+
139  }
+
140 
+
141  void set_decrypt_config(std::unique_ptr<DecryptConfig> decrypt_config) {
+
142  decrypt_config_ = std::move(decrypt_config);
+
143  }
+
144 
+
145  // If there's no data in this buffer, it represents end of stream.
+
146  bool end_of_stream() const { return data_size_ == 0; }
147 
-
148  void set_is_key_frame(bool value) {
-
149  is_key_frame_ = value;
-
150  }
-
151 
-
152  void set_is_encrypted(bool value) {
-
153  is_encrypted_ = value;
-
154  }
-
155 
-
156  void set_decrypt_config(std::unique_ptr<DecryptConfig> decrypt_config) {
-
157  decrypt_config_ = std::move(decrypt_config);
-
158  }
-
159 
-
160  // If there's no data in this buffer, it represents end of stream.
-
161  bool end_of_stream() const { return data_.size() == 0; }
-
162 
-
163  const std::string& config_id() const { return config_id_; }
-
164  void set_config_id(const std::string& config_id) {
-
165  config_id_ = config_id;
-
166  }
-
167 
-
169  std::string ToString() const;
-
170 
-
171  private:
-
172  // Decoding time stamp.
-
173  int64_t dts_;
-
174  // Presentation time stamp.
-
175  int64_t pts_;
-
176  int64_t duration_;
-
177  bool is_key_frame_;
-
178  // is sample encrypted ?
-
179  bool is_encrypted_;
-
180 
-
181  // Main buffer data.
-
182  std::vector<uint8_t> data_;
-
183  // Contain additional buffers to complete the main one. Needed by WebM
-
184  // http://www.matroska.org/technical/specs/index.html BlockAdditional[A5].
-
185  // Not used by mp4 and other containers.
-
186  std::vector<uint8_t> side_data_;
-
187 
-
188  // Text specific fields.
-
189  // For now this is the cue identifier for WebVTT.
-
190  std::string config_id_;
-
191 
-
192  // Decrypt configuration.
-
193  std::unique_ptr<DecryptConfig> decrypt_config_;
+
148  const std::string& config_id() const { return config_id_; }
+
149  void set_config_id(const std::string& config_id) {
+
150  config_id_ = config_id;
+
151  }
+
152 
+
153  protected:
+
154  // Made it protected to disallow the constructor to be called directly.
+
155  // Create a MediaSample. Buffer will be padded and aligned as necessary.
+
156  // |data|,|side_data| can be nullptr, which indicates an empty sample.
+
157  MediaSample(const uint8_t* data,
+
158  size_t data_size,
+
159  const uint8_t* side_data,
+
160  size_t side_data_size,
+
161  bool is_key_frame);
+
162  MediaSample();
+
163 
+
164  private:
+
165  // Decoding time stamp.
+
166  int64_t dts_ = 0;
+
167  // Presentation time stamp.
+
168  int64_t pts_ = 0;
+
169  int64_t duration_ = 0;
+
170  bool is_key_frame_ = false;
+
171  // is sample encrypted ?
+
172  bool is_encrypted_ = false;
+
173 
+
174  // Main buffer data.
+
175  std::shared_ptr<const uint8_t> data_;
+
176  size_t data_size_ = 0;
+
177  // Contain additional buffers to complete the main one. Needed by WebM
+
178  // http://www.matroska.org/technical/specs/index.html BlockAdditional[A5].
+
179  // Not used by mp4 and other containers.
+
180  std::shared_ptr<const uint8_t> side_data_;
+
181  size_t side_data_size_ = 0;
+
182 
+
183  // Text specific fields.
+
184  // For now this is the cue identifier for WebVTT.
+
185  std::string config_id_;
+
186 
+
187  // Decrypt configuration.
+
188  std::unique_ptr<DecryptConfig> decrypt_config_;
+
189 
+
190  DISALLOW_COPY_AND_ASSIGN(MediaSample);
+
191 };
+
192 
+
193 typedef std::deque<std::shared_ptr<MediaSample>> BufferQueue;
194 
-
195  DISALLOW_COPY_AND_ASSIGN(MediaSample);
-
196 };
+
195 } // namespace media
+
196 } // namespace shaka
197 
-
198 typedef std::deque<std::shared_ptr<MediaSample>> BufferQueue;
-
199 
-
200 } // namespace media
-
201 } // namespace shaka
-
202 
-
203 #endif // MEDIA_BASE_MEDIA_SAMPLE_H_
+
198 #endif // MEDIA_BASE_MEDIA_SAMPLE_H_
-
static std::shared_ptr< MediaSample > CreateEOSBuffer()
-
static std::shared_ptr< MediaSample > CreateEmptyMediaSample()
Create a MediaSample object with default members.
-
std::string ToString() const
-
static std::shared_ptr< MediaSample > FromMetadata(const uint8_t *metadata, size_t metadata_size)
Definition: media_sample.cc:93
+
static std::shared_ptr< MediaSample > CreateEOSBuffer()
Definition: media_sample.cc:76
+
static std::shared_ptr< MediaSample > CreateEmptyMediaSample()
Create a MediaSample object with default members.
Definition: media_sample.cc:71
+
void SetData(const uint8_t *data, size_t data_size)
+
std::string ToString() const
+
std::shared_ptr< MediaSample > Clone() const
Clone the object and return a new MediaSample.
Definition: media_sample.cc:81
+
static std::shared_ptr< MediaSample > FromMetadata(const uint8_t *metadata, size_t metadata_size)
Definition: media_sample.cc:64
+
void TransferData(std::shared_ptr< uint8_t > data, size_t data_size)
Class to hold a media sample.
Definition: media_sample.h:22
-
static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:45
+
static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:42
diff --git a/docs/dd/d87/memory__file_8cc_source.html b/docs/dd/d87/memory__file_8cc_source.html index 816bdd75e6..6df73a6952 100644 --- a/docs/dd/d87/memory__file_8cc_source.html +++ b/docs/dd/d87/memory__file_8cc_source.html @@ -239,7 +239,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d88/pes__packet__generator_8h_source.html b/docs/dd/d88/pes__packet__generator_8h_source.html index 965c24d31e..ed5310d62d 100644 --- a/docs/dd/d88/pes__packet__generator_8h_source.html +++ b/docs/dd/d88/pes__packet__generator_8h_source.html @@ -165,7 +165,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d8c/file__test__util_8h_source.html b/docs/dd/d8c/file__test__util_8h_source.html index 616836d33c..dadffe1897 100644 --- a/docs/dd/d8c/file__test__util_8h_source.html +++ b/docs/dd/d8c/file__test__util_8h_source.html @@ -135,7 +135,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d8d/structshaka_1_1media_1_1mp4_1_1SegmentIndex-members.html b/docs/dd/d8d/structshaka_1_1media_1_1mp4_1_1SegmentIndex-members.html index 1e48d081c9..c8b4675688 100644 --- a/docs/dd/d8d/structshaka_1_1media_1_1mp4_1_1SegmentIndex-members.html +++ b/docs/dd/d8d/structshaka_1_1media_1_1mp4_1_1SegmentIndex-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d95/classshaka_1_1ThreadedIoFile-members.html b/docs/dd/d95/classshaka_1_1ThreadedIoFile-members.html index f4044e8a22..b19af14580 100644 --- a/docs/dd/d95/classshaka_1_1ThreadedIoFile-members.html +++ b/docs/dd/d95/classshaka_1_1ThreadedIoFile-members.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d98/ts__packet__writer__util_8h_source.html b/docs/dd/d98/ts__packet__writer__util_8h_source.html index 77eb36ca10..ba1415924e 100644 --- a/docs/dd/d98/ts__packet__writer__util_8h_source.html +++ b/docs/dd/d98/ts__packet__writer__util_8h_source.html @@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d9a/audio__timestamp__helper_8h_source.html b/docs/dd/d9a/audio__timestamp__helper_8h_source.html index c0d267e22f..a677ea1a7a 100644 --- a/docs/dd/d9a/audio__timestamp__helper_8h_source.html +++ b/docs/dd/d9a/audio__timestamp__helper_8h_source.html @@ -167,7 +167,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d9b/structshaka_1_1media_1_1mp4_1_1SegmentReference.html b/docs/dd/d9b/structshaka_1_1media_1_1mp4_1_1SegmentReference.html index f321d2ddf6..495a3b1ce4 100644 --- a/docs/dd/d9b/structshaka_1_1media_1_1mp4_1_1SegmentReference.html +++ b/docs/dd/d9b/structshaka_1_1media_1_1mp4_1_1SegmentReference.html @@ -143,7 +143,7 @@ uint64_t earliest_presenta diff --git a/docs/dd/d9d/classshaka_1_1MpdNotifier-members.html b/docs/dd/d9d/classshaka_1_1MpdNotifier-members.html index ea568bab36..683e7d3953 100644 --- a/docs/dd/d9d/classshaka_1_1MpdNotifier-members.html +++ b/docs/dd/d9d/classshaka_1_1MpdNotifier-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/da4/structshaka_1_1xml_1_1XmlDeleter.html b/docs/dd/da4/structshaka_1_1xml_1_1XmlDeleter.html index 7c5fabc3a4..ae0681291b 100644 --- a/docs/dd/da4/structshaka_1_1xml_1_1XmlDeleter.html +++ b/docs/dd/da4/structshaka_1_1xml_1_1XmlDeleter.html @@ -127,7 +127,7 @@ void operator() (xmlCh diff --git a/docs/dd/da5/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter.html b/docs/dd/da5/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter.html index c35ab71345..c451c36942 100644 --- a/docs/dd/da5/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter.html +++ b/docs/dd/da5/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter.html @@ -226,7 +226,7 @@ uint64_t duration () c diff --git a/docs/dd/daa/vod__media__info__dump__muxer__listener_8h_source.html b/docs/dd/daa/vod__media__info__dump__muxer__listener_8h_source.html index d4a439817c..186fb27ad2 100644 --- a/docs/dd/daa/vod__media__info__dump__muxer__listener_8h_source.html +++ b/docs/dd/daa/vod__media__info__dump__muxer__listener_8h_source.html @@ -175,7 +175,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dab/webm__muxer_8h_source.html b/docs/dd/dab/webm__muxer_8h_source.html index e2153a3fc1..92df08213d 100644 --- a/docs/dd/dab/webm__muxer_8h_source.html +++ b/docs/dd/dab/webm__muxer_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dae/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox-members.html b/docs/dd/dae/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox-members.html index 352750d78c..875af87d57 100644 --- a/docs/dd/dae/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox-members.html +++ b/docs/dd/dae/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/db0/classshaka_1_1media_1_1WebMAudioClient-members.html b/docs/dd/db0/classshaka_1_1media_1_1WebMAudioClient-members.html index ca1295d68e..ebc573f6fb 100644 --- a/docs/dd/db0/classshaka_1_1media_1_1WebMAudioClient-members.html +++ b/docs/dd/db0/classshaka_1_1media_1_1WebMAudioClient-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/db3/structshaka_1_1media_1_1mp4_1_1SampleTable-members.html b/docs/dd/db3/structshaka_1_1media_1_1mp4_1_1SampleTable-members.html index 3af54fc2a8..fb3da8bfff 100644 --- a/docs/dd/db3/structshaka_1_1media_1_1mp4_1_1SampleTable-members.html +++ b/docs/dd/db3/structshaka_1_1media_1_1mp4_1_1SampleTable-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/db5/packager_8h_source.html b/docs/dd/db5/packager_8h_source.html index 90c3bc7131..0883d4f966 100644 --- a/docs/dd/db5/packager_8h_source.html +++ b/docs/dd/db5/packager_8h_source.html @@ -121,109 +121,111 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
44 
-
49  bool output_media_info = false;
- - -
54 
- -
57  DecryptionParams decryption_params;
-
58 
- -
61 
-
62  // Parameters for testing. Do not use in production.
-
63  TestParams test_params;
-
64 };
-
65 
- -
69  std::string input;
-
70 
-
73  std::string stream_selector;
-
74 
-
77  std::string output;
-
79  std::string segment_template;
-
80 
-
83  std::string output_format;
-
86  bool skip_encryption = false;
-
90  uint32_t trick_play_factor = 0;
-
94  uint32_t bandwidth = 0;
-
97  std::string language;
-
101  std::string hls_name;
-
104  std::string hls_group_id;
-
107  std::string hls_playlist_name;
-
108 };
-
109 
-
110 class SHAKA_EXPORT Packager {
-
111  public:
-
112  Packager();
-
113  ~Packager();
-
114 
-
119  Status Initialize(
-
120  const PackagingParams& packaging_params,
-
121  const std::vector<StreamDescriptor>& stream_descriptors);
-
122 
-
126  Status Run();
-
127 
-
129  void Cancel();
+
47  bool output_media_info = false;
+ + +
52 
+ +
55  DecryptionParams decryption_params;
+
56 
+ +
59 
+
60  // Parameters for testing. Do not use in production.
+
61  TestParams test_params;
+
62 };
+
63 
+ +
67  std::string input;
+
68 
+
71  std::string stream_selector;
+
72 
+
75  std::string output;
+
77  std::string segment_template;
+
78 
+
81  std::string output_format;
+
84  bool skip_encryption = false;
+
89  std::string drm_label;
+
93  uint32_t trick_play_factor = 0;
+
97  uint32_t bandwidth = 0;
+
100  std::string language;
+
104  std::string hls_name;
+
107  std::string hls_group_id;
+
110  std::string hls_playlist_name;
+
111 };
+
112 
+
113 class SHAKA_EXPORT Packager {
+
114  public:
+
115  Packager();
+
116  ~Packager();
+
117 
+
122  Status Initialize(
+
123  const PackagingParams& packaging_params,
+
124  const std::vector<StreamDescriptor>& stream_descriptors);
+
125 
+
129  Status Run();
130 
-
132  static std::string GetLibraryVersion();
+
132  void Cancel();
133 
-
153  static std::string DefaultStreamLabelFunction(
-
154  int max_sd_pixels,
-
155  int max_hd_pixels,
-
156  int max_uhd1_pixels,
-
157  const EncryptionParams::EncryptedStreamAttributes& stream_attributes);
-
158 
-
159  private:
-
160  Packager(const Packager&) = delete;
-
161  Packager& operator=(const Packager&) = delete;
-
162 
-
163  struct PackagerInternal;
-
164  std::unique_ptr<PackagerInternal> internal_;
-
165 };
-
166 
-
167 } // namespace shaka
-
168 
-
169 #endif // PACKAGER_PACKAGER_H_
-
std::string stream_selector
Definition: packager.h:73
-
BufferCallbackParams buffer_callback_params
Buffer callback params.
Definition: packager.h:60
+
135  static std::string GetLibraryVersion();
+
136 
+
156  static std::string DefaultStreamLabelFunction(
+
157  int max_sd_pixels,
+
158  int max_hd_pixels,
+
159  int max_uhd1_pixels,
+
160  const EncryptionParams::EncryptedStreamAttributes& stream_attributes);
+
161 
+
162  private:
+
163  Packager(const Packager&) = delete;
+
164  Packager& operator=(const Packager&) = delete;
+
165 
+
166  struct PackagerInternal;
+
167  std::unique_ptr<PackagerInternal> internal_;
+
168 };
+
169 
+
170 } // namespace shaka
+
171 
+
172 #endif // PACKAGER_PACKAGER_H_
+
std::string stream_selector
Definition: packager.h:71
+
BufferCallbackParams buffer_callback_params
Buffer callback params.
Definition: packager.h:58
DASH MPD related parameters.
Definition: mpd_params.h:16
-
Defines a single input/output stream.
Definition: packager.h:67
-
std::string input
Input/source media file path or network stream URL. Required.
Definition: packager.h:69
-
HlsParams hls_params
HLS related parameters.
Definition: packager.h:53
+
Defines a single input/output stream.
Definition: packager.h:65
+
std::string input
Input/source media file path or network stream URL. Required.
Definition: packager.h:67
+
HlsParams hls_params
HLS related parameters.
Definition: packager.h:51
ChunkingParams chunking_params
Chunking (segmentation) related parameters.
Definition: packager.h:43
-
std::string hls_playlist_name
Definition: packager.h:107
+
std::string hls_playlist_name
Definition: packager.h:110
HLS related parameters.
Definition: hls_params.h:23
-
std::string hls_name
Definition: packager.h:101
-
std::string segment_template
Specifies segment template. Can be empty.
Definition: packager.h:79
+
std::string hls_name
Definition: packager.h:104
+
std::string segment_template
Specifies segment template. Can be empty.
Definition: packager.h:77
bool inject_fake_clock
Definition: packager.h:30
Parameters used for testing.
Definition: packager.h:25
-
std::string output_format
Definition: packager.h:83
+
std::string output_format
Definition: packager.h:81
bool dump_stream_info
Whether to dump input stream info.
Definition: packager.h:27
std::string injected_library_version
Definition: packager.h:33
-
MpdParams mpd_params
DASH MPD related parameters.
Definition: packager.h:51
+
MpdParams mpd_params
DASH MPD related parameters.
Definition: packager.h:49
+
std::string drm_label
Definition: packager.h:89
MP4 (ISO-BMFF) output related parameters.
- +
std::string temp_dir
Specify temporary directory for intermediate temporary files.
Definition: packager.h:39
Mp4OutputParams mp4_output_params
MP4 (ISO-BMFF) output related parameters.
Definition: packager.h:41
-
EncryptionParams encryption_params
Encryption and Decryption Parameters.
Definition: packager.h:56
-
uint32_t trick_play_factor
Definition: packager.h:90
+
EncryptionParams encryption_params
Encryption and Decryption Parameters.
Definition: packager.h:54
+
uint32_t trick_play_factor
Definition: packager.h:93
Chunking (segmentation) related parameters.
-
std::string output
Definition: packager.h:77
-
Decryption parameters.
- -
Encryption parameters.
-
Encrypted stream information that is used to determine stream label.
- +
std::string output
Definition: packager.h:75
+
Decryption parameters.
+ +
Encryption parameters.
+
Encrypted stream information that is used to determine stream label.
+
Packaging parameters.
Definition: packager.h:37
Buffer callback params.
- -
std::string language
Definition: packager.h:97
-
std::string hls_group_id
Definition: packager.h:104
+ +
std::string language
Definition: packager.h:100
+
std::string hls_group_id
Definition: packager.h:107
diff --git a/docs/dd/db9/classshaka_1_1xml_1_1RepresentationBaseXmlNode.html b/docs/dd/db9/classshaka_1_1xml_1_1RepresentationBaseXmlNode.html index 248a14d49a..df9fbaffc9 100644 --- a/docs/dd/db9/classshaka_1_1xml_1_1RepresentationBaseXmlNode.html +++ b/docs/dd/db9/classshaka_1_1xml_1_1RepresentationBaseXmlNode.html @@ -231,7 +231,7 @@ Protected Member Functions diff --git a/docs/dd/dbc/buffer__reader_8cc_source.html b/docs/dd/dbc/buffer__reader_8cc_source.html index f46ca9ff12..2de0e6ce38 100644 --- a/docs/dd/dbc/buffer__reader_8cc_source.html +++ b/docs/dd/dbc/buffer__reader_8cc_source.html @@ -196,7 +196,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dbc/encryption__handler_8h_source.html b/docs/dd/dbc/encryption__handler_8h_source.html index 78d704a3d3..4eaf9398f9 100644 --- a/docs/dd/dbc/encryption__handler_8h_source.html +++ b/docs/dd/dbc/encryption__handler_8h_source.html @@ -133,72 +133,79 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
47 
48  Status SetupProtectionPattern(StreamType stream_type);
49  bool CreateEncryptor(const EncryptionKey& encryption_key);
-
50  bool EncryptVpxFrame(const std::vector<VPxFrameInfo>& vpx_frames,
-
51  uint8_t* source,
-
52  size_t source_size,
-
53  DecryptConfig* decrypt_config);
-
54  bool EncryptNalFrame(uint8_t* data,
-
55  size_t data_length,
+
50  // Encrypt a VPx frame with size |source_size|. |dest| should have at least
+
51  // |source_size| bytes.
+
52  bool EncryptVpxFrame(const std::vector<VPxFrameInfo>& vpx_frames,
+
53  const uint8_t* source,
+
54  size_t source_size,
+
55  uint8_t* dest,
56  DecryptConfig* decrypt_config);
-
57  void EncryptBytes(uint8_t* data,
-
58  size_t size);
-
59 
-
60  // Testing injections.
-
61  void InjectVpxParserForTesting(std::unique_ptr<VPxParser> vpx_parser);
-
62  void InjectVideoSliceHeaderParserForTesting(
-
63  std::unique_ptr<VideoSliceHeaderParser> header_parser);
-
64 
-
65  const EncryptionParams encryption_params_;
-
66  const FourCC protection_scheme_ = FOURCC_NULL;
-
67  KeySource* key_source_ = nullptr;
-
68  std::string stream_label_;
-
69  // Current encryption config and encryptor.
-
70  std::shared_ptr<EncryptionConfig> encryption_config_;
-
71  std::unique_ptr<AesCryptor> encryptor_;
-
72  Codec codec_ = kUnknownCodec;
-
73  // Specifies the size of NAL unit length in bytes. Can be 1, 2 or 4 bytes. 0
-
74  // if it is not a NAL structured video.
-
75  uint8_t nalu_length_size_ = 0;
-
76  // For Sample AES, 32 bytes for Video and 16 bytes for audio.
-
77  size_t leading_clear_bytes_size_ = 0;
-
78  // For Sample AES, 48+1 bytes for video NAL and 16+1 bytes for audio.
-
79  size_t min_protected_data_size_ = 0;
-
80  // Remaining clear lead in the stream's time scale.
-
81  int64_t remaining_clear_lead_ = 0;
-
82  // Crypto period duration in the stream's time scale.
-
83  uint64_t crypto_period_duration_ = 0;
-
84  // Previous crypto period index if key rotation is enabled.
-
85  int64_t prev_crypto_period_index_ = -1;
-
86  bool check_new_crypto_period_ = false;
-
87 
-
88  // Number of encrypted blocks (16-byte-block) in pattern based encryption.
-
89  uint8_t crypt_byte_block_ = 0;
-
91  uint8_t skip_byte_block_ = 0;
-
92 
-
93  // VPx parser for VPx streams.
-
94  std::unique_ptr<VPxParser> vpx_parser_;
-
95  // Video slice header parser for NAL strucutred streams.
-
96  std::unique_ptr<VideoSliceHeaderParser> header_parser_;
-
97 };
-
98 
-
99 } // namespace media
-
100 } // namespace shaka
-
101 
-
102 #endif // PACKAGER_MEDIA_CRYPTO_ENCRYPTION_HANDLER_H_
+
57  // Encrypt a NAL unit frame with size |source_size|. |dest| should have at
+
58  // least |source_size| bytes.
+
59  bool EncryptNalFrame(const uint8_t* source,
+
60  size_t source_size,
+
61  uint8_t* dest,
+
62  DecryptConfig* decrypt_config);
+
63  // Encrypt an array with size |source_size|. |dest| should have at
+
64  // least |source_size| bytes.
+
65  void EncryptBytes(const uint8_t* source, size_t source_size, uint8_t* dest);
+
66 
+
67  // Testing injections.
+
68  void InjectVpxParserForTesting(std::unique_ptr<VPxParser> vpx_parser);
+
69  void InjectVideoSliceHeaderParserForTesting(
+
70  std::unique_ptr<VideoSliceHeaderParser> header_parser);
+
71 
+
72  const EncryptionParams encryption_params_;
+
73  const FourCC protection_scheme_ = FOURCC_NULL;
+
74  KeySource* key_source_ = nullptr;
+
75  std::string stream_label_;
+
76  // Current encryption config and encryptor.
+
77  std::shared_ptr<EncryptionConfig> encryption_config_;
+
78  std::unique_ptr<AesCryptor> encryptor_;
+
79  Codec codec_ = kUnknownCodec;
+
80  // Specifies the size of NAL unit length in bytes. Can be 1, 2 or 4 bytes. 0
+
81  // if it is not a NAL structured video.
+
82  uint8_t nalu_length_size_ = 0;
+
83  // For Sample AES, 32 bytes for Video and 16 bytes for audio.
+
84  size_t leading_clear_bytes_size_ = 0;
+
85  // For Sample AES, 48+1 bytes for video NAL and 16+1 bytes for audio.
+
86  size_t min_protected_data_size_ = 0;
+
87  // Remaining clear lead in the stream's time scale.
+
88  int64_t remaining_clear_lead_ = 0;
+
89  // Crypto period duration in the stream's time scale.
+
90  uint64_t crypto_period_duration_ = 0;
+
91  // Previous crypto period index if key rotation is enabled.
+
92  int64_t prev_crypto_period_index_ = -1;
+
93  bool check_new_crypto_period_ = false;
+
94 
+
95  // Number of encrypted blocks (16-byte-block) in pattern based encryption.
+
96  uint8_t crypt_byte_block_ = 0;
+
98  uint8_t skip_byte_block_ = 0;
+
99 
+
100  // VPx parser for VPx streams.
+
101  std::unique_ptr<VPxParser> vpx_parser_;
+
102  // Video slice header parser for NAL strucutred streams.
+
103  std::unique_ptr<VideoSliceHeaderParser> header_parser_;
+
104 };
+
105 
+
106 } // namespace media
+
107 } // namespace shaka
+
108 
+
109 #endif // PACKAGER_MEDIA_CRYPTO_ENCRYPTION_HANDLER_H_
Abstract class holds stream information.
Definition: stream_info.h:58
- -
Status Process(std::unique_ptr< StreamData > stream_data) override
+ +
Status Process(std::unique_ptr< StreamData > stream_data) override
-
Encryption parameters.
+
Encryption parameters.
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:45
diff --git a/docs/dd/dbd/structshaka_1_1media_1_1EncryptionKey.html b/docs/dd/dbd/structshaka_1_1media_1_1EncryptionKey.html index 5855b468f8..08070e5b7c 100644 --- a/docs/dd/dbd/structshaka_1_1media_1_1EncryptionKey.html +++ b/docs/dd/dbd/structshaka_1_1media_1_1EncryptionKey.html @@ -120,7 +120,7 @@ std::vector< uint8_t >  diff --git a/docs/dd/dbd/structshaka_1_1media_1_1mp4_1_1TrackEncryption-members.html b/docs/dd/dbd/structshaka_1_1media_1_1mp4_1_1TrackEncryption-members.html index e4c117c002..056505f03c 100644 --- a/docs/dd/dbd/structshaka_1_1media_1_1mp4_1_1TrackEncryption-members.html +++ b/docs/dd/dbd/structshaka_1_1media_1_1mp4_1_1TrackEncryption-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dbf/webm__webvtt__parser_8h_source.html b/docs/dd/dbf/webm__webvtt__parser_8h_source.html index bd518cfff7..69ce3fc9e0 100644 --- a/docs/dd/dbf/webm__webvtt__parser_8h_source.html +++ b/docs/dd/dbf/webm__webvtt__parser_8h_source.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dc1/structshaka_1_1media_1_1mp4_1_1FullBox.html b/docs/dd/dc1/structshaka_1_1media_1_1mp4_1_1FullBox.html index d1a4949d04..912ad4001e 100644 --- a/docs/dd/dc1/structshaka_1_1media_1_1mp4_1_1FullBox.html +++ b/docs/dd/dc1/structshaka_1_1media_1_1mp4_1_1FullBox.html @@ -245,7 +245,7 @@ Protected Member Functions diff --git a/docs/dd/dc4/classshaka_1_1media_1_1ProducerConsumerQueue-members.html b/docs/dd/dc4/classshaka_1_1media_1_1ProducerConsumerQueue-members.html index d68a3b88ea..f22402dc29 100644 --- a/docs/dd/dc4/classshaka_1_1media_1_1ProducerConsumerQueue-members.html +++ b/docs/dd/dc4/classshaka_1_1media_1_1ProducerConsumerQueue-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html b/docs/dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html index e283e5d45f..014d4bdf89 100644 --- a/docs/dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html +++ b/docs/dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html @@ -378,7 +378,7 @@ virtual Status&# diff --git a/docs/dd/dca/structshaka_1_1media_1_1mp4_1_1OriginalFormat-members.html b/docs/dd/dca/structshaka_1_1media_1_1mp4_1_1OriginalFormat-members.html index d86f482c37..c79b3a2881 100644 --- a/docs/dd/dca/structshaka_1_1media_1_1mp4_1_1OriginalFormat-members.html +++ b/docs/dd/dca/structshaka_1_1media_1_1mp4_1_1OriginalFormat-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dce/structshaka_1_1media_1_1Cue.html b/docs/dd/dce/structshaka_1_1media_1_1Cue.html index 614cbe4b6a..3951825f24 100644 --- a/docs/dd/dce/structshaka_1_1media_1_1Cue.html +++ b/docs/dd/dce/structshaka_1_1media_1_1Cue.html @@ -125,7 +125,7 @@ std::string comment diff --git a/docs/dd/dd2/buffer__writer_8h_source.html b/docs/dd/dd2/buffer__writer_8h_source.html index 2939c7d839..d262eee91d 100644 --- a/docs/dd/dd2/buffer__writer_8h_source.html +++ b/docs/dd/dd2/buffer__writer_8h_source.html @@ -160,7 +160,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dd3/buffer__writer_8cc_source.html b/docs/dd/dd3/buffer__writer_8cc_source.html index f8b05261b9..0f3e7d7369 100644 --- a/docs/dd/dd3/buffer__writer_8cc_source.html +++ b/docs/dd/dd3/buffer__writer_8cc_source.html @@ -187,7 +187,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dd6/classshaka_1_1media_1_1WebMVideoClient-members.html b/docs/dd/dd6/classshaka_1_1media_1_1WebMVideoClient-members.html index d9dcfe4c18..b1b2799b08 100644 --- a/docs/dd/dd6/classshaka_1_1media_1_1WebMVideoClient-members.html +++ b/docs/dd/dd6/classshaka_1_1media_1_1WebMVideoClient-members.html @@ -95,7 +95,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - + @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
DISALLOW_COPY_AND_ASSIGN(WebMParserClient) (defined in shaka::media::WebMParserClient)shaka::media::WebMParserClientprotected
GetVideoStreamInfo(int64_t track_num, const std::string &codec_id, bool is_encrypted)shaka::media::WebMVideoClient
GetVpCodecConfig(const std::vector< uint8_t > &codec_private)shaka::media::WebMVideoClient
GetVpCodecConfig(const std::vector< uint8_t > &codec_private)shaka::media::WebMVideoClient
OnString(int id, const std::string &str) (defined in shaka::media::WebMParserClient)shaka::media::WebMParserClientvirtual
Reset()shaka::media::WebMVideoClient
WebMParserClient() (defined in shaka::media::WebMParserClient)shaka::media::WebMParserClientprotected
diff --git a/docs/dd/dd8/mock__muxer__listener_8cc_source.html b/docs/dd/dd8/mock__muxer__listener_8cc_source.html index 650d657d89..f12f0cd124 100644 --- a/docs/dd/dd8/mock__muxer__listener_8cc_source.html +++ b/docs/dd/dd8/mock__muxer__listener_8cc_source.html @@ -131,7 +131,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dd9/structshaka_1_1media_1_1mp4_1_1Box-members.html b/docs/dd/dd9/structshaka_1_1media_1_1mp4_1_1Box-members.html index cd3d25fbad..de4bcbf3af 100644 --- a/docs/dd/dd9/structshaka_1_1media_1_1mp4_1_1Box-members.html +++ b/docs/dd/dd9/structshaka_1_1media_1_1mp4_1_1Box-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/ddc/trick__play__handler_8h_source.html b/docs/dd/ddc/trick__play__handler_8h_source.html index a50482682d..fcb9e1999c 100644 --- a/docs/dd/ddc/trick__play__handler_8h_source.html +++ b/docs/dd/ddc/trick__play__handler_8h_source.html @@ -96,105 +96,77 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
7 #ifndef PACKAGER_MEDIA_BASE_TRICK_PLAY_HANDLER_H_
8 #define PACKAGER_MEDIA_BASE_TRICK_PLAY_HANDLER_H_
9 
-
10 #include "packager/media/base/media_handler.h"
+
10 #include <list>
11 
-
12 namespace shaka {
-
13 namespace media {
-
14 
-
17 // The stream data in trick play stream is not a simple duplicate. Some
-
18 // information need to be updated, including trick_play_factor in
-
19 // VideoStreamInfo, the duration in MediaSample (which makes sure there is no
-
20 // gap between the media sample dts). Since the duration information can be
-
21 // determined after getting the next media sample, a queue is used to cache the
-
22 // input stream data before the next key frame.
- -
24  public:
- -
26  ~TrickPlayHandler() override;
+
12 #include "packager/media/base/media_handler.h"
+
13 
+
14 namespace shaka {
+
15 namespace media {
+
16 
+
17 class VideoStreamInfo;
+
18 
+
22 // The stream data in trick play streams are not simple duplicates. Some
+
23 // information get changed (e.g. VideoStreamInfo.trick_play_factor).
+ +
25  public:
+
26  explicit TrickPlayHandler(uint32_t factor);
27 
-
28  void SetHandlerForMainStream(std::shared_ptr<MediaHandler> handler);
-
29  void SetHandlerForTrickPlay(uint32_t trick_play_factor,
-
30  std::shared_ptr<MediaHandler> handler);
+
28  private:
+
29  TrickPlayHandler(const TrickPlayHandler&) = delete;
+
30  TrickPlayHandler& operator=(const TrickPlayHandler&) = delete;
31 
-
32  protected:
-
35  Status InitializeInternal() override;
-
36  Status Process(std::unique_ptr<StreamData> stream_data) override;
-
37  bool ValidateOutputStreamIndex(size_t stream_index) const override;
-
38  Status OnFlushRequest(size_t input_stream_index) override;
+
32  Status InitializeInternal() override;
+
33  Status Process(std::unique_ptr<StreamData> stream_data) override;
+
34  Status OnFlushRequest(size_t input_stream_index) override;
+
35 
+
36  Status OnStreamInfo(const StreamInfo& info);
+
37  Status OnSegmentInfo(std::shared_ptr<const SegmentInfo> info);
+
38  Status OnMediaSample(const MediaSample& sample);
+
39  Status OnTrickFrame(const MediaSample& sample);
40 
-
41  private:
-
42  friend class TrickPlayHandlerTest;
-
43 
-
44  // Returns true if the trick play handler has main stream output handler
-
45  // connected, otherwise returns false.
-
46  bool HasMainStream();
-
47 
-
48  // Process the cached stream data for one trick play stream.
-
49  // The cached data is dispatched to the |output_stream_index|.
-
50  Status ProcessCachedStreamData(
-
51  size_t output_stream_index,
-
52  std::deque<std::shared_ptr<StreamData>>* cached_stream_data);
-
53 
-
54  // Process a single stream data. Depending on the stream data type, some
-
55  // information needs to be updated.
-
56  // Decoding timestamp for current key media sample. It is used for calculating
-
57  // the duration of previous key media sample, to make sure there is no gap
-
58  // between two key media samples.
-
59  Status ProcessOneStreamData(
-
60  size_t output_stream_index,
-
61  const StreamData& stream_data);
+
41  const uint32_t factor_;
+
42 
+
43  uint64_t total_frames_ = 0;
+
44  uint64_t total_key_frames_ = 0;
+
45  uint64_t total_trick_frames_ = 0;
+
46 
+
47  // We cannot just send video info through as we need to calculate the play
+
48  // rate using the first two trick play frames. This reference should only be
+
49  // used to update the play back rate before video info is sent downstream.
+
50  // After getting sent downstream, this should never be used.
+
51  std::shared_ptr<VideoStreamInfo> video_info_;
+
52 
+
53  // We need to track the segment that most recently finished so that we can
+
54  // extend its duration if there are empty segments.
+
55  std::shared_ptr<SegmentInfo> previous_segment_;
+
56 
+
57  // Since we are dropping frames, the time that those frames would have been
+
58  // on screen need to be added to the frame before them. Keep a reference to
+
59  // the most recent trick play frame so that we can grow its duration as we
+
60  // drop other frames.
+
61  std::shared_ptr<MediaSample> previous_trick_frame_;
62 
-
63  // Trick play factors. Note that there can be multiple trick play factors,
-
64  // e.g., 2, 4 and 8. That means, one input video stream will generate 3
-
65  // output trick play streams and original stream. Three trick play streams
-
66  // are:
-
67  // [key_frame_0, key_frame_2, key_frame_4, ...]
-
68  // [key_frame_0, key_frame_4, key_frame_8,...]
-
69  // [key_frame_0, key_frame_8, key_frame_16, ...].
-
70  std::vector<uint32_t> trick_play_factors_;
-
71 
-
72  TrickPlayHandler(const TrickPlayHandler&) = delete;
-
73  TrickPlayHandler& operator=(const TrickPlayHandler&) = delete;
-
74 
-
76  uint32_t total_key_frames_ = 0;
-
77 
-
78  // Num of frames received.
-
79  uint32_t total_frames_ = 0;
-
80 
-
81  // End timestamp of the previous processed media_sample, which is |dts| +
-
82  // |duration|. The duration of key frame in trick play stream is updated based
-
83  // on this timestamp.
-
84  int64_t prev_sample_end_timestamp_ = 0;
-
85 
-
86  // Record playback_rate for each trick play stream.
-
87  std::vector<uint32_t> playback_rates_;
-
88 
-
89  // The data in output streams should be in the same order as in the input
-
90  // stream. Cache the stream data before next key frame so that we can
-
91  // determine the duration for the current key frame. Since one key frame may
-
92  // be dispatched to different trick play stream, each trick play stream need
-
93  // its own queue to handle the synchronization.
-
94  // TODO(hmchen): Use one queue and multiple iterators, instead of multiple
-
95  // queues.
-
96  std::vector<std::deque<std::shared_ptr<StreamData>>> cached_stream_data_;
-
97 };
-
98 
-
99 } // namespace media
-
100 } // namespace shaka
-
101 
-
102 #endif // PACKAGER_MEDIA_BASE_TRICK_PLAY_HANDLER_H_
- - +
63  // Since we cannot send messages downstream right away, keep a queue of
+
64  // messages that need to be sent down. At the start, we use this to queue
+
65  // messages until we can send out |video_info_|. To ensure messages are
+
66  // kept in order, messages are only dispatched through this queue and never
+
67  // directly.
+
68  std::list<std::unique_ptr<StreamData>> delayed_messages_;
+
69 };
+
70 
+
71 } // namespace media
+
72 } // namespace shaka
+
73 
+
74 #endif // PACKAGER_MEDIA_BASE_TRICK_PLAY_HANDLER_H_
+ +
Abstract class holds stream information.
Definition: stream_info.h:58
-
bool ValidateOutputStreamIndex(size_t stream_index) const override
Validate if the stream at the specified index actually exists.
-
Status OnFlushRequest(size_t input_stream_index) override
Event handler for flush request at the specific input stream index.
- -
Status Process(std::unique_ptr< StreamData > stream_data) override
+
Class to hold a media sample.
Definition: media_sample.h:22
diff --git a/docs/dd/de4/classshaka_1_1media_1_1VideoSliceHeaderParser.html b/docs/dd/de4/classshaka_1_1media_1_1VideoSliceHeaderParser.html index 79e5f1bb58..0eab7f7183 100644 --- a/docs/dd/de4/classshaka_1_1media_1_1VideoSliceHeaderParser.html +++ b/docs/dd/de4/classshaka_1_1media_1_1VideoSliceHeaderParser.html @@ -150,7 +150,7 @@ virtual int64_t  diff --git a/docs/dd/de7/structshaka_1_1media_1_1H265Pps-members.html b/docs/dd/de7/structshaka_1_1media_1_1H265Pps-members.html index e490740361..747a166252 100644 --- a/docs/dd/de7/structshaka_1_1media_1_1H265Pps-members.html +++ b/docs/dd/de7/structshaka_1_1media_1_1H265Pps-members.html @@ -137,7 +137,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/de7/xml__node_8h_source.html b/docs/dd/de7/xml__node_8h_source.html index 132d812f67..dd2aa8fd21 100644 --- a/docs/dd/de7/xml__node_8h_source.html +++ b/docs/dd/de7/xml__node_8h_source.html @@ -239,7 +239,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/de9/classshaka_1_1media_1_1MediaHandler-members.html b/docs/dd/de9/classshaka_1_1media_1_1MediaHandler-members.html index 1f45153f04..fc06b366c3 100644 --- a/docs/dd/de9/classshaka_1_1media_1_1MediaHandler-members.html +++ b/docs/dd/de9/classshaka_1_1media_1_1MediaHandler-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/de9/structshaka_1_1ChunkingParams-members.html b/docs/dd/de9/structshaka_1_1ChunkingParams-members.html index d9f4b05ab3..b5d00bfad1 100644 --- a/docs/dd/de9/structshaka_1_1ChunkingParams-members.html +++ b/docs/dd/de9/structshaka_1_1ChunkingParams-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dee/box__definitions_8cc_source.html b/docs/dd/dee/box__definitions_8cc_source.html index db5f1044e8..3debb471ae 100644 --- a/docs/dd/dee/box__definitions_8cc_source.html +++ b/docs/dd/dee/box__definitions_8cc_source.html @@ -2968,7 +2968,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/df2/webm_2multi__segment__segmenter_8h_source.html b/docs/dd/df2/webm_2multi__segment__segmenter_8h_source.html index 7f6abef00d..3a72154954 100644 --- a/docs/dd/df2/webm_2multi__segment__segmenter_8h_source.html +++ b/docs/dd/df2/webm_2multi__segment__segmenter_8h_source.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/df5/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun.html b/docs/dd/df5/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun.html index eed8cfaffa..65d9b83825 100644 --- a/docs/dd/df5/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun.html +++ b/docs/dd/df5/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun.html @@ -212,7 +212,7 @@ Additional Inherited Members diff --git a/docs/dd/df6/structshaka_1_1media_1_1mp4_1_1Metadata.html b/docs/dd/df6/structshaka_1_1media_1_1mp4_1_1Metadata.html index 3d2624d6c1..16da29dc24 100644 --- a/docs/dd/df6/structshaka_1_1media_1_1mp4_1_1Metadata.html +++ b/docs/dd/df6/structshaka_1_1media_1_1mp4_1_1Metadata.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/de/d0f/local__file_8h_source.html b/docs/de/d0f/local__file_8h_source.html index 3c32c9f2e8..417e0792e1 100644 --- a/docs/de/d0f/local__file_8h_source.html +++ b/docs/de/d0f/local__file_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
bool Flush() override
Definition: local_file.cc:79
Define an abstract file interface.
Definition: file.h:26
int64_t Size() override
Definition: local_file.cc:61
-
static bool Delete(const char *file_name)
Definition: local_file.cc:113
+
static bool Delete(const char *file_name)
Definition: local_file.cc:126
Implement LocalFile which deals with local storage.
Definition: local_file.h:20
int64_t Read(void *buffer, uint64_t length) override
Definition: local_file.cc:37
bool Open() override
Internal open. Should not be used directly.
Definition: local_file.cc:107
@@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d12/container__names_8h_source.html b/docs/de/d12/container__names_8h_source.html index 6ee817f81c..51f5f941b8 100644 --- a/docs/de/d12/container__names_8h_source.html +++ b/docs/de/d12/container__names_8h_source.html @@ -159,7 +159,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d13/ts__writer_8cc_source.html b/docs/de/d13/ts__writer_8cc_source.html index 96911e9249..1b93e2140f 100644 --- a/docs/de/d13/ts__writer_8cc_source.html +++ b/docs/de/d13/ts__writer_8cc_source.html @@ -360,7 +360,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d16/classshaka_1_1media_1_1TextTrackConfig-members.html b/docs/de/d16/classshaka_1_1media_1_1TextTrackConfig-members.html index 530bd546e6..6b08f91e12 100644 --- a/docs/de/d16/classshaka_1_1media_1_1TextTrackConfig-members.html +++ b/docs/de/d16/classshaka_1_1media_1_1TextTrackConfig-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d17/cluster__builder_8cc_source.html b/docs/de/d17/cluster__builder_8cc_source.html index 8a37232958..e1c5bc10de 100644 --- a/docs/de/d17/cluster__builder_8cc_source.html +++ b/docs/de/d17/cluster__builder_8cc_source.html @@ -346,7 +346,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d1a/classshaka_1_1media_1_1wvm_1_1WvmMediaParser-members.html b/docs/de/d1a/classshaka_1_1media_1_1wvm_1_1WvmMediaParser-members.html index 4ee31a0298..583a5a6418 100644 --- a/docs/de/d1a/classshaka_1_1media_1_1wvm_1_1WvmMediaParser-members.html +++ b/docs/de/d1a/classshaka_1_1media_1_1wvm_1_1WvmMediaParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d1e/mp4_2single__segment__segmenter_8cc_source.html b/docs/de/d1e/mp4_2single__segment__segmenter_8cc_source.html index 0de6570675..a708a754c4 100644 --- a/docs/de/d1e/mp4_2single__segment__segmenter_8cc_source.html +++ b/docs/de/d1e/mp4_2single__segment__segmenter_8cc_source.html @@ -337,7 +337,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d22/aes__pattern__cryptor_8cc_source.html b/docs/de/d22/aes__pattern__cryptor_8cc_source.html index 9268e2a861..e8a4d28404 100644 --- a/docs/de/d22/aes__pattern__cryptor_8cc_source.html +++ b/docs/de/d22/aes__pattern__cryptor_8cc_source.html @@ -185,7 +185,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d27/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter.html b/docs/de/d27/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter.html index 9b4ef7259c..2fcd0f110f 100644 --- a/docs/de/d27/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter.html +++ b/docs/de/d27/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter.html @@ -140,7 +140,7 @@ static const uint8_t kElem diff --git a/docs/de/d29/structshaka_1_1media_1_1mp4_1_1TrackExtends.html b/docs/de/d29/structshaka_1_1media_1_1mp4_1_1TrackExtends.html index b00c423aad..383789f029 100644 --- a/docs/de/d29/structshaka_1_1media_1_1mp4_1_1TrackExtends.html +++ b/docs/de/d29/structshaka_1_1media_1_1mp4_1_1TrackExtends.html @@ -194,7 +194,7 @@ Additional Inherited Members diff --git a/docs/de/d33/classshaka_1_1media_1_1WebMTracksParser-members.html b/docs/de/d33/classshaka_1_1media_1_1WebMTracksParser-members.html index 3438d222b9..2d2ba5cfba 100644 --- a/docs/de/d33/classshaka_1_1media_1_1WebMTracksParser-members.html +++ b/docs/de/d33/classshaka_1_1media_1_1WebMTracksParser-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d33/structshaka_1_1media_1_1H265Pps.html b/docs/de/d33/structshaka_1_1media_1_1H265Pps.html index 5cc7ddb184..a68966488c 100644 --- a/docs/de/d33/structshaka_1_1media_1_1H265Pps.html +++ b/docs/de/d33/structshaka_1_1media_1_1H265Pps.html @@ -224,7 +224,7 @@ bool chroma_qp_offset_list diff --git a/docs/de/d34/offset__byte__queue_8h_source.html b/docs/de/d34/offset__byte__queue_8h_source.html index fc4fd6ae80..42fbd004e2 100644 --- a/docs/de/d34/offset__byte__queue_8h_source.html +++ b/docs/de/d34/offset__byte__queue_8h_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d3c/h26x__byte__to__unit__stream__converter_8cc_source.html b/docs/de/d3c/h26x__byte__to__unit__stream__converter_8cc_source.html index 7dc18d3cfd..ffd86d4e97 100644 --- a/docs/de/d3c/h26x__byte__to__unit__stream__converter_8cc_source.html +++ b/docs/de/d3c/h26x__byte__to__unit__stream__converter_8cc_source.html @@ -201,7 +201,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d3c/macros_8h_source.html b/docs/de/d3c/macros_8h_source.html index 5d76cb6736..2d8fd4af9a 100644 --- a/docs/de/d3c/macros_8h_source.html +++ b/docs/de/d3c/macros_8h_source.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d3e/buffer__reader_8h_source.html b/docs/de/d3e/buffer__reader_8h_source.html index df662218c6..e1866aeb46 100644 --- a/docs/de/d3e/buffer__reader_8h_source.html +++ b/docs/de/d3e/buffer__reader_8h_source.html @@ -163,7 +163,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d3e/classshaka_1_1media_1_1H264Parser-members.html b/docs/de/d3e/classshaka_1_1media_1_1H264Parser-members.html index c7c286cf0b..6c4b0c198c 100644 --- a/docs/de/d3e/classshaka_1_1media_1_1H264Parser-members.html +++ b/docs/de/d3e/classshaka_1_1media_1_1H264Parser-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d43/classshaka_1_1media_1_1mp2t_1_1PesPacket-members.html b/docs/de/d43/classshaka_1_1media_1_1mp2t_1_1PesPacket-members.html index 7fbefc8f70..3701740302 100644 --- a/docs/de/d43/classshaka_1_1media_1_1mp2t_1_1PesPacket-members.html +++ b/docs/de/d43/classshaka_1_1media_1_1mp2t_1_1PesPacket-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d49/classshaka_1_1media_1_1DecryptConfig.html b/docs/de/d49/classshaka_1_1media_1_1DecryptConfig.html index 2d1b74866a..30d9722217 100644 --- a/docs/de/d49/classshaka_1_1media_1_1DecryptConfig.html +++ b/docs/de/d49/classshaka_1_1media_1_1DecryptConfig.html @@ -315,7 +315,7 @@ static const size_t  diff --git a/docs/de/d4a/muxer__listener__internal_8h_source.html b/docs/de/d4a/muxer__listener__internal_8h_source.html index d6ad05b0e6..553df98c5e 100644 --- a/docs/de/d4a/muxer__listener__internal_8h_source.html +++ b/docs/de/d4a/muxer__listener__internal_8h_source.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d52/classshaka_1_1Representation.html b/docs/de/d52/classshaka_1_1Representation.html index 25aa49c9ad..6662d24bc9 100644 --- a/docs/de/d52/classshaka_1_1Representation.html +++ b/docs/de/d52/classshaka_1_1Representation.html @@ -456,7 +456,7 @@ template<DashProfile profile> diff --git a/docs/de/d53/classshaka_1_1media_1_1FakeInputMediaHandler-members.html b/docs/de/d53/classshaka_1_1media_1_1FakeInputMediaHandler-members.html new file mode 100644 index 0000000000..111a7ecf60 --- /dev/null +++ b/docs/de/d53/classshaka_1_1media_1_1FakeInputMediaHandler-members.html @@ -0,0 +1,124 @@ + + + + + + +Shaka Packager SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
Shaka Packager SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
shaka::media::FakeInputMediaHandler Member List
+
+
+ +

This is the complete list of members for shaka::media::FakeInputMediaHandler, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
AddHandler(std::shared_ptr< MediaHandler > handler)shaka::media::MediaHandlerinline
Dispatch(std::unique_ptr< StreamData > stream_data)shaka::media::MediaHandlerprotected
DispatchMediaEvent(size_t stream_index, std::shared_ptr< const MediaEvent > media_event)shaka::media::MediaHandlerinlineprotected
DispatchMediaSample(size_t stream_index, std::shared_ptr< const MediaSample > media_sample)shaka::media::MediaHandlerinlineprotected
DispatchPeriodInfo(size_t stream_index, std::shared_ptr< const PeriodInfo > period_info)shaka::media::MediaHandlerinlineprotected
DispatchSegmentInfo(size_t stream_index, std::shared_ptr< const SegmentInfo > segment_info)shaka::media::MediaHandlerinlineprotected
DispatchStreamInfo(size_t stream_index, std::shared_ptr< const StreamInfo > stream_info)shaka::media::MediaHandlerinlineprotected
DispatchTextSample(size_t stream_index, std::shared_ptr< const TextSample > text_sample)shaka::media::MediaHandlerinlineprotected
FlushAllDownstreams()shaka::media::MediaHandlerprotected
FlushDownstream(size_t output_stream_index)shaka::media::MediaHandlerprotected
Initialize()shaka::media::MediaHandler
initialized() (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected
IsConnected()shaka::media::MediaHandlerinline
MediaHandler()=default (defined in shaka::media::MediaHandler)shaka::media::MediaHandler
next_output_stream_index() const (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected
num_input_streams() const (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected
OnFlushRequest(size_t input_stream_index)shaka::media::MediaHandlerprotectedvirtual
output_handlers() (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected
SetHandler(size_t output_stream_index, std::shared_ptr< MediaHandler > handler)shaka::media::MediaHandler
~MediaHandler()=default (defined in shaka::media::MediaHandler)shaka::media::MediaHandlervirtual
+ + + + diff --git a/docs/de/d55/structshaka_1_1media_1_1mp4_1_1Language-members.html b/docs/de/d55/structshaka_1_1media_1_1mp4_1_1Language-members.html index f02277fd63..f5eac5dd34 100644 --- a/docs/de/d55/structshaka_1_1media_1_1mp4_1_1Language-members.html +++ b/docs/de/d55/structshaka_1_1media_1_1mp4_1_1Language-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d5b/adts__header_8cc_source.html b/docs/de/d5b/adts__header_8cc_source.html index 6a9552ec5e..345cdbaa87 100644 --- a/docs/de/d5b/adts__header_8cc_source.html +++ b/docs/de/d5b/adts__header_8cc_source.html @@ -207,7 +207,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d5c/mpd__flags_8h_source.html b/docs/de/d5c/mpd__flags_8h_source.html index 6b31ce30a3..266e286b98 100644 --- a/docs/de/d5c/mpd__flags_8h_source.html +++ b/docs/de/d5c/mpd__flags_8h_source.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d60/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter-members.html b/docs/de/d60/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter-members.html index 3cc2c173f2..1e0f575637 100644 --- a/docs/de/d60/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter-members.html +++ b/docs/de/d60/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html b/docs/de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html index db8cacf1e2..4a2a6cf8ad 100644 --- a/docs/de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html +++ b/docs/de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html @@ -257,7 +257,7 @@ void  diff --git a/docs/de/d6c/mock__media__playlist_8h_source.html b/docs/de/d6c/mock__media__playlist_8h_source.html index 5512d29cfc..72b87e5393 100644 --- a/docs/de/d6c/mock__media__playlist_8h_source.html +++ b/docs/de/d6c/mock__media__playlist_8h_source.html @@ -155,7 +155,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d6c/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html b/docs/de/d6c/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html index 69a2b8f463..8f53a32746 100644 --- a/docs/de/d6c/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html +++ b/docs/de/d6c/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d6e/classshaka_1_1media_1_1MockOutputMediaHandler-members.html b/docs/de/d6e/classshaka_1_1media_1_1MockOutputMediaHandler-members.html new file mode 100644 index 0000000000..3b7c86d4ef --- /dev/null +++ b/docs/de/d6e/classshaka_1_1media_1_1MockOutputMediaHandler-members.html @@ -0,0 +1,126 @@ + + + + + + +Shaka Packager SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
Shaka Packager SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
shaka::media::MockOutputMediaHandler Member List
+
+
+ +

This is the complete list of members for shaka::media::MockOutputMediaHandler, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
AddHandler(std::shared_ptr< MediaHandler > handler)shaka::media::MediaHandlerinline
Dispatch(std::unique_ptr< StreamData > stream_data)shaka::media::MediaHandlerprotected
DispatchMediaEvent(size_t stream_index, std::shared_ptr< const MediaEvent > media_event)shaka::media::MediaHandlerinlineprotected
DispatchMediaSample(size_t stream_index, std::shared_ptr< const MediaSample > media_sample)shaka::media::MediaHandlerinlineprotected
DispatchPeriodInfo(size_t stream_index, std::shared_ptr< const PeriodInfo > period_info)shaka::media::MediaHandlerinlineprotected
DispatchSegmentInfo(size_t stream_index, std::shared_ptr< const SegmentInfo > segment_info)shaka::media::MediaHandlerinlineprotected
DispatchStreamInfo(size_t stream_index, std::shared_ptr< const StreamInfo > stream_info)shaka::media::MediaHandlerinlineprotected
DispatchTextSample(size_t stream_index, std::shared_ptr< const TextSample > text_sample)shaka::media::MediaHandlerinlineprotected
FlushAllDownstreams()shaka::media::MediaHandlerprotected
FlushDownstream(size_t output_stream_index)shaka::media::MediaHandlerprotected
Initialize()shaka::media::MediaHandler
initialized() (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected
IsConnected()shaka::media::MediaHandlerinline
MediaHandler()=default (defined in shaka::media::MediaHandler)shaka::media::MediaHandler
MOCK_METHOD1(OnProcess, void(const StreamData *)) (defined in shaka::media::MockOutputMediaHandler)shaka::media::MockOutputMediaHandler
MOCK_METHOD1(OnFlush, void(size_t index)) (defined in shaka::media::MockOutputMediaHandler)shaka::media::MockOutputMediaHandler
next_output_stream_index() const (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected
num_input_streams() const (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected
output_handlers() (defined in shaka::media::MediaHandler)shaka::media::MediaHandlerinlineprotected
SetHandler(size_t output_stream_index, std::shared_ptr< MediaHandler > handler)shaka::media::MediaHandler
ValidateOutputStreamIndex(size_t stream_index) const shaka::media::MediaHandlerprotectedvirtual
~MediaHandler()=default (defined in shaka::media::MediaHandler)shaka::media::MediaHandlervirtual
+ + + + diff --git a/docs/de/d6e/language__utils_8h_source.html b/docs/de/d6e/language__utils_8h_source.html index ac008257af..98671a3e83 100644 --- a/docs/de/d6e/language__utils_8h_source.html +++ b/docs/de/d6e/language__utils_8h_source.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d70/http__key__fetcher_8cc_source.html b/docs/de/d70/http__key__fetcher_8cc_source.html index 22f438b2f9..b9b76e04fc 100644 --- a/docs/de/d70/http__key__fetcher_8cc_source.html +++ b/docs/de/d70/http__key__fetcher_8cc_source.html @@ -209,15 +209,15 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
120  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, AppendToString);
121  curl_easy_setopt(curl, CURLOPT_WRITEDATA, response);
122 
-
123  if (!client_cert_private_key_file_.empty() &&
-
124  !client_cert_private_key_password_.empty() &&
-
125  !client_cert_file_.empty()) {
-
126  // Some PlayReady packaging servers only allow connects via HTTPS with
-
127  // client certificates.
-
128  curl_easy_setopt(curl, CURLOPT_SSLKEY,
-
129  client_cert_private_key_file_.data());
-
130  curl_easy_setopt(curl, CURLOPT_KEYPASSWD,
-
131  client_cert_private_key_password_.data());
+
123  if (!client_cert_private_key_file_.empty() && !client_cert_file_.empty()) {
+
124  // Some PlayReady packaging servers only allow connects via HTTPS with
+
125  // client certificates.
+
126  curl_easy_setopt(curl, CURLOPT_SSLKEY,
+
127  client_cert_private_key_file_.data());
+
128  if (!client_cert_private_key_password_.empty()) {
+
129  curl_easy_setopt(curl, CURLOPT_KEYPASSWD,
+
130  client_cert_private_key_password_.data());
+
131  }
132  curl_easy_setopt(curl, CURLOPT_SSLKEYTYPE, "PEM");
133  curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "PEM");
134  curl_easy_setopt(curl, CURLOPT_SSLCERT, client_cert_file_.data());
@@ -266,7 +266,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d77/webm__content__encodings__client_8cc_source.html b/docs/de/d77/webm__content__encodings__client_8cc_source.html index e07b0efc9c..9062553005 100644 --- a/docs/de/d77/webm__content__encodings__client_8cc_source.html +++ b/docs/de/d77/webm__content__encodings__client_8cc_source.html @@ -358,7 +358,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d7b/mp4__media__parser_8h_source.html b/docs/de/d7b/mp4__media__parser_8h_source.html index c5eec11f5c..d413c285e5 100644 --- a/docs/de/d7b/mp4__media__parser_8h_source.html +++ b/docs/de/d7b/mp4__media__parser_8h_source.html @@ -203,7 +203,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d7e/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi.html b/docs/de/d7e/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi.html index 39f2fed4f8..c63d0d46f1 100644 --- a/docs/de/d7e/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi.html +++ b/docs/de/d7e/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi.html @@ -147,7 +147,7 @@ Additional Inherited Members diff --git a/docs/de/d7f/unionshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes_1_1OneOf-members.html b/docs/de/d7f/unionshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes_1_1OneOf-members.html index 1ff762ce9f..6629c810bb 100644 --- a/docs/de/d7f/unionshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes_1_1OneOf-members.html +++ b/docs/de/d7f/unionshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes_1_1OneOf-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d83/box__definitions__comparison_8h_source.html b/docs/de/d83/box__definitions__comparison_8h_source.html index e56184d932..6843f9d884 100644 --- a/docs/de/d83/box__definitions__comparison_8h_source.html +++ b/docs/de/d83/box__definitions__comparison_8h_source.html @@ -592,7 +592,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d85/classshaka_1_1media_1_1OriginHandler.html b/docs/de/d85/classshaka_1_1media_1_1OriginHandler.html index 89e9af808a..d14724479d 100644 --- a/docs/de/d85/classshaka_1_1media_1_1OriginHandler.html +++ b/docs/de/d85/classshaka_1_1media_1_1OriginHandler.html @@ -200,7 +200,7 @@ std::pair< std::shared_ptr
diff --git a/docs/de/d87/structshaka_1_1media_1_1wvm_1_1PrevSampleData-members.html b/docs/de/d87/structshaka_1_1media_1_1wvm_1_1PrevSampleData-members.html index 80b5c748f3..5b8cec6571 100644 --- a/docs/de/d87/structshaka_1_1media_1_1wvm_1_1PrevSampleData-members.html +++ b/docs/de/d87/structshaka_1_1media_1_1wvm_1_1PrevSampleData-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d8d/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html b/docs/de/d8d/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html index e49f6c080d..e017161bbf 100644 --- a/docs/de/d8d/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html +++ b/docs/de/d8d/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d93/classshaka_1_1media_1_1VP8Parser-members.html b/docs/de/d93/classshaka_1_1media_1_1VP8Parser-members.html index 0ef0f55638..bb44013592 100644 --- a/docs/de/d93/classshaka_1_1media_1_1VP8Parser-members.html +++ b/docs/de/d93/classshaka_1_1media_1_1VP8Parser-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/da9/structshaka_1_1Element.html b/docs/de/da9/structshaka_1_1Element.html index 2298d5c52e..3b0ddbc4af 100644 --- a/docs/de/da9/structshaka_1_1Element.html +++ b/docs/de/da9/structshaka_1_1Element.html @@ -120,7 +120,7 @@ std::vector< El diff --git a/docs/de/dab/es__parser__h26x_8cc_source.html b/docs/de/dab/es__parser__h26x_8cc_source.html index 960117cf6a..0f0f44b90a 100644 --- a/docs/de/dab/es__parser__h26x_8cc_source.html +++ b/docs/de/dab/es__parser__h26x_8cc_source.html @@ -406,11 +406,11 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
317 } // namespace mp2t
318 } // namespace media
319 } // namespace shaka
-
static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:45
+
static std::shared_ptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:42
diff --git a/docs/de/dad/classshaka_1_1MemoryFile.html b/docs/de/dad/classshaka_1_1MemoryFile.html index ad2d2a6437..eb01f3f3f5 100644 --- a/docs/de/dad/classshaka_1_1MemoryFile.html +++ b/docs/de/dad/classshaka_1_1MemoryFile.html @@ -493,7 +493,7 @@ bool  diff --git a/docs/de/dad/validate__flag_8cc_source.html b/docs/de/dad/validate__flag_8cc_source.html index 86f8b2a43e..f0edd6c3d3 100644 --- a/docs/de/dad/validate__flag_8cc_source.html +++ b/docs/de/dad/validate__flag_8cc_source.html @@ -105,12 +105,17 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
16  fprintf(stderr, "ERROR: %s\n", error_message.c_str());
17 }
18 
-
19 } // namespace shaka
+
19 void PrintWarning(const std::string& warning_message) {
+
20  fprintf(stderr, "WARNING: %s\n", warning_message.c_str());
+
21 }
+
22 
+
23 } // namespace shaka
void PrintError(const std::string &error_message)
+
void PrintWarning(const std::string &warning_message)
diff --git a/docs/de/db2/classshaka_1_1media_1_1MockOutputMediaHandler.html b/docs/de/db2/classshaka_1_1media_1_1MockOutputMediaHandler.html new file mode 100644 index 0000000000..75fc2516b2 --- /dev/null +++ b/docs/de/db2/classshaka_1_1media_1_1MockOutputMediaHandler.html @@ -0,0 +1,201 @@ + + + + + + +Shaka Packager SDK: shaka::media::MockOutputMediaHandler Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Shaka Packager SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
shaka::media::MockOutputMediaHandler Class Reference
+
+
+
+Inheritance diagram for shaka::media::MockOutputMediaHandler:
+
+
+ + +shaka::media::MediaHandler + +
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

MOCK_METHOD1 (OnProcess, void(const StreamData *))
 
MOCK_METHOD1 (OnFlush, void(size_t index))
 
- Public Member Functions inherited from shaka::media::MediaHandler
+Status SetHandler (size_t output_stream_index, std::shared_ptr< MediaHandler > handler)
 Connect downstream handler at the specified output stream index.
 
+Status AddHandler (std::shared_ptr< MediaHandler > handler)
 Connect downstream handler to the next availble output stream index.
 
Status Initialize ()
 
+bool IsConnected ()
 Validate if the handler is connected to its upstream handler.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from shaka::media::MediaHandler
+virtual bool ValidateOutputStreamIndex (size_t stream_index) const
 Validate if the stream at the specified index actually exists.
 
Status Dispatch (std::unique_ptr< StreamData > stream_data)
 
+Status DispatchPeriodInfo (size_t stream_index, std::shared_ptr< const PeriodInfo > period_info)
 Dispatch the period info to downstream handlers.
 
+Status DispatchStreamInfo (size_t stream_index, std::shared_ptr< const StreamInfo > stream_info)
 Dispatch the stream info to downstream handlers.
 
+Status DispatchMediaSample (size_t stream_index, std::shared_ptr< const MediaSample > media_sample)
 Dispatch the media sample to downstream handlers.
 
+Status DispatchTextSample (size_t stream_index, std::shared_ptr< const TextSample > text_sample)
 Dispatch the text sample to downsream handlers.
 
+Status DispatchMediaEvent (size_t stream_index, std::shared_ptr< const MediaEvent > media_event)
 Dispatch the media event to downstream handlers.
 
+Status DispatchSegmentInfo (size_t stream_index, std::shared_ptr< const SegmentInfo > segment_info)
 Dispatch the segment info to downstream handlers.
 
+Status FlushDownstream (size_t output_stream_index)
 Flush the downstream connected at the specified output stream index.
 
+Status FlushAllDownstreams ()
 Flush all connected downstreams.
 
+bool initialized ()
 
+size_t num_input_streams () const
 
+size_t next_output_stream_index () const
 
+const std::map< size_t,
+std::pair< std::shared_ptr
+< MediaHandler >, size_t > > & 
output_handlers ()
 
+

Detailed Description

+
+

Definition at line 98 of file media_handler_test_base.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/docs/de/db2/classshaka_1_1media_1_1MockOutputMediaHandler.png b/docs/de/db2/classshaka_1_1media_1_1MockOutputMediaHandler.png new file mode 100644 index 0000000000..a2e33a17a8 Binary files /dev/null and b/docs/de/db2/classshaka_1_1media_1_1MockOutputMediaHandler.png differ diff --git a/docs/de/db3/classshaka_1_1media_1_1TextTrackConfig.html b/docs/de/db3/classshaka_1_1media_1_1TextTrackConfig.html index 1a14269509..5b53ae7f99 100644 --- a/docs/de/db3/classshaka_1_1media_1_1TextTrackConfig.html +++ b/docs/de/db3/classshaka_1_1media_1_1TextTrackConfig.html @@ -125,7 +125,7 @@ const std::string & id diff --git a/docs/de/db4/classshaka_1_1media_1_1H26xBitReader.html b/docs/de/db4/classshaka_1_1media_1_1H26xBitReader.html index 274a2ee092..9e3bb10cd3 100644 --- a/docs/de/db4/classshaka_1_1media_1_1H26xBitReader.html +++ b/docs/de/db4/classshaka_1_1media_1_1H26xBitReader.html @@ -134,7 +134,7 @@ size_t NumEmulationPrevent diff --git a/docs/de/dbf/udp__options_8h_source.html b/docs/de/dbf/udp__options_8h_source.html index e40771f0de..562c24b553 100644 --- a/docs/de/dbf/udp__options_8h_source.html +++ b/docs/de/dbf/udp__options_8h_source.html @@ -129,7 +129,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dc1/demuxer_8h_source.html b/docs/de/dc1/demuxer_8h_source.html index af30b27dbb..270a95b531 100644 --- a/docs/de/dc1/demuxer_8h_source.html +++ b/docs/de/dc1/demuxer_8h_source.html @@ -228,7 +228,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dc2/classshaka_1_1media_1_1H265Parser.html b/docs/de/dc2/classshaka_1_1media_1_1H265Parser.html index 6fa70b5fb0..34ca8fc663 100644 --- a/docs/de/dc2/classshaka_1_1media_1_1H265Parser.html +++ b/docs/de/dc2/classshaka_1_1media_1_1H265Parser.html @@ -256,7 +256,7 @@ Public Member Functions diff --git a/docs/de/dc9/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html b/docs/de/dc9/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html index 70e67596ab..fb86a19956 100644 --- a/docs/de/dc9/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html +++ b/docs/de/dc9/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dcb/ts__segmenter_8h_source.html b/docs/de/dcb/ts__segmenter_8h_source.html index 4acf825267..06ccf2222b 100644 --- a/docs/de/dcb/ts__segmenter_8h_source.html +++ b/docs/de/dcb/ts__segmenter_8h_source.html @@ -190,7 +190,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dcc/mock__mpd__notifier_8cc_source.html b/docs/de/dcc/mock__mpd__notifier_8cc_source.html index 4a9434f85b..2961741ab5 100644 --- a/docs/de/dcc/mock__mpd__notifier_8cc_source.html +++ b/docs/de/dcc/mock__mpd__notifier_8cc_source.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dcf/file__closer_8h_source.html b/docs/de/dcf/file__closer_8h_source.html index f6b899499c..d90f9daab7 100644 --- a/docs/de/dcf/file__closer_8h_source.html +++ b/docs/de/dcf/file__closer_8h_source.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dd6/content__protection__element_8h_source.html b/docs/de/dd6/content__protection__element_8h_source.html index ca6409490b..22c5db479f 100644 --- a/docs/de/dd6/content__protection__element_8h_source.html +++ b/docs/de/dd6/content__protection__element_8h_source.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dd6/muxer__listener__test__helper_8cc_source.html b/docs/de/dd6/muxer__listener__test__helper_8cc_source.html index 9efc78d387..1574f734d9 100644 --- a/docs/de/dd6/muxer__listener__test__helper_8cc_source.html +++ b/docs/de/dd6/muxer__listener__test__helper_8cc_source.html @@ -218,7 +218,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/ddd/classshaka_1_1media_1_1Muxer-members.html b/docs/de/ddd/classshaka_1_1media_1_1Muxer-members.html index 561208619c..090fb80d37 100644 --- a/docs/de/ddd/classshaka_1_1media_1_1Muxer-members.html +++ b/docs/de/ddd/classshaka_1_1media_1_1Muxer-members.html @@ -130,7 +130,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/ddd/classshaka_1_1media_1_1WebVttSampleConverter.html b/docs/de/ddd/classshaka_1_1media_1_1WebVttSampleConverter.html index f44fc8e26e..be4ddc90d8 100644 --- a/docs/de/ddd/classshaka_1_1media_1_1WebVttSampleConverter.html +++ b/docs/de/ddd/classshaka_1_1media_1_1WebVttSampleConverter.html @@ -257,7 +257,7 @@ Public Member Functions diff --git a/docs/de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html b/docs/de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html index 28a596e6b0..79dda3bb1b 100644 --- a/docs/de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html +++ b/docs/de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html @@ -272,7 +272,7 @@ void  diff --git a/docs/de/ddf/structshaka_1_1media_1_1mp4_1_1MediaData-members.html b/docs/de/ddf/structshaka_1_1media_1_1mp4_1_1MediaData-members.html index 232df4bf27..f5dcf842af 100644 --- a/docs/de/ddf/structshaka_1_1media_1_1mp4_1_1MediaData-members.html +++ b/docs/de/ddf/structshaka_1_1media_1_1mp4_1_1MediaData-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/de0/classshaka_1_1media_1_1DecoderConfigurationRecord.html b/docs/de/de0/classshaka_1_1media_1_1DecoderConfigurationRecord.html index a1cce85d11..3fd9b5e05e 100644 --- a/docs/de/de0/classshaka_1_1media_1_1DecoderConfigurationRecord.html +++ b/docs/de/de0/classshaka_1_1media_1_1DecoderConfigurationRecord.html @@ -333,7 +333,7 @@ void  diff --git a/docs/de/de0/classshaka_1_1media_1_1mp4_1_1MP4Muxer-members.html b/docs/de/de0/classshaka_1_1media_1_1mp4_1_1MP4Muxer-members.html index 5b1a4a8d47..c276e41ef3 100644 --- a/docs/de/de0/classshaka_1_1media_1_1mp4_1_1MP4Muxer-members.html +++ b/docs/de/de0/classshaka_1_1media_1_1mp4_1_1MP4Muxer-members.html @@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/de4/structshaka_1_1media_1_1H264Pps.html b/docs/de/de4/structshaka_1_1media_1_1H264Pps.html index 0305907d6f..f9c4ebd535 100644 --- a/docs/de/de4/structshaka_1_1media_1_1H264Pps.html +++ b/docs/de/de4/structshaka_1_1media_1_1H264Pps.html @@ -167,7 +167,7 @@ int second_chroma_qp_index diff --git a/docs/de/dea/classshaka_1_1media_1_1H26xByteToUnitStreamConverter.html b/docs/de/dea/classshaka_1_1media_1_1H26xByteToUnitStreamConverter.html index 9230f73e2f..c4d959bb73 100644 --- a/docs/de/dea/classshaka_1_1media_1_1H26xByteToUnitStreamConverter.html +++ b/docs/de/dea/classshaka_1_1media_1_1H26xByteToUnitStreamConverter.html @@ -287,7 +287,7 @@ void WarnIfNotMatch (i diff --git a/docs/de/def/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample.html b/docs/de/def/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample.html index ce5be380b2..f938ac039d 100644 --- a/docs/de/def/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample.html +++ b/docs/de/def/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/de/df2/combined__muxer__listener_8h_source.html b/docs/de/df2/combined__muxer__listener_8h_source.html index 8bce67a2c0..f4ffe029b3 100644 --- a/docs/de/df2/combined__muxer__listener_8h_source.html +++ b/docs/de/df2/combined__muxer__listener_8h_source.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html b/docs/de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html index a4e06551ec..cba39f1805 100644 --- a/docs/de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html +++ b/docs/de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html @@ -412,7 +412,7 @@ bool is_keyframe () co diff --git a/docs/de/dfa/muxer__listener_8h_source.html b/docs/de/dfa/muxer__listener_8h_source.html index 95faa9deae..a3e834a7da 100644 --- a/docs/de/dfa/muxer__listener_8h_source.html +++ b/docs/de/dfa/muxer__listener_8h_source.html @@ -179,7 +179,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dfa/structshaka_1_1media_1_1mp4_1_1OpusSpecific.html b/docs/de/dfa/structshaka_1_1media_1_1mp4_1_1OpusSpecific.html index a8b127d8ca..cbb8e53a96 100644 --- a/docs/de/dfa/structshaka_1_1media_1_1mp4_1_1OpusSpecific.html +++ b/docs/de/dfa/structshaka_1_1media_1_1mp4_1_1OpusSpecific.html @@ -176,7 +176,7 @@ Additional Inherited Members diff --git a/docs/de/dfd/stream__info_8cc_source.html b/docs/de/dfd/stream__info_8cc_source.html index 75f4cc4b41..4763243c1f 100644 --- a/docs/de/dfd/stream__info_8cc_source.html +++ b/docs/de/dfd/stream__info_8cc_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d00/playready__key__source_8h_source.html b/docs/df/d00/playready__key__source_8h_source.html index 15a63545cf..38a7b960df 100644 --- a/docs/df/d00/playready__key__source_8h_source.html +++ b/docs/df/d00/playready__key__source_8h_source.html @@ -154,20 +154,20 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
82 } // namespace shaka
83 
84 #endif // MEDIA_BASE_PLAYREADY_SOURCE_H_
-
Status GetKey(const std::string &stream_label, EncryptionKey *key) override
+
Status GetKey(const std::string &stream_label, EncryptionKey *key) override
PlayReadyKeySource(const std::string &server_url)
A key source that uses playready for encryption.
-
Status GetCryptoPeriodKey(uint32_t crypto_period_index, const std::string &stream_label, EncryptionKey *key) override
+
Status GetCryptoPeriodKey(uint32_t crypto_period_index, const std::string &stream_label, EncryptionKey *key) override
void SetCaFile(const std::string &ca_file)
Sets the Certificate Authority file for validating self-signed certificates.
-
Status FetchKeys(EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) override
+
Status FetchKeys(EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) override
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:45
static std::unique_ptr< PlayReadyKeySource > CreateFromKeyAndKeyId(const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &key)
diff --git a/docs/df/d05/vp__codec__configuration__record_8cc_source.html b/docs/df/d05/vp__codec__configuration__record_8cc_source.html index 3a2745c7cd..68c4a0c14b 100644 --- a/docs/df/d05/vp__codec__configuration__record_8cc_source.html +++ b/docs/df/d05/vp__codec__configuration__record_8cc_source.html @@ -418,7 +418,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d1a/offset__byte__queue_8cc_source.html b/docs/df/d1a/offset__byte__queue_8cc_source.html index 3f300fa3af..cfe36d7a4d 100644 --- a/docs/df/d1a/offset__byte__queue_8cc_source.html +++ b/docs/df/d1a/offset__byte__queue_8cc_source.html @@ -164,7 +164,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d1c/classshaka_1_1media_1_1MediaSample-members.html b/docs/df/d1c/classshaka_1_1media_1_1MediaSample-members.html index 2a0086ff85..8184d2d531 100644 --- a/docs/df/d1c/classshaka_1_1media_1_1MediaSample-members.html +++ b/docs/df/d1c/classshaka_1_1media_1_1MediaSample-members.html @@ -93,10 +93,10 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');

This is the complete list of members for shaka::media::MediaSample, including all inherited members.

- - - - + + + + @@ -108,27 +108,26 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - - + + - - - + - - - - - + + + + + +
config_id() const (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)shaka::media::MediaSamplestatic
CopyFrom(const uint8_t *data, size_t size, const uint8_t *side_data, size_t side_data_size, bool is_key_frame)shaka::media::MediaSamplestatic
CopyFrom(const MediaSample &media_sample)shaka::media::MediaSamplestatic
Clone() const shaka::media::MediaSample
config_id() const (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)shaka::media::MediaSamplestatic
CopyFrom(const uint8_t *data, size_t size, const uint8_t *side_data, size_t side_data_size, bool is_key_frame)shaka::media::MediaSamplestatic
CreateEmptyMediaSample()shaka::media::MediaSamplestatic
CreateEOSBuffer()shaka::media::MediaSamplestatic
data() const (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
FromMetadata(const uint8_t *metadata, size_t metadata_size)shaka::media::MediaSamplestatic
is_encrypted() const (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
is_key_frame() const (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
MediaSample(const uint8_t *data, size_t size, const uint8_t *side_data, size_t side_data_size, bool is_key_frame) (defined in shaka::media::MediaSample)shaka::media::MediaSample
MediaSample() (defined in shaka::media::MediaSample)shaka::media::MediaSample
MediaSample(const uint8_t *data, size_t data_size, const uint8_t *side_data, size_t side_data_size, bool is_key_frame) (defined in shaka::media::MediaSample)shaka::media::MediaSampleprotected
MediaSample() (defined in shaka::media::MediaSample)shaka::media::MediaSampleprotected
pts() const (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
resize_data(const size_t data_size) (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
set_config_id(const std::string &config_id) (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
set_data(const uint8_t *data, const size_t data_size) (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
set_config_id(const std::string &config_id) (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
set_decrypt_config(std::unique_ptr< DecryptConfig > decrypt_config) (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
set_dts(int64_t dts) (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
set_duration(int64_t duration) (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
set_is_encrypted(bool value) (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
set_is_key_frame(bool value) (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
set_pts(int64_t pts) (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
side_data() const (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
side_data_size() const (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
ToString() const shaka::media::MediaSample
writable_data() (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
~MediaSample() (defined in shaka::media::MediaSample)shaka::media::MediaSamplevirtual
SetData(const uint8_t *data, size_t data_size)shaka::media::MediaSample
side_data() const (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
side_data_size() const (defined in shaka::media::MediaSample)shaka::media::MediaSampleinline
ToString() const shaka::media::MediaSample
TransferData(std::shared_ptr< uint8_t > data, size_t data_size)shaka::media::MediaSample
~MediaSample() (defined in shaka::media::MediaSample)shaka::media::MediaSamplevirtual
diff --git a/docs/df/d1c/composition__offset__iterator_8h_source.html b/docs/df/d1c/composition__offset__iterator_8h_source.html index bbb242e04e..acfad14a80 100644 --- a/docs/df/d1c/composition__offset__iterator_8h_source.html +++ b/docs/df/d1c/composition__offset__iterator_8h_source.html @@ -147,7 +147,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d21/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser-members.html b/docs/df/d21/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser-members.html index 0c7689ea77..d90be191bb 100644 --- a/docs/df/d21/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser-members.html +++ b/docs/df/d21/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d22/structshaka_1_1WidevineSigner.html b/docs/df/d22/structshaka_1_1WidevineSigner.html index d979cfdb14..307d4755cd 100644 --- a/docs/df/d22/structshaka_1_1WidevineSigner.html +++ b/docs/df/d22/structshaka_1_1WidevineSigner.html @@ -163,7 +163,7 @@ struct { diff --git a/docs/df/d22/validate__flag_8h_source.html b/docs/df/d22/validate__flag_8h_source.html index 1a5f564cdb..2d064ee3ea 100644 --- a/docs/df/d22/validate__flag_8h_source.html +++ b/docs/df/d22/validate__flag_8h_source.html @@ -106,37 +106,40 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
17 
20 void PrintError(const std::string& error_message);
21 
-
27 // and cannot be empty; If condition is false, then this flag should
-
28 // not be set.
-
32 template <class FlagType>
-
33 bool ValidateFlag(const char* flag_name,
-
34  const FlagType& flag_value,
-
35  bool condition,
-
36  bool optional,
-
37  const char* label) {
-
38  if (flag_value.empty()) {
-
39  if (!optional && condition) {
-
40  PrintError(
-
41  base::StringPrintf("--%s is required if %s.", flag_name, label));
-
42  return false;
-
43  }
-
44  } else if (!condition) {
-
45  PrintError(base::StringPrintf(
-
46  "--%s should be specified only if %s.", flag_name, label));
-
47  return false;
-
48  }
-
49  return true;
-
50 }
-
51 
-
52 } // namespace shaka
-
53 
-
54 #endif // APP_VALIDATE_FLAG_H_
+
24 void PrintWarning(const std::string& warning_message);
+
25 
+
31 // and cannot be empty; If condition is false, then this flag should
+
32 // not be set.
+
36 template <class FlagType>
+
37 bool ValidateFlag(const char* flag_name,
+
38  const FlagType& flag_value,
+
39  bool condition,
+
40  bool optional,
+
41  const char* label) {
+
42  if (flag_value.empty()) {
+
43  if (!optional && condition) {
+
44  PrintError(
+
45  base::StringPrintf("--%s is required if %s.", flag_name, label));
+
46  return false;
+
47  }
+
48  } else if (!condition) {
+
49  PrintError(base::StringPrintf(
+
50  "--%s should be specified only if %s.", flag_name, label));
+
51  return false;
+
52  }
+
53  return true;
+
54 }
+
55 
+
56 } // namespace shaka
+
57 
+
58 #endif // APP_VALIDATE_FLAG_H_
void PrintError(const std::string &error_message)
-
bool ValidateFlag(const char *flag_name, const FlagType &flag_value, bool condition, bool optional, const char *label)
Definition: validate_flag.h:33
+
bool ValidateFlag(const char *flag_name, const FlagType &flag_value, bool condition, bool optional, const char *label)
Definition: validate_flag.h:37
+
void PrintWarning(const std::string &warning_message)
diff --git a/docs/df/d2a/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html b/docs/df/d2a/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html index 9b04c2de61..da21e17c00 100644 --- a/docs/df/d2a/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html +++ b/docs/df/d2a/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d2d/classshaka_1_1media_1_1AesCbcDecryptor.html b/docs/df/d2d/classshaka_1_1media_1_1AesCbcDecryptor.html index 75447bc552..132961b313 100644 --- a/docs/df/d2d/classshaka_1_1media_1_1AesCbcDecryptor.html +++ b/docs/df/d2d/classshaka_1_1media_1_1AesCbcDecryptor.html @@ -279,7 +279,7 @@ AES_KEY * mutable_aes_key< diff --git a/docs/df/d31/muxer__util_8cc_source.html b/docs/df/d31/muxer__util_8cc_source.html index 51c4e6e057..cf240db6a8 100644 --- a/docs/df/d31/muxer__util_8cc_source.html +++ b/docs/df/d31/muxer__util_8cc_source.html @@ -257,7 +257,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d32/audio__stream__info_8h_source.html b/docs/df/d32/audio__stream__info_8h_source.html index 76e12a5035..00b7fd86fe 100644 --- a/docs/df/d32/audio__stream__info_8h_source.html +++ b/docs/df/d32/audio__stream__info_8h_source.html @@ -166,7 +166,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d33/classshaka_1_1AdaptationSet-members.html b/docs/df/d33/classshaka_1_1AdaptationSet-members.html index 20909686c6..e746a3e545 100644 --- a/docs/df/d33/classshaka_1_1AdaptationSet-members.html +++ b/docs/df/d33/classshaka_1_1AdaptationSet-members.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d38/structshaka_1_1media_1_1mp4_1_1ChunkInfo.html b/docs/df/d38/structshaka_1_1media_1_1mp4_1_1ChunkInfo.html index 15076a82c4..1f02f26123 100644 --- a/docs/df/d38/structshaka_1_1media_1_1mp4_1_1ChunkInfo.html +++ b/docs/df/d38/structshaka_1_1media_1_1mp4_1_1ChunkInfo.html @@ -115,7 +115,7 @@ uint32_t sample_descriptio diff --git a/docs/df/d38/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html b/docs/df/d38/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html index f075824561..bb106326fc 100644 --- a/docs/df/d38/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html +++ b/docs/df/d38/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d3c/classshaka_1_1media_1_1RequestSigner.html b/docs/df/d3c/classshaka_1_1media_1_1RequestSigner.html index d1ecbcf50b..5adda1743a 100644 --- a/docs/df/d3c/classshaka_1_1media_1_1RequestSigner.html +++ b/docs/df/d3c/classshaka_1_1media_1_1RequestSigner.html @@ -180,7 +180,7 @@ Protected Member Functions diff --git a/docs/df/d46/classshaka_1_1media_1_1Muxer.html b/docs/df/d46/classshaka_1_1media_1_1Muxer.html index 00893e5cb3..5658bf7ed5 100644 --- a/docs/df/d46/classshaka_1_1media_1_1Muxer.html +++ b/docs/df/d46/classshaka_1_1media_1_1Muxer.html @@ -390,7 +390,7 @@ std::pair< std::shared_ptr
diff --git a/docs/df/d4e/classshaka_1_1IoCache.html b/docs/df/d4e/classshaka_1_1IoCache.html index 19d0b8dd28..62adefb1bd 100644 --- a/docs/df/d4e/classshaka_1_1IoCache.html +++ b/docs/df/d4e/classshaka_1_1IoCache.html @@ -297,7 +297,7 @@ void  diff --git a/docs/df/d50/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter-members.html b/docs/df/d50/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter-members.html index 981dd28498..03b2103d6c 100644 --- a/docs/df/d50/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter-members.html +++ b/docs/df/d50/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d51/classshaka_1_1media_1_1RsaPrivateKey-members.html b/docs/df/d51/classshaka_1_1media_1_1RsaPrivateKey-members.html index 2ce3eb69af..03fbc5fdf1 100644 --- a/docs/df/d51/classshaka_1_1media_1_1RsaPrivateKey-members.html +++ b/docs/df/d51/classshaka_1_1media_1_1RsaPrivateKey-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d5b/classshaka_1_1CallbackFile-members.html b/docs/df/d5b/classshaka_1_1CallbackFile-members.html index 37f0631ad6..fc32211647 100644 --- a/docs/df/d5b/classshaka_1_1CallbackFile-members.html +++ b/docs/df/d5b/classshaka_1_1CallbackFile-members.html @@ -121,7 +121,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d60/classshaka_1_1MockMpdBuilder.html b/docs/df/d60/classshaka_1_1MockMpdBuilder.html index a93c389cac..00859c7f2a 100644 --- a/docs/df/d60/classshaka_1_1MockMpdBuilder.html +++ b/docs/df/d60/classshaka_1_1MockMpdBuilder.html @@ -141,7 +141,7 @@ Additional Inherited Members diff --git a/docs/df/d63/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry-members.html b/docs/df/d63/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry-members.html index 24fb3f3b4e..de5b291a68 100644 --- a/docs/df/d63/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry-members.html +++ b/docs/df/d63/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d66/classshaka_1_1media_1_1KeyFetcher.html b/docs/df/d66/classshaka_1_1media_1_1KeyFetcher.html index 6b48b01afc..c5c3f93b22 100644 --- a/docs/df/d66/classshaka_1_1media_1_1KeyFetcher.html +++ b/docs/df/d66/classshaka_1_1media_1_1KeyFetcher.html @@ -177,7 +177,7 @@ Public Member Functions diff --git a/docs/df/d6a/classshaka_1_1MockMpdBuilder-members.html b/docs/df/d6a/classshaka_1_1MockMpdBuilder-members.html index e01a92a79c..4b36f4bfe1 100644 --- a/docs/df/d6a/classshaka_1_1MockMpdBuilder-members.html +++ b/docs/df/d6a/classshaka_1_1MockMpdBuilder-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d6a/structshaka_1_1media_1_1mp4_1_1OpusSpecific-members.html b/docs/df/d6a/structshaka_1_1media_1_1mp4_1_1OpusSpecific-members.html index b2ea624d63..7494bef68b 100644 --- a/docs/df/d6a/structshaka_1_1media_1_1mp4_1_1OpusSpecific-members.html +++ b/docs/df/d6a/structshaka_1_1media_1_1mp4_1_1OpusSpecific-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample.html b/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample.html index 6aeb21592b..77bd0933fc 100644 --- a/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample.html +++ b/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1TrackFragment.html b/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1TrackFragment.html index 34ba743a73..9b0683fff1 100644 --- a/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1TrackFragment.html +++ b/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1TrackFragment.html @@ -198,7 +198,7 @@ Additional Inherited Members diff --git a/docs/df/d7d/webm__info__parser_8cc_source.html b/docs/df/d7d/webm__info__parser_8cc_source.html index 99071c8ac2..25a01aad32 100644 --- a/docs/df/d7d/webm__info__parser_8cc_source.html +++ b/docs/df/d7d/webm__info__parser_8cc_source.html @@ -200,7 +200,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d82/classshaka_1_1media_1_1DecoderConfigurationRecord-members.html b/docs/df/d82/classshaka_1_1media_1_1DecoderConfigurationRecord-members.html index e81101710f..4c73e29025 100644 --- a/docs/df/d82/classshaka_1_1media_1_1DecoderConfigurationRecord-members.html +++ b/docs/df/d82/classshaka_1_1media_1_1DecoderConfigurationRecord-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d87/classshaka_1_1media_1_1AesCryptor.html b/docs/df/d87/classshaka_1_1media_1_1AesCryptor.html index 3b06800624..1736d6de1f 100644 --- a/docs/df/d87/classshaka_1_1media_1_1AesCryptor.html +++ b/docs/df/d87/classshaka_1_1media_1_1AesCryptor.html @@ -424,7 +424,7 @@ AES_KEY * mutable_aes_key< diff --git a/docs/df/d8a/structshaka_1_1media_1_1mp4_1_1DataEntryUrl.html b/docs/df/d8a/structshaka_1_1media_1_1mp4_1_1DataEntryUrl.html index 905c6e6969..295bc67b58 100644 --- a/docs/df/d8a/structshaka_1_1media_1_1mp4_1_1DataEntryUrl.html +++ b/docs/df/d8a/structshaka_1_1media_1_1mp4_1_1DataEntryUrl.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/df/d8a/vp9__parser_8h_source.html b/docs/df/d8a/vp9__parser_8h_source.html index 735db02b9a..dc056ec007 100644 --- a/docs/df/d8a/vp9__parser_8h_source.html +++ b/docs/df/d8a/vp9__parser_8h_source.html @@ -136,7 +136,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d8a/vpx__parser_8h_source.html b/docs/df/d8a/vpx__parser_8h_source.html index 02f616b034..c9828e572d 100644 --- a/docs/df/d8a/vpx__parser_8h_source.html +++ b/docs/df/d8a/vpx__parser_8h_source.html @@ -147,7 +147,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d8c/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html b/docs/df/d8c/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html index 6b24b0ec99..e6f7c949ea 100644 --- a/docs/df/d8c/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html +++ b/docs/df/d8c/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d8d/es__parser__h26x_8h_source.html b/docs/df/d8d/es__parser__h26x_8h_source.html index 13103c0608..0e281791a0 100644 --- a/docs/df/d8d/es__parser__h26x_8h_source.html +++ b/docs/df/d8d/es__parser__h26x_8h_source.html @@ -235,7 +235,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d94/classshaka_1_1RepresentationStateChangeListener.html b/docs/df/d94/classshaka_1_1RepresentationStateChangeListener.html index 9f12634c3e..ba3e8f98c4 100644 --- a/docs/df/d94/classshaka_1_1RepresentationStateChangeListener.html +++ b/docs/df/d94/classshaka_1_1RepresentationStateChangeListener.html @@ -195,7 +195,7 @@ Public Member Functions diff --git a/docs/df/d96/xml__node_8cc_source.html b/docs/df/d96/xml__node_8cc_source.html index 9ac8654c31..614ae00c85 100644 --- a/docs/df/d96/xml__node_8cc_source.html +++ b/docs/df/d96/xml__node_8cc_source.html @@ -513,7 +513,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d9a/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html b/docs/df/d9a/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html index 73414456ca..52fe809604 100644 --- a/docs/df/d9a/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html +++ b/docs/df/d9a/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/df/d9e/classshaka_1_1xml_1_1RepresentationXmlNode.html b/docs/df/d9e/classshaka_1_1xml_1_1RepresentationXmlNode.html index 80f9ca454f..b00f00cd0b 100644 --- a/docs/df/d9e/classshaka_1_1xml_1_1RepresentationXmlNode.html +++ b/docs/df/d9e/classshaka_1_1xml_1_1RepresentationXmlNode.html @@ -315,7 +315,7 @@ Additional Inherited Members diff --git a/docs/df/da0/structshaka_1_1media_1_1mp4_1_1ChunkOffset-members.html b/docs/df/da0/structshaka_1_1media_1_1mp4_1_1ChunkOffset-members.html index 6616c738e9..f96f992fe4 100644 --- a/docs/df/da0/structshaka_1_1media_1_1mp4_1_1ChunkOffset-members.html +++ b/docs/df/da0/structshaka_1_1media_1_1mp4_1_1ChunkOffset-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/da5/structshaka_1_1media_1_1mp4_1_1CueIDBox-members.html b/docs/df/da5/structshaka_1_1media_1_1mp4_1_1CueIDBox-members.html index 19223e552e..4c202ab7f2 100644 --- a/docs/df/da5/structshaka_1_1media_1_1mp4_1_1CueIDBox-members.html +++ b/docs/df/da5/structshaka_1_1media_1_1mp4_1_1CueIDBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dad/decrypt__config_8h_source.html b/docs/df/dad/decrypt__config_8h_source.html index 83fa7f1ffc..86d85f0336 100644 --- a/docs/df/dad/decrypt__config_8h_source.html +++ b/docs/df/dad/decrypt__config_8h_source.html @@ -176,7 +176,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dc7/avc__decoder__configuration__record_8h_source.html b/docs/df/dc7/avc__decoder__configuration__record_8h_source.html index 4264b5850a..4f139d29d0 100644 --- a/docs/df/dc7/avc__decoder__configuration__record_8h_source.html +++ b/docs/df/dc7/avc__decoder__configuration__record_8h_source.html @@ -155,7 +155,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dce/classshaka_1_1hls_1_1MockMediaPlaylist-members.html b/docs/df/dce/classshaka_1_1hls_1_1MockMediaPlaylist-members.html index 3247e4cf97..654f1e6a1f 100644 --- a/docs/df/dce/classshaka_1_1hls_1_1MockMediaPlaylist-members.html +++ b/docs/df/dce/classshaka_1_1hls_1_1MockMediaPlaylist-members.html @@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dd2/mpd__utils_8h_source.html b/docs/df/dd2/mpd__utils_8h_source.html index 8b1d311316..b722e6cc46 100644 --- a/docs/df/dd2/mpd__utils_8h_source.html +++ b/docs/df/dd2/mpd__utils_8h_source.html @@ -177,7 +177,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dd2/structshaka_1_1media_1_1H264Pps-members.html b/docs/df/dd2/structshaka_1_1media_1_1H264Pps-members.html index 20cc7d7210..c0b1f28698 100644 --- a/docs/df/dd2/structshaka_1_1media_1_1H264Pps-members.html +++ b/docs/df/dd2/structshaka_1_1media_1_1H264Pps-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dd3/structshaka_1_1media_1_1MediaEvent.html b/docs/df/dd3/structshaka_1_1media_1_1MediaEvent.html index 1a8f37151b..bd51ebad94 100644 --- a/docs/df/dd3/structshaka_1_1media_1_1MediaEvent.html +++ b/docs/df/dd3/structshaka_1_1media_1_1MediaEvent.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/ddc/structshaka_1_1MpdParams.html b/docs/df/ddc/structshaka_1_1MpdParams.html index 1051fdf721..87c2bd405c 100644 --- a/docs/df/ddc/structshaka_1_1MpdParams.html +++ b/docs/df/ddc/structshaka_1_1MpdParams.html @@ -255,7 +255,7 @@ Static Public Attributes diff --git a/docs/df/ddc/webm_2segmenter_8h_source.html b/docs/df/ddc/webm_2segmenter_8h_source.html index 93fc4b2d50..8aaac284d0 100644 --- a/docs/df/ddc/webm_2segmenter_8h_source.html +++ b/docs/df/ddc/webm_2segmenter_8h_source.html @@ -257,7 +257,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dde/ts__section__psi_8cc_source.html b/docs/df/dde/ts__section__psi_8cc_source.html index a319a33635..fd8827da8a 100644 --- a/docs/df/dde/ts__section__psi_8cc_source.html +++ b/docs/df/dde/ts__section__psi_8cc_source.html @@ -230,7 +230,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/de2/structshaka_1_1media_1_1H264SEIRecoveryPoint.html b/docs/df/de2/structshaka_1_1media_1_1H264SEIRecoveryPoint.html index fe5c92cf8c..ee909906df 100644 --- a/docs/df/de2/structshaka_1_1media_1_1H264SEIRecoveryPoint.html +++ b/docs/df/de2/structshaka_1_1media_1_1H264SEIRecoveryPoint.html @@ -118,7 +118,7 @@ int changing_slice_group_i diff --git a/docs/df/de3/text__track__config_8cc_source.html b/docs/df/de3/text__track__config_8cc_source.html index 7629461645..bd6240b5cd 100644 --- a/docs/df/de3/text__track__config_8cc_source.html +++ b/docs/df/de3/text__track__config_8cc_source.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/de9/segment__info_8h_source.html b/docs/df/de9/segment__info_8h_source.html index bc7e0b18b4..25e319199d 100644 --- a/docs/df/de9/segment__info_8h_source.html +++ b/docs/df/de9/segment__info_8h_source.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/df1/structshaka_1_1ContentProtectionElement-members.html b/docs/df/df1/structshaka_1_1ContentProtectionElement-members.html index fbe1d3b1b1..fac702433c 100644 --- a/docs/df/df1/structshaka_1_1ContentProtectionElement-members.html +++ b/docs/df/df1/structshaka_1_1ContentProtectionElement-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dfc/playready__key__encryption__flags_8cc_source.html b/docs/df/dfc/playready__key__encryption__flags_8cc_source.html index debc1904ff..6a236e5fc5 100644 --- a/docs/df/dfc/playready__key__encryption__flags_8cc_source.html +++ b/docs/df/dfc/playready__key__encryption__flags_8cc_source.html @@ -142,16 +142,16 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
53  playready_enabled, true, playready_label)) {
54  success = false;
55  }
-
56  bool use_fixed_key = !FLAGS_playready_key_id_bytes.empty() &&
-
57  !FLAGS_playready_key_bytes.empty();
+
56  bool use_raw_key = !FLAGS_playready_key_id_bytes.empty() &&
+
57  !FLAGS_playready_key_bytes.empty();
58 
-
59  if (playready_enabled && !use_packaging && !use_fixed_key) {
+
59  if (playready_enabled && !use_packaging && !use_raw_key) {
60  PrintError("combination of --playready_server_url and "
61  "--program_identifier or --playready_key_id and playready_key are "
62  "required");
63  success = false;
64  }
-
65  if (use_packaging && use_fixed_key) {
+
65  if (use_packaging && use_raw_key) {
66  PrintError("combination of --playready_server_url, --program_identifier, "
67  "--playready_key_id, and playready_key is not valid");
68  success = false;
@@ -161,12 +161,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
72 
73 } // namespace shaka
void PrintError(const std::string &error_message)
-
bool ValidateFlag(const char *flag_name, const FlagType &flag_value, bool condition, bool optional, const char *label)
Definition: validate_flag.h:33
+
bool ValidateFlag(const char *flag_name, const FlagType &flag_value, bool condition, bool optional, const char *label)
Definition: validate_flag.h:37
diff --git a/docs/dir_0ff8490546c67558c1586a7b16b2189f.html b/docs/dir_0ff8490546c67558c1586a7b16b2189f.html index 650f1d72b2..22dd219a67 100644 --- a/docs/dir_0ff8490546c67558c1586a7b16b2189f.html +++ b/docs/dir_0ff8490546c67558c1586a7b16b2189f.html @@ -93,7 +93,7 @@ Files diff --git a/docs/dir_1338cd99faf71b6cb1609e99e3340e45.html b/docs/dir_1338cd99faf71b6cb1609e99e3340e45.html index f8dc9724e0..c29feb3fef 100644 --- a/docs/dir_1338cd99faf71b6cb1609e99e3340e45.html +++ b/docs/dir_1338cd99faf71b6cb1609e99e3340e45.html @@ -93,7 +93,7 @@ Files diff --git a/docs/dir_35c1fdffcdd4ade6d7f948073ab165de.html b/docs/dir_35c1fdffcdd4ade6d7f948073ab165de.html index 2c3a575e12..c2994f77a8 100644 --- a/docs/dir_35c1fdffcdd4ade6d7f948073ab165de.html +++ b/docs/dir_35c1fdffcdd4ade6d7f948073ab165de.html @@ -171,7 +171,7 @@ Files diff --git a/docs/dir_375ba2cfd8fd5b05c50b92d996b9d386.html b/docs/dir_375ba2cfd8fd5b05c50b92d996b9d386.html index bb5d2f4d0c..94a43ed439 100644 --- a/docs/dir_375ba2cfd8fd5b05c50b92d996b9d386.html +++ b/docs/dir_375ba2cfd8fd5b05c50b92d996b9d386.html @@ -101,7 +101,7 @@ Directories diff --git a/docs/dir_3f8eec2fc361645de4b1ec14c19fffc7.html b/docs/dir_3f8eec2fc361645de4b1ec14c19fffc7.html index 96a101b0b4..48bd184762 100644 --- a/docs/dir_3f8eec2fc361645de4b1ec14c19fffc7.html +++ b/docs/dir_3f8eec2fc361645de4b1ec14c19fffc7.html @@ -112,7 +112,7 @@ Files diff --git a/docs/dir_48fdaa95ed78e499807eaa909d50b2cd.html b/docs/dir_48fdaa95ed78e499807eaa909d50b2cd.html index 4cf72e1277..c20fa455a2 100644 --- a/docs/dir_48fdaa95ed78e499807eaa909d50b2cd.html +++ b/docs/dir_48fdaa95ed78e499807eaa909d50b2cd.html @@ -93,7 +93,7 @@ Files diff --git a/docs/d8/d7c/structshaka_1_1RawKeyEncryptionParams_1_1KeyPair-members.html b/docs/dir_51897ee7df8868b4f901d3ff10922ac3.html similarity index 54% rename from docs/d8/d7c/structshaka_1_1RawKeyEncryptionParams_1_1KeyPair-members.html rename to docs/dir_51897ee7df8868b4f901d3ff10922ac3.html index 82d24de835..916a35c761 100644 --- a/docs/d8/d7c/structshaka_1_1RawKeyEncryptionParams_1_1KeyPair-members.html +++ b/docs/dir_51897ee7df8868b4f901d3ff10922ac3.html @@ -4,16 +4,16 @@ -Shaka Packager SDK: Member List - - - - - +Shaka Packager SDK: packager/media/replicator Directory Reference + + + + + - +
@@ -32,18 +32,18 @@ -
-
shaka::RawKeyEncryptionParams::KeyPair Member List
+
replicator Directory Reference
+ + + + + + +

+Files

file  replicator.cc [code]
 
file  replicator.h [code]
 
+ diff --git a/docs/dir_588b87f799233a7c3afc1168633bb252.html b/docs/dir_588b87f799233a7c3afc1168633bb252.html index 518356a8da..732b930cbc 100644 --- a/docs/dir_588b87f799233a7c3afc1168633bb252.html +++ b/docs/dir_588b87f799233a7c3afc1168633bb252.html @@ -95,7 +95,7 @@ Files diff --git a/docs/dir_64597db6ac7a9160e951a4226a03f10e.html b/docs/dir_64597db6ac7a9160e951a4226a03f10e.html index 0a91d8c663..e85540e269 100644 --- a/docs/dir_64597db6ac7a9160e951a4226a03f10e.html +++ b/docs/dir_64597db6ac7a9160e951a4226a03f10e.html @@ -165,7 +165,7 @@ Files diff --git a/docs/dir_65bafb41b3669ba481c8da543a696a08.html b/docs/dir_65bafb41b3669ba481c8da543a696a08.html index 525967085e..1abfcc334e 100644 --- a/docs/dir_65bafb41b3669ba481c8da543a696a08.html +++ b/docs/dir_65bafb41b3669ba481c8da543a696a08.html @@ -107,7 +107,7 @@ Files diff --git a/docs/dir_6fe4b0529cd3ec97045d3314254a0cce.html b/docs/dir_6fe4b0529cd3ec97045d3314254a0cce.html index 6f5dee6b99..7a8a478e28 100644 --- a/docs/dir_6fe4b0529cd3ec97045d3314254a0cce.html +++ b/docs/dir_6fe4b0529cd3ec97045d3314254a0cce.html @@ -136,7 +136,7 @@ Files diff --git a/docs/dir_7053349436b45d276056de3c928a6fc6.html b/docs/dir_7053349436b45d276056de3c928a6fc6.html index 6493cfa4f8..06a0070a64 100644 --- a/docs/dir_7053349436b45d276056de3c928a6fc6.html +++ b/docs/dir_7053349436b45d276056de3c928a6fc6.html @@ -93,7 +93,7 @@ Files diff --git a/docs/dir_7fa7c3de4a91b9652697b9f1c2d38e70.html b/docs/dir_7fa7c3de4a91b9652697b9f1c2d38e70.html index 5599b07073..ae45d22d27 100644 --- a/docs/dir_7fa7c3de4a91b9652697b9f1c2d38e70.html +++ b/docs/dir_7fa7c3de4a91b9652697b9f1c2d38e70.html @@ -105,7 +105,7 @@ Files diff --git a/docs/dir_83c56f445d5c796bd14e4ebf939c29ad.html b/docs/dir_83c56f445d5c796bd14e4ebf939c29ad.html index fc09b54c43..09468aee34 100644 --- a/docs/dir_83c56f445d5c796bd14e4ebf939c29ad.html +++ b/docs/dir_83c56f445d5c796bd14e4ebf939c29ad.html @@ -95,7 +95,7 @@ Files diff --git a/docs/dir_880f0837661bea0e588ff6a42c226fba.html b/docs/dir_880f0837661bea0e588ff6a42c226fba.html index 0e19530d94..6c0f5ffb69 100644 --- a/docs/dir_880f0837661bea0e588ff6a42c226fba.html +++ b/docs/dir_880f0837661bea0e588ff6a42c226fba.html @@ -91,7 +91,7 @@ Files diff --git a/docs/dir_933242dc2ed3ec7a82c146e98110781e.html b/docs/dir_933242dc2ed3ec7a82c146e98110781e.html index fa1ad5a779..2165eccb55 100644 --- a/docs/dir_933242dc2ed3ec7a82c146e98110781e.html +++ b/docs/dir_933242dc2ed3ec7a82c146e98110781e.html @@ -91,7 +91,7 @@ Files diff --git a/docs/dir_aa847bee70cdde822696c7e33a504139.html b/docs/dir_aa847bee70cdde822696c7e33a504139.html index a3aece29b2..865b7ff321 100644 --- a/docs/dir_aa847bee70cdde822696c7e33a504139.html +++ b/docs/dir_aa847bee70cdde822696c7e33a504139.html @@ -93,7 +93,7 @@ Files diff --git a/docs/dir_ae142483ff91a68c468a97c037f98d4d.html b/docs/dir_ae142483ff91a68c468a97c037f98d4d.html index 2b44242b4e..9bc081fac3 100644 --- a/docs/dir_ae142483ff91a68c468a97c037f98d4d.html +++ b/docs/dir_ae142483ff91a68c468a97c037f98d4d.html @@ -149,7 +149,7 @@ Files diff --git a/docs/dir_b23f8e22c8c095d1c8c0cb8f88104a00.html b/docs/dir_b23f8e22c8c095d1c8c0cb8f88104a00.html index c7ec117bdf..4575f70774 100644 --- a/docs/dir_b23f8e22c8c095d1c8c0cb8f88104a00.html +++ b/docs/dir_b23f8e22c8c095d1c8c0cb8f88104a00.html @@ -181,7 +181,7 @@ Files diff --git a/docs/dir_b7f276137d53b05d7f6b34219adc0a31.html b/docs/dir_b7f276137d53b05d7f6b34219adc0a31.html index 62d443bc40..11afee8c54 100644 --- a/docs/dir_b7f276137d53b05d7f6b34219adc0a31.html +++ b/docs/dir_b7f276137d53b05d7f6b34219adc0a31.html @@ -93,7 +93,7 @@ Directories diff --git a/docs/dir_b885194e7131202a9b4650a8967e838c.html b/docs/dir_b885194e7131202a9b4650a8967e838c.html index fd50ef9616..a97ae3b6d7 100644 --- a/docs/dir_b885194e7131202a9b4650a8967e838c.html +++ b/docs/dir_b885194e7131202a9b4650a8967e838c.html @@ -95,7 +95,7 @@ Directories diff --git a/docs/dir_b8a35a7f00287a46b0da66a108ec1239.html b/docs/dir_b8a35a7f00287a46b0da66a108ec1239.html index 19e37a41cf..d7a4b1293d 100644 --- a/docs/dir_b8a35a7f00287a46b0da66a108ec1239.html +++ b/docs/dir_b8a35a7f00287a46b0da66a108ec1239.html @@ -93,7 +93,7 @@ Files diff --git a/docs/dir_bf7f1d16febc509cca62cff27fb88644.html b/docs/dir_bf7f1d16febc509cca62cff27fb88644.html index 55f88f5d8b..78060acc36 100644 --- a/docs/dir_bf7f1d16febc509cca62cff27fb88644.html +++ b/docs/dir_bf7f1d16febc509cca62cff27fb88644.html @@ -89,10 +89,6 @@ Files   file  crypto_flags.h [code]   -file  fixed_key_encryption_flags.cc [code] -  -file  fixed_key_encryption_flags.h [code] -  file  gflags_hex_bytes.cc [code]   file  gflags_hex_bytes.h [code] @@ -127,6 +123,10 @@ Files   file  playready_key_encryption_flags.h [code]   +file  raw_key_encryption_flags.cc [code] +  +file  raw_key_encryption_flags.h [code] +  file  retired_flags.cc [code]   file  retired_flags.h [code] @@ -151,7 +151,7 @@ Files diff --git a/docs/dir_c41da90e13af52a77978e497cf9cac63.html b/docs/dir_c41da90e13af52a77978e497cf9cac63.html index 0c391d48b2..f657d82de0 100644 --- a/docs/dir_c41da90e13af52a77978e497cf9cac63.html +++ b/docs/dir_c41da90e13af52a77978e497cf9cac63.html @@ -93,7 +93,7 @@ Files diff --git a/docs/dir_d258fb6e36cbaad69b44b6c9489b2bbb.html b/docs/dir_d258fb6e36cbaad69b44b6c9489b2bbb.html index e235a7db6e..197d43a1bb 100644 --- a/docs/dir_d258fb6e36cbaad69b44b6c9489b2bbb.html +++ b/docs/dir_d258fb6e36cbaad69b44b6c9489b2bbb.html @@ -134,7 +134,7 @@ Files diff --git a/docs/dir_e329e4913ca1adf6e112c00fbb0d634f.html b/docs/dir_e329e4913ca1adf6e112c00fbb0d634f.html index d62fa9d3ba..20728c55dd 100644 --- a/docs/dir_e329e4913ca1adf6e112c00fbb0d634f.html +++ b/docs/dir_e329e4913ca1adf6e112c00fbb0d634f.html @@ -121,7 +121,7 @@ Files diff --git a/docs/dir_e3bda0bde998a4d5063328245b9909be.html b/docs/dir_e3bda0bde998a4d5063328245b9909be.html index f950a1fd81..5b003b886f 100644 --- a/docs/dir_e3bda0bde998a4d5063328245b9909be.html +++ b/docs/dir_e3bda0bde998a4d5063328245b9909be.html @@ -143,10 +143,6 @@ Files   file  encryption_config.h [code]   -file  fixed_key_source.cc [code] -  -file  fixed_key_source.h [code] -  file  fourccs.h [code]   file  http_key_fetcher.cc [code] @@ -215,6 +211,10 @@ Files   file  range.h [code]   +file  raw_key_source.cc [code] +  +file  raw_key_source.h [code] +  file  rcheck.h [code]   file  request_signer.cc [code] @@ -257,7 +257,7 @@ Files diff --git a/docs/dir_f74090996960c752a82246b98a23aa62.html b/docs/dir_f74090996960c752a82246b98a23aa62.html index 11ee36bc61..8f40cac920 100644 --- a/docs/dir_f74090996960c752a82246b98a23aa62.html +++ b/docs/dir_f74090996960c752a82246b98a23aa62.html @@ -93,7 +93,7 @@ Files diff --git a/docs/dir_f99dae54fe7170f791f339b952d5067a.html b/docs/dir_f99dae54fe7170f791f339b952d5067a.html index db2847b820..e8a3fd4e1a 100644 --- a/docs/dir_f99dae54fe7170f791f339b952d5067a.html +++ b/docs/dir_f99dae54fe7170f791f339b952d5067a.html @@ -103,13 +103,15 @@ Directories   directory  public   +directory  replicator +  directory  trick_play   diff --git a/docs/dir_ffb529e2a1792bf603304ea6ff9bf092.html b/docs/dir_ffb529e2a1792bf603304ea6ff9bf092.html index 822315b5a0..f814f24590 100644 --- a/docs/dir_ffb529e2a1792bf603304ea6ff9bf092.html +++ b/docs/dir_ffb529e2a1792bf603304ea6ff9bf092.html @@ -91,7 +91,7 @@ Files diff --git a/docs/files.html b/docs/files.html index 3ef32a3c37..661377c438 100644 --- a/docs/files.html +++ b/docs/files.html @@ -89,25 +89,25 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');  o-app  |o*crypto_flags.cc  |o*crypto_flags.h - |o*fixed_key_encryption_flags.cc - |o*fixed_key_encryption_flags.h - |o*gflags_hex_bytes.cc - |o*gflags_hex_bytes.h - |o*hls_flags.cc - |o*hls_flags.h - |o*libcrypto_threading.cc - |o*libcrypto_threading.h - |o*mpd_flags.cc - |o*mpd_flags.h - |o*mpd_generator.cc - |o*mpd_generator_flags.h - |o*muxer_flags.cc - |o*muxer_flags.h - |o*packager_main.cc - |o*packager_util.cc - |o*packager_util.h - |o*playready_key_encryption_flags.cc - |o*playready_key_encryption_flags.h + |o*gflags_hex_bytes.cc + |o*gflags_hex_bytes.h + |o*hls_flags.cc + |o*hls_flags.h + |o*libcrypto_threading.cc + |o*libcrypto_threading.h + |o*mpd_flags.cc + |o*mpd_flags.h + |o*mpd_generator.cc + |o*mpd_generator_flags.h + |o*muxer_flags.cc + |o*muxer_flags.h + |o*packager_main.cc + |o*packager_util.cc + |o*packager_util.h + |o*playready_key_encryption_flags.cc + |o*playready_key_encryption_flags.h + |o*raw_key_encryption_flags.cc + |o*raw_key_encryption_flags.h  |o*retired_flags.cc  |o*retired_flags.h  |o*stream_descriptor.cc @@ -185,42 +185,42 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');  ||o*decryptor_source.cc  ||o*decryptor_source.h  ||o*encryption_config.h - ||o*fixed_key_source.cc - ||o*fixed_key_source.h - ||o*fourccs.h - ||o*http_key_fetcher.cc - ||o*http_key_fetcher.h - ||o*key_fetcher.cc - ||o*key_fetcher.h - ||o*key_source.cc - ||o*key_source.h - ||o*language_utils.cc - ||o*language_utils.h - ||o*limits.h - ||o*macros.h - ||o*media_handler.cc - ||o*media_handler.h - ||o*media_handler_test_base.cc - ||o*media_handler_test_base.h - ||o*media_parser.h - ||o*media_sample.cc - ||o*media_sample.h - ||o*muxer.cc - ||o*muxer.h - ||o*muxer_options.cc - ||o*muxer_options.h - ||o*muxer_util.cc - ||o*muxer_util.h - ||o*network_util.cc - ||o*network_util.h - ||o*offset_byte_queue.cc - ||o*offset_byte_queue.h - ||o*playready_key_source.cc - ||o*playready_key_source.h - ||o*producer_consumer_queue.h - ||o*protection_system_specific_info.cc - ||o*protection_system_specific_info.h - ||o*range.h + ||o*fourccs.h + ||o*http_key_fetcher.cc + ||o*http_key_fetcher.h + ||o*key_fetcher.cc + ||o*key_fetcher.h + ||o*key_source.cc + ||o*key_source.h + ||o*language_utils.cc + ||o*language_utils.h + ||o*limits.h + ||o*macros.h + ||o*media_handler.cc + ||o*media_handler.h + ||o*media_handler_test_base.cc + ||o*media_handler_test_base.h + ||o*media_parser.h + ||o*media_sample.cc + ||o*media_sample.h + ||o*muxer.cc + ||o*muxer.h + ||o*muxer_options.cc + ||o*muxer_options.h + ||o*muxer_util.cc + ||o*muxer_util.h + ||o*network_util.cc + ||o*network_util.h + ||o*offset_byte_queue.cc + ||o*offset_byte_queue.h + ||o*playready_key_source.cc + ||o*playready_key_source.h + ||o*producer_consumer_queue.h + ||o*protection_system_specific_info.cc + ||o*protection_system_specific_info.h + ||o*range.h + ||o*raw_key_source.cc + ||o*raw_key_source.h  ||o*rcheck.h  ||o*request_signer.cc  ||o*request_signer.h @@ -448,52 +448,55 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');  ||o*chunking_params.h  ||o*crypto_params.h  ||\*mp4_output_params.h - |\+trick_play - | o*trick_play_handler.cc - | \*trick_play_handler.h - o-mpd - |o+base - ||o+xml - |||o*scoped_xml_ptr.h - |||o*xml_node.cc - |||\*xml_node.h - ||o*bandwidth_estimator.cc - ||o*bandwidth_estimator.h - ||o*content_protection_element.cc - ||o*content_protection_element.h - ||o*dash_iop_mpd_notifier.cc - ||o*dash_iop_mpd_notifier.h - ||o*mock_mpd_builder.cc - ||o*mock_mpd_builder.h - ||o*mock_mpd_notifier.cc - ||o*mock_mpd_notifier.h - ||o*mpd_builder.cc - ||o*mpd_builder.h - ||o*mpd_notifier.h - ||o*mpd_notifier_util.cc - ||o*mpd_notifier_util.h - ||o*mpd_options.h - ||o*mpd_utils.cc - ||o*mpd_utils.h - ||o*segment_info.h - ||o*simple_mpd_notifier.cc - ||\*simple_mpd_notifier.h - |o+public - ||\*mpd_params.h - |\+util - | o*mpd_writer.cc - | \*mpd_writer.h - o*packager.cc - o*packager.h - o*status.cc - o*status.h - \*status_test_util.h + |o+replicator + ||o*replicator.cc + ||\*replicator.h + |\+trick_play + | o*trick_play_handler.cc + | \*trick_play_handler.h + o-mpd + |o+base + ||o+xml + |||o*scoped_xml_ptr.h + |||o*xml_node.cc + |||\*xml_node.h + ||o*bandwidth_estimator.cc + ||o*bandwidth_estimator.h + ||o*content_protection_element.cc + ||o*content_protection_element.h + ||o*dash_iop_mpd_notifier.cc + ||o*dash_iop_mpd_notifier.h + ||o*mock_mpd_builder.cc + ||o*mock_mpd_builder.h + ||o*mock_mpd_notifier.cc + ||o*mock_mpd_notifier.h + ||o*mpd_builder.cc + ||o*mpd_builder.h + ||o*mpd_notifier.h + ||o*mpd_notifier_util.cc + ||o*mpd_notifier_util.h + ||o*mpd_options.h + ||o*mpd_utils.cc + ||o*mpd_utils.h + ||o*segment_info.h + ||o*simple_mpd_notifier.cc + ||\*simple_mpd_notifier.h + |o+public + ||\*mpd_params.h + |\+util + | o*mpd_writer.cc + | \*mpd_writer.h + o*packager.cc + o*packager.h + o*status.cc + o*status.h + \*status_test_util.h diff --git a/docs/functions.html b/docs/functions.html index eedf1d38b3..cb62e82567 100644 --- a/docs/functions.html +++ b/docs/functions.html @@ -261,7 +261,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_b.html b/docs/functions_b.html index 00688a12cd..5a277bb789 100644 --- a/docs/functions_b.html +++ b/docs/functions_b.html @@ -254,7 +254,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_c.html b/docs/functions_c.html index 743b2b099a..d0db102cd4 100644 --- a/docs/functions_c.html +++ b/docs/functions_c.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : shaka::EncryptionParams
  • ClearOutputStreamDataVector() -: shaka::media::MediaHandlerTestBase +: shaka::media::MediaHandlerGraphTestBase
  • ClearSegmentPmt() : shaka::media::mp2t::AacProgramMapTableWriter @@ -172,6 +172,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • Clone() : shaka::media::AudioStreamInfo +, shaka::media::MediaSample , shaka::media::StreamInfo , shaka::media::TextStreamInfo , shaka::media::VideoStreamInfo @@ -230,10 +231,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : shaka::File
  • CopyFrom() -: shaka::media::MediaSample +: shaka::media::MediaSample
  • Create() -: shaka::media::FixedKeySource +: shaka::media::RawKeySource , shaka::media::RsaPrivateKey , shaka::media::RsaPublicKey
  • @@ -275,7 +276,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_d.html b/docs/functions_d.html index dbf7e6dc66..fc913123ee 100644 --- a/docs/functions_d.html +++ b/docs/functions_d.html @@ -142,6 +142,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • DecryptConfig() : shaka::media::DecryptConfig
  • +
  • DecryptorSource() +: shaka::media::DecryptorSource +
  • +
  • DecryptSampleBuffer() +: shaka::media::DecryptorSource +
  • default_language : shaka::MpdParams
  • @@ -180,6 +186,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • DispatchTextSample() : shaka::media::MediaHandler
  • +
  • drm_label +: shaka::StreamDescriptor +
  • dts() : shaka::media::mp2t::PesPacket
  • @@ -193,7 +202,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_e.html b/docs/functions_e.html index d9f3658cc5..0907e2c2bb 100644 --- a/docs/functions_e.html +++ b/docs/functions_e.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_enum.html b/docs/functions_enum.html index 44294c7749..d0d6530cec 100644 --- a/docs/functions_enum.html +++ b/docs/functions_enum.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_eval.html b/docs/functions_eval.html index d83f5cdeab..fabab6d8db 100644 --- a/docs/functions_eval.html +++ b/docs/functions_eval.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_f.html b/docs/functions_f.html index f8e697515d..0d67b4dffe 100644 --- a/docs/functions_f.html +++ b/docs/functions_f.html @@ -124,11 +124,11 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');

    - f -

    @@ -246,8 +249,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : shaka::PlayreadyEncryptionParams
  • key_map -: shaka::RawKeyDecryptionParams -, shaka::RawKeyEncryptionParams +: shaka::RawKeyParams
  • key_provider : shaka::DecryptionParams @@ -338,7 +340,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : shaka::PlayreadyEncryptionParams
  • pssh -: shaka::RawKeyEncryptionParams +: shaka::RawKeyParams
  • @@ -432,7 +434,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_w.html b/docs/functions_w.html index 99eec40154..b3ce0a85d4 100644 --- a/docs/functions_w.html +++ b/docs/functions_w.html @@ -194,7 +194,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_x.html b/docs/functions_x.html index 82a2b632f0..90115a3eeb 100644 --- a/docs/functions_x.html +++ b/docs/functions_x.html @@ -130,7 +130,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_~.html b/docs/functions_~.html index 567247a9fc..b031c4d0b7 100644 --- a/docs/functions_~.html +++ b/docs/functions_~.html @@ -133,7 +133,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/hierarchy.html b/docs/hierarchy.html index 492c1ea298..9e0137f6e7 100644 --- a/docs/hierarchy.html +++ b/docs/hierarchy.html @@ -252,165 +252,167 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); oCshaka::IoCacheDeclaration of class which implements a thread-safe circular buffer oCshaka::media::KeyFetcherBase class for fetching keys from the license service |\Cshaka::media::HttpKeyFetcher -oCshaka::RawKeyEncryptionParams::KeyPair -oCshaka::RawKeyDecryptionParams::KeyPair -oCshaka::media::KeySourceKeySource is responsible for encryption key acquisition -|oCshaka::media::FixedKeySourceA key source that uses fixed keys for encryption -|oCshaka::media::PlayReadyKeySourceA key source that uses playready for encryption -|\Cshaka::media::WidevineKeySource -oCshaka::media::mp4::Language -oCshaka::media::LibcryptoThreadingConvenience class which initializes and terminates libcrypto threading -oCshaka::media::H265SliceHeader::LongTermPicsInfo -oCshaka::hls::MasterPlaylist -oCshaka::media::MediaEvent -oCshaka::media::MediaHandler -|oCshaka::media::ChunkingHandler -|oCshaka::media::EncryptionHandler -|oCshaka::media::FakeMediaHandler -|oCshaka::media::Muxer -||oCshaka::media::mp2t::TsMuxer -||oCshaka::media::mp4::MP4Muxer -||\Cshaka::media::webm::WebMMuxerImplements WebM Muxer -|oCshaka::media::OriginHandler -||\Cshaka::media::Demuxer -|\Cshaka::media::TrickPlayHandler -oCshaka::media::MediaParser -|oCshaka::media::mp2t::Mp2tMediaParser -|oCshaka::media::mp4::MP4MediaParser -|oCshaka::media::WebMMediaParser -|oCshaka::media::WebVttMediaParser -|\Cshaka::media::wvm::WvmMediaParser -oCshaka::hls::MediaPlaylistMethods are virtual for mocking -|\Cshaka::hls::MockMediaPlaylist -oCshaka::hls::MediaPlaylistFactory -oCshaka::media::MuxerListener::MediaRanges -oCshaka::media::MediaSampleClass to hold a media sample -oCshaka::Mp4OutputParamsMP4 (ISO-BMFF) output related parameters -oCshaka::MpdBuilderThis class generates DASH MPDs (Media Presentation Descriptions) -|\Cshaka::MockMpdBuilder -oCshaka::MpdNotifier -|oCshaka::DashIopMpdNotifier -|oCshaka::MockMpdNotifier -|\Cshaka::SimpleMpdNotifier -oCshaka::MpdNotifierFactory -oCshaka::MpdOptionsDefines Mpd Options -oCshaka::MpdParamsDASH MPD related parameters -oCshaka::MpdWriter -oCshaka::media::MuxerListener -|oCshaka::media::CombinedMuxerListener -|oCshaka::media::HlsNotifyMuxerListenerMuxerListener that uses HlsNotifier -|oCshaka::media::MockMuxerListener -|oCshaka::media::MpdNotifyMuxerListener -|\Cshaka::media::VodMediaInfoDumpMuxerListener -oCshaka::media::MuxerOptionsThis structure contains the list of configuration options for Muxer -oCshaka::media::Nalu -oCshaka::media::NalUnitToByteStreamConverter -oCshaka::media::NaluReader -oCshaka::media::OffsetByteQueue -oCshaka::EncryptionParams::EncryptedStreamAttributes::OneOf -oCshaka::media::OnMediaEndParameters -oCshaka::Packager -oCshaka::PackagingParamsPackaging parameters -oCshaka::media::PeriodInfo -oCshaka::media::mp2t::PesPacketClass that carries PES packet information -oCshaka::media::mp2t::PesPacketGenerator -oCshaka::PlayreadyEncryptionParams -oCshaka::media::wvm::PrevSampleData -oCshaka::media::mp4::PrivFrameImplemented per http://id3.org/id3v2.4.0-frames -oCshaka::media::ProducerConsumerQueue< T > -oCshaka::media::mp2t::ProgramMapTableWriter -|oCshaka::media::mp2t::AacProgramMapTableWriter -|\Cshaka::media::mp2t::H264ProgramMapTableWriter -oCshaka::media::ProgressListenerThis class listens to progress updates events -oCshaka::media::ProtectionSystemSpecificInfo -oCshaka::media::Range -oCshaka::RawKeyDecryptionParamsRaw key decryption parameters, i.e. with key parameters provided -oCshaka::RawKeyEncryptionParamsRaw key encryption parameters, i.e. with key parameters provided -oCshaka::Representation -|\Cshaka::MockRepresentation -oCshaka::RepresentationStateChangeListener -oCshaka::media::RequestSignerAbstract class used for signature generation -|oCshaka::media::AesRequestSignerAesRequestSigner uses AES-CBC signing -|\Cshaka::media::RsaRequestSignerRsaRequestSigner uses RSA-PSS signing -oCshaka::media::RsaPrivateKeyRsa private key, used for message signing and decryption -oCshaka::media::RsaPublicKeyRsa public key, used for signature verification and encryption -oCshaka::media::mp4::SampleEncryptionEntry -oCshaka::media::mp4::SampleToGroupEntry -oCshaka::media::SeekHead -oCshaka::media::webm::Segmenter -|oCshaka::media::webm::MultiSegmentSegmenter -|\Cshaka::media::webm::SingleSegmentSegmenter -| \Cshaka::media::webm::TwoPassSingleSegmentSegmenter -oCshaka::media::mp4::Segmenter -|oCshaka::media::mp4::MultiSegmentSegmenter -|\Cshaka::media::mp4::SingleSegmentSegmenter -oCshaka::media::SegmentInfo -oCshaka::SegmentInfo -oCshaka::media::mp4::SegmentReference -oCSimpleThread -|\Cshaka::media::ClosureThread -oCshaka::Status -oCshaka::media::StreamData -oCshaka::StreamDescriptorDefines a single input/output stream -oCshaka::media::StreamInfoAbstract class holds stream information -|oCshaka::media::AudioStreamInfoHolds audio stream information -|oCshaka::media::TextStreamInfo -|\Cshaka::media::VideoStreamInfoHolds video stream information -oCshaka::media::SubsampleEntry -oCshaka::media::mp4::SyncSampleIterator -oCTest -|oCshaka::media::MediaHandlerTestBase -|\Cshaka::media::SegmentTestBase -oCshaka::TestParamsParameters used for testing -oCshaka::media::TextSample -oCshaka::media::TextTrack -oCshaka::media::TextTrackConfig -oCshaka::media::mp4::TrackRunIterator -oCshaka::media::TracksBuilder -oCshaka::media::mp2t::TsPacket -oCshaka::media::mp2t::TsSection -|oCshaka::media::mp2t::TsSectionPes -|\Cshaka::media::mp2t::TsSectionPsi -| oCshaka::media::mp2t::TsSectionPat -| \Cshaka::media::mp2t::TsSectionPmt -oCshaka::media::mp2t::TsSegmenter -oCshaka::media::mp2t::TsWriter -oCshaka::UdpOptionsOptions parsed from UDP url string of the form: udp://ip:port[?options] -oCshaka::media::VideoSliceHeaderParser -|oCshaka::media::H264VideoSliceHeaderParser -|\Cshaka::media::H265VideoSliceHeaderParser -oCshaka::media::mp2t::EsParserH26x::VideoSliceInfo -oCshaka::media::VideoStreamInfoParameters -oCshaka::media::VPCodecConfigurationRecordClass for parsing or writing VP codec configuration record -oCshaka::media::VPxFrameInfo -oCshaka::media::VPxParser -|oCshaka::media::VP8Parser -|\Cshaka::media::VP9ParserClass to parse a vp9 bit stream -oCshaka::media::WebMListParser -oCshaka::media::WebMParserClient -|oCshaka::media::SegmentTestBase::ClusterParser -|oCshaka::media::WebMAudioClientHelper class used to parse an Audio element inside a TrackEntry element -|oCshaka::media::WebMClusterParser -|oCshaka::media::WebMContentEncodingsClientParser for WebM ContentEncodings element -|oCshaka::media::WebMInfoParserParser for WebM Info element -|oCshaka::media::WebMTracksParserParser for WebM Tracks element -|\Cshaka::media::WebMVideoClientHelper class used to parse a Video element inside a TrackEntry element -oCshaka::media::WebMWebVTTParser -oCshaka::media::WebVttSampleConverter -oCshaka::WidevineDecryptionParamsWidevine decryption parameters -oCshaka::WidevineEncryptionParamsWidevine encryption parameters -oCshaka::WidevineSignerSigner credential for Widevine license server -oCshaka::xml::XmlDeleter -\Cshaka::xml::XmlNode - \Cshaka::xml::RepresentationBaseXmlNode -  oCshaka::xml::AdaptationSetXmlNodeAdaptationSetType specified in MPD -  \Cshaka::xml::RepresentationXmlNodeRepresentationType in MPD +oCshaka::RawKeyParams::KeyInfo +oCshaka::media::KeySourceKeySource is responsible for encryption key acquisition +|oCshaka::media::PlayReadyKeySourceA key source that uses playready for encryption +|oCshaka::media::RawKeySourceA key source that uses raw keys for encryption +|\Cshaka::media::WidevineKeySource +oCshaka::media::mp4::Language +oCshaka::media::LibcryptoThreadingConvenience class which initializes and terminates libcrypto threading +oCshaka::media::H265SliceHeader::LongTermPicsInfo +oCshaka::hls::MasterPlaylist +oCshaka::media::MediaEvent +oCshaka::media::MediaHandler +|oCshaka::media::ChunkingHandler +|oCshaka::media::EncryptionHandler +|oCshaka::media::FakeInputMediaHandler +|oCshaka::media::FakeMediaHandler +|oCshaka::media::MockOutputMediaHandler +|oCshaka::media::Muxer +||oCshaka::media::mp2t::TsMuxer +||oCshaka::media::mp4::MP4Muxer +||\Cshaka::media::webm::WebMMuxerImplements WebM Muxer +|oCshaka::media::OriginHandler +||\Cshaka::media::Demuxer +|oCshaka::media::Replicator +|\Cshaka::media::TrickPlayHandler +oCshaka::media::MediaParser +|oCshaka::media::mp2t::Mp2tMediaParser +|oCshaka::media::mp4::MP4MediaParser +|oCshaka::media::WebMMediaParser +|oCshaka::media::WebVttMediaParser +|\Cshaka::media::wvm::WvmMediaParser +oCshaka::hls::MediaPlaylistMethods are virtual for mocking +|\Cshaka::hls::MockMediaPlaylist +oCshaka::hls::MediaPlaylistFactory +oCshaka::media::MuxerListener::MediaRanges +oCshaka::media::MediaSampleClass to hold a media sample +oCshaka::Mp4OutputParamsMP4 (ISO-BMFF) output related parameters +oCshaka::MpdBuilderThis class generates DASH MPDs (Media Presentation Descriptions) +|\Cshaka::MockMpdBuilder +oCshaka::MpdNotifier +|oCshaka::DashIopMpdNotifier +|oCshaka::MockMpdNotifier +|\Cshaka::SimpleMpdNotifier +oCshaka::MpdNotifierFactory +oCshaka::MpdOptionsDefines Mpd Options +oCshaka::MpdParamsDASH MPD related parameters +oCshaka::MpdWriter +oCshaka::media::MuxerListener +|oCshaka::media::CombinedMuxerListener +|oCshaka::media::HlsNotifyMuxerListenerMuxerListener that uses HlsNotifier +|oCshaka::media::MockMuxerListener +|oCshaka::media::MpdNotifyMuxerListener +|\Cshaka::media::VodMediaInfoDumpMuxerListener +oCshaka::media::MuxerOptionsThis structure contains the list of configuration options for Muxer +oCshaka::media::Nalu +oCshaka::media::NalUnitToByteStreamConverter +oCshaka::media::NaluReader +oCshaka::media::OffsetByteQueue +oCshaka::EncryptionParams::EncryptedStreamAttributes::OneOf +oCshaka::media::OnMediaEndParameters +oCshaka::Packager +oCshaka::PackagingParamsPackaging parameters +oCshaka::media::PeriodInfo +oCshaka::media::mp2t::PesPacketClass that carries PES packet information +oCshaka::media::mp2t::PesPacketGenerator +oCshaka::PlayreadyEncryptionParams +oCshaka::media::wvm::PrevSampleData +oCshaka::media::mp4::PrivFrameImplemented per http://id3.org/id3v2.4.0-frames +oCshaka::media::ProducerConsumerQueue< T > +oCshaka::media::mp2t::ProgramMapTableWriter +|oCshaka::media::mp2t::AacProgramMapTableWriter +|\Cshaka::media::mp2t::H264ProgramMapTableWriter +oCshaka::media::ProgressListenerThis class listens to progress updates events +oCshaka::media::ProtectionSystemSpecificInfo +oCshaka::media::Range +oCshaka::RawKeyParamsRaw key encryption/decryption parameters, i.e. with key parameters provided +oCshaka::Representation +|\Cshaka::MockRepresentation +oCshaka::RepresentationStateChangeListener +oCshaka::media::RequestSignerAbstract class used for signature generation +|oCshaka::media::AesRequestSignerAesRequestSigner uses AES-CBC signing +|\Cshaka::media::RsaRequestSignerRsaRequestSigner uses RSA-PSS signing +oCshaka::media::RsaPrivateKeyRsa private key, used for message signing and decryption +oCshaka::media::RsaPublicKeyRsa public key, used for signature verification and encryption +oCshaka::media::mp4::SampleEncryptionEntry +oCshaka::media::mp4::SampleToGroupEntry +oCshaka::media::SeekHead +oCshaka::media::mp4::Segmenter +|oCshaka::media::mp4::MultiSegmentSegmenter +|\Cshaka::media::mp4::SingleSegmentSegmenter +oCshaka::media::webm::Segmenter +|oCshaka::media::webm::MultiSegmentSegmenter +|\Cshaka::media::webm::SingleSegmentSegmenter +| \Cshaka::media::webm::TwoPassSingleSegmentSegmenter +oCshaka::media::SegmentInfo +oCshaka::SegmentInfo +oCshaka::media::mp4::SegmentReference +oCSimpleThread +|\Cshaka::media::ClosureThread +oCshaka::Status +oCshaka::media::StreamData +oCshaka::StreamDescriptorDefines a single input/output stream +oCshaka::media::StreamInfoAbstract class holds stream information +|oCshaka::media::AudioStreamInfoHolds audio stream information +|oCshaka::media::TextStreamInfo +|\Cshaka::media::VideoStreamInfoHolds video stream information +oCshaka::media::SubsampleEntry +oCshaka::media::mp4::SyncSampleIterator +oCTest +|oCshaka::media::MediaHandlerTestBase +||\Cshaka::media::MediaHandlerGraphTestBase +|\Cshaka::media::SegmentTestBase +oCshaka::TestParamsParameters used for testing +oCshaka::media::TextSample +oCshaka::media::TextTrack +oCshaka::media::TextTrackConfig +oCshaka::media::mp4::TrackRunIterator +oCshaka::media::TracksBuilder +oCshaka::media::mp2t::TsPacket +oCshaka::media::mp2t::TsSection +|oCshaka::media::mp2t::TsSectionPes +|\Cshaka::media::mp2t::TsSectionPsi +| oCshaka::media::mp2t::TsSectionPat +| \Cshaka::media::mp2t::TsSectionPmt +oCshaka::media::mp2t::TsSegmenter +oCshaka::media::mp2t::TsWriter +oCshaka::UdpOptionsOptions parsed from UDP url string of the form: udp://ip:port[?options] +oCshaka::media::VideoSliceHeaderParser +|oCshaka::media::H264VideoSliceHeaderParser +|\Cshaka::media::H265VideoSliceHeaderParser +oCshaka::media::mp2t::EsParserH26x::VideoSliceInfo +oCshaka::media::VideoStreamInfoParameters +oCshaka::media::VPCodecConfigurationRecordClass for parsing or writing VP codec configuration record +oCshaka::media::VPxFrameInfo +oCshaka::media::VPxParser +|oCshaka::media::VP8Parser +|\Cshaka::media::VP9ParserClass to parse a vp9 bit stream +oCshaka::media::WebMListParser +oCshaka::media::WebMParserClient +|oCshaka::media::SegmentTestBase::ClusterParser +|oCshaka::media::WebMAudioClientHelper class used to parse an Audio element inside a TrackEntry element +|oCshaka::media::WebMClusterParser +|oCshaka::media::WebMContentEncodingsClientParser for WebM ContentEncodings element +|oCshaka::media::WebMInfoParserParser for WebM Info element +|oCshaka::media::WebMTracksParserParser for WebM Tracks element +|\Cshaka::media::WebMVideoClientHelper class used to parse a Video element inside a TrackEntry element +oCshaka::media::WebMWebVTTParser +oCshaka::media::WebVttSampleConverter +oCshaka::WidevineDecryptionParamsWidevine decryption parameters +oCshaka::WidevineEncryptionParamsWidevine encryption parameters +oCshaka::WidevineSignerSigner credential for Widevine license server +oCshaka::xml::XmlDeleter +\Cshaka::xml::XmlNode + \Cshaka::xml::RepresentationBaseXmlNode +  oCshaka::xml::AdaptationSetXmlNodeAdaptationSetType specified in MPD +  \Cshaka::xml::RepresentationXmlNodeRepresentationType in MPD diff --git a/docs/index.html b/docs/index.html index 013d9576e1..4bc42c3c65 100644 --- a/docs/index.html +++ b/docs/index.html @@ -81,7 +81,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/namespacemembers.html b/docs/namespacemembers.html index 28b26454ee..16f2db3265 100644 --- a/docs/namespacemembers.html +++ b/docs/namespacemembers.html @@ -118,21 +118,24 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • PrintError() : shaka
  • +
  • PrintWarning() +: shaka +
  • TempFilePath() : shaka
  • Uint8VectorToBase64() : shaka
  • -
  • ValidateFixedCryptoFlags() -: shaka -
  • ValidateFlag() : shaka
  • ValidatePRCryptoFlags() : shaka
  • +
  • ValidateRawKeyCryptoFlags() +: shaka +
  • ValidateWidevineCryptoFlags() : shaka
  • @@ -143,7 +146,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/namespacemembers_enum.html b/docs/namespacemembers_enum.html index ccf10cf56e..3cfee77a2a 100644 --- a/docs/namespacemembers_enum.html +++ b/docs/namespacemembers_enum.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/namespacemembers_func.html b/docs/namespacemembers_func.html index 2344bfa96c..3684661c76 100644 --- a/docs/namespacemembers_func.html +++ b/docs/namespacemembers_func.html @@ -112,21 +112,24 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • PrintError() : shaka
  • +
  • PrintWarning() +: shaka +
  • TempFilePath() : shaka
  • Uint8VectorToBase64() : shaka
  • -
  • ValidateFixedCryptoFlags() -: shaka -
  • ValidateFlag() : shaka
  • ValidatePRCryptoFlags() : shaka
  • +
  • ValidateRawKeyCryptoFlags() +: shaka +
  • ValidateWidevineCryptoFlags() : shaka
  • @@ -137,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/namespaces.html b/docs/namespaces.html index 1c698b5fad..1d59cf7807 100644 --- a/docs/namespaces.html +++ b/docs/namespaces.html @@ -92,7 +92,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/search/all_10.js b/docs/search/all_10.js index 9d10248a81..45c2e7ba14 100644 --- a/docs/search/all_10.js +++ b/docs/search/all_10.js @@ -28,8 +28,8 @@ var searchData= ['segment_5fduration_5fin_5fseconds',['segment_duration_in_seconds',['../d2/d1f/structshaka_1_1ChunkingParams.html#a01414f1502775576d68e45d172029358',1,'shaka::ChunkingParams']]], ['segment_5fsap_5faligned',['segment_sap_aligned',['../d2/d1f/structshaka_1_1ChunkingParams.html#a1ab10c82260dc073fb3830efcdabb171',1,'shaka::ChunkingParams']]], ['segment_5ftemplate',['segment_template',['../d0/d27/structshaka_1_1media_1_1MuxerOptions.html#ab98cfd28046fc5c52ab2a45dba1a339a',1,'shaka::media::MuxerOptions::segment_template()'],['../d2/d7b/structshaka_1_1StreamDescriptor.html#af3e55c8970e8a7604ca79a98f4642872',1,'shaka::StreamDescriptor::segment_template()']]], - ['segmenter',['Segmenter',['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html',1,'shaka::media::mp4']]], ['segmenter',['Segmenter',['../dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html',1,'shaka::media::webm']]], + ['segmenter',['Segmenter',['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html',1,'shaka::media::mp4']]], ['segmentindex',['SegmentIndex',['../d4/df9/structshaka_1_1media_1_1mp4_1_1SegmentIndex.html',1,'shaka::media::mp4']]], ['segmentinfo',['SegmentInfo',['../d0/dc0/structshaka_1_1media_1_1SegmentInfo.html',1,'shaka::media']]], ['segmentinfo',['SegmentInfo',['../dc/de1/structshaka_1_1SegmentInfo.html',1,'shaka']]], @@ -52,6 +52,7 @@ var searchData= ['setcodecfortesting',['SetCodecForTesting',['../dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.html#aad5c985ef4bbdbe7c8f38494114abdf7',1,'shaka::hls::MediaPlaylist']]], ['setcomplete',['SetComplete',['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html#adea4bf88a29660bd8612ae3bc5048068',1,'shaka::media::mp4::Segmenter']]], ['setcontent',['SetContent',['../d1/d31/classshaka_1_1xml_1_1XmlNode.html#a73d758186470e7dbcb4f4339eb53458c',1,'shaka::xml::XmlNode']]], + ['setdata',['SetData',['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#ab9be744240871d88cd76d04adbd2d702',1,'shaka::media::MediaSample']]], ['seterror',['SetError',['../d2/d20/classshaka_1_1Status.html#ac5a0cbdf79d591ae56af4913ec33f250',1,'shaka::Status']]], ['setfloatingpointattribute',['SetFloatingPointAttribute',['../d1/d31/classshaka_1_1xml_1_1XmlNode.html#ac4b6c261b14ffe83e9820b76b16af1ba',1,'shaka::xml::XmlNode']]], ['sethandler',['SetHandler',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a0fac1fe2d593e78d47244acdfa21759d',1,'shaka::media::MediaHandler::SetHandler()'],['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a1247302b6c57fbafb09aec71ce0109e3',1,'shaka::media::Demuxer::SetHandler()']]], @@ -69,7 +70,7 @@ var searchData= ['setstringattribute',['SetStringAttribute',['../d1/d31/classshaka_1_1xml_1_1XmlNode.html#afc83f9dbaedc8ba0fc9cc1153ac23329',1,'shaka::xml::XmlNode']]], ['settargetduration',['SetTargetDuration',['../dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.html#ae912291a5be66ae6256006654cc04dd6',1,'shaka::hls::MediaPlaylist']]], ['settswriterfileopenedfortesting',['SetTsWriterFileOpenedForTesting',['../de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html#a34ab9fbaee43115d68be87e4b9e90918',1,'shaka::media::mp2t::TsSegmenter']]], - ['setupgraph',['SetUpGraph',['../d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html#a7ab44361bc98f2a9e32a9510388dbd70',1,'shaka::media::MediaHandlerTestBase']]], + ['setupgraph',['SetUpGraph',['../d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.html#af0a4c542b34e3e3a340c4e9b0ac2c152',1,'shaka::media::MediaHandlerGraphTestBase']]], ['shaka',['shaka',['../d8/daf/namespaceshaka.html',1,'']]], ['signalencrypted',['SignalEncrypted',['../de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html#afc47f61bce7cd4f8f6a6ea0ec2c96d4c',1,'shaka::media::mp2t::TsWriter']]], ['signer',['signer',['../d9/dd2/structshaka_1_1WidevineEncryptionParams.html#a233141ad4baf2f2afce30f96adf340ae',1,'shaka::WidevineEncryptionParams::signer()'],['../d8/d48/structshaka_1_1WidevineDecryptionParams.html#acf84772bb9787f61110e388490412939',1,'shaka::WidevineDecryptionParams::signer()']]], @@ -86,7 +87,7 @@ var searchData= ['skipbits',['SkipBits',['../d6/da9/classshaka_1_1media_1_1BitReader.html#a4ab20ef220c76072eaecb982aba0541d',1,'shaka::media::BitReader']]], ['skipbitsconditional',['SkipBitsConditional',['../d6/da9/classshaka_1_1media_1_1BitReader.html#a98bbbbc849a3fadc1a136662174d470e',1,'shaka::media::BitReader']]], ['skipbytes',['SkipBytes',['../d6/da9/classshaka_1_1media_1_1BitReader.html#a7d349253d5cc8f9aa33f1ca2ea94677c',1,'shaka::media::BitReader::SkipBytes()'],['../d9/d13/classshaka_1_1media_1_1BufferReader.html#a2b15dfcd6ff891a9cb7b76f48d91d15d',1,'shaka::media::BufferReader::SkipBytes()']]], - ['some_5fhandler',['some_handler',['../d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html#aba1f3fe6f82c2a205aefdeae3be60d1d',1,'shaka::media::MediaHandlerTestBase']]], + ['some_5fhandler',['some_handler',['../d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.html#a02f13711d72781e74f0ce794cbd7044a',1,'shaka::media::MediaHandlerGraphTestBase']]], ['soundmediaheader',['SoundMediaHeader',['../d7/d07/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader.html',1,'shaka::media::mp4']]], ['startbox',['StartBox',['../d1/dee/classshaka_1_1media_1_1mp4_1_1BoxReader.html#a6bafd9cd95a97c4c1475d1806d602ae2',1,'shaka::media::mp4::BoxReader']]], ['startswithstartcode',['StartsWithStartCode',['../db/d86/classshaka_1_1media_1_1NaluReader.html#a9ed9d56a06f43717cdb7035f86075975',1,'shaka::media::NaluReader']]], @@ -107,6 +108,6 @@ var searchData= ['subtitlemediaheader',['SubtitleMediaHeader',['../db/d21/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader.html',1,'shaka::media::mp4']]], ['suppressonce',['SuppressOnce',['../de/d52/classshaka_1_1Representation.html#a473e45dbbf64e6ab6ed670ccedac84ed',1,'shaka::Representation']]], ['syncsample',['SyncSample',['../dd/d3f/structshaka_1_1media_1_1mp4_1_1SyncSample.html',1,'shaka::media::mp4']]], - ['syncsampleiterator',['SyncSampleIterator',['../d7/d26/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator.html#af8bc2d5d153bfdd168f145213c47d3fe',1,'shaka::media::mp4::SyncSampleIterator']]], - ['syncsampleiterator',['SyncSampleIterator',['../d7/d26/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator.html',1,'shaka::media::mp4']]] + ['syncsampleiterator',['SyncSampleIterator',['../d7/d26/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator.html',1,'shaka::media::mp4']]], + ['syncsampleiterator',['SyncSampleIterator',['../d7/d26/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator.html#af8bc2d5d153bfdd168f145213c47d3fe',1,'shaka::media::mp4::SyncSampleIterator']]] ]; diff --git a/docs/search/all_11.js b/docs/search/all_11.js index a20c04120e..3b3bd15ea1 100644 --- a/docs/search/all_11.js +++ b/docs/search/all_11.js @@ -27,6 +27,7 @@ var searchData= ['trackruniterator',['TrackRunIterator',['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html',1,'shaka::media::mp4']]], ['trackruniterator',['TrackRunIterator',['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#a743961add0060500509c3fc74ffd26ab',1,'shaka::media::mp4::TrackRunIterator']]], ['tracksbuilder',['TracksBuilder',['../d8/d74/classshaka_1_1media_1_1TracksBuilder.html',1,'shaka::media']]], + ['transferdata',['TransferData',['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#a5402405ad4abb5102078d047972a56fa',1,'shaka::media::MediaSample']]], ['trick_5fplay_5ffactor',['trick_play_factor',['../d2/d7b/structshaka_1_1StreamDescriptor.html#a5cc00f367691729460e0b75b8ec6c512',1,'shaka::StreamDescriptor']]], ['trickplayhandler',['TrickPlayHandler',['../db/dea/classshaka_1_1media_1_1TrickPlayHandler.html',1,'shaka::media']]], ['trim',['Trim',['../d9/df9/classshaka_1_1media_1_1OffsetByteQueue.html#a77b9a12145dad80df95845bd2b66b6a8',1,'shaka::media::OffsetByteQueue']]], @@ -40,8 +41,8 @@ var searchData= ['tssectionpes',['TsSectionPes',['../d1/d30/classshaka_1_1media_1_1mp2t_1_1TsSectionPes.html',1,'shaka::media::mp2t']]], ['tssectionpmt',['TsSectionPmt',['../d2/de3/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt.html',1,'shaka::media::mp2t']]], ['tssectionpsi',['TsSectionPsi',['../de/d7e/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi.html',1,'shaka::media::mp2t']]], - ['tssegmenter',['TsSegmenter',['../de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html#af0e91f691388ecffb8a473554707c917',1,'shaka::media::mp2t::TsSegmenter']]], ['tssegmenter',['TsSegmenter',['../de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html',1,'shaka::media::mp2t']]], + ['tssegmenter',['TsSegmenter',['../de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html#af0e91f691388ecffb8a473554707c917',1,'shaka::media::mp2t::TsSegmenter']]], ['tswriter',['TsWriter',['../de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html',1,'shaka::media::mp2t']]], ['twopasssinglesegmentsegmenter',['TwoPassSingleSegmentSegmenter',['../dd/da5/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter.html',1,'shaka::media::webm']]], ['type',['type',['../d6/dff/classshaka_1_1media_1_1Nalu.html#a86143bb8a31825f06668e97bff66ce2c',1,'shaka::media::Nalu']]] diff --git a/docs/search/all_13.js b/docs/search/all_13.js index cb69516191..e7c96bdb11 100644 --- a/docs/search/all_13.js +++ b/docs/search/all_13.js @@ -1,9 +1,9 @@ var searchData= [ - ['validatefixedcryptoflags',['ValidateFixedCryptoFlags',['../d8/daf/namespaceshaka.html#abc3f498491fb895860ebdee359935d93',1,'shaka']]], ['validateflag',['ValidateFlag',['../d8/daf/namespaceshaka.html#a952293a7213f285843f28b7363ee14d6',1,'shaka']]], - ['validateoutputstreamindex',['ValidateOutputStreamIndex',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a71df357be46c02dc0e71b2eabb034c10',1,'shaka::media::MediaHandler::ValidateOutputStreamIndex()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#ae07a2472011c4246fe7f3e69d328c873',1,'shaka::media::FakeMediaHandler::ValidateOutputStreamIndex()'],['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a908f4c9bb410d1528b85e2c7f824deb6',1,'shaka::media::Demuxer::ValidateOutputStreamIndex()'],['../db/dea/classshaka_1_1media_1_1TrickPlayHandler.html#addbe1be8281bceb8e84df865424dded3',1,'shaka::media::TrickPlayHandler::ValidateOutputStreamIndex()']]], + ['validateoutputstreamindex',['ValidateOutputStreamIndex',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a71df357be46c02dc0e71b2eabb034c10',1,'shaka::media::MediaHandler::ValidateOutputStreamIndex()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#ae07a2472011c4246fe7f3e69d328c873',1,'shaka::media::FakeMediaHandler::ValidateOutputStreamIndex()'],['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a908f4c9bb410d1528b85e2c7f824deb6',1,'shaka::media::Demuxer::ValidateOutputStreamIndex()']]], ['validateprcryptoflags',['ValidatePRCryptoFlags',['../d8/daf/namespaceshaka.html#a8b6212ccc4b98e5fdb72f84acf252c6b',1,'shaka']]], + ['validaterawkeycryptoflags',['ValidateRawKeyCryptoFlags',['../d8/daf/namespaceshaka.html#ab611f8e843f4834b9d7c30db212a946e',1,'shaka']]], ['validatewidevinecryptoflags',['ValidateWidevineCryptoFlags',['../d8/daf/namespaceshaka.html#ade3cbb360c0dcaacc5667676af885008',1,'shaka']]], ['verifysignature',['VerifySignature',['../d9/d0c/classshaka_1_1media_1_1RsaPublicKey.html#a146cc97c8fcacadde1b08c373b766fe4',1,'shaka::media::RsaPublicKey']]], ['video_5fdescription',['video_description',['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#aee813f01267e89ff00fdb836bb3a159d',1,'shaka::media::mp4::TrackRunIterator']]], diff --git a/docs/search/all_2.js b/docs/search/all_2.js index ef6d203efe..7d843fd29a 100644 --- a/docs/search/all_2.js +++ b/docs/search/all_2.js @@ -17,12 +17,12 @@ var searchData= ['chunkoffset',['ChunkOffset',['../dd/d06/structshaka_1_1media_1_1mp4_1_1ChunkOffset.html',1,'shaka::media::mp4']]], ['clear',['Clear',['../df/d4e/classshaka_1_1IoCache.html#a10c8e56478fe7bc4c30ea0087eb22804',1,'shaka::IoCache::Clear()'],['../d2/d20/classshaka_1_1Status.html#a022f6fc5d4756ce2cb2b586d8c40f145',1,'shaka::Status::Clear()']]], ['clear_5flead_5fin_5fseconds',['clear_lead_in_seconds',['../dc/da0/structshaka_1_1EncryptionParams.html#a1ad46963dc926aa4b72813dccb3f6a45',1,'shaka::EncryptionParams']]], - ['clearoutputstreamdatavector',['ClearOutputStreamDataVector',['../d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html#a7a600a18a6dec0d32b75c292dc634474',1,'shaka::media::MediaHandlerTestBase']]], + ['clearoutputstreamdatavector',['ClearOutputStreamDataVector',['../d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.html#a051758e3cfa419622565e65a08fd8a00',1,'shaka::media::MediaHandlerGraphTestBase']]], ['clearsegmentpmt',['ClearSegmentPmt',['../dc/d03/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter.html#abaf3df0bbb1b6ff5655d04b828d2889b',1,'shaka::media::mp2t::ProgramMapTableWriter::ClearSegmentPmt()'],['../de/d27/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter.html#a8f439af49b3144f892102c235fb51169',1,'shaka::media::mp2t::H264ProgramMapTableWriter::ClearSegmentPmt()'],['../d4/dc8/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter.html#aa6d50f3f1249bbf7c1d27608bfb9334f',1,'shaka::media::mp2t::AacProgramMapTableWriter::ClearSegmentPmt()']]], ['client_5fcert_5ffile',['client_cert_file',['../d3/df5/structshaka_1_1PlayreadyEncryptionParams.html#afdc9477270b8a626163940cddff4fa8c',1,'shaka::PlayreadyEncryptionParams']]], ['client_5fcert_5fprivate_5fkey_5ffile',['client_cert_private_key_file',['../d3/df5/structshaka_1_1PlayreadyEncryptionParams.html#af6f3b909425a27e17a7d6e473d7eb8ac',1,'shaka::PlayreadyEncryptionParams']]], ['client_5fcert_5fprivate_5fkey_5fpassword',['client_cert_private_key_password',['../d3/df5/structshaka_1_1PlayreadyEncryptionParams.html#a2d492f0c28b5d291ef512aa0248dc8ba',1,'shaka::PlayreadyEncryptionParams']]], - ['clone',['Clone',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#a306c5ebb4a42eced7d1a3deaad23c17b',1,'shaka::media::AudioStreamInfo::Clone()'],['../d5/db1/classshaka_1_1media_1_1StreamInfo.html#afdd9b2df8ae1c11bb033c44eaba5e38d',1,'shaka::media::StreamInfo::Clone()'],['../db/dab/classshaka_1_1media_1_1TextStreamInfo.html#aa8cfad62fa0186a4f82a8dc43ee1c96d',1,'shaka::media::TextStreamInfo::Clone()'],['../d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html#a0d62499eaf37fe6df75f35beaebf71f1',1,'shaka::media::VideoStreamInfo::Clone()']]], + ['clone',['Clone',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#a306c5ebb4a42eced7d1a3deaad23c17b',1,'shaka::media::AudioStreamInfo::Clone()'],['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#a6b055c68dd0b2425ec5ba524b8a05b73',1,'shaka::media::MediaSample::Clone()'],['../d5/db1/classshaka_1_1media_1_1StreamInfo.html#afdd9b2df8ae1c11bb033c44eaba5e38d',1,'shaka::media::StreamInfo::Clone()'],['../db/dab/classshaka_1_1media_1_1TextStreamInfo.html#aa8cfad62fa0186a4f82a8dc43ee1c96d',1,'shaka::media::TextStreamInfo::Clone()'],['../d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html#a0d62499eaf37fe6df75f35beaebf71f1',1,'shaka::media::VideoStreamInfo::Clone()']]], ['close',['Close',['../dd/d40/classshaka_1_1CallbackFile.html#aac23ef04e5bafef7d5b4c5d7a3fcfbb5',1,'shaka::CallbackFile::Close()'],['../d3/d73/classshaka_1_1File.html#a932666ed1d6a565bf387a9d8b39a8948',1,'shaka::File::Close()'],['../df/d4e/classshaka_1_1IoCache.html#a1c54ca1d747cf0b0b9ab681babff73e6',1,'shaka::IoCache::Close()'],['../d7/dbd/classshaka_1_1LocalFile.html#a3d881c251c19a36eaf50483971095370',1,'shaka::LocalFile::Close()'],['../de/dad/classshaka_1_1MemoryFile.html#a4cfe38684f4fdde650a2ed7fdc780f05',1,'shaka::MemoryFile::Close()'],['../dd/d0c/classshaka_1_1ThreadedIoFile.html#a79292b93c39f609b5348787a39fc77b2',1,'shaka::ThreadedIoFile::Close()'],['../d4/dcb/classshaka_1_1UdpFile.html#a61cdb937b3a996bb8b054679d98df812',1,'shaka::UdpFile::Close()'],['../d1/d0a/classshaka_1_1media_1_1MkvWriter.html#af560b12e0298ca3dcd8f88fddff1443b',1,'shaka::media::MkvWriter::Close()']]], ['closed',['closed',['../df/d4e/classshaka_1_1IoCache.html#a69c0074123339c9c60dec6a27a5c085c',1,'shaka::IoCache']]], ['closurethread',['ClosureThread',['../dc/df0/classshaka_1_1media_1_1ClosureThread.html',1,'shaka::media']]], @@ -51,8 +51,8 @@ var searchData= ['convertunittobytestreamwithsubsamples',['ConvertUnitToByteStreamWithSubsamples',['../d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html#ae727e801c989d3ede17f1d1bd86a4ab4',1,'shaka::media::NalUnitToByteStreamConverter']]], ['copy',['Copy',['../d3/d73/classshaka_1_1File.html#af2cbec5c6dc1c97ada010acd83b9728a',1,'shaka::File']]], ['copyfile',['CopyFile',['../d3/d73/classshaka_1_1File.html#a85633ec9f051eb9f32b07ff7e7740d1c',1,'shaka::File::CopyFile(File *source, File *destination)'],['../d3/d73/classshaka_1_1File.html#a07e2d2f98597320f71fb96dff74cfcb2',1,'shaka::File::CopyFile(File *source, File *destination, int64_t max_copy)']]], - ['copyfrom',['CopyFrom',['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#ad8975dbb21747ff32c8604f5489bf5c9',1,'shaka::media::MediaSample::CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)'],['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#a910e68f46b9464e4ea36cf9cd5116b55',1,'shaka::media::MediaSample::CopyFrom(const uint8_t *data, size_t size, const uint8_t *side_data, size_t side_data_size, bool is_key_frame)'],['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#a311a7302af6405531ebafa04d877d160',1,'shaka::media::MediaSample::CopyFrom(const MediaSample &media_sample)']]], - ['create',['Create',['../d0/dac/classshaka_1_1media_1_1FixedKeySource.html#aebde54a272565d4b81a1139ea35fab63',1,'shaka::media::FixedKeySource::Create()'],['../d0/dce/classshaka_1_1media_1_1RsaPrivateKey.html#aef45d0014d7971b936ce3d0109935ba8',1,'shaka::media::RsaPrivateKey::Create()'],['../d9/d0c/classshaka_1_1media_1_1RsaPublicKey.html#aabe4a2f1541ca1e741305f58329e3881',1,'shaka::media::RsaPublicKey::Create()']]], + ['copyfrom',['CopyFrom',['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#ad8975dbb21747ff32c8604f5489bf5c9',1,'shaka::media::MediaSample::CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)'],['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#a910e68f46b9464e4ea36cf9cd5116b55',1,'shaka::media::MediaSample::CopyFrom(const uint8_t *data, size_t size, const uint8_t *side_data, size_t side_data_size, bool is_key_frame)']]], + ['create',['Create',['../db/dd0/classshaka_1_1media_1_1RawKeySource.html#aea32604de0ad9489731d188c50e7accf',1,'shaka::media::RawKeySource::Create()'],['../d0/dce/classshaka_1_1media_1_1RsaPrivateKey.html#aef45d0014d7971b936ce3d0109935ba8',1,'shaka::media::RsaPrivateKey::Create()'],['../d9/d0c/classshaka_1_1media_1_1RsaPublicKey.html#aabe4a2f1541ca1e741305f58329e3881',1,'shaka::media::RsaPublicKey::Create()']]], ['createandinitializesegmenter',['CreateAndInitializeSegmenter',['../d2/dba/classshaka_1_1media_1_1SegmentTestBase.html#a31a8a73bfd233a7226f91ac6af28b033',1,'shaka::media::SegmentTestBase']]], ['createbox',['CreateBox',['../d0/dd4/classshaka_1_1media_1_1ProtectionSystemSpecificInfo.html#af9b917cb91b6c10ee7a6f5b41fc7e0d9',1,'shaka::media::ProtectionSystemSpecificInfo']]], ['createemptymediasample',['CreateEmptyMediaSample',['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#a4a7f8d79f9ec3cd3df9a395eef71f0c6',1,'shaka::media::MediaSample']]], diff --git a/docs/search/all_3.js b/docs/search/all_3.js index 129fb80517..f6c1e7f901 100644 --- a/docs/search/all_3.js +++ b/docs/search/all_3.js @@ -16,13 +16,15 @@ var searchData= ['decryptconfig',['DecryptConfig',['../de/d49/classshaka_1_1media_1_1DecryptConfig.html',1,'shaka::media']]], ['decryptconfig',['DecryptConfig',['../de/d49/classshaka_1_1media_1_1DecryptConfig.html#a24035bb6edcb3aaaa9923bf385376ae5',1,'shaka::media::DecryptConfig::DecryptConfig(const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &iv, const std::vector< SubsampleEntry > &subsamples)'],['../de/d49/classshaka_1_1media_1_1DecryptConfig.html#ab2dfe0a2ee285539843ac55b5f1ac7c7',1,'shaka::media::DecryptConfig::DecryptConfig(const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &iv, const std::vector< SubsampleEntry > &subsamples, FourCC protection_scheme, uint8_t crypt_byte_block, uint8_t skip_byte_block)']]], ['decryptionparams',['DecryptionParams',['../d1/d4f/structshaka_1_1DecryptionParams.html',1,'shaka']]], + ['decryptorsource',['DecryptorSource',['../d7/d59/classshaka_1_1media_1_1DecryptorSource.html#a045c97bdeb9996d6003ac926849880c8',1,'shaka::media::DecryptorSource']]], ['decryptorsource',['DecryptorSource',['../d7/d59/classshaka_1_1media_1_1DecryptorSource.html',1,'shaka::media']]], + ['decryptsamplebuffer',['DecryptSampleBuffer',['../d7/d59/classshaka_1_1media_1_1DecryptorSource.html#a8a1bd6a5a63b3f3c54028b43dfc67a6d',1,'shaka::media::DecryptorSource']]], ['default_5flanguage',['default_language',['../df/ddc/structshaka_1_1MpdParams.html#a74df80bd74635090e97837f3a5941d73',1,'shaka::MpdParams']]], ['defaultstreamlabelfunction',['DefaultStreamLabelFunction',['../db/dd0/classshaka_1_1Packager.html#a59fec4e3f33138081e5222d3553ab948',1,'shaka::Packager']]], ['delete',['Delete',['../d3/d73/classshaka_1_1File.html#a383c9f670511961f334569fd1a7a103b',1,'shaka::File::Delete()'],['../d7/dbd/classshaka_1_1LocalFile.html#a7eb47bb6ceff52c57e3eb4a21fb0ba8d',1,'shaka::LocalFile::Delete()'],['../de/dad/classshaka_1_1MemoryFile.html#a3ac9c9e8e3a31ef8f70a904384f89bed',1,'shaka::MemoryFile::Delete()']]], ['deleteall',['DeleteAll',['../de/dad/classshaka_1_1MemoryFile.html#acd947572c2bbe3595b403a483c82e899',1,'shaka::MemoryFile']]], - ['demuxer',['Demuxer',['../dd/d17/classshaka_1_1media_1_1Demuxer.html',1,'shaka::media']]], ['demuxer',['Demuxer',['../dd/d17/classshaka_1_1media_1_1Demuxer.html#ae2fee69f99e5815de4f686b24393402e',1,'shaka::media::Demuxer']]], + ['demuxer',['Demuxer',['../dd/d17/classshaka_1_1media_1_1Demuxer.html',1,'shaka::media']]], ['demuxstreamidmediasample',['DemuxStreamIdMediaSample',['../d1/da1/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html',1,'shaka::media::wvm']]], ['dispatch',['Dispatch',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#accd62dd4def920571f95f4e1a98ab7ca',1,'shaka::media::MediaHandler']]], ['dispatchmediaevent',['DispatchMediaEvent',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a1c4c8b216cb4f902e522f0abd4571b86',1,'shaka::media::MediaHandler']]], @@ -32,6 +34,7 @@ var searchData= ['dispatchstreaminfo',['DispatchStreamInfo',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#af0c7b537e9745a0eb49b4561dbc89f55',1,'shaka::media::MediaHandler']]], ['dispatchtextsample',['DispatchTextSample',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a65d965532a6488eab28551aca51a1a2a',1,'shaka::media::MediaHandler']]], ['doubletostring',['DoubleToString',['../d8/daf/namespaceshaka.html#adac592409e758489bad365323d070f31',1,'shaka']]], + ['drm_5flabel',['drm_label',['../d2/d7b/structshaka_1_1StreamDescriptor.html#a8f2a517450433cf69bbc87cef17d05cf',1,'shaka::StreamDescriptor']]], ['dts',['dts',['../d2/d93/classshaka_1_1media_1_1mp2t_1_1PesPacket.html#a88111c4190e74c24c10f0a694e723cb8',1,'shaka::media::mp2t::PesPacket']]], ['dtsspecific',['DTSSpecific',['../dc/da0/structshaka_1_1media_1_1mp4_1_1DTSSpecific.html',1,'shaka::media::mp4']]], ['dump_5fstream_5finfo',['dump_stream_info',['../d6/d62/structshaka_1_1TestParams.html#a7a22e04cdfc14d73266397bf673fae6e',1,'shaka::TestParams']]], diff --git a/docs/search/all_5.js b/docs/search/all_5.js index 37f6eff627..d97f532ac3 100644 --- a/docs/search/all_5.js +++ b/docs/search/all_5.js @@ -1,7 +1,8 @@ var searchData= [ + ['fakeinputmediahandler',['FakeInputMediaHandler',['../d3/d1e/classshaka_1_1media_1_1FakeInputMediaHandler.html',1,'shaka::media']]], ['fakemediahandler',['FakeMediaHandler',['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html',1,'shaka::media']]], - ['fetchkeys',['FetchKeys',['../d0/dac/classshaka_1_1media_1_1FixedKeySource.html#a5cd8641873f213b826fc32e1c0026041',1,'shaka::media::FixedKeySource::FetchKeys()'],['../d7/de0/classshaka_1_1media_1_1HttpKeyFetcher.html#ab8e9b01fac00aa5dafb8983acd7a297b',1,'shaka::media::HttpKeyFetcher::FetchKeys()'],['../df/d66/classshaka_1_1media_1_1KeyFetcher.html#aa3c6011a0dd7c8e7f53dbaf48b92718d',1,'shaka::media::KeyFetcher::FetchKeys()'],['../d1/d1f/classshaka_1_1media_1_1KeySource.html#a38dc8e7c48f86e2b3ab3c1ffe0d7916f',1,'shaka::media::KeySource::FetchKeys()'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#a6311482a3f3ddec70da595f0dc1580ae',1,'shaka::media::PlayReadyKeySource::FetchKeys()'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#aeea3e62921c176aa6be1f0a95f03b6cf',1,'shaka::media::WidevineKeySource::FetchKeys(EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) override'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#a6fb9680be887d3b9367e015029f909f2',1,'shaka::media::WidevineKeySource::FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy)']]], + ['fetchkeys',['FetchKeys',['../d7/de0/classshaka_1_1media_1_1HttpKeyFetcher.html#ab8e9b01fac00aa5dafb8983acd7a297b',1,'shaka::media::HttpKeyFetcher::FetchKeys()'],['../df/d66/classshaka_1_1media_1_1KeyFetcher.html#aa3c6011a0dd7c8e7f53dbaf48b92718d',1,'shaka::media::KeyFetcher::FetchKeys()'],['../d1/d1f/classshaka_1_1media_1_1KeySource.html#a38dc8e7c48f86e2b3ab3c1ffe0d7916f',1,'shaka::media::KeySource::FetchKeys()'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#a6311482a3f3ddec70da595f0dc1580ae',1,'shaka::media::PlayReadyKeySource::FetchKeys()'],['../db/dd0/classshaka_1_1media_1_1RawKeySource.html#a0849f7000c4ab37139cc9c9ea1a031f3',1,'shaka::media::RawKeySource::FetchKeys()'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#aeea3e62921c176aa6be1f0a95f03b6cf',1,'shaka::media::WidevineKeySource::FetchKeys(EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) override'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#a6fb9680be887d3b9367e015029f909f2',1,'shaka::media::WidevineKeySource::FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy)']]], ['file',['File',['../d3/d73/classshaka_1_1File.html',1,'shaka']]], ['file_5fname',['file_name',['../d3/d73/classshaka_1_1File.html#a463be34c40e47f95510e991678b34605',1,'shaka::File']]], ['filecloser',['FileCloser',['../d3/de2/structshaka_1_1FileCloser.html',1,'shaka']]], @@ -10,7 +11,6 @@ var searchData= ['finalizefragment',['FinalizeFragment',['../db/d95/classshaka_1_1media_1_1mp4_1_1Fragmenter.html#ae943e13eb86d54cffb7174d4513e4541',1,'shaka::media::mp4::Fragmenter']]], ['finalizesegment',['FinalizeSegment',['../de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html#ac0c76888b5c3b3a25600a3f126dc92f8',1,'shaka::media::mp2t::TsSegmenter::FinalizeSegment()'],['../de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html#ae9979f940d7a07127709576aa1f766a1',1,'shaka::media::mp2t::TsWriter::FinalizeSegment()'],['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html#adfe43b76600564a2836ed78070549656',1,'shaka::media::mp4::Segmenter::FinalizeSegment()'],['../d2/dd5/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter.html#acadda71dd534ab0f6889ab653fbffe42',1,'shaka::media::webm::MultiSegmentSegmenter::FinalizeSegment()'],['../dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html#a3c7123d6d9321c72d8bd737f1f9d3c01',1,'shaka::media::webm::Segmenter::FinalizeSegment()'],['../d3/da1/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter.html#a7c34c5c8dacbe1a18444cdb6abce0a30',1,'shaka::media::webm::SingleSegmentSegmenter::FinalizeSegment()']]], ['findstartcodeinclearrange',['FindStartCodeInClearRange',['../db/d86/classshaka_1_1media_1_1NaluReader.html#aa14b3cd5da5657d8a3d0ecfdf301a184',1,'shaka::media::NaluReader']]], - ['fixedkeysource',['FixedKeySource',['../d0/dac/classshaka_1_1media_1_1FixedKeySource.html',1,'shaka::media']]], ['flush',['Flush',['../dd/d40/classshaka_1_1CallbackFile.html#aef34f60f2e94f862e495c254edc58bd9',1,'shaka::CallbackFile::Flush()'],['../d3/d73/classshaka_1_1File.html#a5fa625751e03b9e7652ba1bfa98b8ca4',1,'shaka::File::Flush()'],['../d7/dbd/classshaka_1_1LocalFile.html#a04b4523a7352572b2c6d72f1d6f3a077',1,'shaka::LocalFile::Flush()'],['../de/dad/classshaka_1_1MemoryFile.html#aecf76d1658ea5f088ef1e42f04b9b64d',1,'shaka::MemoryFile::Flush()'],['../dd/d0c/classshaka_1_1ThreadedIoFile.html#a2b53b72d99aad4439781e3887492452c',1,'shaka::ThreadedIoFile::Flush()'],['../d4/dcb/classshaka_1_1UdpFile.html#a4b5430ec1d24434f5f6d9b20692efbc2',1,'shaka::UdpFile::Flush()'],['../d9/deb/classshaka_1_1hls_1_1HlsNotifier.html#a5d788d47d01aee4f75c7b55251d69edf',1,'shaka::hls::HlsNotifier::Flush()'],['../d7/d5c/classshaka_1_1hls_1_1SimpleHlsNotifier.html#a153fe931c8e6fe3e585ebd925d75d229',1,'shaka::hls::SimpleHlsNotifier::Flush()'],['../d3/d0a/classshaka_1_1media_1_1MediaParser.html#a26752164d7e8ae6a9a894512291ad9cd',1,'shaka::media::MediaParser::Flush()'],['../d3/dc1/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser.html#afdb1a88116e3347e67afeb7715847135',1,'shaka::media::mp2t::Mp2tMediaParser::Flush()'],['../d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html#a71ea0819224b94ba9df5c951424bc6b1',1,'shaka::media::mp2t::PesPacketGenerator::Flush()'],['../d7/dd5/classshaka_1_1media_1_1mp4_1_1MP4MediaParser.html#a6f26e0d76aeda601fa87190901de27ea',1,'shaka::media::mp4::MP4MediaParser::Flush()'],['../da/de4/classshaka_1_1media_1_1WebMClusterParser.html#ac3d4be1a12667ed722915be727747eee',1,'shaka::media::WebMClusterParser::Flush()'],['../d2/ddb/classshaka_1_1media_1_1WebMMediaParser.html#a6c2d4b5b36304831e637f7ae1b9e54a2',1,'shaka::media::WebMMediaParser::Flush()'],['../dc/df2/classshaka_1_1media_1_1WebVttMediaParser.html#aa666cb1b9ee2ff940d9fc7efda4b50d7',1,'shaka::media::WebVttMediaParser::Flush()'],['../de/ddd/classshaka_1_1media_1_1WebVttSampleConverter.html#aa02d5ce7d9609b3841835fbab74b8c81',1,'shaka::media::WebVttSampleConverter::Flush()'],['../dc/d18/classshaka_1_1media_1_1wvm_1_1WvmMediaParser.html#ac5680e3bd6cdb07fd65af3f39fce999a',1,'shaka::media::wvm::WvmMediaParser::Flush()'],['../d4/d70/classshaka_1_1DashIopMpdNotifier.html#ab3411eb75eedce9a26f0767210280e71',1,'shaka::DashIopMpdNotifier::Flush()'],['../d3/dd0/classshaka_1_1MpdNotifier.html#af8149126f4793506bef385d067561dbf',1,'shaka::MpdNotifier::Flush()'],['../d8/de1/classshaka_1_1SimpleMpdNotifier.html#a8ea622a21a5807775bb2d998fa04658f',1,'shaka::SimpleMpdNotifier::Flush()']]], ['flushalldownstreams',['FlushAllDownstreams',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#ab644ca7b0a0dbcbc42936f2dfb979ca5',1,'shaka::media::MediaHandler']]], ['flushdownstream',['FlushDownstream',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#ad5001bf12073101a949b062943769f5b',1,'shaka::media::MediaHandler']]], diff --git a/docs/search/all_6.js b/docs/search/all_6.js index 1177a4a97d..b753685899 100644 --- a/docs/search/all_6.js +++ b/docs/search/all_6.js @@ -14,7 +14,7 @@ var searchData= ['getaudiostreaminfo',['GetAudioStreamInfo',['../d3/d7c/classshaka_1_1media_1_1WebMAudioClient.html#a0fcbddd20199044f860331b3bd9ef3b8',1,'shaka::media::WebMAudioClient']]], ['getcodecstring',['GetCodecString',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#aee79e7aa61b741bb96f451c6de1c9d42',1,'shaka::media::AudioStreamInfo::GetCodecString()'],['../d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html#a66b23ef2de8b851482628fefafafce17',1,'shaka::media::AVCDecoderConfigurationRecord::GetCodecString(FourCC codec_fourcc) const '],['../d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html#a30a6df8df89c670fd4c8894b8bacffa9',1,'shaka::media::AVCDecoderConfigurationRecord::GetCodecString(FourCC codec_fourcc, uint8_t profile_indication, uint8_t profile_compatibility, uint8_t avc_level)'],['../d4/d8a/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord.html#aa612802ce249bdff2cd4a8b50a05268c',1,'shaka::media::HEVCDecoderConfigurationRecord::GetCodecString()'],['../d1/da5/classshaka_1_1media_1_1VPCodecConfigurationRecord.html#a86b48fb506b476538a7440d9ccf9a533',1,'shaka::media::VPCodecConfigurationRecord::GetCodecString()']]], ['getcontenttype',['GetContentType',['../d8/daf/namespaceshaka.html#a5ea880937da26d677ff6a48c0219d090',1,'shaka']]], - ['getcryptoperiodkey',['GetCryptoPeriodKey',['../d0/dac/classshaka_1_1media_1_1FixedKeySource.html#a1161732d3310177256ff0eed1f877e38',1,'shaka::media::FixedKeySource::GetCryptoPeriodKey()'],['../d1/d1f/classshaka_1_1media_1_1KeySource.html#a34340247a575bc693d14c3bef9102258',1,'shaka::media::KeySource::GetCryptoPeriodKey()'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#af53a97f0812b07e766c83e128b807c01',1,'shaka::media::PlayReadyKeySource::GetCryptoPeriodKey()'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#a783cd4a9bf35fe2a7a610806bfda8e62',1,'shaka::media::WidevineKeySource::GetCryptoPeriodKey()']]], + ['getcryptoperiodkey',['GetCryptoPeriodKey',['../d1/d1f/classshaka_1_1media_1_1KeySource.html#a34340247a575bc693d14c3bef9102258',1,'shaka::media::KeySource::GetCryptoPeriodKey()'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#af53a97f0812b07e766c83e128b807c01',1,'shaka::media::PlayReadyKeySource::GetCryptoPeriodKey()'],['../db/dd0/classshaka_1_1media_1_1RawKeySource.html#aa5b50bc57ebd9691db6fbed256cd763e',1,'shaka::media::RawKeySource::GetCryptoPeriodKey()'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#a783cd4a9bf35fe2a7a610806bfda8e62',1,'shaka::media::WidevineKeySource::GetCryptoPeriodKey()']]], ['getdecoderconfigurationrecord',['GetDecoderConfigurationRecord',['../d8/d08/classshaka_1_1media_1_1H264ByteToUnitStreamConverter.html#a6a7a73841ded1942364f88aad90dcbc9',1,'shaka::media::H264ByteToUnitStreamConverter::GetDecoderConfigurationRecord()'],['../db/df8/classshaka_1_1media_1_1H265ByteToUnitStreamConverter.html#a9a866e255a2b267f2b44d0156c479de9',1,'shaka::media::H265ByteToUnitStreamConverter::GetDecoderConfigurationRecord()'],['../de/dea/classshaka_1_1media_1_1H26xByteToUnitStreamConverter.html#a57f8a71d948f27303ba41dd5aafb5445',1,'shaka::media::H26xByteToUnitStreamConverter::GetDecoderConfigurationRecord()']]], ['getdecryptconfig',['GetDecryptConfig',['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#af1dbb0a9037617c2b80506ee161dfcfa',1,'shaka::media::mp4::TrackRunIterator']]], ['getdisplayresolution',['GetDisplayResolution',['../dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.html#a41e21fbf8da59e6c7a7cc273428a43bb',1,'shaka::hls::MediaPlaylist']]], @@ -26,7 +26,7 @@ var searchData= ['getindexrangestartandend',['GetIndexRangeStartAndEnd',['../d2/dd5/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter.html#a75b572a055a0de68bf2809f61b319526',1,'shaka::media::webm::MultiSegmentSegmenter::GetIndexRangeStartAndEnd()'],['../dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html#a3a6c1932e6c4894a61eb7230022bceb5',1,'shaka::media::webm::Segmenter::GetIndexRangeStartAndEnd()'],['../d3/da1/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter.html#a1708739c73c4565d5dfda6bedffd89a8',1,'shaka::media::webm::SingleSegmentSegmenter::GetIndexRangeStartAndEnd()']]], ['getinitrange',['GetInitRange',['../d8/db7/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html#a15f78aada048b15472d485b80875e838',1,'shaka::media::mp4::MultiSegmentSegmenter::GetInitRange()'],['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html#a3a1c6721aa53a124af8be50bb3f7599c',1,'shaka::media::mp4::Segmenter::GetInitRange()'],['../d0/dab/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html#a61e71cfc720342ecb16b830e6fca0fe4',1,'shaka::media::mp4::SingleSegmentSegmenter::GetInitRange()']]], ['getinitrangestartandend',['GetInitRangeStartAndEnd',['../d2/dd5/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter.html#ae88bf7cfee4a1ad12c6060310b8f464e',1,'shaka::media::webm::MultiSegmentSegmenter::GetInitRangeStartAndEnd()'],['../dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html#a611b919c82885b6bcfe39a1def78548c',1,'shaka::media::webm::Segmenter::GetInitRangeStartAndEnd()'],['../d3/da1/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter.html#ae1395bcb6fb255b2695766c1e85b1aa3',1,'shaka::media::webm::SingleSegmentSegmenter::GetInitRangeStartAndEnd()']]], - ['getkey',['GetKey',['../d0/dac/classshaka_1_1media_1_1FixedKeySource.html#a3ebb4d8fdafa7c3e241038f1f8c0ed7b',1,'shaka::media::FixedKeySource::GetKey(const std::string &stream_label, EncryptionKey *key) override'],['../d0/dac/classshaka_1_1media_1_1FixedKeySource.html#a58f9eae1ce9148a82f70118879b6c3f1',1,'shaka::media::FixedKeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) override'],['../d1/d1f/classshaka_1_1media_1_1KeySource.html#af56c833453d65297c4dc96c9d2f83e1a',1,'shaka::media::KeySource::GetKey(const std::string &stream_label, EncryptionKey *key)=0'],['../d1/d1f/classshaka_1_1media_1_1KeySource.html#ae33f2cdbd045572095acd7b8d6c1a789',1,'shaka::media::KeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key)=0'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#a0d2e038e477a5a2bc903292977fc65bd',1,'shaka::media::PlayReadyKeySource::GetKey(const std::string &stream_label, EncryptionKey *key) override'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#a41c393f477ff4b723aa448b35e9ee896',1,'shaka::media::PlayReadyKeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) override'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#ae7fa01a2f2f91e26e45b54146c929580',1,'shaka::media::WidevineKeySource::GetKey(const std::string &stream_label, EncryptionKey *key) override'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#a59699cd998290adae74e6596ba44fdc3',1,'shaka::media::WidevineKeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) override']]], + ['getkey',['GetKey',['../d1/d1f/classshaka_1_1media_1_1KeySource.html#af56c833453d65297c4dc96c9d2f83e1a',1,'shaka::media::KeySource::GetKey(const std::string &stream_label, EncryptionKey *key)=0'],['../d1/d1f/classshaka_1_1media_1_1KeySource.html#ae33f2cdbd045572095acd7b8d6c1a789',1,'shaka::media::KeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key)=0'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#a0d2e038e477a5a2bc903292977fc65bd',1,'shaka::media::PlayReadyKeySource::GetKey(const std::string &stream_label, EncryptionKey *key) override'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#a41c393f477ff4b723aa448b35e9ee896',1,'shaka::media::PlayReadyKeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) override'],['../db/dd0/classshaka_1_1media_1_1RawKeySource.html#a29b20968ba46f1ad3c206b8173fa6f7a',1,'shaka::media::RawKeySource::GetKey(const std::string &stream_label, EncryptionKey *key) override'],['../db/dd0/classshaka_1_1media_1_1RawKeySource.html#aa5b34dcc690e695f64846a8293335967',1,'shaka::media::RawKeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) override'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#ae7fa01a2f2f91e26e45b54146c929580',1,'shaka::media::WidevineKeySource::GetKey(const std::string &stream_label, EncryptionKey *key) override'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#a59699cd998290adae74e6596ba44fdc3',1,'shaka::media::WidevineKeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) override']]], ['getlanguage',['GetLanguage',['../dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.html#a21037c9ddcd8d5a2e5a048582e17bf33',1,'shaka::hls::MediaPlaylist']]], ['getlibraryversion',['GetLibraryVersion',['../db/dd0/classshaka_1_1Packager.html#a7bae5b5c202a716f5d890e70afae51b2',1,'shaka::Packager']]], ['getlongestsegmentduration',['GetLongestSegmentDuration',['../dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.html#ad69a0d67cfe55584efeaaf18f82b0bdc',1,'shaka::hls::MediaPlaylist']]], @@ -35,7 +35,7 @@ var searchData= ['getnextpespacket',['GetNextPesPacket',['../d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html#acf11010f62ab9d2b46308f2cce8b3650',1,'shaka::media::mp2t::PesPacketGenerator']]], ['getnumchannels',['GetNumChannels',['../d0/da2/classshaka_1_1media_1_1AACAudioSpecificConfig.html#abbe5493d7ea61fc5306de10378e8539a',1,'shaka::media::AACAudioSpecificConfig::GetNumChannels()'],['../d3/d0c/classshaka_1_1media_1_1mp2t_1_1AdtsHeader.html#aaa01e3eb1ce9d4400aedd202b04f7160',1,'shaka::media::mp2t::AdtsHeader::GetNumChannels()']]], ['getobjecttype',['GetObjectType',['../d3/d0c/classshaka_1_1media_1_1mp2t_1_1AdtsHeader.html#a156a3288ab974557e95dfaba72e6b479',1,'shaka::media::mp2t::AdtsHeader']]], - ['getoutputstreamdatavector',['GetOutputStreamDataVector',['../d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html#a019ed85bb6a06dde91fe0620f634bba0',1,'shaka::media::MediaHandlerTestBase']]], + ['getoutputstreamdatavector',['GetOutputStreamDataVector',['../d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.html#a1e8a80eb0e887af717527a0880d61417',1,'shaka::media::MediaHandlerGraphTestBase']]], ['getpps',['GetPps',['../de/dc2/classshaka_1_1media_1_1H265Parser.html#af4a103a131c849bf54018b747dbdd80c',1,'shaka::media::H265Parser']]], ['getrawptr',['GetRawPtr',['../d1/d31/classshaka_1_1xml_1_1XmlNode.html#aac9765712087dcc47a0afef4bf7849ff',1,'shaka::xml::XmlNode']]], ['getsamplespersecond',['GetSamplesPerSecond',['../d0/da2/classshaka_1_1media_1_1AACAudioSpecificConfig.html#a6bc219a717c8e2362fc1b24be3cf98a3',1,'shaka::media::AACAudioSpecificConfig']]], @@ -43,7 +43,7 @@ var searchData= ['getsps',['GetSps',['../de/dc2/classshaka_1_1media_1_1H265Parser.html#ab917855df00b9003c6be4612e2fe0211',1,'shaka::media::H265Parser']]], ['gettotalsizeofsubsamples',['GetTotalSizeOfSubsamples',['../de/d49/classshaka_1_1media_1_1DecryptConfig.html#a338024925bc46a2f65a058906cdcb4a3',1,'shaka::media::DecryptConfig::GetTotalSizeOfSubsamples()'],['../d6/dcb/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry.html#a870ef304f376ec0822686e1d78765bf2',1,'shaka::media::mp4::SampleEncryptionEntry::GetTotalSizeOfSubsamples()']]], ['getvideostreaminfo',['GetVideoStreamInfo',['../d3/d67/classshaka_1_1media_1_1WebMVideoClient.html#a305b6679d9cd2457a3a3ba72319a3249',1,'shaka::media::WebMVideoClient']]], - ['getvpcodecconfig',['GetVpCodecConfig',['../d3/d67/classshaka_1_1media_1_1WebMVideoClient.html#aa553acba4e9c70e92af5612b03b4daf3',1,'shaka::media::WebMVideoClient']]], + ['getvpcodecconfig',['GetVpCodecConfig',['../d3/d67/classshaka_1_1media_1_1WebMVideoClient.html#aea98a1f803ed3d710a5d39fae089c5ea',1,'shaka::media::WebMVideoClient']]], ['getxml',['GetXml',['../d8/d8e/classshaka_1_1AdaptationSet.html#af988e3a6d8b0d3ede66e3f3aea992d5e',1,'shaka::AdaptationSet::GetXml()'],['../de/d52/classshaka_1_1Representation.html#a606afa5df6a90f49faad0ce427b7e960',1,'shaka::Representation::GetXml()']]], ['group_5fid',['group_id',['../d9/dd2/structshaka_1_1WidevineEncryptionParams.html#a6d69402cd4c66d546be180c7800e6d09',1,'shaka::WidevineEncryptionParams']]] ]; diff --git a/docs/search/all_8.js b/docs/search/all_8.js index ec4db87fa6..6da38678fa 100644 --- a/docs/search/all_8.js +++ b/docs/search/all_8.js @@ -10,7 +10,7 @@ var searchData= ['initcb',['InitCB',['../d3/d0a/classshaka_1_1media_1_1MediaParser.html#aef5795d2b3df2526c6e8afe1e4d072bf',1,'shaka::media::MediaParser']]], ['initialize',['Initialize',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#aed0da512bbd998ec9d0a5c019ad17acb',1,'shaka::media::MediaHandler::Initialize()'],['../d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html#a27986db8a2e62669fe1983a39383c546',1,'shaka::media::NalUnitToByteStreamConverter::Initialize()'],['../dd/de4/classshaka_1_1media_1_1VideoSliceHeaderParser.html#a862422cdf78f370069055037338fa53d',1,'shaka::media::VideoSliceHeaderParser::Initialize()'],['../da/df0/classshaka_1_1media_1_1H264VideoSliceHeaderParser.html#a551bd1e2a852d1a3b23b77df8505b7f7',1,'shaka::media::H264VideoSliceHeaderParser::Initialize()'],['../d1/d79/classshaka_1_1media_1_1H265VideoSliceHeaderParser.html#a83a25520f713f4818a765ea3324a1438',1,'shaka::media::H265VideoSliceHeaderParser::Initialize()'],['../d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html#aa0346189f99b2f0fc2c71da1543155fa',1,'shaka::media::mp2t::PesPacketGenerator::Initialize()'],['../de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html#aac6e3950224709b78b9f1e054a8ca194',1,'shaka::media::mp2t::TsSegmenter::Initialize()'],['../de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html#a6bee605be771538f78633e2ecfc979c6',1,'shaka::media::mp2t::TsWriter::Initialize()'],['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html#acc2d4e58b3fa4b41a0637f52288d81d9',1,'shaka::media::mp4::Segmenter::Initialize()'],['../dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html#a32c8a682b36241529d0c302a023140d2',1,'shaka::media::webm::Segmenter::Initialize()'],['../db/dd0/classshaka_1_1Packager.html#ae40969a98da3a27a0b1633927afb3ce2',1,'shaka::Packager::Initialize()']]], ['initializefragment',['InitializeFragment',['../db/d95/classshaka_1_1media_1_1mp4_1_1Fragmenter.html#aa702c2af5ea5096d94f2943076a21e4a',1,'shaka::media::mp4::Fragmenter']]], - ['initializeinternal',['InitializeInternal',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a0e05325d62bfb66318301c1ed790a46e',1,'shaka::media::MediaHandler::InitializeInternal()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#af43db7170cd6b53aa937e0b68e210e25',1,'shaka::media::FakeMediaHandler::InitializeInternal()'],['../df/d46/classshaka_1_1media_1_1Muxer.html#a36882e12df5c5bfd48a7b94d1dfad857',1,'shaka::media::Muxer::InitializeInternal()'],['../d4/d43/classshaka_1_1media_1_1ChunkingHandler.html#a76a5f4b74da3876cc72f44301c389ebd',1,'shaka::media::ChunkingHandler::InitializeInternal()'],['../d6/d4c/classshaka_1_1media_1_1EncryptionHandler.html#a3f1808a4386081e5e1c9a798a1a69dd0',1,'shaka::media::EncryptionHandler::InitializeInternal()'],['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a7488d8ea312be5822c67f5b69a8dbd9f',1,'shaka::media::Demuxer::InitializeInternal()'],['../db/dea/classshaka_1_1media_1_1TrickPlayHandler.html#a3fd2fae199e0a9607e83e02724896c10',1,'shaka::media::TrickPlayHandler::InitializeInternal()']]], + ['initializeinternal',['InitializeInternal',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a0e05325d62bfb66318301c1ed790a46e',1,'shaka::media::MediaHandler::InitializeInternal()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#af43db7170cd6b53aa937e0b68e210e25',1,'shaka::media::FakeMediaHandler::InitializeInternal()'],['../df/d46/classshaka_1_1media_1_1Muxer.html#a36882e12df5c5bfd48a7b94d1dfad857',1,'shaka::media::Muxer::InitializeInternal()'],['../d4/d43/classshaka_1_1media_1_1ChunkingHandler.html#a76a5f4b74da3876cc72f44301c389ebd',1,'shaka::media::ChunkingHandler::InitializeInternal()'],['../d6/d4c/classshaka_1_1media_1_1EncryptionHandler.html#a3f1808a4386081e5e1c9a798a1a69dd0',1,'shaka::media::EncryptionHandler::InitializeInternal()'],['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a7488d8ea312be5822c67f5b69a8dbd9f',1,'shaka::media::Demuxer::InitializeInternal()']]], ['initializewithiv',['InitializeWithIv',['../df/d87/classshaka_1_1media_1_1AesCryptor.html#a41954df34b76b04d561892732dd0ec2f',1,'shaka::media::AesCryptor::InitializeWithIv()'],['../df/d2d/classshaka_1_1media_1_1AesCbcDecryptor.html#a71ff0b9654de96f9990b29c35fa9b7bf',1,'shaka::media::AesCbcDecryptor::InitializeWithIv()'],['../d3/d75/classshaka_1_1media_1_1AesEncryptor.html#a0695df5615cadf6977fdbac978daeffa',1,'shaka::media::AesEncryptor::InitializeWithIv()'],['../d3/dfe/classshaka_1_1media_1_1AesPatternCryptor.html#af878688f0f277f3f6757e85654439c34',1,'shaka::media::AesPatternCryptor::InitializeWithIv()']]], ['inject_5ffake_5fclock',['inject_fake_clock',['../d6/d62/structshaka_1_1TestParams.html#a90ba653c71c94709b8ef3e7c3cc07e6c',1,'shaka::TestParams']]], ['injectclockfortesting',['InjectClockForTesting',['../dc/da1/classshaka_1_1MpdBuilder.html#a7a4f96f12b589cfc4b5c2f44532eec53',1,'shaka::MpdBuilder']]], @@ -29,5 +29,5 @@ var searchData= ['issyncsample',['IsSyncSample',['../d7/d26/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator.html#a63e36297541bfc5f1568f74abf5512b1',1,'shaka::media::mp4::SyncSampleIterator::IsSyncSample() const '],['../d7/d26/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator.html#a0b6070fb8ab19e106595ecca86917715',1,'shaka::media::mp4::SyncSampleIterator::IsSyncSample(uint32_t sample) const ']]], ['isvalid',['IsValid',['../d9/d57/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator.html#a231ba71e0511c3efa3142acb43d7e8aa',1,'shaka::media::mp4::ChunkInfoIterator::IsValid()'],['../db/d4e/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator.html#ae3bf00a0597ca56dbef692f6eaebf2aa',1,'shaka::media::mp4::CompositionOffsetIterator::IsValid()'],['../d1/d20/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator.html#ae7becbbfd8328a0cd243cf9a8fc862df',1,'shaka::media::mp4::DecodingTimeIterator::IsValid()']]], ['isvalidconfig',['IsValidConfig',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#a3c50d026e8deadac46741143d4b5ddb9',1,'shaka::media::AudioStreamInfo::IsValidConfig()'],['../d5/db1/classshaka_1_1media_1_1StreamInfo.html#a6e5c5ade77b7bcf0b7822de568695dc8',1,'shaka::media::StreamInfo::IsValidConfig()'],['../db/dab/classshaka_1_1media_1_1TextStreamInfo.html#ab40aed17c046e639efde04a2075e25a8',1,'shaka::media::TextStreamInfo::IsValidConfig()'],['../d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html#a8978ca2bc2dd63c2e25e77cdcf676162',1,'shaka::media::VideoStreamInfo::IsValidConfig()']]], - ['iv',['iv',['../df/d22/structshaka_1_1WidevineSigner.html#a6db96d4c3f1189bbd09515732bec94d9',1,'shaka::WidevineSigner::iv()'],['../d0/d5d/structshaka_1_1RawKeyEncryptionParams.html#a2b8b36d5dd357a6b354de194bc3fb702',1,'shaka::RawKeyEncryptionParams::iv()'],['../df/d87/classshaka_1_1media_1_1AesCryptor.html#a96dde16f12a82a563c77f6d5522571f3',1,'shaka::media::AesCryptor::iv()']]] + ['iv',['iv',['../df/d22/structshaka_1_1WidevineSigner.html#a6db96d4c3f1189bbd09515732bec94d9',1,'shaka::WidevineSigner::iv()'],['../d0/db4/structshaka_1_1RawKeyParams.html#aab733ab6920dd8fbed523810e64ea3f1',1,'shaka::RawKeyParams::iv()'],['../df/d87/classshaka_1_1media_1_1AesCryptor.html#a96dde16f12a82a563c77f6d5522571f3',1,'shaka::media::AesCryptor::iv()']]] ]; diff --git a/docs/search/all_9.js b/docs/search/all_9.js index 062b7f7b3d..39843f97c0 100644 --- a/docs/search/all_9.js +++ b/docs/search/all_9.js @@ -7,12 +7,11 @@ var searchData= ['kencryptifcryptbyteblockremaining',['kEncryptIfCryptByteBlockRemaining',['../d3/dfe/classshaka_1_1media_1_1AesPatternCryptor.html#a54fd35d7782d3b4948c7eb68387711f0a76b19d202e22b2b0f661f933b47b3b16',1,'shaka::media::AesPatternCryptor']]], ['key',['key',['../df/d22/structshaka_1_1WidevineSigner.html#ad5c378d29df509280d8697f986163324',1,'shaka::WidevineSigner::key()'],['../df/d22/structshaka_1_1WidevineSigner.html#a25bb558aa06563d24c3d7f9733ff8898',1,'shaka::WidevineSigner::key()'],['../d3/df5/structshaka_1_1PlayreadyEncryptionParams.html#a2ba545b465d64da1ac9458ba45338f76',1,'shaka::PlayreadyEncryptionParams::key()']]], ['key_5fid',['key_id',['../d3/df5/structshaka_1_1PlayreadyEncryptionParams.html#a872107e40137be5a6c1f932db67c2a9d',1,'shaka::PlayreadyEncryptionParams']]], - ['key_5fmap',['key_map',['../d0/d5d/structshaka_1_1RawKeyEncryptionParams.html#a70893a2ff3b6fc74fd53e9b00f2a023d',1,'shaka::RawKeyEncryptionParams::key_map()'],['../d9/da8/structshaka_1_1RawKeyDecryptionParams.html#a1ed59af3d5fe891e05acb4ee59ff6dc1',1,'shaka::RawKeyDecryptionParams::key_map()']]], + ['key_5fmap',['key_map',['../d0/db4/structshaka_1_1RawKeyParams.html#a14e44fed95583d0bb319c082fb1ddb84',1,'shaka::RawKeyParams']]], ['key_5fprovider',['key_provider',['../dc/da0/structshaka_1_1EncryptionParams.html#adcf61ebf8d129a5bcf3f159b9b076eed',1,'shaka::EncryptionParams::key_provider()'],['../d1/d4f/structshaka_1_1DecryptionParams.html#ad93d153f9e777cccb6404611d5b4d339',1,'shaka::DecryptionParams::key_provider()']]], ['key_5fserver_5furl',['key_server_url',['../d9/dd2/structshaka_1_1WidevineEncryptionParams.html#ac222c5bd0620e5a6f9bf5e9fec534fb9',1,'shaka::WidevineEncryptionParams::key_server_url()'],['../d3/df5/structshaka_1_1PlayreadyEncryptionParams.html#a3a31b3002f86834b1799279bf5b5fc11',1,'shaka::PlayreadyEncryptionParams::key_server_url()'],['../d8/d48/structshaka_1_1WidevineDecryptionParams.html#adb765979bcc7f63ce46c9ed6ead1ee5b',1,'shaka::WidevineDecryptionParams::key_server_url()']]], ['keyfetcher',['KeyFetcher',['../df/d66/classshaka_1_1media_1_1KeyFetcher.html',1,'shaka::media']]], - ['keypair',['KeyPair',['../df/d5d/structshaka_1_1RawKeyEncryptionParams_1_1KeyPair.html',1,'shaka::RawKeyEncryptionParams']]], - ['keypair',['KeyPair',['../d8/d8b/structshaka_1_1RawKeyDecryptionParams_1_1KeyPair.html',1,'shaka::RawKeyDecryptionParams']]], + ['keyinfo',['KeyInfo',['../d0/dbe/structshaka_1_1RawKeyParams_1_1KeyInfo.html',1,'shaka::RawKeyParams']]], ['keyprovider',['KeyProvider',['../d8/daf/namespaceshaka.html#a539b99ce5c34193e294bc544437e9185',1,'shaka']]], ['keysource',['KeySource',['../d1/d1f/classshaka_1_1media_1_1KeySource.html',1,'shaka::media']]], ['knokeyrotation',['kNoKeyRotation',['../dc/da0/structshaka_1_1EncryptionParams.html#a92ad4ca8e1ccb7d6b5fa2ee0b1b196fa',1,'shaka::EncryptionParams']]], diff --git a/docs/search/all_b.js b/docs/search/all_b.js index c6e45bce78..f9ced53374 100644 --- a/docs/search/all_b.js +++ b/docs/search/all_b.js @@ -10,6 +10,7 @@ var searchData= ['mediadata',['MediaData',['../d7/dae/structshaka_1_1media_1_1mp4_1_1MediaData.html',1,'shaka::media::mp4']]], ['mediaevent',['MediaEvent',['../df/dd3/structshaka_1_1media_1_1MediaEvent.html',1,'shaka::media']]], ['mediahandler',['MediaHandler',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html',1,'shaka::media']]], + ['mediahandlergraphtestbase',['MediaHandlerGraphTestBase',['../d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.html',1,'shaka::media']]], ['mediahandlertestbase',['MediaHandlerTestBase',['../d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html',1,'shaka::media']]], ['mediaheader',['MediaHeader',['../d4/db9/structshaka_1_1media_1_1mp4_1_1MediaHeader.html',1,'shaka::media::mp4']]], ['mediainformation',['MediaInformation',['../d5/d86/structshaka_1_1media_1_1mp4_1_1MediaInformation.html',1,'shaka::media::mp4']]], @@ -30,6 +31,7 @@ var searchData= ['mockmpdbuilder',['MockMpdBuilder',['../df/d60/classshaka_1_1MockMpdBuilder.html',1,'shaka']]], ['mockmpdnotifier',['MockMpdNotifier',['../dc/d5c/classshaka_1_1MockMpdNotifier.html',1,'shaka']]], ['mockmuxerlistener',['MockMuxerListener',['../dc/d73/classshaka_1_1media_1_1MockMuxerListener.html',1,'shaka::media']]], + ['mockoutputmediahandler',['MockOutputMediaHandler',['../de/db2/classshaka_1_1media_1_1MockOutputMediaHandler.html',1,'shaka::media']]], ['mockrepresentation',['MockRepresentation',['../d0/d33/classshaka_1_1MockRepresentation.html',1,'shaka']]], ['movie',['Movie',['../d0/d9a/structshaka_1_1media_1_1mp4_1_1Movie.html',1,'shaka::media::mp4']]], ['movieextends',['MovieExtends',['../d1/d3e/structshaka_1_1media_1_1mp4_1_1MovieExtends.html',1,'shaka::media::mp4']]], @@ -51,8 +53,8 @@ var searchData= ['mpdbuilder',['MpdBuilder',['../dc/da1/classshaka_1_1MpdBuilder.html#ab364102e01afedd8a4dcc9be4fdcc0ab',1,'shaka::MpdBuilder']]], ['mpdnotifier',['MpdNotifier',['../d3/dd0/classshaka_1_1MpdNotifier.html',1,'shaka']]], ['mpdnotifierfactory',['MpdNotifierFactory',['../d4/db4/classshaka_1_1MpdNotifierFactory.html',1,'shaka']]], - ['mpdnotifymuxerlistener',['MpdNotifyMuxerListener',['../d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html',1,'shaka::media']]], ['mpdnotifymuxerlistener',['MpdNotifyMuxerListener',['../d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html#a6912e6cfc341c1a768d214ce08bb0f82',1,'shaka::media::MpdNotifyMuxerListener']]], + ['mpdnotifymuxerlistener',['MpdNotifyMuxerListener',['../d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html',1,'shaka::media']]], ['mpdoptions',['MpdOptions',['../d1/df3/structshaka_1_1MpdOptions.html',1,'shaka']]], ['mpdparams',['MpdParams',['../df/ddc/structshaka_1_1MpdParams.html',1,'shaka']]], ['mpdwriter',['MpdWriter',['../db/dcd/classshaka_1_1MpdWriter.html',1,'shaka']]], diff --git a/docs/search/all_c.js b/docs/search/all_c.js index bca0e40862..314188d726 100644 --- a/docs/search/all_c.js +++ b/docs/search/all_c.js @@ -9,7 +9,7 @@ var searchData= ['nalureader',['NaluReader',['../db/d86/classshaka_1_1media_1_1NaluReader.html#a2d1611fe3e60fc6570fe0c21e13911b0',1,'shaka::media::NaluReader::NaluReader(Nalu::CodecType type, uint8_t nal_length_size, const uint8_t *stream, uint64_t stream_size)'],['../db/d86/classshaka_1_1media_1_1NaluReader.html#a6890eb05c83bb540af84494ed0590c6b',1,'shaka::media::NaluReader::NaluReader(Nalu::CodecType type, uint8_t nal_length_size, const uint8_t *stream, uint64_t stream_size, const std::vector< SubsampleEntry > &subsamples)']]], ['newsamplecb',['NewSampleCB',['../d3/d0a/classshaka_1_1media_1_1MediaParser.html#a3a1f87fb3ed95a9cbd2b6873326a1a4c',1,'shaka::media::MediaParser']]], ['newsegment',['NewSegment',['../de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html#a9ba30b9cc1e4ae2992735709ae987c64',1,'shaka::media::mp2t::TsWriter']]], - ['next_5fhandler',['next_handler',['../d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html#a00edfa6e4ab0371cdb823b72cb884306',1,'shaka::media::MediaHandlerTestBase']]], + ['next_5fhandler',['next_handler',['../d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.html#a2a152f99cdc93823694f958d045f374d',1,'shaka::media::MediaHandlerGraphTestBase']]], ['notifyencryptionupdate',['NotifyEncryptionUpdate',['../d9/deb/classshaka_1_1hls_1_1HlsNotifier.html#a310fadabce7f3ac4a3313631340b880f',1,'shaka::hls::HlsNotifier::NotifyEncryptionUpdate()'],['../d7/d5c/classshaka_1_1hls_1_1SimpleHlsNotifier.html#ac2df072e5fbfcbf172319222a180e73d',1,'shaka::hls::SimpleHlsNotifier::NotifyEncryptionUpdate()'],['../d4/d70/classshaka_1_1DashIopMpdNotifier.html#a093eac08e6fdc396e6bbcbc58d35a3c3',1,'shaka::DashIopMpdNotifier::NotifyEncryptionUpdate()'],['../d3/dd0/classshaka_1_1MpdNotifier.html#acf6a0bde4fc907053cc9f1ff9a38b59a',1,'shaka::MpdNotifier::NotifyEncryptionUpdate()'],['../d8/de1/classshaka_1_1SimpleMpdNotifier.html#ae1a1231fb13e0bc97cdea5fc239184bf',1,'shaka::SimpleMpdNotifier::NotifyEncryptionUpdate()']]], ['notifynewcontainer',['NotifyNewContainer',['../d4/d70/classshaka_1_1DashIopMpdNotifier.html#af86163b8fc680ea659e6ba2d2c5d6db7',1,'shaka::DashIopMpdNotifier::NotifyNewContainer()'],['../d3/dd0/classshaka_1_1MpdNotifier.html#ae10c06fe6022a1020fc889de389be430',1,'shaka::MpdNotifier::NotifyNewContainer()'],['../d8/de1/classshaka_1_1SimpleMpdNotifier.html#a3f4aabd86ec08e5ff427120ed39fda29',1,'shaka::SimpleMpdNotifier::NotifyNewContainer()']]], ['notifynewsegment',['NotifyNewSegment',['../d9/deb/classshaka_1_1hls_1_1HlsNotifier.html#af5a0d6670313d81eff20bb959732a2cd',1,'shaka::hls::HlsNotifier::NotifyNewSegment()'],['../d7/d5c/classshaka_1_1hls_1_1SimpleHlsNotifier.html#afab88a610a6d2ac8b21dd86a456c2c06',1,'shaka::hls::SimpleHlsNotifier::NotifyNewSegment()'],['../d4/d70/classshaka_1_1DashIopMpdNotifier.html#ad2561d25eb7ace9b919ef8b96d4a06a7',1,'shaka::DashIopMpdNotifier::NotifyNewSegment()'],['../d3/dd0/classshaka_1_1MpdNotifier.html#a100236a249477afcda4f50e4914f0eee',1,'shaka::MpdNotifier::NotifyNewSegment()'],['../d8/de1/classshaka_1_1SimpleMpdNotifier.html#a640f5455a6d64063c364b81a8a6e878a',1,'shaka::SimpleMpdNotifier::NotifyNewSegment()']]], diff --git a/docs/search/all_d.js b/docs/search/all_d.js index 1bc06693ee..a45fc17f6a 100644 --- a/docs/search/all_d.js +++ b/docs/search/all_d.js @@ -4,7 +4,7 @@ var searchData= ['onencryptioninfoready',['OnEncryptionInfoReady',['../d9/d68/classshaka_1_1media_1_1CombinedMuxerListener.html#a445b97bf06c20a44ae5d0fef926cbd9f',1,'shaka::media::CombinedMuxerListener::OnEncryptionInfoReady()'],['../d5/dfa/classshaka_1_1media_1_1HlsNotifyMuxerListener.html#a8be7a524212bdd401150aa6bcb374792',1,'shaka::media::HlsNotifyMuxerListener::OnEncryptionInfoReady()'],['../d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html#a10071445982f736bb1e6e04133dd60cb',1,'shaka::media::MpdNotifyMuxerListener::OnEncryptionInfoReady()'],['../dd/d7a/classshaka_1_1media_1_1MuxerListener.html#ab521acca727bbe01aa15c751325c0001',1,'shaka::media::MuxerListener::OnEncryptionInfoReady()'],['../db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html#a683882564ac762e2e94795964f8be4b8',1,'shaka::media::VodMediaInfoDumpMuxerListener::OnEncryptionInfoReady()']]], ['onencryptionstart',['OnEncryptionStart',['../d9/d68/classshaka_1_1media_1_1CombinedMuxerListener.html#a40a2b9e923b6a6e255ee5632bffc1134',1,'shaka::media::CombinedMuxerListener::OnEncryptionStart()'],['../d5/dfa/classshaka_1_1media_1_1HlsNotifyMuxerListener.html#a49b4187f39abe517768364f7ecb280f9',1,'shaka::media::HlsNotifyMuxerListener::OnEncryptionStart()'],['../d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html#a56ccf04196458894f31d0db102153334',1,'shaka::media::MpdNotifyMuxerListener::OnEncryptionStart()'],['../dd/d7a/classshaka_1_1media_1_1MuxerListener.html#a897463091f0effa647a8e2822f48b2ee',1,'shaka::media::MuxerListener::OnEncryptionStart()'],['../db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html#ae8f6f65fbab9f301be5bb35f5b8d1cbc',1,'shaka::media::VodMediaInfoDumpMuxerListener::OnEncryptionStart()']]], ['oneof',['OneOf',['../d0/d37/unionshaka_1_1EncryptionParams_1_1EncryptedStreamAttributes_1_1OneOf.html',1,'shaka::EncryptionParams::EncryptedStreamAttributes']]], - ['onflushrequest',['OnFlushRequest',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a69a31b8ec1b85fd4790c7c2013c69a73',1,'shaka::media::MediaHandler::OnFlushRequest()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#a3f82edd4474f20464224e881dd20fdb0',1,'shaka::media::FakeMediaHandler::OnFlushRequest()'],['../df/d46/classshaka_1_1media_1_1Muxer.html#a9f08c1385506636b800769480869e04f',1,'shaka::media::Muxer::OnFlushRequest()'],['../d4/d43/classshaka_1_1media_1_1ChunkingHandler.html#ab526bd53e4d49d7209f01d9b10b9ab52',1,'shaka::media::ChunkingHandler::OnFlushRequest()'],['../db/dea/classshaka_1_1media_1_1TrickPlayHandler.html#a9a6c29c88fdeb667d5592142d6815bfa',1,'shaka::media::TrickPlayHandler::OnFlushRequest()']]], + ['onflushrequest',['OnFlushRequest',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a69a31b8ec1b85fd4790c7c2013c69a73',1,'shaka::media::MediaHandler::OnFlushRequest()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#a3f82edd4474f20464224e881dd20fdb0',1,'shaka::media::FakeMediaHandler::OnFlushRequest()'],['../df/d46/classshaka_1_1media_1_1Muxer.html#a9f08c1385506636b800769480869e04f',1,'shaka::media::Muxer::OnFlushRequest()'],['../d4/d43/classshaka_1_1media_1_1ChunkingHandler.html#ab526bd53e4d49d7209f01d9b10b9ab52',1,'shaka::media::ChunkingHandler::OnFlushRequest()']]], ['onliststart',['OnListStart',['../d9/d87/classshaka_1_1media_1_1WebMContentEncodingsClient.html#a7b8b5447b3d573657f6dc029d2e6d8b7',1,'shaka::media::WebMContentEncodingsClient']]], ['onmediaend',['OnMediaEnd',['../d9/d68/classshaka_1_1media_1_1CombinedMuxerListener.html#aaf16580970d5e65d33c80cb9e8a57651',1,'shaka::media::CombinedMuxerListener::OnMediaEnd()'],['../d5/dfa/classshaka_1_1media_1_1HlsNotifyMuxerListener.html#aa2af080963ca02454786b8bb2ff6dd6d',1,'shaka::media::HlsNotifyMuxerListener::OnMediaEnd()'],['../dc/d73/classshaka_1_1media_1_1MockMuxerListener.html#a915fc76c19622d7e82aa74dd996edacd',1,'shaka::media::MockMuxerListener::OnMediaEnd()'],['../d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html#aa42f5472d5450d897f036ff582a31612',1,'shaka::media::MpdNotifyMuxerListener::OnMediaEnd()'],['../dd/d7a/classshaka_1_1media_1_1MuxerListener.html#a11d4301cd53ab421f524bfa143eac21a',1,'shaka::media::MuxerListener::OnMediaEnd()'],['../db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html#ab2ab9bc34256f8016f0e827097b97ca1',1,'shaka::media::VodMediaInfoDumpMuxerListener::OnMediaEnd()']]], ['onmediaendparameters',['OnMediaEndParameters',['../db/db8/structshaka_1_1media_1_1OnMediaEndParameters.html',1,'shaka::media']]], diff --git a/docs/search/all_e.js b/docs/search/all_e.js index d8aa3b789c..cd1fe84504 100644 --- a/docs/search/all_e.js +++ b/docs/search/all_e.js @@ -38,9 +38,10 @@ var searchData= ['preparechildren',['PrepareChildren',['../d1/da1/classshaka_1_1media_1_1mp4_1_1BoxBuffer.html#a29158ec9769dafbdcf1192abf9a2aa2a',1,'shaka::media::mp4::BoxBuffer']]], ['prevsampledata',['PrevSampleData',['../d2/d0f/structshaka_1_1media_1_1wvm_1_1PrevSampleData.html',1,'shaka::media::wvm']]], ['printerror',['PrintError',['../d8/daf/namespaceshaka.html#a54fadd9c7ef14b39cd0355a5c269c772',1,'shaka']]], + ['printwarning',['PrintWarning',['../d8/daf/namespaceshaka.html#a42273d2ca4220d3de00a759a711e385e',1,'shaka']]], ['private_5fframe',['private_frame',['../d3/dad/structshaka_1_1media_1_1mp4_1_1ID3v2.html#a33c145fa8ed1417799dce66a94f8e95c',1,'shaka::media::mp4::ID3v2']]], ['privframe',['PrivFrame',['../d3/d47/structshaka_1_1media_1_1mp4_1_1PrivFrame.html',1,'shaka::media::mp4']]], - ['process',['Process',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#acb614e9f43e1eb6f837801b15b78c0b4',1,'shaka::media::MediaHandler::Process()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#af9fa42669591a52b8fa1a62d27ed93d6',1,'shaka::media::FakeMediaHandler::Process()'],['../df/d46/classshaka_1_1media_1_1Muxer.html#aec730b070245231a0887787005c06eee',1,'shaka::media::Muxer::Process()'],['../d4/d43/classshaka_1_1media_1_1ChunkingHandler.html#a44c30ffd7c283be2ba4347bda7848633',1,'shaka::media::ChunkingHandler::Process()'],['../d6/d4c/classshaka_1_1media_1_1EncryptionHandler.html#a7887e6060eb572036674ecb9a7e045c4',1,'shaka::media::EncryptionHandler::Process()'],['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a869b21d13f02d4d5c0519f9eb35117cd',1,'shaka::media::Demuxer::Process()'],['../db/dea/classshaka_1_1media_1_1TrickPlayHandler.html#afdd13bb4e762c4b904ed75b268359757',1,'shaka::media::TrickPlayHandler::Process()']]], + ['process',['Process',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#acb614e9f43e1eb6f837801b15b78c0b4',1,'shaka::media::MediaHandler::Process()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#af9fa42669591a52b8fa1a62d27ed93d6',1,'shaka::media::FakeMediaHandler::Process()'],['../df/d46/classshaka_1_1media_1_1Muxer.html#aec730b070245231a0887787005c06eee',1,'shaka::media::Muxer::Process()'],['../d4/d43/classshaka_1_1media_1_1ChunkingHandler.html#a44c30ffd7c283be2ba4347bda7848633',1,'shaka::media::ChunkingHandler::Process()'],['../d6/d4c/classshaka_1_1media_1_1EncryptionHandler.html#a7887e6060eb572036674ecb9a7e045c4',1,'shaka::media::EncryptionHandler::Process()'],['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a869b21d13f02d4d5c0519f9eb35117cd',1,'shaka::media::Demuxer::Process()']]], ['producerconsumerqueue',['ProducerConsumerQueue',['../d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html#ad7ccb149baa88e5f8356be18344d2baf',1,'shaka::media::ProducerConsumerQueue::ProducerConsumerQueue(size_t capacity)'],['../d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html#a80ff75afdbbf7f567dcb57a755542ffc',1,'shaka::media::ProducerConsumerQueue::ProducerConsumerQueue(size_t capacity, size_t starting_pos)']]], ['producerconsumerqueue',['ProducerConsumerQueue',['../d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html',1,'shaka::media']]], ['program_5fidentifier',['program_identifier',['../d3/df5/structshaka_1_1PlayreadyEncryptionParams.html#a74199b0293ca77eaac30aea53a9ec2aa',1,'shaka::PlayreadyEncryptionParams']]], @@ -49,7 +50,7 @@ var searchData= ['protectionschemeinfo',['ProtectionSchemeInfo',['../da/de9/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html',1,'shaka::media::mp4']]], ['protectionsystemspecificheader',['ProtectionSystemSpecificHeader',['../d0/d3c/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html',1,'shaka::media::mp4']]], ['protectionsystemspecificinfo',['ProtectionSystemSpecificInfo',['../d0/dd4/classshaka_1_1media_1_1ProtectionSystemSpecificInfo.html',1,'shaka::media']]], - ['pssh',['pssh',['../d0/d5d/structshaka_1_1RawKeyEncryptionParams.html#add60228a75eee66b051e2cc7ceeb4b01',1,'shaka::RawKeyEncryptionParams']]], + ['pssh',['pssh',['../d0/db4/structshaka_1_1RawKeyParams.html#a448b8c435fc86d4fbc85214e523f2ac5',1,'shaka::RawKeyParams']]], ['pts',['pts',['../d2/d93/classshaka_1_1media_1_1mp2t_1_1PesPacket.html#a5c02473f77069810be154a13c7cdcc66',1,'shaka::media::mp2t::PesPacket']]], ['push',['Push',['../d7/dda/classshaka_1_1media_1_1ByteQueue.html#acea792e406efe5119cec2e3e522e02c2',1,'shaka::media::ByteQueue::Push()'],['../d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html#a6eaf80daa8c96b0157f5fcd9763dbec1',1,'shaka::media::ProducerConsumerQueue::Push()']]], ['pushcue',['PushCue',['../de/ddd/classshaka_1_1media_1_1WebVttSampleConverter.html#a651f604362b1dd2660a6fbcdacb75331',1,'shaka::media::WebVttSampleConverter']]], diff --git a/docs/search/all_f.js b/docs/search/all_f.js index a8add2766c..09d65ae945 100644 --- a/docs/search/all_f.js +++ b/docs/search/all_f.js @@ -1,8 +1,8 @@ var searchData= [ ['range',['Range',['../d9/de0/structshaka_1_1media_1_1Range.html',1,'shaka::media']]], - ['rawkeydecryptionparams',['RawKeyDecryptionParams',['../d9/da8/structshaka_1_1RawKeyDecryptionParams.html',1,'shaka']]], - ['rawkeyencryptionparams',['RawKeyEncryptionParams',['../d0/d5d/structshaka_1_1RawKeyEncryptionParams.html',1,'shaka']]], + ['rawkeyparams',['RawKeyParams',['../d0/db4/structshaka_1_1RawKeyParams.html',1,'shaka']]], + ['rawkeysource',['RawKeySource',['../db/dd0/classshaka_1_1media_1_1RawKeySource.html',1,'shaka::media']]], ['read',['Read',['../dd/d40/classshaka_1_1CallbackFile.html#a867e0c5eaf81a41902e1370deb912617',1,'shaka::CallbackFile::Read()'],['../d3/d73/classshaka_1_1File.html#a6e1ecb2904b609554d332290f20fde0a',1,'shaka::File::Read()'],['../df/d4e/classshaka_1_1IoCache.html#a7cc144c2f848725db08b3ca175475fc2',1,'shaka::IoCache::Read()'],['../d7/dbd/classshaka_1_1LocalFile.html#a27c3bf51fe18ebc10bf42ebcec20c9cb',1,'shaka::LocalFile::Read()'],['../de/dad/classshaka_1_1MemoryFile.html#aeacb3b7f72e0c412bd0cba8a6f1ed62f',1,'shaka::MemoryFile::Read()'],['../dd/d0c/classshaka_1_1ThreadedIoFile.html#af45702d95d4e46e93b1f4a897844212e',1,'shaka::ThreadedIoFile::Read()'],['../d4/dcb/classshaka_1_1UdpFile.html#a74d352b51d543905abd4a12687e1bb98',1,'shaka::UdpFile::Read()']]], ['read1',['Read1',['../d9/d13/classshaka_1_1media_1_1BufferReader.html#a65b65ad5a5ebc9d66182c38ec9876c05',1,'shaka::media::BufferReader']]], ['read_5ffunc',['read_func',['../d9/da8/structshaka_1_1BufferCallbackParams.html#a6e6e97682ba2be686a2d1e9b62d26e13',1,'shaka::BufferCallbackParams']]], @@ -23,6 +23,7 @@ var searchData= ['readysamplessize',['ReadySamplesSize',['../de/ddd/classshaka_1_1media_1_1WebVttSampleConverter.html#a3b0e60f307c5ea57d232216eced6af76',1,'shaka::media::WebVttSampleConverter']]], ['release',['Release',['../d1/d31/classshaka_1_1xml_1_1XmlNode.html#ae5cb2c3000ccbd53c0a1867db0b8a2d0',1,'shaka::xml::XmlNode']]], ['reopen',['Reopen',['../df/d4e/classshaka_1_1IoCache.html#ac2c7cbec6d771de00fe0cfe0b7d0e454',1,'shaka::IoCache']]], + ['replicator',['Replicator',['../d3/d1a/classshaka_1_1media_1_1Replicator.html',1,'shaka::media']]], ['representation',['Representation',['../de/d52/classshaka_1_1Representation.html#a997138fcaa5deef5151a64a2d7ce6aeb',1,'shaka::Representation']]], ['representation',['Representation',['../de/d52/classshaka_1_1Representation.html',1,'shaka']]], ['representationbasexmlnode',['RepresentationBaseXmlNode',['../dd/db9/classshaka_1_1xml_1_1RepresentationBaseXmlNode.html',1,'shaka::xml']]], diff --git a/docs/search/classes_5.js b/docs/search/classes_5.js index 529daf776a..f1c5a8e069 100644 --- a/docs/search/classes_5.js +++ b/docs/search/classes_5.js @@ -1,10 +1,10 @@ var searchData= [ + ['fakeinputmediahandler',['FakeInputMediaHandler',['../d3/d1e/classshaka_1_1media_1_1FakeInputMediaHandler.html',1,'shaka::media']]], ['fakemediahandler',['FakeMediaHandler',['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html',1,'shaka::media']]], ['file',['File',['../d3/d73/classshaka_1_1File.html',1,'shaka']]], ['filecloser',['FileCloser',['../d3/de2/structshaka_1_1FileCloser.html',1,'shaka']]], ['filetype',['FileType',['../d5/d03/structshaka_1_1media_1_1mp4_1_1FileType.html',1,'shaka::media::mp4']]], - ['fixedkeysource',['FixedKeySource',['../d0/dac/classshaka_1_1media_1_1FixedKeySource.html',1,'shaka::media']]], ['fragmenter',['Fragmenter',['../db/d95/classshaka_1_1media_1_1mp4_1_1Fragmenter.html',1,'shaka::media::mp4']]], ['fullbox',['FullBox',['../dd/dc1/structshaka_1_1media_1_1mp4_1_1FullBox.html',1,'shaka::media::mp4']]] ]; diff --git a/docs/search/classes_8.js b/docs/search/classes_8.js index 53054fdd3d..a8a70b03ca 100644 --- a/docs/search/classes_8.js +++ b/docs/search/classes_8.js @@ -1,7 +1,6 @@ var searchData= [ ['keyfetcher',['KeyFetcher',['../df/d66/classshaka_1_1media_1_1KeyFetcher.html',1,'shaka::media']]], - ['keypair',['KeyPair',['../df/d5d/structshaka_1_1RawKeyEncryptionParams_1_1KeyPair.html',1,'shaka::RawKeyEncryptionParams']]], - ['keypair',['KeyPair',['../d8/d8b/structshaka_1_1RawKeyDecryptionParams_1_1KeyPair.html',1,'shaka::RawKeyDecryptionParams']]], + ['keyinfo',['KeyInfo',['../d0/dbe/structshaka_1_1RawKeyParams_1_1KeyInfo.html',1,'shaka::RawKeyParams']]], ['keysource',['KeySource',['../d1/d1f/classshaka_1_1media_1_1KeySource.html',1,'shaka::media']]] ]; diff --git a/docs/search/classes_a.js b/docs/search/classes_a.js index fefd5a7746..8e49ea8158 100644 --- a/docs/search/classes_a.js +++ b/docs/search/classes_a.js @@ -5,6 +5,7 @@ var searchData= ['mediadata',['MediaData',['../d7/dae/structshaka_1_1media_1_1mp4_1_1MediaData.html',1,'shaka::media::mp4']]], ['mediaevent',['MediaEvent',['../df/dd3/structshaka_1_1media_1_1MediaEvent.html',1,'shaka::media']]], ['mediahandler',['MediaHandler',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html',1,'shaka::media']]], + ['mediahandlergraphtestbase',['MediaHandlerGraphTestBase',['../d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.html',1,'shaka::media']]], ['mediahandlertestbase',['MediaHandlerTestBase',['../d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html',1,'shaka::media']]], ['mediaheader',['MediaHeader',['../d4/db9/structshaka_1_1media_1_1mp4_1_1MediaHeader.html',1,'shaka::media::mp4']]], ['mediainformation',['MediaInformation',['../d5/d86/structshaka_1_1media_1_1mp4_1_1MediaInformation.html',1,'shaka::media::mp4']]], @@ -21,6 +22,7 @@ var searchData= ['mockmpdbuilder',['MockMpdBuilder',['../df/d60/classshaka_1_1MockMpdBuilder.html',1,'shaka']]], ['mockmpdnotifier',['MockMpdNotifier',['../dc/d5c/classshaka_1_1MockMpdNotifier.html',1,'shaka']]], ['mockmuxerlistener',['MockMuxerListener',['../dc/d73/classshaka_1_1media_1_1MockMuxerListener.html',1,'shaka::media']]], + ['mockoutputmediahandler',['MockOutputMediaHandler',['../de/db2/classshaka_1_1media_1_1MockOutputMediaHandler.html',1,'shaka::media']]], ['mockrepresentation',['MockRepresentation',['../d0/d33/classshaka_1_1MockRepresentation.html',1,'shaka']]], ['movie',['Movie',['../d0/d9a/structshaka_1_1media_1_1mp4_1_1Movie.html',1,'shaka::media::mp4']]], ['movieextends',['MovieExtends',['../d1/d3e/structshaka_1_1media_1_1mp4_1_1MovieExtends.html',1,'shaka::media::mp4']]], diff --git a/docs/search/classes_e.js b/docs/search/classes_e.js index a15c7888c6..6c68bf5769 100644 --- a/docs/search/classes_e.js +++ b/docs/search/classes_e.js @@ -1,8 +1,9 @@ var searchData= [ ['range',['Range',['../d9/de0/structshaka_1_1media_1_1Range.html',1,'shaka::media']]], - ['rawkeydecryptionparams',['RawKeyDecryptionParams',['../d9/da8/structshaka_1_1RawKeyDecryptionParams.html',1,'shaka']]], - ['rawkeyencryptionparams',['RawKeyEncryptionParams',['../d0/d5d/structshaka_1_1RawKeyEncryptionParams.html',1,'shaka']]], + ['rawkeyparams',['RawKeyParams',['../d0/db4/structshaka_1_1RawKeyParams.html',1,'shaka']]], + ['rawkeysource',['RawKeySource',['../db/dd0/classshaka_1_1media_1_1RawKeySource.html',1,'shaka::media']]], + ['replicator',['Replicator',['../d3/d1a/classshaka_1_1media_1_1Replicator.html',1,'shaka::media']]], ['representation',['Representation',['../de/d52/classshaka_1_1Representation.html',1,'shaka']]], ['representationbasexmlnode',['RepresentationBaseXmlNode',['../dd/db9/classshaka_1_1xml_1_1RepresentationBaseXmlNode.html',1,'shaka::xml']]], ['representationstatechangelistener',['RepresentationStateChangeListener',['../df/d94/classshaka_1_1RepresentationStateChangeListener.html',1,'shaka']]], diff --git a/docs/search/classes_f.js b/docs/search/classes_f.js index c5fadf8c10..6d7857088e 100644 --- a/docs/search/classes_f.js +++ b/docs/search/classes_f.js @@ -14,8 +14,8 @@ var searchData= ['schemeinfo',['SchemeInfo',['../d2/d70/structshaka_1_1media_1_1mp4_1_1SchemeInfo.html',1,'shaka::media::mp4']]], ['schemetype',['SchemeType',['../d3/da2/structshaka_1_1media_1_1mp4_1_1SchemeType.html',1,'shaka::media::mp4']]], ['seekhead',['SeekHead',['../dc/d16/classshaka_1_1media_1_1SeekHead.html',1,'shaka::media']]], - ['segmenter',['Segmenter',['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html',1,'shaka::media::mp4']]], ['segmenter',['Segmenter',['../dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html',1,'shaka::media::webm']]], + ['segmenter',['Segmenter',['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html',1,'shaka::media::mp4']]], ['segmentindex',['SegmentIndex',['../d4/df9/structshaka_1_1media_1_1mp4_1_1SegmentIndex.html',1,'shaka::media::mp4']]], ['segmentinfo',['SegmentInfo',['../d0/dc0/structshaka_1_1media_1_1SegmentInfo.html',1,'shaka::media']]], ['segmentinfo',['SegmentInfo',['../dc/de1/structshaka_1_1SegmentInfo.html',1,'shaka']]], diff --git a/docs/search/functions_10.js b/docs/search/functions_10.js index 4fa345154e..ccb1ac7fdf 100644 --- a/docs/search/functions_10.js +++ b/docs/search/functions_10.js @@ -8,6 +8,7 @@ var searchData= ['textstreaminfo',['TextStreamInfo',['../db/dab/classshaka_1_1media_1_1TextStreamInfo.html#a3e759066195689154ef2a8cf2825ea4b',1,'shaka::media::TextStreamInfo']]], ['tostring',['ToString',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#a7f94e51abcf522ff70e2456a8c8595df',1,'shaka::media::AudioStreamInfo::ToString()'],['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#aa3cbd9fee3a228403c3128be5141a614',1,'shaka::media::MediaSample::ToString()'],['../d5/db1/classshaka_1_1media_1_1StreamInfo.html#aa11d2fe5509ebfdc038aa3f2cdbbe00d',1,'shaka::media::StreamInfo::ToString()'],['../d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html#a9cac8e75d76f1192a48d1dcf61435537',1,'shaka::media::VideoStreamInfo::ToString()'],['../dc/da1/classshaka_1_1MpdBuilder.html#af7eae5cc11141eed2b5451d969e57db6',1,'shaka::MpdBuilder::ToString()'],['../d2/d20/classshaka_1_1Status.html#a5b9c6f6e38d23dc6839bd275b0d15500',1,'shaka::Status::ToString()']]], ['trackruniterator',['TrackRunIterator',['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#a743961add0060500509c3fc74ffd26ab',1,'shaka::media::mp4::TrackRunIterator']]], + ['transferdata',['TransferData',['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#a5402405ad4abb5102078d047972a56fa',1,'shaka::media::MediaSample']]], ['trim',['Trim',['../d9/df9/classshaka_1_1media_1_1OffsetByteQueue.html#a77b9a12145dad80df95845bd2b66b6a8',1,'shaka::media::OffsetByteQueue']]], ['tryreadchild',['TryReadChild',['../d1/dee/classshaka_1_1media_1_1mp4_1_1BoxReader.html#a1a4457e9638e8cf3fb30b0031b513cec',1,'shaka::media::mp4::BoxReader']]], ['tryreadchildren',['TryReadChildren',['../d1/dee/classshaka_1_1media_1_1mp4_1_1BoxReader.html#a3da91efd030e0d85a889b2c02fe96bea',1,'shaka::media::mp4::BoxReader']]], diff --git a/docs/search/functions_12.js b/docs/search/functions_12.js index 2d327ec993..537ae9b794 100644 --- a/docs/search/functions_12.js +++ b/docs/search/functions_12.js @@ -1,9 +1,9 @@ var searchData= [ - ['validatefixedcryptoflags',['ValidateFixedCryptoFlags',['../d8/daf/namespaceshaka.html#abc3f498491fb895860ebdee359935d93',1,'shaka']]], ['validateflag',['ValidateFlag',['../d8/daf/namespaceshaka.html#a952293a7213f285843f28b7363ee14d6',1,'shaka']]], - ['validateoutputstreamindex',['ValidateOutputStreamIndex',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a71df357be46c02dc0e71b2eabb034c10',1,'shaka::media::MediaHandler::ValidateOutputStreamIndex()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#ae07a2472011c4246fe7f3e69d328c873',1,'shaka::media::FakeMediaHandler::ValidateOutputStreamIndex()'],['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a908f4c9bb410d1528b85e2c7f824deb6',1,'shaka::media::Demuxer::ValidateOutputStreamIndex()'],['../db/dea/classshaka_1_1media_1_1TrickPlayHandler.html#addbe1be8281bceb8e84df865424dded3',1,'shaka::media::TrickPlayHandler::ValidateOutputStreamIndex()']]], + ['validateoutputstreamindex',['ValidateOutputStreamIndex',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a71df357be46c02dc0e71b2eabb034c10',1,'shaka::media::MediaHandler::ValidateOutputStreamIndex()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#ae07a2472011c4246fe7f3e69d328c873',1,'shaka::media::FakeMediaHandler::ValidateOutputStreamIndex()'],['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a908f4c9bb410d1528b85e2c7f824deb6',1,'shaka::media::Demuxer::ValidateOutputStreamIndex()']]], ['validateprcryptoflags',['ValidatePRCryptoFlags',['../d8/daf/namespaceshaka.html#a8b6212ccc4b98e5fdb72f84acf252c6b',1,'shaka']]], + ['validaterawkeycryptoflags',['ValidateRawKeyCryptoFlags',['../d8/daf/namespaceshaka.html#ab611f8e843f4834b9d7c30db212a946e',1,'shaka']]], ['validatewidevinecryptoflags',['ValidateWidevineCryptoFlags',['../d8/daf/namespaceshaka.html#ade3cbb360c0dcaacc5667676af885008',1,'shaka']]], ['verifysignature',['VerifySignature',['../d9/d0c/classshaka_1_1media_1_1RsaPublicKey.html#a146cc97c8fcacadde1b08c373b766fe4',1,'shaka::media::RsaPublicKey']]], ['video_5fdescription',['video_description',['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#aee813f01267e89ff00fdb836bb3a159d',1,'shaka::media::mp4::TrackRunIterator']]], diff --git a/docs/search/functions_2.js b/docs/search/functions_2.js index c7f649cbab..b5061b24e2 100644 --- a/docs/search/functions_2.js +++ b/docs/search/functions_2.js @@ -6,9 +6,9 @@ var searchData= ['childexist',['ChildExist',['../d1/dee/classshaka_1_1media_1_1mp4_1_1BoxReader.html#aa65236a6b94ac59d5da409412992211c',1,'shaka::media::mp4::BoxReader']]], ['chunkinfoiterator',['ChunkInfoIterator',['../d9/d57/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator.html#adae19e8f34f3f962e9858c67f984445d',1,'shaka::media::mp4::ChunkInfoIterator']]], ['clear',['Clear',['../df/d4e/classshaka_1_1IoCache.html#a10c8e56478fe7bc4c30ea0087eb22804',1,'shaka::IoCache::Clear()'],['../d2/d20/classshaka_1_1Status.html#a022f6fc5d4756ce2cb2b586d8c40f145',1,'shaka::Status::Clear()']]], - ['clearoutputstreamdatavector',['ClearOutputStreamDataVector',['../d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html#a7a600a18a6dec0d32b75c292dc634474',1,'shaka::media::MediaHandlerTestBase']]], + ['clearoutputstreamdatavector',['ClearOutputStreamDataVector',['../d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.html#a051758e3cfa419622565e65a08fd8a00',1,'shaka::media::MediaHandlerGraphTestBase']]], ['clearsegmentpmt',['ClearSegmentPmt',['../dc/d03/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter.html#abaf3df0bbb1b6ff5655d04b828d2889b',1,'shaka::media::mp2t::ProgramMapTableWriter::ClearSegmentPmt()'],['../de/d27/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter.html#a8f439af49b3144f892102c235fb51169',1,'shaka::media::mp2t::H264ProgramMapTableWriter::ClearSegmentPmt()'],['../d4/dc8/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter.html#aa6d50f3f1249bbf7c1d27608bfb9334f',1,'shaka::media::mp2t::AacProgramMapTableWriter::ClearSegmentPmt()']]], - ['clone',['Clone',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#a306c5ebb4a42eced7d1a3deaad23c17b',1,'shaka::media::AudioStreamInfo::Clone()'],['../d5/db1/classshaka_1_1media_1_1StreamInfo.html#afdd9b2df8ae1c11bb033c44eaba5e38d',1,'shaka::media::StreamInfo::Clone()'],['../db/dab/classshaka_1_1media_1_1TextStreamInfo.html#aa8cfad62fa0186a4f82a8dc43ee1c96d',1,'shaka::media::TextStreamInfo::Clone()'],['../d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html#a0d62499eaf37fe6df75f35beaebf71f1',1,'shaka::media::VideoStreamInfo::Clone()']]], + ['clone',['Clone',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#a306c5ebb4a42eced7d1a3deaad23c17b',1,'shaka::media::AudioStreamInfo::Clone()'],['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#a6b055c68dd0b2425ec5ba524b8a05b73',1,'shaka::media::MediaSample::Clone()'],['../d5/db1/classshaka_1_1media_1_1StreamInfo.html#afdd9b2df8ae1c11bb033c44eaba5e38d',1,'shaka::media::StreamInfo::Clone()'],['../db/dab/classshaka_1_1media_1_1TextStreamInfo.html#aa8cfad62fa0186a4f82a8dc43ee1c96d',1,'shaka::media::TextStreamInfo::Clone()'],['../d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html#a0d62499eaf37fe6df75f35beaebf71f1',1,'shaka::media::VideoStreamInfo::Clone()']]], ['close',['Close',['../dd/d40/classshaka_1_1CallbackFile.html#aac23ef04e5bafef7d5b4c5d7a3fcfbb5',1,'shaka::CallbackFile::Close()'],['../d3/d73/classshaka_1_1File.html#a932666ed1d6a565bf387a9d8b39a8948',1,'shaka::File::Close()'],['../df/d4e/classshaka_1_1IoCache.html#a1c54ca1d747cf0b0b9ab681babff73e6',1,'shaka::IoCache::Close()'],['../d7/dbd/classshaka_1_1LocalFile.html#a3d881c251c19a36eaf50483971095370',1,'shaka::LocalFile::Close()'],['../de/dad/classshaka_1_1MemoryFile.html#a4cfe38684f4fdde650a2ed7fdc780f05',1,'shaka::MemoryFile::Close()'],['../dd/d0c/classshaka_1_1ThreadedIoFile.html#a79292b93c39f609b5348787a39fc77b2',1,'shaka::ThreadedIoFile::Close()'],['../d4/dcb/classshaka_1_1UdpFile.html#a61cdb937b3a996bb8b054679d98df812',1,'shaka::UdpFile::Close()'],['../d1/d0a/classshaka_1_1media_1_1MkvWriter.html#af560b12e0298ca3dcd8f88fddff1443b',1,'shaka::media::MkvWriter::Close()']]], ['closed',['closed',['../df/d4e/classshaka_1_1IoCache.html#a69c0074123339c9c60dec6a27a5c085c',1,'shaka::IoCache']]], ['closurethread',['ClosureThread',['../dc/df0/classshaka_1_1media_1_1ClosureThread.html#a480ff10ca3ff9de7f9ed9582d305281f',1,'shaka::media::ClosureThread']]], @@ -23,8 +23,8 @@ var searchData= ['convertunittobytestreamwithsubsamples',['ConvertUnitToByteStreamWithSubsamples',['../d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html#ae727e801c989d3ede17f1d1bd86a4ab4',1,'shaka::media::NalUnitToByteStreamConverter']]], ['copy',['Copy',['../d3/d73/classshaka_1_1File.html#af2cbec5c6dc1c97ada010acd83b9728a',1,'shaka::File']]], ['copyfile',['CopyFile',['../d3/d73/classshaka_1_1File.html#a85633ec9f051eb9f32b07ff7e7740d1c',1,'shaka::File::CopyFile(File *source, File *destination)'],['../d3/d73/classshaka_1_1File.html#a07e2d2f98597320f71fb96dff74cfcb2',1,'shaka::File::CopyFile(File *source, File *destination, int64_t max_copy)']]], - ['copyfrom',['CopyFrom',['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#ad8975dbb21747ff32c8604f5489bf5c9',1,'shaka::media::MediaSample::CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)'],['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#a910e68f46b9464e4ea36cf9cd5116b55',1,'shaka::media::MediaSample::CopyFrom(const uint8_t *data, size_t size, const uint8_t *side_data, size_t side_data_size, bool is_key_frame)'],['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#a311a7302af6405531ebafa04d877d160',1,'shaka::media::MediaSample::CopyFrom(const MediaSample &media_sample)']]], - ['create',['Create',['../d0/dac/classshaka_1_1media_1_1FixedKeySource.html#aebde54a272565d4b81a1139ea35fab63',1,'shaka::media::FixedKeySource::Create()'],['../d0/dce/classshaka_1_1media_1_1RsaPrivateKey.html#aef45d0014d7971b936ce3d0109935ba8',1,'shaka::media::RsaPrivateKey::Create()'],['../d9/d0c/classshaka_1_1media_1_1RsaPublicKey.html#aabe4a2f1541ca1e741305f58329e3881',1,'shaka::media::RsaPublicKey::Create()']]], + ['copyfrom',['CopyFrom',['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#ad8975dbb21747ff32c8604f5489bf5c9',1,'shaka::media::MediaSample::CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)'],['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#a910e68f46b9464e4ea36cf9cd5116b55',1,'shaka::media::MediaSample::CopyFrom(const uint8_t *data, size_t size, const uint8_t *side_data, size_t side_data_size, bool is_key_frame)']]], + ['create',['Create',['../db/dd0/classshaka_1_1media_1_1RawKeySource.html#aea32604de0ad9489731d188c50e7accf',1,'shaka::media::RawKeySource::Create()'],['../d0/dce/classshaka_1_1media_1_1RsaPrivateKey.html#aef45d0014d7971b936ce3d0109935ba8',1,'shaka::media::RsaPrivateKey::Create()'],['../d9/d0c/classshaka_1_1media_1_1RsaPublicKey.html#aabe4a2f1541ca1e741305f58329e3881',1,'shaka::media::RsaPublicKey::Create()']]], ['createandinitializesegmenter',['CreateAndInitializeSegmenter',['../d2/dba/classshaka_1_1media_1_1SegmentTestBase.html#a31a8a73bfd233a7226f91ac6af28b033',1,'shaka::media::SegmentTestBase']]], ['createbox',['CreateBox',['../d0/dd4/classshaka_1_1media_1_1ProtectionSystemSpecificInfo.html#af9b917cb91b6c10ee7a6f5b41fc7e0d9',1,'shaka::media::ProtectionSystemSpecificInfo']]], ['createemptymediasample',['CreateEmptyMediaSample',['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#a4a7f8d79f9ec3cd3df9a395eef71f0c6',1,'shaka::media::MediaSample']]], diff --git a/docs/search/functions_3.js b/docs/search/functions_3.js index 67a1399cd4..a8b7fcd0ff 100644 --- a/docs/search/functions_3.js +++ b/docs/search/functions_3.js @@ -6,6 +6,8 @@ var searchData= ['decodingtimeiterator',['DecodingTimeIterator',['../d1/d20/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator.html#aa2b6f0a9697cfd606bfe95b5377c953e',1,'shaka::media::mp4::DecodingTimeIterator']]], ['decrypt',['Decrypt',['../d0/dce/classshaka_1_1media_1_1RsaPrivateKey.html#a89a475ffe2d96bfab09536b864038ca4',1,'shaka::media::RsaPrivateKey']]], ['decryptconfig',['DecryptConfig',['../de/d49/classshaka_1_1media_1_1DecryptConfig.html#a24035bb6edcb3aaaa9923bf385376ae5',1,'shaka::media::DecryptConfig::DecryptConfig(const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &iv, const std::vector< SubsampleEntry > &subsamples)'],['../de/d49/classshaka_1_1media_1_1DecryptConfig.html#ab2dfe0a2ee285539843ac55b5f1ac7c7',1,'shaka::media::DecryptConfig::DecryptConfig(const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &iv, const std::vector< SubsampleEntry > &subsamples, FourCC protection_scheme, uint8_t crypt_byte_block, uint8_t skip_byte_block)']]], + ['decryptorsource',['DecryptorSource',['../d7/d59/classshaka_1_1media_1_1DecryptorSource.html#a045c97bdeb9996d6003ac926849880c8',1,'shaka::media::DecryptorSource']]], + ['decryptsamplebuffer',['DecryptSampleBuffer',['../d7/d59/classshaka_1_1media_1_1DecryptorSource.html#a8a1bd6a5a63b3f3c54028b43dfc67a6d',1,'shaka::media::DecryptorSource']]], ['defaultstreamlabelfunction',['DefaultStreamLabelFunction',['../db/dd0/classshaka_1_1Packager.html#a59fec4e3f33138081e5222d3553ab948',1,'shaka::Packager']]], ['delete',['Delete',['../d3/d73/classshaka_1_1File.html#a383c9f670511961f334569fd1a7a103b',1,'shaka::File::Delete()'],['../d7/dbd/classshaka_1_1LocalFile.html#a7eb47bb6ceff52c57e3eb4a21fb0ba8d',1,'shaka::LocalFile::Delete()'],['../de/dad/classshaka_1_1MemoryFile.html#a3ac9c9e8e3a31ef8f70a904384f89bed',1,'shaka::MemoryFile::Delete()']]], ['deleteall',['DeleteAll',['../de/dad/classshaka_1_1MemoryFile.html#acd947572c2bbe3595b403a483c82e899',1,'shaka::MemoryFile']]], diff --git a/docs/search/functions_5.js b/docs/search/functions_5.js index 3c2d59c6a1..4b4c4d5344 100644 --- a/docs/search/functions_5.js +++ b/docs/search/functions_5.js @@ -1,6 +1,6 @@ var searchData= [ - ['fetchkeys',['FetchKeys',['../d0/dac/classshaka_1_1media_1_1FixedKeySource.html#a5cd8641873f213b826fc32e1c0026041',1,'shaka::media::FixedKeySource::FetchKeys()'],['../d7/de0/classshaka_1_1media_1_1HttpKeyFetcher.html#ab8e9b01fac00aa5dafb8983acd7a297b',1,'shaka::media::HttpKeyFetcher::FetchKeys()'],['../df/d66/classshaka_1_1media_1_1KeyFetcher.html#aa3c6011a0dd7c8e7f53dbaf48b92718d',1,'shaka::media::KeyFetcher::FetchKeys()'],['../d1/d1f/classshaka_1_1media_1_1KeySource.html#a38dc8e7c48f86e2b3ab3c1ffe0d7916f',1,'shaka::media::KeySource::FetchKeys()'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#a6311482a3f3ddec70da595f0dc1580ae',1,'shaka::media::PlayReadyKeySource::FetchKeys()'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#aeea3e62921c176aa6be1f0a95f03b6cf',1,'shaka::media::WidevineKeySource::FetchKeys(EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) override'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#a6fb9680be887d3b9367e015029f909f2',1,'shaka::media::WidevineKeySource::FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy)']]], + ['fetchkeys',['FetchKeys',['../d7/de0/classshaka_1_1media_1_1HttpKeyFetcher.html#ab8e9b01fac00aa5dafb8983acd7a297b',1,'shaka::media::HttpKeyFetcher::FetchKeys()'],['../df/d66/classshaka_1_1media_1_1KeyFetcher.html#aa3c6011a0dd7c8e7f53dbaf48b92718d',1,'shaka::media::KeyFetcher::FetchKeys()'],['../d1/d1f/classshaka_1_1media_1_1KeySource.html#a38dc8e7c48f86e2b3ab3c1ffe0d7916f',1,'shaka::media::KeySource::FetchKeys()'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#a6311482a3f3ddec70da595f0dc1580ae',1,'shaka::media::PlayReadyKeySource::FetchKeys()'],['../db/dd0/classshaka_1_1media_1_1RawKeySource.html#a0849f7000c4ab37139cc9c9ea1a031f3',1,'shaka::media::RawKeySource::FetchKeys()'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#aeea3e62921c176aa6be1f0a95f03b6cf',1,'shaka::media::WidevineKeySource::FetchKeys(EmeInitDataType init_data_type, const std::vector< uint8_t > &init_data) override'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#a6fb9680be887d3b9367e015029f909f2',1,'shaka::media::WidevineKeySource::FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy)']]], ['file_5fname',['file_name',['../d3/d73/classshaka_1_1File.html#a463be34c40e47f95510e991678b34605',1,'shaka::File']]], ['finalize',['Finalize',['../de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html#ac92da7c996e2a270fd704facc8f7a149',1,'shaka::media::mp2t::TsSegmenter::Finalize()'],['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html#a464a30159b8888a54254356d191947ac',1,'shaka::media::mp4::Segmenter::Finalize()'],['../dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html#aa84782877f1afaf9519a552ac3d5d417',1,'shaka::media::webm::Segmenter::Finalize()']]], ['finalizefragment',['FinalizeFragment',['../db/d95/classshaka_1_1media_1_1mp4_1_1Fragmenter.html#ae943e13eb86d54cffb7174d4513e4541',1,'shaka::media::mp4::Fragmenter']]], diff --git a/docs/search/functions_6.js b/docs/search/functions_6.js index eba331a070..988f239514 100644 --- a/docs/search/functions_6.js +++ b/docs/search/functions_6.js @@ -12,7 +12,7 @@ var searchData= ['getaudiostreaminfo',['GetAudioStreamInfo',['../d3/d7c/classshaka_1_1media_1_1WebMAudioClient.html#a0fcbddd20199044f860331b3bd9ef3b8',1,'shaka::media::WebMAudioClient']]], ['getcodecstring',['GetCodecString',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#aee79e7aa61b741bb96f451c6de1c9d42',1,'shaka::media::AudioStreamInfo::GetCodecString()'],['../d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html#a66b23ef2de8b851482628fefafafce17',1,'shaka::media::AVCDecoderConfigurationRecord::GetCodecString(FourCC codec_fourcc) const '],['../d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html#a30a6df8df89c670fd4c8894b8bacffa9',1,'shaka::media::AVCDecoderConfigurationRecord::GetCodecString(FourCC codec_fourcc, uint8_t profile_indication, uint8_t profile_compatibility, uint8_t avc_level)'],['../d4/d8a/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord.html#aa612802ce249bdff2cd4a8b50a05268c',1,'shaka::media::HEVCDecoderConfigurationRecord::GetCodecString()'],['../d1/da5/classshaka_1_1media_1_1VPCodecConfigurationRecord.html#a86b48fb506b476538a7440d9ccf9a533',1,'shaka::media::VPCodecConfigurationRecord::GetCodecString()']]], ['getcontenttype',['GetContentType',['../d8/daf/namespaceshaka.html#a5ea880937da26d677ff6a48c0219d090',1,'shaka']]], - ['getcryptoperiodkey',['GetCryptoPeriodKey',['../d0/dac/classshaka_1_1media_1_1FixedKeySource.html#a1161732d3310177256ff0eed1f877e38',1,'shaka::media::FixedKeySource::GetCryptoPeriodKey()'],['../d1/d1f/classshaka_1_1media_1_1KeySource.html#a34340247a575bc693d14c3bef9102258',1,'shaka::media::KeySource::GetCryptoPeriodKey()'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#af53a97f0812b07e766c83e128b807c01',1,'shaka::media::PlayReadyKeySource::GetCryptoPeriodKey()'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#a783cd4a9bf35fe2a7a610806bfda8e62',1,'shaka::media::WidevineKeySource::GetCryptoPeriodKey()']]], + ['getcryptoperiodkey',['GetCryptoPeriodKey',['../d1/d1f/classshaka_1_1media_1_1KeySource.html#a34340247a575bc693d14c3bef9102258',1,'shaka::media::KeySource::GetCryptoPeriodKey()'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#af53a97f0812b07e766c83e128b807c01',1,'shaka::media::PlayReadyKeySource::GetCryptoPeriodKey()'],['../db/dd0/classshaka_1_1media_1_1RawKeySource.html#aa5b50bc57ebd9691db6fbed256cd763e',1,'shaka::media::RawKeySource::GetCryptoPeriodKey()'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#a783cd4a9bf35fe2a7a610806bfda8e62',1,'shaka::media::WidevineKeySource::GetCryptoPeriodKey()']]], ['getdecoderconfigurationrecord',['GetDecoderConfigurationRecord',['../d8/d08/classshaka_1_1media_1_1H264ByteToUnitStreamConverter.html#a6a7a73841ded1942364f88aad90dcbc9',1,'shaka::media::H264ByteToUnitStreamConverter::GetDecoderConfigurationRecord()'],['../db/df8/classshaka_1_1media_1_1H265ByteToUnitStreamConverter.html#a9a866e255a2b267f2b44d0156c479de9',1,'shaka::media::H265ByteToUnitStreamConverter::GetDecoderConfigurationRecord()'],['../de/dea/classshaka_1_1media_1_1H26xByteToUnitStreamConverter.html#a57f8a71d948f27303ba41dd5aafb5445',1,'shaka::media::H26xByteToUnitStreamConverter::GetDecoderConfigurationRecord()']]], ['getdecryptconfig',['GetDecryptConfig',['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#af1dbb0a9037617c2b80506ee161dfcfa',1,'shaka::media::mp4::TrackRunIterator']]], ['getdisplayresolution',['GetDisplayResolution',['../dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.html#a41e21fbf8da59e6c7a7cc273428a43bb',1,'shaka::hls::MediaPlaylist']]], @@ -24,7 +24,7 @@ var searchData= ['getindexrangestartandend',['GetIndexRangeStartAndEnd',['../d2/dd5/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter.html#a75b572a055a0de68bf2809f61b319526',1,'shaka::media::webm::MultiSegmentSegmenter::GetIndexRangeStartAndEnd()'],['../dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html#a3a6c1932e6c4894a61eb7230022bceb5',1,'shaka::media::webm::Segmenter::GetIndexRangeStartAndEnd()'],['../d3/da1/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter.html#a1708739c73c4565d5dfda6bedffd89a8',1,'shaka::media::webm::SingleSegmentSegmenter::GetIndexRangeStartAndEnd()']]], ['getinitrange',['GetInitRange',['../d8/db7/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html#a15f78aada048b15472d485b80875e838',1,'shaka::media::mp4::MultiSegmentSegmenter::GetInitRange()'],['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html#a3a1c6721aa53a124af8be50bb3f7599c',1,'shaka::media::mp4::Segmenter::GetInitRange()'],['../d0/dab/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html#a61e71cfc720342ecb16b830e6fca0fe4',1,'shaka::media::mp4::SingleSegmentSegmenter::GetInitRange()']]], ['getinitrangestartandend',['GetInitRangeStartAndEnd',['../d2/dd5/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter.html#ae88bf7cfee4a1ad12c6060310b8f464e',1,'shaka::media::webm::MultiSegmentSegmenter::GetInitRangeStartAndEnd()'],['../dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html#a611b919c82885b6bcfe39a1def78548c',1,'shaka::media::webm::Segmenter::GetInitRangeStartAndEnd()'],['../d3/da1/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter.html#ae1395bcb6fb255b2695766c1e85b1aa3',1,'shaka::media::webm::SingleSegmentSegmenter::GetInitRangeStartAndEnd()']]], - ['getkey',['GetKey',['../d0/dac/classshaka_1_1media_1_1FixedKeySource.html#a3ebb4d8fdafa7c3e241038f1f8c0ed7b',1,'shaka::media::FixedKeySource::GetKey(const std::string &stream_label, EncryptionKey *key) override'],['../d0/dac/classshaka_1_1media_1_1FixedKeySource.html#a58f9eae1ce9148a82f70118879b6c3f1',1,'shaka::media::FixedKeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) override'],['../d1/d1f/classshaka_1_1media_1_1KeySource.html#af56c833453d65297c4dc96c9d2f83e1a',1,'shaka::media::KeySource::GetKey(const std::string &stream_label, EncryptionKey *key)=0'],['../d1/d1f/classshaka_1_1media_1_1KeySource.html#ae33f2cdbd045572095acd7b8d6c1a789',1,'shaka::media::KeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key)=0'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#a0d2e038e477a5a2bc903292977fc65bd',1,'shaka::media::PlayReadyKeySource::GetKey(const std::string &stream_label, EncryptionKey *key) override'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#a41c393f477ff4b723aa448b35e9ee896',1,'shaka::media::PlayReadyKeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) override'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#ae7fa01a2f2f91e26e45b54146c929580',1,'shaka::media::WidevineKeySource::GetKey(const std::string &stream_label, EncryptionKey *key) override'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#a59699cd998290adae74e6596ba44fdc3',1,'shaka::media::WidevineKeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) override']]], + ['getkey',['GetKey',['../d1/d1f/classshaka_1_1media_1_1KeySource.html#af56c833453d65297c4dc96c9d2f83e1a',1,'shaka::media::KeySource::GetKey(const std::string &stream_label, EncryptionKey *key)=0'],['../d1/d1f/classshaka_1_1media_1_1KeySource.html#ae33f2cdbd045572095acd7b8d6c1a789',1,'shaka::media::KeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key)=0'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#a0d2e038e477a5a2bc903292977fc65bd',1,'shaka::media::PlayReadyKeySource::GetKey(const std::string &stream_label, EncryptionKey *key) override'],['../d4/da6/classshaka_1_1media_1_1PlayReadyKeySource.html#a41c393f477ff4b723aa448b35e9ee896',1,'shaka::media::PlayReadyKeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) override'],['../db/dd0/classshaka_1_1media_1_1RawKeySource.html#a29b20968ba46f1ad3c206b8173fa6f7a',1,'shaka::media::RawKeySource::GetKey(const std::string &stream_label, EncryptionKey *key) override'],['../db/dd0/classshaka_1_1media_1_1RawKeySource.html#aa5b34dcc690e695f64846a8293335967',1,'shaka::media::RawKeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) override'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#ae7fa01a2f2f91e26e45b54146c929580',1,'shaka::media::WidevineKeySource::GetKey(const std::string &stream_label, EncryptionKey *key) override'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#a59699cd998290adae74e6596ba44fdc3',1,'shaka::media::WidevineKeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) override']]], ['getlanguage',['GetLanguage',['../dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.html#a21037c9ddcd8d5a2e5a048582e17bf33',1,'shaka::hls::MediaPlaylist']]], ['getlibraryversion',['GetLibraryVersion',['../db/dd0/classshaka_1_1Packager.html#a7bae5b5c202a716f5d890e70afae51b2',1,'shaka::Packager']]], ['getlongestsegmentduration',['GetLongestSegmentDuration',['../dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.html#ad69a0d67cfe55584efeaaf18f82b0bdc',1,'shaka::hls::MediaPlaylist']]], @@ -33,7 +33,7 @@ var searchData= ['getnextpespacket',['GetNextPesPacket',['../d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html#acf11010f62ab9d2b46308f2cce8b3650',1,'shaka::media::mp2t::PesPacketGenerator']]], ['getnumchannels',['GetNumChannels',['../d0/da2/classshaka_1_1media_1_1AACAudioSpecificConfig.html#abbe5493d7ea61fc5306de10378e8539a',1,'shaka::media::AACAudioSpecificConfig::GetNumChannels()'],['../d3/d0c/classshaka_1_1media_1_1mp2t_1_1AdtsHeader.html#aaa01e3eb1ce9d4400aedd202b04f7160',1,'shaka::media::mp2t::AdtsHeader::GetNumChannels()']]], ['getobjecttype',['GetObjectType',['../d3/d0c/classshaka_1_1media_1_1mp2t_1_1AdtsHeader.html#a156a3288ab974557e95dfaba72e6b479',1,'shaka::media::mp2t::AdtsHeader']]], - ['getoutputstreamdatavector',['GetOutputStreamDataVector',['../d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html#a019ed85bb6a06dde91fe0620f634bba0',1,'shaka::media::MediaHandlerTestBase']]], + ['getoutputstreamdatavector',['GetOutputStreamDataVector',['../d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.html#a1e8a80eb0e887af717527a0880d61417',1,'shaka::media::MediaHandlerGraphTestBase']]], ['getpps',['GetPps',['../de/dc2/classshaka_1_1media_1_1H265Parser.html#af4a103a131c849bf54018b747dbdd80c',1,'shaka::media::H265Parser']]], ['getrawptr',['GetRawPtr',['../d1/d31/classshaka_1_1xml_1_1XmlNode.html#aac9765712087dcc47a0afef4bf7849ff',1,'shaka::xml::XmlNode']]], ['getsamplespersecond',['GetSamplesPerSecond',['../d0/da2/classshaka_1_1media_1_1AACAudioSpecificConfig.html#a6bc219a717c8e2362fc1b24be3cf98a3',1,'shaka::media::AACAudioSpecificConfig']]], @@ -41,6 +41,6 @@ var searchData= ['getsps',['GetSps',['../de/dc2/classshaka_1_1media_1_1H265Parser.html#ab917855df00b9003c6be4612e2fe0211',1,'shaka::media::H265Parser']]], ['gettotalsizeofsubsamples',['GetTotalSizeOfSubsamples',['../de/d49/classshaka_1_1media_1_1DecryptConfig.html#a338024925bc46a2f65a058906cdcb4a3',1,'shaka::media::DecryptConfig::GetTotalSizeOfSubsamples()'],['../d6/dcb/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry.html#a870ef304f376ec0822686e1d78765bf2',1,'shaka::media::mp4::SampleEncryptionEntry::GetTotalSizeOfSubsamples()']]], ['getvideostreaminfo',['GetVideoStreamInfo',['../d3/d67/classshaka_1_1media_1_1WebMVideoClient.html#a305b6679d9cd2457a3a3ba72319a3249',1,'shaka::media::WebMVideoClient']]], - ['getvpcodecconfig',['GetVpCodecConfig',['../d3/d67/classshaka_1_1media_1_1WebMVideoClient.html#aa553acba4e9c70e92af5612b03b4daf3',1,'shaka::media::WebMVideoClient']]], + ['getvpcodecconfig',['GetVpCodecConfig',['../d3/d67/classshaka_1_1media_1_1WebMVideoClient.html#aea98a1f803ed3d710a5d39fae089c5ea',1,'shaka::media::WebMVideoClient']]], ['getxml',['GetXml',['../d8/d8e/classshaka_1_1AdaptationSet.html#af988e3a6d8b0d3ede66e3f3aea992d5e',1,'shaka::AdaptationSet::GetXml()'],['../de/d52/classshaka_1_1Representation.html#a606afa5df6a90f49faad0ce427b7e960',1,'shaka::Representation::GetXml()']]] ]; diff --git a/docs/search/functions_8.js b/docs/search/functions_8.js index 39ee22bc20..f7700c2381 100644 --- a/docs/search/functions_8.js +++ b/docs/search/functions_8.js @@ -5,7 +5,7 @@ var searchData= ['init',['Init',['../d9/deb/classshaka_1_1hls_1_1HlsNotifier.html#a8bd9273a1893899036e640c1e35fbaff',1,'shaka::hls::HlsNotifier::Init()'],['../d7/d5c/classshaka_1_1hls_1_1SimpleHlsNotifier.html#a40850c462766a0ce4e9c92014ed77a91',1,'shaka::hls::SimpleHlsNotifier::Init()'],['../d3/d0a/classshaka_1_1media_1_1MediaParser.html#adc7c91bebe75879abba91a56dae52153',1,'shaka::media::MediaParser::Init()'],['../d3/dc1/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser.html#aa2aff12312827aacf2b7db6e2f792c52',1,'shaka::media::mp2t::Mp2tMediaParser::Init()'],['../d7/dd5/classshaka_1_1media_1_1mp4_1_1MP4MediaParser.html#acc87b9752a7f6e8c739109acbc02b69d',1,'shaka::media::mp4::MP4MediaParser::Init()'],['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#ae9f02c32b4e2be8fc41a20f3f00f3494',1,'shaka::media::mp4::TrackRunIterator::Init()'],['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#a4d39eaf8568da29b597411c56f50d86f',1,'shaka::media::mp4::TrackRunIterator::Init(const MovieFragment &moof)'],['../d2/ddb/classshaka_1_1media_1_1WebMMediaParser.html#a5cd5c298938e2c58c45f962b21e43b2e',1,'shaka::media::WebMMediaParser::Init()'],['../dc/df2/classshaka_1_1media_1_1WebVttMediaParser.html#af6c0fb7de806cccd0e1f9dd92b5310f3',1,'shaka::media::WebVttMediaParser::Init()'],['../dc/d18/classshaka_1_1media_1_1wvm_1_1WvmMediaParser.html#a6f931f1702724a9b19c3078a7832bc77',1,'shaka::media::wvm::WvmMediaParser::Init()'],['../d4/d70/classshaka_1_1DashIopMpdNotifier.html#a9dd9d655a538ff2618634ca1f9809478',1,'shaka::DashIopMpdNotifier::Init()'],['../de/d52/classshaka_1_1Representation.html#ae998409ae94f3ba12909a96e8f3f4f7e',1,'shaka::Representation::Init()'],['../d3/dd0/classshaka_1_1MpdNotifier.html#ad6171481d6fb437767b1f5b9e0dac1a3',1,'shaka::MpdNotifier::Init()'],['../d8/de1/classshaka_1_1SimpleMpdNotifier.html#a59bcb401b5ca8d5b893ec7da9461569f',1,'shaka::SimpleMpdNotifier::Init()']]], ['initialize',['Initialize',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#aed0da512bbd998ec9d0a5c019ad17acb',1,'shaka::media::MediaHandler::Initialize()'],['../d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html#a27986db8a2e62669fe1983a39383c546',1,'shaka::media::NalUnitToByteStreamConverter::Initialize()'],['../dd/de4/classshaka_1_1media_1_1VideoSliceHeaderParser.html#a862422cdf78f370069055037338fa53d',1,'shaka::media::VideoSliceHeaderParser::Initialize()'],['../da/df0/classshaka_1_1media_1_1H264VideoSliceHeaderParser.html#a551bd1e2a852d1a3b23b77df8505b7f7',1,'shaka::media::H264VideoSliceHeaderParser::Initialize()'],['../d1/d79/classshaka_1_1media_1_1H265VideoSliceHeaderParser.html#a83a25520f713f4818a765ea3324a1438',1,'shaka::media::H265VideoSliceHeaderParser::Initialize()'],['../d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html#aa0346189f99b2f0fc2c71da1543155fa',1,'shaka::media::mp2t::PesPacketGenerator::Initialize()'],['../de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html#aac6e3950224709b78b9f1e054a8ca194',1,'shaka::media::mp2t::TsSegmenter::Initialize()'],['../de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html#a6bee605be771538f78633e2ecfc979c6',1,'shaka::media::mp2t::TsWriter::Initialize()'],['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html#acc2d4e58b3fa4b41a0637f52288d81d9',1,'shaka::media::mp4::Segmenter::Initialize()'],['../dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html#a32c8a682b36241529d0c302a023140d2',1,'shaka::media::webm::Segmenter::Initialize()'],['../db/dd0/classshaka_1_1Packager.html#ae40969a98da3a27a0b1633927afb3ce2',1,'shaka::Packager::Initialize()']]], ['initializefragment',['InitializeFragment',['../db/d95/classshaka_1_1media_1_1mp4_1_1Fragmenter.html#aa702c2af5ea5096d94f2943076a21e4a',1,'shaka::media::mp4::Fragmenter']]], - ['initializeinternal',['InitializeInternal',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a0e05325d62bfb66318301c1ed790a46e',1,'shaka::media::MediaHandler::InitializeInternal()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#af43db7170cd6b53aa937e0b68e210e25',1,'shaka::media::FakeMediaHandler::InitializeInternal()'],['../df/d46/classshaka_1_1media_1_1Muxer.html#a36882e12df5c5bfd48a7b94d1dfad857',1,'shaka::media::Muxer::InitializeInternal()'],['../d4/d43/classshaka_1_1media_1_1ChunkingHandler.html#a76a5f4b74da3876cc72f44301c389ebd',1,'shaka::media::ChunkingHandler::InitializeInternal()'],['../d6/d4c/classshaka_1_1media_1_1EncryptionHandler.html#a3f1808a4386081e5e1c9a798a1a69dd0',1,'shaka::media::EncryptionHandler::InitializeInternal()'],['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a7488d8ea312be5822c67f5b69a8dbd9f',1,'shaka::media::Demuxer::InitializeInternal()'],['../db/dea/classshaka_1_1media_1_1TrickPlayHandler.html#a3fd2fae199e0a9607e83e02724896c10',1,'shaka::media::TrickPlayHandler::InitializeInternal()']]], + ['initializeinternal',['InitializeInternal',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a0e05325d62bfb66318301c1ed790a46e',1,'shaka::media::MediaHandler::InitializeInternal()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#af43db7170cd6b53aa937e0b68e210e25',1,'shaka::media::FakeMediaHandler::InitializeInternal()'],['../df/d46/classshaka_1_1media_1_1Muxer.html#a36882e12df5c5bfd48a7b94d1dfad857',1,'shaka::media::Muxer::InitializeInternal()'],['../d4/d43/classshaka_1_1media_1_1ChunkingHandler.html#a76a5f4b74da3876cc72f44301c389ebd',1,'shaka::media::ChunkingHandler::InitializeInternal()'],['../d6/d4c/classshaka_1_1media_1_1EncryptionHandler.html#a3f1808a4386081e5e1c9a798a1a69dd0',1,'shaka::media::EncryptionHandler::InitializeInternal()'],['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a7488d8ea312be5822c67f5b69a8dbd9f',1,'shaka::media::Demuxer::InitializeInternal()']]], ['initializewithiv',['InitializeWithIv',['../df/d87/classshaka_1_1media_1_1AesCryptor.html#a41954df34b76b04d561892732dd0ec2f',1,'shaka::media::AesCryptor::InitializeWithIv()'],['../df/d2d/classshaka_1_1media_1_1AesCbcDecryptor.html#a71ff0b9654de96f9990b29c35fa9b7bf',1,'shaka::media::AesCbcDecryptor::InitializeWithIv()'],['../d3/d75/classshaka_1_1media_1_1AesEncryptor.html#a0695df5615cadf6977fdbac978daeffa',1,'shaka::media::AesEncryptor::InitializeWithIv()'],['../d3/dfe/classshaka_1_1media_1_1AesPatternCryptor.html#af878688f0f277f3f6757e85654439c34',1,'shaka::media::AesPatternCryptor::InitializeWithIv()']]], ['injectclockfortesting',['InjectClockForTesting',['../dc/da1/classshaka_1_1MpdBuilder.html#a7a4f96f12b589cfc4b5c2f44532eec53',1,'shaka::MpdBuilder']]], ['injectpespacketgeneratorfortesting',['InjectPesPacketGeneratorForTesting',['../de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html#abb78b18426643d58bc44ea61823dc29c',1,'shaka::media::mp2t::TsSegmenter']]], diff --git a/docs/search/functions_b.js b/docs/search/functions_b.js index b83fcb7656..a45f410083 100644 --- a/docs/search/functions_b.js +++ b/docs/search/functions_b.js @@ -5,7 +5,7 @@ var searchData= ['nalu_5flength_5fsize',['nalu_length_size',['../de/de0/classshaka_1_1media_1_1DecoderConfigurationRecord.html#aa3cae17e24d155caa3004ffa52d09d6b',1,'shaka::media::DecoderConfigurationRecord']]], ['nalureader',['NaluReader',['../db/d86/classshaka_1_1media_1_1NaluReader.html#a2d1611fe3e60fc6570fe0c21e13911b0',1,'shaka::media::NaluReader::NaluReader(Nalu::CodecType type, uint8_t nal_length_size, const uint8_t *stream, uint64_t stream_size)'],['../db/d86/classshaka_1_1media_1_1NaluReader.html#a6890eb05c83bb540af84494ed0590c6b',1,'shaka::media::NaluReader::NaluReader(Nalu::CodecType type, uint8_t nal_length_size, const uint8_t *stream, uint64_t stream_size, const std::vector< SubsampleEntry > &subsamples)']]], ['newsegment',['NewSegment',['../de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html#a9ba30b9cc1e4ae2992735709ae987c64',1,'shaka::media::mp2t::TsWriter']]], - ['next_5fhandler',['next_handler',['../d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html#a00edfa6e4ab0371cdb823b72cb884306',1,'shaka::media::MediaHandlerTestBase']]], + ['next_5fhandler',['next_handler',['../d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.html#a2a152f99cdc93823694f958d045f374d',1,'shaka::media::MediaHandlerGraphTestBase']]], ['notifyencryptionupdate',['NotifyEncryptionUpdate',['../d9/deb/classshaka_1_1hls_1_1HlsNotifier.html#a310fadabce7f3ac4a3313631340b880f',1,'shaka::hls::HlsNotifier::NotifyEncryptionUpdate()'],['../d7/d5c/classshaka_1_1hls_1_1SimpleHlsNotifier.html#ac2df072e5fbfcbf172319222a180e73d',1,'shaka::hls::SimpleHlsNotifier::NotifyEncryptionUpdate()'],['../d4/d70/classshaka_1_1DashIopMpdNotifier.html#a093eac08e6fdc396e6bbcbc58d35a3c3',1,'shaka::DashIopMpdNotifier::NotifyEncryptionUpdate()'],['../d3/dd0/classshaka_1_1MpdNotifier.html#acf6a0bde4fc907053cc9f1ff9a38b59a',1,'shaka::MpdNotifier::NotifyEncryptionUpdate()'],['../d8/de1/classshaka_1_1SimpleMpdNotifier.html#ae1a1231fb13e0bc97cdea5fc239184bf',1,'shaka::SimpleMpdNotifier::NotifyEncryptionUpdate()']]], ['notifynewcontainer',['NotifyNewContainer',['../d4/d70/classshaka_1_1DashIopMpdNotifier.html#af86163b8fc680ea659e6ba2d2c5d6db7',1,'shaka::DashIopMpdNotifier::NotifyNewContainer()'],['../d3/dd0/classshaka_1_1MpdNotifier.html#ae10c06fe6022a1020fc889de389be430',1,'shaka::MpdNotifier::NotifyNewContainer()'],['../d8/de1/classshaka_1_1SimpleMpdNotifier.html#a3f4aabd86ec08e5ff427120ed39fda29',1,'shaka::SimpleMpdNotifier::NotifyNewContainer()']]], ['notifynewsegment',['NotifyNewSegment',['../d9/deb/classshaka_1_1hls_1_1HlsNotifier.html#af5a0d6670313d81eff20bb959732a2cd',1,'shaka::hls::HlsNotifier::NotifyNewSegment()'],['../d7/d5c/classshaka_1_1hls_1_1SimpleHlsNotifier.html#afab88a610a6d2ac8b21dd86a456c2c06',1,'shaka::hls::SimpleHlsNotifier::NotifyNewSegment()'],['../d4/d70/classshaka_1_1DashIopMpdNotifier.html#ad2561d25eb7ace9b919ef8b96d4a06a7',1,'shaka::DashIopMpdNotifier::NotifyNewSegment()'],['../d3/dd0/classshaka_1_1MpdNotifier.html#a100236a249477afcda4f50e4914f0eee',1,'shaka::MpdNotifier::NotifyNewSegment()'],['../d8/de1/classshaka_1_1SimpleMpdNotifier.html#a640f5455a6d64063c364b81a8a6e878a',1,'shaka::SimpleMpdNotifier::NotifyNewSegment()']]], diff --git a/docs/search/functions_c.js b/docs/search/functions_c.js index 2479eb1371..1b890aab20 100644 --- a/docs/search/functions_c.js +++ b/docs/search/functions_c.js @@ -2,7 +2,7 @@ var searchData= [ ['onencryptioninfoready',['OnEncryptionInfoReady',['../d9/d68/classshaka_1_1media_1_1CombinedMuxerListener.html#a445b97bf06c20a44ae5d0fef926cbd9f',1,'shaka::media::CombinedMuxerListener::OnEncryptionInfoReady()'],['../d5/dfa/classshaka_1_1media_1_1HlsNotifyMuxerListener.html#a8be7a524212bdd401150aa6bcb374792',1,'shaka::media::HlsNotifyMuxerListener::OnEncryptionInfoReady()'],['../d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html#a10071445982f736bb1e6e04133dd60cb',1,'shaka::media::MpdNotifyMuxerListener::OnEncryptionInfoReady()'],['../dd/d7a/classshaka_1_1media_1_1MuxerListener.html#ab521acca727bbe01aa15c751325c0001',1,'shaka::media::MuxerListener::OnEncryptionInfoReady()'],['../db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html#a683882564ac762e2e94795964f8be4b8',1,'shaka::media::VodMediaInfoDumpMuxerListener::OnEncryptionInfoReady()']]], ['onencryptionstart',['OnEncryptionStart',['../d9/d68/classshaka_1_1media_1_1CombinedMuxerListener.html#a40a2b9e923b6a6e255ee5632bffc1134',1,'shaka::media::CombinedMuxerListener::OnEncryptionStart()'],['../d5/dfa/classshaka_1_1media_1_1HlsNotifyMuxerListener.html#a49b4187f39abe517768364f7ecb280f9',1,'shaka::media::HlsNotifyMuxerListener::OnEncryptionStart()'],['../d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html#a56ccf04196458894f31d0db102153334',1,'shaka::media::MpdNotifyMuxerListener::OnEncryptionStart()'],['../dd/d7a/classshaka_1_1media_1_1MuxerListener.html#a897463091f0effa647a8e2822f48b2ee',1,'shaka::media::MuxerListener::OnEncryptionStart()'],['../db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html#ae8f6f65fbab9f301be5bb35f5b8d1cbc',1,'shaka::media::VodMediaInfoDumpMuxerListener::OnEncryptionStart()']]], - ['onflushrequest',['OnFlushRequest',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a69a31b8ec1b85fd4790c7c2013c69a73',1,'shaka::media::MediaHandler::OnFlushRequest()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#a3f82edd4474f20464224e881dd20fdb0',1,'shaka::media::FakeMediaHandler::OnFlushRequest()'],['../df/d46/classshaka_1_1media_1_1Muxer.html#a9f08c1385506636b800769480869e04f',1,'shaka::media::Muxer::OnFlushRequest()'],['../d4/d43/classshaka_1_1media_1_1ChunkingHandler.html#ab526bd53e4d49d7209f01d9b10b9ab52',1,'shaka::media::ChunkingHandler::OnFlushRequest()'],['../db/dea/classshaka_1_1media_1_1TrickPlayHandler.html#a9a6c29c88fdeb667d5592142d6815bfa',1,'shaka::media::TrickPlayHandler::OnFlushRequest()']]], + ['onflushrequest',['OnFlushRequest',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a69a31b8ec1b85fd4790c7c2013c69a73',1,'shaka::media::MediaHandler::OnFlushRequest()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#a3f82edd4474f20464224e881dd20fdb0',1,'shaka::media::FakeMediaHandler::OnFlushRequest()'],['../df/d46/classshaka_1_1media_1_1Muxer.html#a9f08c1385506636b800769480869e04f',1,'shaka::media::Muxer::OnFlushRequest()'],['../d4/d43/classshaka_1_1media_1_1ChunkingHandler.html#ab526bd53e4d49d7209f01d9b10b9ab52',1,'shaka::media::ChunkingHandler::OnFlushRequest()']]], ['onliststart',['OnListStart',['../d9/d87/classshaka_1_1media_1_1WebMContentEncodingsClient.html#a7b8b5447b3d573657f6dc029d2e6d8b7',1,'shaka::media::WebMContentEncodingsClient']]], ['onmediaend',['OnMediaEnd',['../d9/d68/classshaka_1_1media_1_1CombinedMuxerListener.html#aaf16580970d5e65d33c80cb9e8a57651',1,'shaka::media::CombinedMuxerListener::OnMediaEnd()'],['../d5/dfa/classshaka_1_1media_1_1HlsNotifyMuxerListener.html#aa2af080963ca02454786b8bb2ff6dd6d',1,'shaka::media::HlsNotifyMuxerListener::OnMediaEnd()'],['../dc/d73/classshaka_1_1media_1_1MockMuxerListener.html#a915fc76c19622d7e82aa74dd996edacd',1,'shaka::media::MockMuxerListener::OnMediaEnd()'],['../d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html#aa42f5472d5450d897f036ff582a31612',1,'shaka::media::MpdNotifyMuxerListener::OnMediaEnd()'],['../dd/d7a/classshaka_1_1media_1_1MuxerListener.html#a11d4301cd53ab421f524bfa143eac21a',1,'shaka::media::MuxerListener::OnMediaEnd()'],['../db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html#ab2ab9bc34256f8016f0e827097b97ca1',1,'shaka::media::VodMediaInfoDumpMuxerListener::OnMediaEnd()']]], ['onmediastart',['OnMediaStart',['../d9/d68/classshaka_1_1media_1_1CombinedMuxerListener.html#a289148dbb60121fb0f9ef0b469bc18be',1,'shaka::media::CombinedMuxerListener::OnMediaStart()'],['../d5/dfa/classshaka_1_1media_1_1HlsNotifyMuxerListener.html#ac60d8aed79f2a1581dfec1ed5ad10f22',1,'shaka::media::HlsNotifyMuxerListener::OnMediaStart()'],['../d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html#ad0aeb94e2e1fe1b5ead506b690e6f70f',1,'shaka::media::MpdNotifyMuxerListener::OnMediaStart()'],['../dd/d7a/classshaka_1_1media_1_1MuxerListener.html#a31536ec385a7ec22f323a42b872b499a',1,'shaka::media::MuxerListener::OnMediaStart()'],['../db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html#a4811b4ce8292f0f449a35a837aeab74f',1,'shaka::media::VodMediaInfoDumpMuxerListener::OnMediaStart()']]], diff --git a/docs/search/functions_d.js b/docs/search/functions_d.js index cb862ee5dd..518e8cba83 100644 --- a/docs/search/functions_d.js +++ b/docs/search/functions_d.js @@ -27,7 +27,8 @@ var searchData= ['post',['Post',['../d7/de0/classshaka_1_1media_1_1HttpKeyFetcher.html#a31e904e2f802e5626c4420675c76d513',1,'shaka::media::HttpKeyFetcher']]], ['preparechildren',['PrepareChildren',['../d1/da1/classshaka_1_1media_1_1mp4_1_1BoxBuffer.html#a29158ec9769dafbdcf1192abf9a2aa2a',1,'shaka::media::mp4::BoxBuffer']]], ['printerror',['PrintError',['../d8/daf/namespaceshaka.html#a54fadd9c7ef14b39cd0355a5c269c772',1,'shaka']]], - ['process',['Process',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#acb614e9f43e1eb6f837801b15b78c0b4',1,'shaka::media::MediaHandler::Process()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#af9fa42669591a52b8fa1a62d27ed93d6',1,'shaka::media::FakeMediaHandler::Process()'],['../df/d46/classshaka_1_1media_1_1Muxer.html#aec730b070245231a0887787005c06eee',1,'shaka::media::Muxer::Process()'],['../d4/d43/classshaka_1_1media_1_1ChunkingHandler.html#a44c30ffd7c283be2ba4347bda7848633',1,'shaka::media::ChunkingHandler::Process()'],['../d6/d4c/classshaka_1_1media_1_1EncryptionHandler.html#a7887e6060eb572036674ecb9a7e045c4',1,'shaka::media::EncryptionHandler::Process()'],['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a869b21d13f02d4d5c0519f9eb35117cd',1,'shaka::media::Demuxer::Process()'],['../db/dea/classshaka_1_1media_1_1TrickPlayHandler.html#afdd13bb4e762c4b904ed75b268359757',1,'shaka::media::TrickPlayHandler::Process()']]], + ['printwarning',['PrintWarning',['../d8/daf/namespaceshaka.html#a42273d2ca4220d3de00a759a711e385e',1,'shaka']]], + ['process',['Process',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#acb614e9f43e1eb6f837801b15b78c0b4',1,'shaka::media::MediaHandler::Process()'],['../d1/d36/classshaka_1_1media_1_1FakeMediaHandler.html#af9fa42669591a52b8fa1a62d27ed93d6',1,'shaka::media::FakeMediaHandler::Process()'],['../df/d46/classshaka_1_1media_1_1Muxer.html#aec730b070245231a0887787005c06eee',1,'shaka::media::Muxer::Process()'],['../d4/d43/classshaka_1_1media_1_1ChunkingHandler.html#a44c30ffd7c283be2ba4347bda7848633',1,'shaka::media::ChunkingHandler::Process()'],['../d6/d4c/classshaka_1_1media_1_1EncryptionHandler.html#a7887e6060eb572036674ecb9a7e045c4',1,'shaka::media::EncryptionHandler::Process()'],['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a869b21d13f02d4d5c0519f9eb35117cd',1,'shaka::media::Demuxer::Process()']]], ['producerconsumerqueue',['ProducerConsumerQueue',['../d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html#ad7ccb149baa88e5f8356be18344d2baf',1,'shaka::media::ProducerConsumerQueue::ProducerConsumerQueue(size_t capacity)'],['../d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html#a80ff75afdbbf7f567dcb57a755542ffc',1,'shaka::media::ProducerConsumerQueue::ProducerConsumerQueue(size_t capacity, size_t starting_pos)']]], ['pts',['pts',['../d2/d93/classshaka_1_1media_1_1mp2t_1_1PesPacket.html#a5c02473f77069810be154a13c7cdcc66',1,'shaka::media::mp2t::PesPacket']]], ['push',['Push',['../d7/dda/classshaka_1_1media_1_1ByteQueue.html#acea792e406efe5119cec2e3e522e02c2',1,'shaka::media::ByteQueue::Push()'],['../d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html#a6eaf80daa8c96b0157f5fcd9763dbec1',1,'shaka::media::ProducerConsumerQueue::Push()']]], diff --git a/docs/search/functions_f.js b/docs/search/functions_f.js index a1d6a0aa95..6f222da3ed 100644 --- a/docs/search/functions_f.js +++ b/docs/search/functions_f.js @@ -26,6 +26,7 @@ var searchData= ['setcodecfortesting',['SetCodecForTesting',['../dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.html#aad5c985ef4bbdbe7c8f38494114abdf7',1,'shaka::hls::MediaPlaylist']]], ['setcomplete',['SetComplete',['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html#adea4bf88a29660bd8612ae3bc5048068',1,'shaka::media::mp4::Segmenter']]], ['setcontent',['SetContent',['../d1/d31/classshaka_1_1xml_1_1XmlNode.html#a73d758186470e7dbcb4f4339eb53458c',1,'shaka::xml::XmlNode']]], + ['setdata',['SetData',['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#ab9be744240871d88cd76d04adbd2d702',1,'shaka::media::MediaSample']]], ['seterror',['SetError',['../d2/d20/classshaka_1_1Status.html#ac5a0cbdf79d591ae56af4913ec33f250',1,'shaka::Status']]], ['setfloatingpointattribute',['SetFloatingPointAttribute',['../d1/d31/classshaka_1_1xml_1_1XmlNode.html#ac4b6c261b14ffe83e9820b76b16af1ba',1,'shaka::xml::XmlNode']]], ['sethandler',['SetHandler',['../da/dfd/classshaka_1_1media_1_1MediaHandler.html#a0fac1fe2d593e78d47244acdfa21759d',1,'shaka::media::MediaHandler::SetHandler()'],['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a1247302b6c57fbafb09aec71ce0109e3',1,'shaka::media::Demuxer::SetHandler()']]], @@ -43,14 +44,14 @@ var searchData= ['setstringattribute',['SetStringAttribute',['../d1/d31/classshaka_1_1xml_1_1XmlNode.html#afc83f9dbaedc8ba0fc9cc1153ac23329',1,'shaka::xml::XmlNode']]], ['settargetduration',['SetTargetDuration',['../dd/d1c/classshaka_1_1hls_1_1MediaPlaylist.html#ae912291a5be66ae6256006654cc04dd6',1,'shaka::hls::MediaPlaylist']]], ['settswriterfileopenedfortesting',['SetTsWriterFileOpenedForTesting',['../de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html#a34ab9fbaee43115d68be87e4b9e90918',1,'shaka::media::mp2t::TsSegmenter']]], - ['setupgraph',['SetUpGraph',['../d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html#a7ab44361bc98f2a9e32a9510388dbd70',1,'shaka::media::MediaHandlerTestBase']]], + ['setupgraph',['SetUpGraph',['../d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.html#af0a4c542b34e3e3a340c4e9b0ac2c152',1,'shaka::media::MediaHandlerGraphTestBase']]], ['signalencrypted',['SignalEncrypted',['../de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html#afc47f61bce7cd4f8f6a6ea0ec2c96d4c',1,'shaka::media::mp2t::TsWriter']]], ['simplehlsnotifier',['SimpleHlsNotifier',['../d7/d5c/classshaka_1_1hls_1_1SimpleHlsNotifier.html#a8550250a5d368ae2d9ded8999b878449',1,'shaka::hls::SimpleHlsNotifier']]], ['size',['Size',['../dd/d40/classshaka_1_1CallbackFile.html#ab6bcbc6773b29fee1664507558e8759f',1,'shaka::CallbackFile::Size()'],['../d3/d73/classshaka_1_1File.html#aeb98b64a05f141140e110170bef1bc55',1,'shaka::File::Size()'],['../d7/dbd/classshaka_1_1LocalFile.html#ad20649d0ee575b81830a5abf88e2bde1',1,'shaka::LocalFile::Size()'],['../de/dad/classshaka_1_1MemoryFile.html#a151634866be009cf0eb10e783432d5cb',1,'shaka::MemoryFile::Size()'],['../dd/d0c/classshaka_1_1ThreadedIoFile.html#af23f2da404e1602c240bb59d2601f1b9',1,'shaka::ThreadedIoFile::Size()'],['../d4/dcb/classshaka_1_1UdpFile.html#a0a1c8d7af211bba4da62eb44504d745d',1,'shaka::UdpFile::Size()'],['../d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html#a4f2483c665f2693f583e7b467101d844',1,'shaka::media::ProducerConsumerQueue::Size()'],['../d1/da1/classshaka_1_1media_1_1mp4_1_1BoxBuffer.html#a90fe62338ba20817d27cf4e34949000e',1,'shaka::media::mp4::BoxBuffer::Size()']]], ['skipbits',['SkipBits',['../d6/da9/classshaka_1_1media_1_1BitReader.html#a4ab20ef220c76072eaecb982aba0541d',1,'shaka::media::BitReader']]], ['skipbitsconditional',['SkipBitsConditional',['../d6/da9/classshaka_1_1media_1_1BitReader.html#a98bbbbc849a3fadc1a136662174d470e',1,'shaka::media::BitReader']]], ['skipbytes',['SkipBytes',['../d6/da9/classshaka_1_1media_1_1BitReader.html#a7d349253d5cc8f9aa33f1ca2ea94677c',1,'shaka::media::BitReader::SkipBytes()'],['../d9/d13/classshaka_1_1media_1_1BufferReader.html#a2b15dfcd6ff891a9cb7b76f48d91d15d',1,'shaka::media::BufferReader::SkipBytes()']]], - ['some_5fhandler',['some_handler',['../d4/d9b/classshaka_1_1media_1_1MediaHandlerTestBase.html#aba1f3fe6f82c2a205aefdeae3be60d1d',1,'shaka::media::MediaHandlerTestBase']]], + ['some_5fhandler',['some_handler',['../d3/d9a/classshaka_1_1media_1_1MediaHandlerGraphTestBase.html#a02f13711d72781e74f0ce794cbd7044a',1,'shaka::media::MediaHandlerGraphTestBase']]], ['startbox',['StartBox',['../d1/dee/classshaka_1_1media_1_1mp4_1_1BoxReader.html#a6bafd9cd95a97c4c1475d1806d602ae2',1,'shaka::media::mp4::BoxReader']]], ['startswithstartcode',['StartsWithStartCode',['../db/d86/classshaka_1_1media_1_1NaluReader.html#a9ed9d56a06f43717cdb7035f86075975',1,'shaka::media::NaluReader']]], ['status',['Status',['../d2/d20/classshaka_1_1Status.html#a12c04257e2480e0ce87cd16b944921d0',1,'shaka::Status::Status()'],['../d2/d20/classshaka_1_1Status.html#a2fa2116c9e12215a4e3430b362ba622b',1,'shaka::Status::Status(error::Code error_code, const std::string &error_message)']]], diff --git a/docs/search/variables_2.js b/docs/search/variables_2.js index c938097b00..2c9cb68038 100644 --- a/docs/search/variables_2.js +++ b/docs/search/variables_2.js @@ -1,5 +1,6 @@ var searchData= [ ['default_5flanguage',['default_language',['../df/ddc/structshaka_1_1MpdParams.html#a74df80bd74635090e97837f3a5941d73',1,'shaka::MpdParams']]], + ['drm_5flabel',['drm_label',['../d2/d7b/structshaka_1_1StreamDescriptor.html#a8f2a517450433cf69bbc87cef17d05cf',1,'shaka::StreamDescriptor']]], ['dump_5fstream_5finfo',['dump_stream_info',['../d6/d62/structshaka_1_1TestParams.html#a7a22e04cdfc14d73266397bf673fae6e',1,'shaka::TestParams']]] ]; diff --git a/docs/search/variables_6.js b/docs/search/variables_6.js index 8a3cb3be59..e6f5abc7d3 100644 --- a/docs/search/variables_6.js +++ b/docs/search/variables_6.js @@ -6,5 +6,5 @@ var searchData= ['inject_5ffake_5fclock',['inject_fake_clock',['../d6/d62/structshaka_1_1TestParams.html#a90ba653c71c94709b8ef3e7c3cc07e6c',1,'shaka::TestParams']]], ['injected_5flibrary_5fversion',['injected_library_version',['../d6/d62/structshaka_1_1TestParams.html#ac72df3ec74369d0723f0217eac6b5098',1,'shaka::TestParams']]], ['input',['input',['../d2/d7b/structshaka_1_1StreamDescriptor.html#ae86324b838baa66dbab9a3d35352e200',1,'shaka::StreamDescriptor']]], - ['iv',['iv',['../df/d22/structshaka_1_1WidevineSigner.html#a6db96d4c3f1189bbd09515732bec94d9',1,'shaka::WidevineSigner::iv()'],['../d0/d5d/structshaka_1_1RawKeyEncryptionParams.html#a2b8b36d5dd357a6b354de194bc3fb702',1,'shaka::RawKeyEncryptionParams::iv()']]] + ['iv',['iv',['../df/d22/structshaka_1_1WidevineSigner.html#a6db96d4c3f1189bbd09515732bec94d9',1,'shaka::WidevineSigner::iv()'],['../d0/db4/structshaka_1_1RawKeyParams.html#aab733ab6920dd8fbed523810e64ea3f1',1,'shaka::RawKeyParams::iv()']]] ]; diff --git a/docs/search/variables_7.js b/docs/search/variables_7.js index 3a52abdbd0..93c9e42862 100644 --- a/docs/search/variables_7.js +++ b/docs/search/variables_7.js @@ -4,7 +4,7 @@ var searchData= ['kdecryptionkeysize',['kDecryptionKeySize',['../de/d49/classshaka_1_1media_1_1DecryptConfig.html#afa140203b87d3e46d5fd94b231734f53',1,'shaka::media::DecryptConfig']]], ['key',['key',['../df/d22/structshaka_1_1WidevineSigner.html#ad5c378d29df509280d8697f986163324',1,'shaka::WidevineSigner::key()'],['../df/d22/structshaka_1_1WidevineSigner.html#a25bb558aa06563d24c3d7f9733ff8898',1,'shaka::WidevineSigner::key()'],['../d3/df5/structshaka_1_1PlayreadyEncryptionParams.html#a2ba545b465d64da1ac9458ba45338f76',1,'shaka::PlayreadyEncryptionParams::key()']]], ['key_5fid',['key_id',['../d3/df5/structshaka_1_1PlayreadyEncryptionParams.html#a872107e40137be5a6c1f932db67c2a9d',1,'shaka::PlayreadyEncryptionParams']]], - ['key_5fmap',['key_map',['../d0/d5d/structshaka_1_1RawKeyEncryptionParams.html#a70893a2ff3b6fc74fd53e9b00f2a023d',1,'shaka::RawKeyEncryptionParams::key_map()'],['../d9/da8/structshaka_1_1RawKeyDecryptionParams.html#a1ed59af3d5fe891e05acb4ee59ff6dc1',1,'shaka::RawKeyDecryptionParams::key_map()']]], + ['key_5fmap',['key_map',['../d0/db4/structshaka_1_1RawKeyParams.html#a14e44fed95583d0bb319c082fb1ddb84',1,'shaka::RawKeyParams']]], ['key_5fprovider',['key_provider',['../dc/da0/structshaka_1_1EncryptionParams.html#adcf61ebf8d129a5bcf3f159b9b076eed',1,'shaka::EncryptionParams::key_provider()'],['../d1/d4f/structshaka_1_1DecryptionParams.html#ad93d153f9e777cccb6404611d5b4d339',1,'shaka::DecryptionParams::key_provider()']]], ['key_5fserver_5furl',['key_server_url',['../d9/dd2/structshaka_1_1WidevineEncryptionParams.html#ac222c5bd0620e5a6f9bf5e9fec534fb9',1,'shaka::WidevineEncryptionParams::key_server_url()'],['../d3/df5/structshaka_1_1PlayreadyEncryptionParams.html#a3a31b3002f86834b1799279bf5b5fc11',1,'shaka::PlayreadyEncryptionParams::key_server_url()'],['../d8/d48/structshaka_1_1WidevineDecryptionParams.html#adb765979bcc7f63ce46c9ed6ead1ee5b',1,'shaka::WidevineDecryptionParams::key_server_url()']]], ['knokeyrotation',['kNoKeyRotation',['../dc/da0/structshaka_1_1EncryptionParams.html#a92ad4ca8e1ccb7d6b5fa2ee0b1b196fa',1,'shaka::EncryptionParams']]], diff --git a/docs/search/variables_b.js b/docs/search/variables_b.js index bce1a98fc0..7414a86011 100644 --- a/docs/search/variables_b.js +++ b/docs/search/variables_b.js @@ -4,5 +4,5 @@ var searchData= ['policy',['policy',['../d9/dd2/structshaka_1_1WidevineEncryptionParams.html#a469f3db91b42af20f270a280c4d42b4f',1,'shaka::WidevineEncryptionParams']]], ['private_5fframe',['private_frame',['../d3/dad/structshaka_1_1media_1_1mp4_1_1ID3v2.html#a33c145fa8ed1417799dce66a94f8e95c',1,'shaka::media::mp4::ID3v2']]], ['program_5fidentifier',['program_identifier',['../d3/df5/structshaka_1_1PlayreadyEncryptionParams.html#a74199b0293ca77eaac30aea53a9ec2aa',1,'shaka::PlayreadyEncryptionParams']]], - ['pssh',['pssh',['../d0/d5d/structshaka_1_1RawKeyEncryptionParams.html#add60228a75eee66b051e2cc7ceeb4b01',1,'shaka::RawKeyEncryptionParams']]] + ['pssh',['pssh',['../d0/db4/structshaka_1_1RawKeyParams.html#a448b8c435fc86d4fbc85214e523f2ac5',1,'shaka::RawKeyParams']]] ]; diff --git a/html/_sources/build_instructions.md.txt b/html/_sources/build_instructions.md.txt index b160b233b8..2553c13034 100644 --- a/html/_sources/build_instructions.md.txt +++ b/html/_sources/build_instructions.md.txt @@ -190,7 +190,7 @@ 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/) +See [Shaka Packager Documentation](https://google.github.io/shaka-packager/html/) on how to use `Shaka Packager`. ### Update your checkout diff --git a/html/_sources/documentation.rst.txt b/html/_sources/documentation.rst.txt index aa7a087fc9..9f6fa586e7 100644 --- a/html/_sources/documentation.rst.txt +++ b/html/_sources/documentation.rst.txt @@ -57,7 +57,7 @@ Encryption / decryption options Shaka Packager supports three different types of key providers: -- Raw key (fixed key): keys are provided in command line +- Raw key: keys are provided in command line - Widevine: fetches keys from Widevine key server - Playready: fetches keys from Playready key server @@ -67,8 +67,8 @@ 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_raw_key_encryption {Raw Key Encryption Options}] \ + [--enable_raw_key_decryption {Raw Key Decryption Options}] \ [--enable_playready_encryption {Playready Encryption Options}] .. include:: /options/general_encryption_options.rst diff --git a/html/_sources/library.rst.txt b/html/_sources/library.rst.txt index 1cffb4abb2..f9d1598d97 100644 --- a/html/_sources/library.rst.txt +++ b/html/_sources/library.rst.txt @@ -2,8 +2,8 @@ Shaka Packager Library ====================== Documentation for the top level Shaka packager library. See -`Internal API `_ for -documentation on internal APIs. +`Internal API `_ +for documentation on internal APIs. .. doxygenclass:: shaka::Packager diff --git a/html/_sources/options/drm_stream_descriptors.rst.txt b/html/_sources/options/drm_stream_descriptors.rst.txt new file mode 100644 index 0000000000..7201a7f833 --- /dev/null +++ b/html/_sources/options/drm_stream_descriptors.rst.txt @@ -0,0 +1,15 @@ +DRM related Stream descriptor fields +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +: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. + +:drm_label: + + Optional value for custom DRM label, which defines the encryption key + applied to the stream. Typically values include AUDIO, SD, HD, UHD1, UHD2. + For raw key, it should be a label defined in --keys. If not provided, the + DRM label is derived from stream type (video, audio), resolutions, etc. + Note that it is case sensitive. diff --git a/html/_sources/options/hls_stream_descriptors.rst.txt b/html/_sources/options/hls_stream_descriptors.rst.txt index 384df1d1cb..6e36769861 100644 --- a/html/_sources/options/hls_stream_descriptors.rst.txt +++ b/html/_sources/options/hls_stream_descriptors.rst.txt @@ -3,16 +3,16 @@ 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. + Used for HLS audio to set the NAME attribute for EXT-X-MEDIA. + Defaults to the base of the playlist name. :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. + Used for HLS audio to set the GROUP-ID attribute for EXT-X-MEDIA. + Defaults to 'audio' if not specified. :playlist_name: - Required for HLS output. Name of the playlist for the stream. Usually ends - with '.m3u8'. + Used for HLS to name the playlist for the stream. Usually ends + with '.m3u8'. If unspecified, defaults to something of the form + 'stream_0.m3u8', 'stream_1.m3u8', 'stream_2.m3u8', etc. diff --git a/html/_sources/options/raw_key_encryption_options.rst.txt b/html/_sources/options/raw_key_encryption_options.rst.txt index 2e34d1d6c8..6beae951a1 100644 --- a/html/_sources/options/raw_key_encryption_options.rst.txt +++ b/html/_sources/options/raw_key_encryption_options.rst.txt @@ -1,22 +1,27 @@ Raw key encryption options ^^^^^^^^^^^^^^^^^^^^^^^^^^ ---enable_fixed_key_encryption +--enable_raw_key_encryption - Enable encryption with fixed key. + Enable encryption with raw key (keys provided in command line)). ---enable_fixed_key_decryption +--enable_raw_key_decryption - Enable decryption with fixed key. + Enable decryption with raw key (keys provided in command line). ---key_id <32-digit hex string> +--keys - The key id in hex string format. - HEX. + **key_info_string** is of the form:: ---key <32-digit hex string> + label={label}:key_id={key_id}:key={key} - The key in hex string format. + *label* can be an arbitrary string or a predefined DRM label like AUDIO, + SD, HD, etc. Label with an empty string indicates the default key and + key_id. The *drm_label* in :doc:`/options/stream_descriptors`, + which can be implicit, determines which key info is applied to the stream + by matching the *drm_label* with the *label* in key info. + + *key_id* and *key* should be 32-digit hex strings. --iv <16-digit or 32-digit hex string> diff --git a/html/_sources/options/stream_descriptors.rst.txt b/html/_sources/options/stream_descriptors.rst.txt index ad0fcc6305..c91a762cc1 100644 --- a/html/_sources/options/stream_descriptors.rst.txt +++ b/html/_sources/options/stream_descriptors.rst.txt @@ -4,7 +4,7 @@ Stream descriptors There can be multiple *stream_descriptor* with input from the same "file" or multiple different "files". -Stream is of the form:: +Stream descriptor is of the form:: {field}={value}[,{field}={value}]... @@ -57,15 +57,11 @@ These are the available fields: 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/drm_stream_descriptors.rst .. include:: /options/hls_stream_descriptors.rst diff --git a/html/_sources/tutorials/ffmpeg_piping.rst.txt b/html/_sources/tutorials/ffmpeg_piping.rst.txt index 2625f8d943..9c1a5c97f5 100644 --- a/html/_sources/tutorials/ffmpeg_piping.rst.txt +++ b/html/_sources/tutorials/ffmpeg_piping.rst.txt @@ -1,34 +1,57 @@ -ffmpeg piping +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. +We can use *FFmpeg* to redirect / pipe input not supported by *packager* +to *packager*, for example, input from webcam devices, or rtp input. The concept +depicted here can be applied to other *FFmpeg* supported device or protocols. -ffmpeg camera capture ---------------------- +Piping data to packager +----------------------- -Refer to `ffmpeg Capture/Webcam `_ -on how to use *ffmpeg* to capture webmcam inputs. +There are two options to pipe data to packager. -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. +- UDP socket -Create pipe ------------ + *FFmpeg* supports writing to a UDP socket and *packager* supports reading + from UDP sockets:: -We use pipe to connect *ffmpeg* and *packager*:: + $ packager 'input=udp://127.0.0.1:40000,...' ... + $ ffmpeg ... -f mpegts udp://127.0.0.1:40000 + + VP9 cannot be carried in mpegts. Another container, e.g. webm needs to be + used when outputs VP9. In this case, transcoding has to be started after + starting packager as the initialization segment is only transmitted in the + beginning of WebM output. + +- pipe + + Similarily, pipe is also supported in both *FFmpeg* and *packager*:: $ mkfifo pipe1 + $ packager 'input=pipe1,...' ... --io_block_size 65536 + $ ffmpeg ... -f mpegts pipe: > pipe1 + +.. note:: + + Option -io_block_size 65536 tells packager to use an io_block_size of 65K + for threaded io file. This is necessary when using pipe 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. Encoding / capture command -------------------------- -The below command captures from the default audio / video devices on the -machine:: +Camera capture +^^^^^^^^^^^^^^ - $ ffmpeg -f avfoundation -i "default" -f mpegts pipe: > pipe1 +Refer to `FFmpeg Capture/Webcam `_ +on how to use *FFmpeg* to capture webmcam inputs. + +The example assumes Mac OS X 10.7 (Lion) or later. It captures from the default +audio / video devices on the machine:: + + $ ffmpeg -f avfoundation -i "default" -f mpegts udp://127.0.0.1:40000 The command starts only after packager starts. @@ -37,20 +60,35 @@ The command starts only after packager starts. 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) ------------------------- +RTP input +^^^^^^^^^ + +Assume there is an RTP input described by `saved_sdp_file`:: + + $ ffmpeg -protocol_whitelist "file,rtp,udp" -i saved_sdp_file -vcodec h264 \ + -tune zerolatency -f mpegts udp://127.0.0.1:40000 + +.. note:: + + For testing, you can generate an RTP input from a static media file:: + + $ ffmpeg -re -stream_loop 100 -i -vcodec copy -an \ + -f rtp rtp://239.255.0.1:1234 -sdp_file saved_sdp_file + +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. + +Example packaging command in 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 + 'in=udp://127.0.0.1:40000,stream=audio,init_segment=live_cam_audio.mp4,segment_template=live_cam_audio_$Number$.m4s' \ + 'in=udp://127.0.0.1:40000,stream=video,init_segment=live_cam_video.mp4,segment_template=live_cam_video_$Number$.m4s' \ + --mpd_output live_cam.mpd -.. 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/html/_sources/tutorials/live.rst.txt b/html/_sources/tutorials/live.rst.txt index d38f013904..98312197e4 100644 --- a/html/_sources/tutorials/live.rst.txt +++ b/html/_sources/tutorials/live.rst.txt @@ -4,11 +4,6 @@ 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. @@ -44,3 +39,7 @@ Here are some examples. Packager does not support removing old segments internally. The user is resposible for setting up a cron job to do so. + +.. include:: /options/udp_file_options.rst + +.. include:: /options/segment_template_formatting.rst diff --git a/html/_sources/tutorials/raw_key.rst.txt b/html/_sources/tutorials/raw_key.rst.txt index a477d04d58..aa5c6532d8 100644 --- a/html/_sources/tutorials/raw_key.rst.txt +++ b/html/_sources/tutorials/raw_key.rst.txt @@ -9,20 +9,25 @@ Synopsis :: $ packager {stream_descriptor} [stream_descriptor] ... \ - --enable_fixed_key_encryption \ - --key_id --key \ + --enable_raw_key_encryption \ + --keys \ [--pssh ] \ [Other options, e.g. DASH options, HLS options] +**key_info_string** is of the form:: + + label={label}:key_id={key_id}:key={key} + 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. +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:: +Common PSSH (one key for all streams):: $ packager \ in=h264_baseline_360p_600.mp4,stream=audio,output=audio.mp4 \ @@ -30,22 +35,32 @@ Common PSSH:: 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 \ + --enable_raw_key_encryption \ + --keys label=:key_id=abba271e8bcf552bbd2e86a434a9a5d9:key=69eaa802a6763af979e8d1940fb88392 \ --mpd_output h264.mpd -Widevine PSSH:: +Common PSSH (different keys for different streams):: $ 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 \ + in=h264_baseline_360p_600.mp4,stream=audio,output=audio.mp4,drm_label=AUDIO \ + in=h264_baseline_360p_600.mp4,stream=video,output=h264_360p.mp4,drm_label=SD \ + in=h264_main_480p_1000.mp4,stream=video,output=h264_480p.mp4,drm_label=SD \ + in=h264_main_720p_3000.mp4,stream=video,output=h264_720p.mp4,drm_label=HD \ + in=h264_high_1080p_6000.mp4,stream=video,output=h264_1080p.mp4,drm_label=HD \ + --enable_raw_key_encryption \ + --keys label=AUDIO:key_id=f3c5e0361e6654b28f8049c778b23946:key=a4631a153a443df9eed0593043db7519,label=SD:key_id=abba271e8bcf552bbd2e86a434a9a5d9:key=69eaa802a6763af979e8d1940fb88392,label=HD:key_id=6d76f25cb17f5e16b8eaef6bbf582d8e:key=cb541084c99731aef4fff74500c12ead \ + --mpd_output h264.mpd + +Widevine PSSH (different keys for different streams):: + + $ packager \ + in=h264_baseline_360p_600.mp4,stream=audio,output=audio.mp4,drm_label=AUDIO \ + in=h264_baseline_360p_600.mp4,stream=video,output=h264_360p.mp4,drm_label=SD \ + in=h264_main_480p_1000.mp4,stream=video,output=h264_480p.mp4,drm_label=SD \ + in=h264_main_720p_3000.mp4,stream=video,output=h264_720p.mp4,drm_label=HD \ + in=h264_high_1080p_6000.mp4,stream=video,output=h264_1080p.mp4,drm_label=HD \ + --enable_raw_key_encryption \ + --keys label=AUDIO:key_id=f3c5e0361e6654b28f8049c778b23946:key=a4631a153a443df9eed0593043db7519,label=SD:key_id=abba271e8bcf552bbd2e86a434a9a5d9:key=69eaa802a6763af979e8d1940fb88392,label=HD:key_id=6d76f25cb17f5e16b8eaef6bbf582d8e:key=cb541084c99731aef4fff74500c12ead \ --pssh 000000407073736800000000edef8ba979d64acea3c827dcd51d21ed000000201a0d7769646576696e655f74657374220f7465737420636f6e74656e74206964 \ --mpd_output h264.mpd @@ -56,19 +71,23 @@ on how to config the DRM in Shaka Player. Test vectors used in this tutorial ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Key ID +:Key ID: - abba271e8bcf552bbd2e86a434a9a5d9 + | SD: abba271e8bcf552bbd2e86a434a9a5d9 + | HD: 6d76f25cb17f5e16b8eaef6bbf582d8e + | AUDIO: f3c5e0361e6654b28f8049c778b23946 Key ID must be 16 bytes or 32 digits in HEX. -Key +:Key: - 69eaa802a6763af979e8d1940fb88392 + | SD: 69eaa802a6763af979e8d1940fb88392 + | HD: cb541084c99731aef4fff74500c12ead + | AUDIO: a4631a153a443df9eed0593043db7519 Key must be 16 bytes or 32 digits in HEX. -Widevine PSSH +:Widevine PSSH: 000000407073736800000000edef8ba979d64acea3c827dcd51d21ed000000201a0d7769646576696e655f74657374220f7465737420636f6e74656e74206964 @@ -78,6 +97,7 @@ Widevine PSSH $ pssh-box.py --widevine-system-id \ --content-id 7465737420636f6e74656e74206964 --provider widevine_test +.. include:: /options/drm_stream_descriptors.rst .. include:: /options/raw_key_encryption_options.rst pssh-box (Utility to generate PSSH boxes) diff --git a/html/_sources/tutorials/tutorials.rst.txt b/html/_sources/tutorials/tutorials.rst.txt index 5ce31569ee..ad16fd6c9d 100644 --- a/html/_sources/tutorials/tutorials.rst.txt +++ b/html/_sources/tutorials/tutorials.rst.txt @@ -9,3 +9,4 @@ Tutorials hls.md live.md drm.rst + ffmpeg_piping.rst diff --git a/html/_sources/tutorials/widevine.rst.txt b/html/_sources/tutorials/widevine.rst.txt index e8f2861be1..74e1bb2685 100644 --- a/html/_sources/tutorials/widevine.rst.txt +++ b/html/_sources/tutorials/widevine.rst.txt @@ -62,19 +62,19 @@ Widevine test credential Here is the test crendential used in this tutorial. -key_server_url +:key_server_url: https://license.uat.widevine.com/cenc/getcontentkey/widevine_test -signer +:signer: widevine_test -aes_signing_key +:aes_signing_key: 1ae8ccd0e7985cc0b6203a55855a1034afc252980e970ca90e5202689f947ab9 -aes_signing_iv +:aes_signing_iv: d58ce954203b7c9a9a9d467f59839249 diff --git a/html/build_instructions.html b/html/build_instructions.html index 4e594d0093..57912b94c3 100644 --- a/html/build_instructions.html +++ b/html/build_instructions.html @@ -283,7 +283,7 @@ $ ninja -C out/Release_x64

    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 +

    See Shaka Packager Documentation on how to use Shaka Packager.

    diff --git a/html/documentation.html b/html/documentation.html index 3dc6c07551..acddc8ab8f 100644 --- a/html/documentation.html +++ b/html/documentation.html @@ -55,6 +55,7 @@
  • Getting Shaka Packager
  • Synopsis
    • Stream descriptors
    • +
    • DRM related Stream descriptor fields
    • HLS specific stream descriptor fields
    • Chunking options
    • MP4 output options
    • @@ -146,7 +147,7 @@ Instructions are available at

      There can be multiple stream_descriptor with input from the same “file” or multiple different “files”.

      -

      Stream is of the form:

      +

      Stream descriptor is of the form:

      {field}={value}[,{field}={value}]...
       
      @@ -190,14 +191,29 @@ this value overrides any language metadata in the input stream. If not specified, it will be derived from the file extension of the output file. +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. + + + +
  • +