Merge remote-tracking branch 'upstream/main' into cmake
This commit is contained in:
commit
5557e76c2b
|
@ -3,6 +3,7 @@
|
||||||
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT6.022683143615723S">
|
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT6.022683143615723S">
|
||||||
<Period id="0">
|
<Period id="0">
|
||||||
<AdaptationSet id="0" contentType="video" width="640" height="360" frameRate="60000/1001" subsegmentAlignment="true" par="16:9">
|
<AdaptationSet id="0" contentType="video" width="640" height="360" frameRate="60000/1001" subsegmentAlignment="true" par="16:9">
|
||||||
|
<SupplementalProperty schemeIdUri="urn:mpeg:mpegB:cicp:TransferCharacteristics" value="16"/>
|
||||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
|
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
|
||||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT6.022683143615723S">
|
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT6.022683143615723S">
|
||||||
<Period id="0">
|
<Period id="0">
|
||||||
<AdaptationSet id="0" contentType="video" width="640" height="360" frameRate="60000/1001" subsegmentAlignment="true" par="16:9">
|
<AdaptationSet id="0" contentType="video" width="640" height="360" frameRate="60000/1001" subsegmentAlignment="true" par="16:9">
|
||||||
|
<SupplementalProperty schemeIdUri="urn:mpeg:mpegB:cicp:TransferCharacteristics" value="16"/>
|
||||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
|
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
|
||||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||||
|
@ -15,6 +16,7 @@
|
||||||
</Representation>
|
</Representation>
|
||||||
</AdaptationSet>
|
</AdaptationSet>
|
||||||
<AdaptationSet id="1" contentType="video" width="640" height="360" frameRate="60000/1001" subsegmentAlignment="true" par="16:9">
|
<AdaptationSet id="1" contentType="video" width="640" height="360" frameRate="60000/1001" subsegmentAlignment="true" par="16:9">
|
||||||
|
<SupplementalProperty schemeIdUri="urn:mpeg:mpegB:cicp:TransferCharacteristics" value="16"/>
|
||||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
|
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
|
||||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT2.802799940109253S">
|
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT2.802799940109253S">
|
||||||
<Period id="0">
|
<Period id="0">
|
||||||
<AdaptationSet id="0" contentType="video" width="640" height="360" frameRate="30000/1001" subsegmentAlignment="true" par="16:9">
|
<AdaptationSet id="0" contentType="video" width="640" height="360" frameRate="30000/1001" subsegmentAlignment="true" par="16:9">
|
||||||
|
<SupplementalProperty schemeIdUri="urn:mpeg:mpegB:cicp:TransferCharacteristics" value="16"/>
|
||||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
|
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
|
||||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||||
|
|
|
@ -291,6 +291,14 @@ std::optional<xml::XmlNode> AdaptationSet::GetXml() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf - 4.2.5.1
|
||||||
|
if (IsVideo() && transfer_characteristics_ > 0 &&
|
||||||
|
!adaptation_set.AddSupplementalProperty(
|
||||||
|
"urn:mpeg:mpegB:cicp:TransferCharacteristics",
|
||||||
|
std::to_string(transfer_characteristics_))) {
|
||||||
|
return base::nullopt;
|
||||||
|
}
|
||||||
|
|
||||||
// Note: must be checked before checking segments_aligned_ (below). So that
|
// Note: must be checked before checking segments_aligned_ (below). So that
|
||||||
// segments_aligned_ is set before checking below.
|
// segments_aligned_ is set before checking below.
|
||||||
if (mpd_options_.mpd_type == MpdType::kStatic) {
|
if (mpd_options_.mpd_type == MpdType::kStatic) {
|
||||||
|
|
|
@ -180,6 +180,17 @@ class AdaptationSet {
|
||||||
/// @param codec is the new codec to be set.
|
/// @param codec is the new codec to be set.
|
||||||
void set_codec(const std::string& codec) { codec_ = codec; };
|
void set_codec(const std::string& codec) { codec_ = codec; };
|
||||||
|
|
||||||
|
/// @return transfer_characteristics.
|
||||||
|
const uint32_t transfer_characteristics() const {
|
||||||
|
return transfer_characteristics_;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set AdaptationSet's video transfer characteristics.
|
||||||
|
/// @param transfer_characteristics is the video transfer characteristics.
|
||||||
|
void set_transfer_characteristics(const uint32_t& transfer_characteristics) {
|
||||||
|
transfer_characteristics_ = transfer_characteristics;
|
||||||
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// @param language is the language of this AdaptationSet. Mainly relevant for
|
/// @param language is the language of this AdaptationSet. Mainly relevant for
|
||||||
/// audio.
|
/// audio.
|
||||||
|
@ -314,6 +325,9 @@ class AdaptationSet {
|
||||||
// and HD videos in different AdaptationSets can share the same trick play
|
// and HD videos in different AdaptationSets can share the same trick play
|
||||||
// stream.
|
// stream.
|
||||||
std::vector<const AdaptationSet*> trick_play_references_;
|
std::vector<const AdaptationSet*> trick_play_references_;
|
||||||
|
|
||||||
|
// Transfer characteristics.
|
||||||
|
uint32_t transfer_characteristics_ = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace shaka
|
} // namespace shaka
|
||||||
|
|
|
@ -163,6 +163,17 @@ std::string GetAdaptationSetKey(const MediaInfo& media_info,
|
||||||
if (!ignore_codec) {
|
if (!ignore_codec) {
|
||||||
key.append(":");
|
key.append(":");
|
||||||
key.append(GetBaseCodec(media_info));
|
key.append(GetBaseCodec(media_info));
|
||||||
|
|
||||||
|
if (GetBaseCodec(media_info).find("dvh") == 0) {
|
||||||
|
// Transfer characteristics for Dolby Vision (dvh1 or dvhe) must be PQ
|
||||||
|
// irrespective of value present in SPS VUI.
|
||||||
|
key.append(":");
|
||||||
|
key.append(std::to_string(kTransferFunctionPQ));
|
||||||
|
} else if (media_info.video_info().has_transfer_characteristics()) {
|
||||||
|
key.append(":");
|
||||||
|
key.append(
|
||||||
|
std::to_string(media_info.video_info().transfer_characteristics()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
key.append(":");
|
key.append(":");
|
||||||
key.append(GetLanguage(media_info));
|
key.append(GetLanguage(media_info));
|
||||||
|
|
|
@ -25,6 +25,7 @@ struct SegmentInfo;
|
||||||
const char kEncryptedMp4Scheme[] = "urn:mpeg:dash:mp4protection:2011";
|
const char kEncryptedMp4Scheme[] = "urn:mpeg:dash:mp4protection:2011";
|
||||||
const char kPsshElementName[] = "cenc:pssh";
|
const char kPsshElementName[] = "cenc:pssh";
|
||||||
const char kMsproElementName[] = "mspr:pro";
|
const char kMsproElementName[] = "mspr:pro";
|
||||||
|
const uint32_t kTransferFunctionPQ = 16;
|
||||||
|
|
||||||
bool HasVODOnlyFields(const MediaInfo& media_info);
|
bool HasVODOnlyFields(const MediaInfo& media_info);
|
||||||
|
|
||||||
|
|
|
@ -269,6 +269,22 @@ bool Period::SetNewAdaptationSetAttributes(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set transfer characteristics.
|
||||||
|
// https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf - 4.2.5.1
|
||||||
|
// ISO/IEC 23001-8 MPEG systems technologies — Part 8: Coding-independent
|
||||||
|
// code points. https://en.wikipedia.org/wiki/Coding-independent_code_points
|
||||||
|
// - Common CCIP values.
|
||||||
|
// Dolby vision:
|
||||||
|
// https://professionalsupport.dolby.com/s/article/How-to-signal-Dolby-Vision-in-MPEG-DASH
|
||||||
|
// Transfer characteristics for Dolby Vision (dvh1 or dvhe) must be PQ
|
||||||
|
// irrespective of value present in SPS VUI.
|
||||||
|
if (new_adaptation_set->codec().find("dvh") == 0) {
|
||||||
|
new_adaptation_set->set_transfer_characteristics(kTransferFunctionPQ);
|
||||||
|
} else if (media_info.video_info().has_transfer_characteristics()) {
|
||||||
|
new_adaptation_set->set_transfer_characteristics(
|
||||||
|
media_info.video_info().transfer_characteristics());
|
||||||
|
}
|
||||||
|
|
||||||
} else if (media_info.has_text_info()) {
|
} else if (media_info.has_text_info()) {
|
||||||
// IOP requires all AdaptationSets to have (sub)segmentAlignment set to
|
// IOP requires all AdaptationSets to have (sub)segmentAlignment set to
|
||||||
// true, so carelessly set it to true.
|
// true, so carelessly set it to true.
|
||||||
|
|
Loading…
Reference in New Issue