From c09eb831b85c93eb122373ce82b64c354d68c3c1 Mon Sep 17 00:00:00 2001 From: modernletter <50334733+modernletter@users.noreply.github.com> Date: Thu, 8 Feb 2024 20:58:26 +0100 Subject: [PATCH] feat: Parse MPEG-TS PMT ES language and maximum bitrate descriptors (#369) (#1311) Part of https://github.com/shaka-project/shaka-packager/issues/369 This adds read support for some MPEG-TS PMT elementary stream descriptors: - ISO639 Language Descriptor providing language code and audio type - Maximum Bitrate Descriptor providing peak stream bandwidth Those metadata are propagated to StreamInfo structures: - StreamInfo.language field - AudioStreamMetadata.max_bitrate field for audio streams - audio type is currently not propagated - corresponding field has to be added to AudioStreamMetadata Test vector file containing those descriptors is provided. --- packager/media/base/audio_stream_info.h | 4 ++ packager/media/formats/mp2t/CMakeLists.txt | 1 + .../media/formats/mp2t/mp2t_media_parser.cc | 27 +++++++- .../media/formats/mp2t/mp2t_media_parser.h | 16 +++++ .../mp2t/mp2t_media_parser_unittest.cc | 14 ++++ packager/media/formats/mp2t/ts_audio_type.h | 30 ++++++++ packager/media/formats/mp2t/ts_section_pmt.cc | 65 +++++++++++++++--- packager/media/formats/mp2t/ts_section_pmt.h | 16 ++++- packager/media/test/data/README | 6 ++ .../bear-visualy-impaired-eng-audio-pmt.xml | 12 ++++ .../data/bear-visualy-impaired-eng-audio.ts | Bin 0 -> 83472 bytes 11 files changed, 179 insertions(+), 12 deletions(-) create mode 100644 packager/media/formats/mp2t/ts_audio_type.h create mode 100644 packager/media/test/data/bear-visualy-impaired-eng-audio-pmt.xml create mode 100644 packager/media/test/data/bear-visualy-impaired-eng-audio.ts diff --git a/packager/media/base/audio_stream_info.h b/packager/media/base/audio_stream_info.h index 7e1bfadc93..ed6af81673 100644 --- a/packager/media/base/audio_stream_info.h +++ b/packager/media/base/audio_stream_info.h @@ -60,6 +60,10 @@ class AudioStreamInfo : public StreamInfo { sampling_frequency_ = sampling_frequency; } + void set_max_bitrate(const uint32_t max_bitrate) { + max_bitrate_ = max_bitrate; + } + /// @param audio_object_type is only used by AAC Codec, ignored otherwise. /// @return The codec string. static std::string GetCodecString(Codec codec, uint8_t audio_object_type); diff --git a/packager/media/formats/mp2t/CMakeLists.txt b/packager/media/formats/mp2t/CMakeLists.txt index 6c4d5b7b5a..8aa9fb95cc 100644 --- a/packager/media/formats/mp2t/CMakeLists.txt +++ b/packager/media/formats/mp2t/CMakeLists.txt @@ -33,6 +33,7 @@ add_library(mp2t STATIC pes_packet_generator.h program_map_table_writer.cc program_map_table_writer.h + ts_audio_type.h ts_muxer.cc ts_muxer.h ts_packet.cc diff --git a/packager/media/formats/mp2t/mp2t_media_parser.cc b/packager/media/formats/mp2t/mp2t_media_parser.cc index a83c95ad27..a7e4ed5adc 100644 --- a/packager/media/formats/mp2t/mp2t_media_parser.cc +++ b/packager/media/formats/mp2t/mp2t_media_parser.cc @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -274,7 +275,8 @@ void Mp2tMediaParser::RegisterPmt(int program_number, int pmt_pid) { DVLOG(1) << "Create a new PMT parser"; std::unique_ptr pmt_section_parser(new TsSectionPmt(std::bind( &Mp2tMediaParser::RegisterPes, this, pmt_pid, std::placeholders::_1, - std::placeholders::_2, std::placeholders::_3, std::placeholders::_4))); + std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, + std::placeholders::_5, std::placeholders::_6, std::placeholders::_7))); std::unique_ptr pmt_pid_state( new PidState(pmt_pid, PidState::kPidPmt, std::move(pmt_section_parser))); pmt_pid_state->Enable(); @@ -284,13 +286,19 @@ void Mp2tMediaParser::RegisterPmt(int program_number, int pmt_pid) { void Mp2tMediaParser::RegisterPes(int pmt_pid, int pes_pid, TsStreamType stream_type, + uint32_t max_bitrate, + const std::string& lang, + TsAudioType audio_type, const uint8_t* descriptor, size_t descriptor_length) { if (pids_.count(pes_pid) != 0) return; DVLOG(1) << "RegisterPes:" << " pes_pid=" << pes_pid << " stream_type=" << std::hex - << static_cast(stream_type) << std::dec; + << static_cast(stream_type) << std::dec + << "max_bitrate=" << max_bitrate << " lang=" << lang + << "audio_type=" << std::hex << static_cast(audio_type) + << std::dec; // Create a stream parser corresponding to the stream type. PidState::PidType pid_type = PidState::kPidVideoPes; @@ -340,6 +348,10 @@ void Mp2tMediaParser::RegisterPes(int pmt_pid, new PidState(pes_pid, pid_type, std::move(pes_section_parser))); pes_pid_state->Enable(); pids_.emplace(pes_pid, std::move(pes_pid_state)); + + // Store PES metadata. + pes_metadata_.insert( + std::make_pair(pes_pid, PesMetadata{max_bitrate, lang, audio_type})); } void Mp2tMediaParser::OnNewStreamInfo( @@ -358,6 +370,17 @@ void Mp2tMediaParser::OnNewStreamInfo( if (new_stream_info) { // Set the stream configuration information for the PID. + auto pes_metadata = pes_metadata_.find(pes_pid); + DCHECK(pes_metadata != pes_metadata_.end()); + if (!pes_metadata->second.language.empty()) + new_stream_info->set_language(pes_metadata->second.language); + if (new_stream_info->stream_type() == kStreamAudio) { + auto* audio_info = static_cast(new_stream_info.get()); + audio_info->set_max_bitrate(pes_metadata->second.max_bitrate); + // TODO(modernletter) Add some field for audio type to AudioStreamInfo + // and set here from audio_type + } + pid_state->second->set_config(new_stream_info); } else { LOG(WARNING) << "Ignoring unsupported stream with pid=" << pes_pid; diff --git a/packager/media/formats/mp2t/mp2t_media_parser.h b/packager/media/formats/mp2t/mp2t_media_parser.h index 5ddcc74ac5..1cbceee4d5 100644 --- a/packager/media/formats/mp2t/mp2t_media_parser.h +++ b/packager/media/formats/mp2t/mp2t_media_parser.h @@ -9,11 +9,13 @@ #include #include #include +#include #include #include #include #include +#include #include namespace shaka { @@ -27,6 +29,12 @@ class PidState; class TsPacket; class TsSection; +struct PesMetadata { + uint32_t max_bitrate; + std::string language; + TsAudioType audio_type; +}; + class Mp2tMediaParser : public MediaParser { public: Mp2tMediaParser(); @@ -50,10 +58,15 @@ class Mp2tMediaParser : public MediaParser { // Callback invoked to register a PES pid. // Possible values for |media_type| are defined in: // ISO-13818.1 / ITU H.222 Table 2.34 "Media type assignments". + // Possible values for |audio_type| are defined in: + // ISO-13818.1 / ITU H.222 Table 2-60 "Audio type values". // |pes_pid| is part of the Program Map Table refered by |pmt_pid|. void RegisterPes(int pmt_pid, int pes_pid, TsStreamType media_type, + uint32_t max_bitrate, + const std::string& lang, + TsAudioType audio_type, const uint8_t* descriptor, size_t descriptor_length); @@ -94,6 +107,9 @@ class Mp2tMediaParser : public MediaParser { // has a deterministic order. std::map> pids_; + // Map of PIDs and their metadata. + std::map pes_metadata_; + // Whether |init_cb_| has been invoked. bool is_initialized_; diff --git a/packager/media/formats/mp2t/mp2t_media_parser_unittest.cc b/packager/media/formats/mp2t/mp2t_media_parser_unittest.cc index aeb44b248b..60808daa3b 100644 --- a/packager/media/formats/mp2t/mp2t_media_parser_unittest.cc +++ b/packager/media/formats/mp2t/mp2t_media_parser_unittest.cc @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -190,6 +191,19 @@ TEST_F(Mp2tMediaParserTest, PtsZeroDtsWrapAround) { EXPECT_GT(video_max_pts_, static_cast(1) << 33); } +TEST_F(Mp2tMediaParserTest, PmtEsDescriptors) { + //"bear-eng-visualy-impaired-audio.ts" consist of audio stream marked as + // english audio with commentary for visualy impaired viewer and max + // bitrate set to ~128kbps + + ParseMpeg2TsFile("bear-visualy-impaired-eng-audio.ts", 188); + EXPECT_TRUE(parser_->Flush()); + EXPECT_STREQ("eng", stream_map_[257]->language().c_str()); + + auto* audio_info = static_cast(stream_map_[257].get()); + EXPECT_EQ(131600, audio_info->max_bitrate()); +} + } // namespace mp2t } // namespace media } // namespace shaka diff --git a/packager/media/formats/mp2t/ts_audio_type.h b/packager/media/formats/mp2t/ts_audio_type.h new file mode 100644 index 0000000000..a8347dcad0 --- /dev/null +++ b/packager/media/formats/mp2t/ts_audio_type.h @@ -0,0 +1,30 @@ +// Copyright 2023 Google LLC. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file or at +// https://developers.google.com/open-source/licenses/bsd + +#ifndef PACKAGER_MEDIA_FORMATS_MP2T_TS_AUDIO_TYPE_H +#define PACKAGER_MEDIA_FORMATS_MP2T_TS_AUDIO_TYPE_H + +#include + +namespace shaka { +namespace media { +namespace mp2t { + +enum class TsAudioType : uint8_t { + // ISO-13818.1 / ITU H.222 Table 2-60 "Audio type values" + kUndefined = 0x00, + kCleanEffects = 0x01, + kHearingImpaired = 0x02, + kVisualyImpairedCommentary = 0x03, + // 0x04-0x7F - user private + // 0x80-0xFF - reserved +}; + +} // namespace mp2t +} // namespace media +} // namespace shaka + +#endif // PACKAGER_MEDIA_FORMATS_MP2T_TS_AUDIO_TYPE_H diff --git a/packager/media/formats/mp2t/ts_section_pmt.cc b/packager/media/formats/mp2t/ts_section_pmt.cc index 07aef73413..f8748017e0 100644 --- a/packager/media/formats/mp2t/ts_section_pmt.cc +++ b/packager/media/formats/mp2t/ts_section_pmt.cc @@ -10,12 +10,21 @@ #include #include +#include #include namespace shaka { namespace media { namespace mp2t { +namespace { + +const int kISO639LanguageDescriptor = 0x0A; +const int kMaximumBitrateDescriptor = 0x0E; +const int kSubtitlingDescriptor = 0x59; + +} // namespace + TsSectionPmt::TsSectionPmt(const RegisterPesCb& register_pes_cb) : register_pes_cb_(register_pes_cb) { } @@ -82,6 +91,9 @@ bool TsSectionPmt::ParsePsiSection(BitReader* bit_reader) { TsStreamType stream_type; const uint8_t* descriptor; size_t descriptor_length; + std::string lang; + uint32_t max_bitrate; + TsAudioType audio_type; }; std::vector pid_info; while (static_cast(bit_reader->bits_available()) > @@ -99,22 +111,59 @@ bool TsSectionPmt::ParsePsiSection(BitReader* bit_reader) { // Do not register the PID right away. // Wait for the end of the section to be fully parsed // to make sure there is no error. - pid_info.push_back({pid_es, stream_type, descriptor, es_info_length}); + pid_info.push_back({pid_es, stream_type, descriptor, es_info_length, "", 0, + TsAudioType::kUndefined}); // Read the ES info descriptors. // Defined in section 2.6 of ISO-13818. - if (es_info_length > 0) { - uint8_t descriptor_tag; + uint8_t descriptor_tag; + uint8_t descriptor_length; + + while (es_info_length) { RCHECK(bit_reader->ReadBits(8, &descriptor_tag)); - es_info_length--; + RCHECK(bit_reader->ReadBits(8, &descriptor_length)); + es_info_length -= 2; // See ETSI EN 300 468 Section 6.1 if (stream_type == TsStreamType::kPesPrivateData && - descriptor_tag == 0x59) { // subtitling_descriptor + descriptor_tag == kSubtitlingDescriptor) { pid_info.back().stream_type = TsStreamType::kDvbSubtitles; + } else if (descriptor_tag == kISO639LanguageDescriptor && + descriptor_length >= 4) { + // See section 2.6.19 of ISO-13818 + // Descriptor can contain 0..N language defintions, + // we process only the first one + RCHECK(es_info_length >= 4); + + char lang[3]; + RCHECK(bit_reader->ReadBits(8, &lang[0])); // ISO_639_language_code + RCHECK(bit_reader->ReadBits(8, &lang[1])); + RCHECK(bit_reader->ReadBits(8, &lang[2])); + RCHECK(bit_reader->ReadBits(8, &pid_info.back().audio_type)); + pid_info.back().lang = std::string(lang, 3); + + es_info_length -= 4; + descriptor_length -= 4; + } else if (descriptor_tag == kMaximumBitrateDescriptor && + descriptor_length >= 3) { + // See section 2.6.25 of ISO-13818 + RCHECK(es_info_length >= 3); + + uint32_t max_bitrate; + RCHECK(bit_reader->SkipBits(2)); // reserved + RCHECK(bit_reader->ReadBits(22, &max_bitrate)); + // maximum bitrate is stored in units of 50 bytes per second + pid_info.back().max_bitrate = 50 * 8 * max_bitrate; + + es_info_length -= 3; + descriptor_length -= 3; } + + RCHECK(bit_reader->SkipBits(8 * descriptor_length)); + es_info_length -= descriptor_length; } - RCHECK(bit_reader->SkipBits(8 * es_info_length)); + + RCHECK(bit_reader->SkipBytes(es_info_length)); } // Read the CRC. @@ -123,8 +172,8 @@ bool TsSectionPmt::ParsePsiSection(BitReader* bit_reader) { // Once the PMT has been proved to be correct, register the PIDs. for (auto& info : pid_info) { - register_pes_cb_(info.pid_es, info.stream_type, info.descriptor, - info.descriptor_length); + register_pes_cb_(info.pid_es, info.stream_type, info.max_bitrate, info.lang, + info.audio_type, info.descriptor, info.descriptor_length); } return true; diff --git a/packager/media/formats/mp2t/ts_section_pmt.h b/packager/media/formats/mp2t/ts_section_pmt.h index 96075281bb..fd3eddeebb 100644 --- a/packager/media/formats/mp2t/ts_section_pmt.h +++ b/packager/media/formats/mp2t/ts_section_pmt.h @@ -6,8 +6,10 @@ #define PACKAGER_MEDIA_FORMATS_MP2T_TS_SECTION_PMT_H_ #include +#include #include +#include #include #include @@ -17,10 +19,20 @@ namespace mp2t { class TsSectionPmt : public TsSectionPsi { public: - // RegisterPesCb::Run(int pes_pid, int stream_type); + // RegisterPesCb::Run(int pes_pid, int stream_type, uint32_t max_bitrate, + // const string& lang, TsAudioType audio_type, uint8_t* descriptor, + // size_t desriptor_size); // Stream type is defined in // "Table 2-34 – Stream type assignments" in H.222 - typedef std::function + // Audio type is defined in + // "Table 2-60 - Audio type values" in H.222 + typedef std::function RegisterPesCb; explicit TsSectionPmt(const RegisterPesCb& register_pes_cb); diff --git a/packager/media/test/data/README b/packager/media/test/data/README index a113480e24..f18e601b34 100644 --- a/packager/media/test/data/README +++ b/packager/media/test/data/README @@ -29,6 +29,12 @@ bear-640x360.ts - AVC + AAC encode, multiplexed into an MPEG2-TS container. bear-640x360_ptswraparound.ts - Same as bear-640x360.ts, with a timestamp wrap-around in the middle, created with the below command: ffmpeg -itsoffset 95442 -i bear-640x360.ts -c:v copy -c:a copy -muxdelay 0 bear-640x360_ptswraparound.ts bear-640x360-hevc.ts - HEVC + AAC encode, multiplexed into an MPEG2-TS container. +bear-eng-visualy-impaired-audio.ts - Audio stream from bear-640x360.ts marked as english with commentary for visually impaired viewer using the below commands: + tsp -I file bear-640x360.ts \ + -P filter --video --negate + -P inject --replace --pid 4096 --xml bear-visualy-impaired-eng-audio-pmt.xml \ + -O file bear-visualy-impaired-eng-audio.ts + (xml template can be obtained by command "tsp -I file bear-640x360.ts -P tables --pid 4096 --tid 2 --max 1 --xml pmt.xml -O drop") // ISO-BMFF streams. bear-1280x720.mp4 - AVC + AAC encode, mulitplexed into an ISOBMFF container. diff --git a/packager/media/test/data/bear-visualy-impaired-eng-audio-pmt.xml b/packager/media/test/data/bear-visualy-impaired-eng-audio-pmt.xml new file mode 100644 index 0000000000..bc8c273b37 --- /dev/null +++ b/packager/media/test/data/bear-visualy-impaired-eng-audio-pmt.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/packager/media/test/data/bear-visualy-impaired-eng-audio.ts b/packager/media/test/data/bear-visualy-impaired-eng-audio.ts new file mode 100644 index 0000000000000000000000000000000000000000..94ba1b6479a8dae100d0ba073160292d739f6080 GIT binary patch literal 83472 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

wXDp_z@Fjh2_CQIZ2ys!;JV1fCA!) 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 I@jtNtA9i9aa{vGU literal 0 HcmV?d00001