vlc | branch: master | Francois Cartegnie <[email protected]> | Fri Apr 19 13:25:19 2019 +0200| [29d5f44edf21e31e13c5469e8199c728caec8c56] | committer: Francois Cartegnie
demux: adaptive: add encryption to segment info > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=29d5f44edf21e31e13c5469e8199c728caec8c56 --- modules/demux/adaptive/encryption/CommonEncryption.cpp | 11 +++++++++++ modules/demux/adaptive/encryption/CommonEncryption.hpp | 1 + modules/demux/adaptive/playlist/Segment.cpp | 9 ++++++--- modules/demux/adaptive/playlist/SegmentInformation.cpp | 13 +++++++++++++ modules/demux/adaptive/playlist/SegmentInformation.hpp | 4 ++++ 5 files changed, 35 insertions(+), 3 deletions(-) diff --git a/modules/demux/adaptive/encryption/CommonEncryption.cpp b/modules/demux/adaptive/encryption/CommonEncryption.cpp index 743e04e860..990016d2c7 100644 --- a/modules/demux/adaptive/encryption/CommonEncryption.cpp +++ b/modules/demux/adaptive/encryption/CommonEncryption.cpp @@ -41,6 +41,17 @@ CommonEncryption::CommonEncryption() method = CommonEncryption::Method::NONE; } +void CommonEncryption::mergeWith(const CommonEncryption &other) +{ + if(method == CommonEncryption::Method::NONE && + other.method != CommonEncryption::Method::NONE) + method = other.method; + if(uri.empty() && !other.uri.empty()) + uri = other.uri; + if(iv.empty() && !other.iv.empty()) + iv = other.iv; +} + CommonEncryptionSession::CommonEncryptionSession() { ctx = NULL; diff --git a/modules/demux/adaptive/encryption/CommonEncryption.hpp b/modules/demux/adaptive/encryption/CommonEncryption.hpp index 66631c3d2a..1645c57e94 100644 --- a/modules/demux/adaptive/encryption/CommonEncryption.hpp +++ b/modules/demux/adaptive/encryption/CommonEncryption.hpp @@ -33,6 +33,7 @@ namespace adaptive { public: CommonEncryption(); + void mergeWith(const CommonEncryption &); enum Method { NONE, diff --git a/modules/demux/adaptive/playlist/Segment.cpp b/modules/demux/adaptive/playlist/Segment.cpp index 36051a9450..21b0707286 100644 --- a/modules/demux/adaptive/playlist/Segment.cpp +++ b/modules/demux/adaptive/playlist/Segment.cpp @@ -67,12 +67,15 @@ void ISegment::onChunkDownload(block_t **, SegmentChunk *, BaseRepresentation *) } -bool ISegment::prepareChunk(SharedResources *res, SegmentChunk *chunk, BaseRepresentation *) +bool ISegment::prepareChunk(SharedResources *res, SegmentChunk *chunk, BaseRepresentation *rep) { - if(encryption.method != CommonEncryption::Method::NONE) + CommonEncryption enc = encryption; + enc.mergeWith(rep->intheritEncryption()); + + if(enc.method != CommonEncryption::Method::NONE) { CommonEncryptionSession *encryptionSession = new CommonEncryptionSession(); - if(!encryptionSession->start(res, encryption)) + if(!encryptionSession->start(res, enc)) { delete encryptionSession; return false; diff --git a/modules/demux/adaptive/playlist/SegmentInformation.cpp b/modules/demux/adaptive/playlist/SegmentInformation.cpp index ba5e4e30c7..d39a55ee49 100644 --- a/modules/demux/adaptive/playlist/SegmentInformation.cpp +++ b/modules/demux/adaptive/playlist/SegmentInformation.cpp @@ -30,6 +30,7 @@ #include "SegmentTimeline.h" #include "AbstractPlaylist.hpp" #include "BaseRepresentation.h" +#include "../encryption/CommonEncryption.hpp" #include <algorithm> #include <cassert> @@ -510,6 +511,18 @@ uint64_t SegmentInformation::translateSegmentNumber(uint64_t num, const SegmentI return num; } +const CommonEncryption & SegmentInformation::intheritEncryption() const +{ + if(parent && commonEncryption.method == CommonEncryption::Method::NONE) + return parent->intheritEncryption(); + return commonEncryption; +} + +void SegmentInformation::setEncryption(const CommonEncryption &enc) +{ + commonEncryption = enc; +} + vlc_tick_t SegmentInformation::getPeriodStart() const { if(parent) diff --git a/modules/demux/adaptive/playlist/SegmentInformation.hpp b/modules/demux/adaptive/playlist/SegmentInformation.hpp index 0307d90985..5eb12183b5 100644 --- a/modules/demux/adaptive/playlist/SegmentInformation.hpp +++ b/modules/demux/adaptive/playlist/SegmentInformation.hpp @@ -22,6 +22,7 @@ #include "ICanonicalUrl.hpp" #include "../tools/Properties.hpp" +#include "../encryption/CommonEncryption.hpp" #include "SegmentInfoCommon.h" #include <vlc_common.h> #include <vector> @@ -86,6 +87,8 @@ namespace adaptive virtual void pruneBySegmentNumber(uint64_t); virtual void pruneByPlaybackTime(vlc_tick_t); virtual uint64_t translateSegmentNumber(uint64_t, const SegmentInformation *) const; + void setEncryption(const CommonEncryption &); + const CommonEncryption & intheritEncryption() const; protected: std::size_t getAllSegments(std::vector<ISegment *> &) const; @@ -110,6 +113,7 @@ namespace adaptive SegmentBase *segmentBase; SegmentList *segmentList; MediaSegmentTemplate *mediaSegmentTemplate; + CommonEncryption commonEncryption; }; } } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
