Skip to content

Commit

Permalink
EncryptionInfoEntry now has ToString() and ToString(std::string)
Browse files Browse the repository at this point in the history
Moved HlsEntry-derived classes to shaka::hls namespace
  • Loading branch information
SteveR-PMP committed Oct 17, 2024
1 parent f181340 commit ed20c90
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 64 deletions.
6 changes: 4 additions & 2 deletions packager/hls/base/master_playlist.cc
Original file line number Diff line number Diff line change
Expand Up @@ -576,8 +576,10 @@ bool MasterPlaylist::WriteMasterPlaylist(
std::set<std::string> session_keys;
for (const auto& playlist : playlists) {
for (const auto& entry : playlist->entries()) {
if (entry->type() == HlsEntry::EntryType::kExtKey)
session_keys.emplace(entry->ToString("#EXT-X-SESSION-KEY"));
if (entry->type() == HlsEntry::EntryType::kExtKey) {
auto encryption_entry = dynamic_cast<EncryptionInfoEntry*>(entry.get());
session_keys.emplace(encryption_entry->ToString("#EXT-X-SESSION-KEY"));
}
}
}
// session_keys will now contain all the unique session keys.
Expand Down
105 changes: 44 additions & 61 deletions packager/hls/base/media_playlist.cc
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,12 @@ std::string CreatePlaylistHeader(
return header;
}


} // namespace

HlsEntry::HlsEntry(HlsEntry::EntryType type) : type_(type) {}
HlsEntry::~HlsEntry() {}

class SegmentInfoEntry : public HlsEntry {
public:
// If |use_byte_range| true then this will append EXT-X-BYTERANGE
Expand All @@ -181,7 +187,7 @@ class SegmentInfoEntry : public HlsEntry {
uint64_t segment_file_size,
uint64_t previous_segment_end_offset);

std::string ToString(std::string) override;
std::string ToString() override;
int64_t start_time() const { return start_time_; }
double duration_seconds() const { return duration_seconds_; }
void set_duration_seconds(double duration_seconds) {
Expand Down Expand Up @@ -217,7 +223,7 @@ SegmentInfoEntry::SegmentInfoEntry(const std::string& file_name,
segment_file_size_(segment_file_size),
previous_segment_end_offset_(previous_segment_end_offset) {}

std::string SegmentInfoEntry::ToString(std::string) {
std::string SegmentInfoEntry::ToString() {
std::string result = absl::StrFormat("#EXTINF:%.3f,", duration_seconds_);

if (use_byte_range_) {
Expand All @@ -233,29 +239,44 @@ std::string SegmentInfoEntry::ToString(std::string) {
return result;
}

class EncryptionInfoEntry : public HlsEntry {

class DiscontinuityEntry : public HlsEntry {
public:
EncryptionInfoEntry(MediaPlaylist::EncryptionMethod method,
const std::string& url,
const std::string& key_id,
const std::string& iv,
const std::string& key_format,
const std::string& key_format_versions);
DiscontinuityEntry();

std::string ToString(std::string) override;
std::string ToString() override;

private:
EncryptionInfoEntry(const EncryptionInfoEntry&) = delete;
EncryptionInfoEntry& operator=(const EncryptionInfoEntry&) = delete;

const MediaPlaylist::EncryptionMethod method_;
const std::string url_;
const std::string key_id_;
const std::string iv_;
const std::string key_format_;
const std::string key_format_versions_;
DiscontinuityEntry(const DiscontinuityEntry&) = delete;
DiscontinuityEntry& operator=(const DiscontinuityEntry&) = delete;
};

DiscontinuityEntry::DiscontinuityEntry()
: HlsEntry(HlsEntry::EntryType::kExtDiscontinuity) {}

std::string DiscontinuityEntry::ToString() {
return "#EXT-X-DISCONTINUITY";
}

class PlacementOpportunityEntry : public HlsEntry {
public:
PlacementOpportunityEntry();

std::string ToString() override;

private:
PlacementOpportunityEntry(const PlacementOpportunityEntry&) = delete;
PlacementOpportunityEntry& operator=(const PlacementOpportunityEntry&) =
delete;
};

PlacementOpportunityEntry::PlacementOpportunityEntry()
: HlsEntry(HlsEntry::EntryType::kExtPlacementOpportunity) {}

std::string PlacementOpportunityEntry::ToString() {
return "#EXT-X-PLACEMENT-OPPORTUNITY";
}

EncryptionInfoEntry::EncryptionInfoEntry(MediaPlaylist::EncryptionMethod method,
const std::string& url,
const std::string& key_id,
Expand All @@ -270,6 +291,10 @@ EncryptionInfoEntry::EncryptionInfoEntry(MediaPlaylist::EncryptionMethod method,
key_format_(key_format),
key_format_versions_(key_format_versions) {}

std::string EncryptionInfoEntry::ToString() {
return ToString("");
}

std::string EncryptionInfoEntry::ToString(std::string tag_name) {
std::string tag_string;
if (tag_name.empty())
Expand Down Expand Up @@ -305,48 +330,6 @@ std::string EncryptionInfoEntry::ToString(std::string tag_name) {
return tag_string;
}

class DiscontinuityEntry : public HlsEntry {
public:
DiscontinuityEntry();

std::string ToString(std::string) override;

private:
DiscontinuityEntry(const DiscontinuityEntry&) = delete;
DiscontinuityEntry& operator=(const DiscontinuityEntry&) = delete;
};

DiscontinuityEntry::DiscontinuityEntry()
: HlsEntry(HlsEntry::EntryType::kExtDiscontinuity) {}

std::string DiscontinuityEntry::ToString(std::string) {
return "#EXT-X-DISCONTINUITY";
}

class PlacementOpportunityEntry : public HlsEntry {
public:
PlacementOpportunityEntry();

std::string ToString(std::string) override;

private:
PlacementOpportunityEntry(const PlacementOpportunityEntry&) = delete;
PlacementOpportunityEntry& operator=(const PlacementOpportunityEntry&) =
delete;
};

PlacementOpportunityEntry::PlacementOpportunityEntry()
: HlsEntry(HlsEntry::EntryType::kExtPlacementOpportunity) {}

std::string PlacementOpportunityEntry::ToString(std::string) {
return "#EXT-X-PLACEMENT-OPPORTUNITY";
}

} // namespace

HlsEntry::HlsEntry(HlsEntry::EntryType type) : type_(type) {}
HlsEntry::~HlsEntry() {}

MediaPlaylist::MediaPlaylist(const HlsParams& hls_params,
const std::string& file_name,
const std::string& name,
Expand Down
26 changes: 25 additions & 1 deletion packager/hls/base/media_playlist.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class HlsEntry {
virtual ~HlsEntry();

EntryType type() const { return type_; }
virtual std::string ToString(std::string tag_name = "") = 0;
virtual std::string ToString() = 0;

protected:
explicit HlsEntry(EntryType type);
Expand Down Expand Up @@ -321,6 +321,30 @@ class MediaPlaylist {
DISALLOW_COPY_AND_ASSIGN(MediaPlaylist);
};

class EncryptionInfoEntry : public HlsEntry {
public:
EncryptionInfoEntry(MediaPlaylist::EncryptionMethod method,
const std::string& url,
const std::string& key_id,
const std::string& iv,
const std::string& key_format,
const std::string& key_format_versions);

std::string ToString() override;
std::string ToString(std::string);

private:
EncryptionInfoEntry(const EncryptionInfoEntry&) = delete;
EncryptionInfoEntry& operator=(const EncryptionInfoEntry&) = delete;

const MediaPlaylist::EncryptionMethod method_;
const std::string url_;
const std::string key_id_;
const std::string iv_;
const std::string key_format_;
const std::string key_format_versions_;
};

} // namespace hls
} // namespace shaka

Expand Down

0 comments on commit ed20c90

Please # to comment.