45 std::shared_ptr<MediaSample> audio_sample;
46 std::shared_ptr<MediaSample> video_sample;
47 uint32_t audio_stream_id;
48 uint32_t video_stream_id;
49 int64_t audio_sample_duration;
50 int64_t video_sample_duration;
63 KeySource* decryption_key_source)
override;
64 [[nodiscard]]
bool Flush()
override;
65 [[nodiscard]]
bool Parse(
const uint8_t* buf,
int size)
override;
75 TrackTrickPlayFactor = 5,
76 TrackAdaptationInterval = 6,
83 VideoTicksPerFrame = 13,
87 AudioNumChannels = 17,
88 AudioSampleFrequency = 18,
101 VideoPixelWidth = 31,
102 VideoPixelHeight = 32,
104 SparseDownloadUrl = 34,
105 SparseDownloadRangeTranslations = 35,
106 SparseDownloadMap = 36,
107 AudioSampleSize = 37,
108 Audio_EsDescriptor = 38,
109 Video_AVCDecoderConfigurationRecord = 39,
110 Audio_EC3SpecificData = 40,
111 AudioIdentifier = 41,
113 VideoStreamType = 43,
115 AudioStreamType = 45,
116 Audio_DtsSpecificData = 46,
117 Audio_AC3SpecificData = 47,
136 PackHeaderStuffingSkip,
169 bool ParseIndexEntry();
171 bool DemuxNextPes(
bool is_program_end);
173 void StartMediaSampleDemux();
175 template <
typename T>
176 Tag GetTag(
const uint8_t& tag,
177 const uint32_t& length,
178 const uint8_t* start_index,
180 if (length ==
sizeof(uint8_t)) {
181 *value = *start_index;
182 }
else if (length ==
sizeof(int8_t)) {
183 *value = (int8_t)(*start_index);
184 }
else if (length ==
sizeof(uint16_t)) {
185 *value = absl::big_endian::Load16(start_index);
186 }
else if (length ==
sizeof(int16_t)) {
187 *value = (int16_t)(absl::big_endian::Load16(start_index));
188 }
else if (length ==
sizeof(uint32_t)) {
189 *value = absl::big_endian::Load32(start_index);
190 }
else if (length ==
sizeof(int32_t)) {
191 *value = (int32_t)(absl::big_endian::Load32(start_index));
192 }
else if (length ==
sizeof(uint64_t)) {
193 *value = absl::big_endian::Load64(start_index);
194 }
else if (length ==
sizeof(int64_t)) {
195 *value = (int64_t)(absl::big_endian::Load64(start_index));
204 bool Output(
bool must_process_encrypted);
206 bool GetAssetKey(
const uint8_t* asset_id,
EncryptionKey* encryption_key);
210 bool EmitSample(uint32_t parsed_audio_or_video_stream_id,
212 const std::shared_ptr<MediaSample>& new_sample,
215 bool EmitPendingSamples();
217 bool EmitLastSample(uint32_t stream_id,
218 const std::shared_ptr<MediaSample>& new_sample);
225 bool is_initialized_;
229 uint32_t skip_bytes_;
230 bool metadata_is_complete_;
231 uint8_t current_program_id_;
232 uint32_t pes_stream_id_;
233 uint32_t prev_pes_stream_id_;
234 size_t pes_packet_bytes_;
235 uint8_t pes_flags_1_;
236 uint8_t pes_flags_2_;
237 uint8_t prev_pes_flags_1_;
238 size_t pes_header_data_bytes_;
242 uint8_t index_program_id_;
243 std::shared_ptr<MediaSample> media_sample_;
244 size_t crypto_unit_start_pos_;
248 std::vector<uint8_t, std::allocator<uint8_t>> ecm_;
249 std::vector<uint8_t> psm_data_;
250 std::vector<uint8_t> index_data_;
251 std::map<std::string, uint32_t> program_demux_stream_map_;
252 int stream_id_count_;
253 std::vector<std::shared_ptr<StreamInfo>> stream_infos_;
254 std::deque<DemuxStreamIdMediaSample> media_sample_queue_;
255 std::vector<uint8_t> sample_data_;
257 std::unique_ptr<AesCbcDecryptor> content_decryptor_;