Shaka Packager SDK
Loading...
Searching...
No Matches
packed_audio_segmenter.h
1// Copyright 2018 Google LLC. All rights reserved.
2//
3// Use of this source code is governed by a BSD-style
4// license that can be found in the LICENSE file or at
5// https://developers.google.com/open-source/licenses/bsd
6
7#ifndef PACKAGER_MEDIA_FORMATS_PACKED_AUDIO_PACKED_AUDIO_SEGMENTER_H_
8#define PACKAGER_MEDIA_FORMATS_PACKED_AUDIO_PACKED_AUDIO_SEGMENTER_H_
9
10#include <cstdint>
11#include <memory>
12#include <string>
13#include <vector>
14
15#include <packager/media/base/buffer_writer.h>
16#include <packager/media/base/stream_info.h>
17#include <packager/status.h>
18
19namespace shaka {
20namespace media {
21
22class AACAudioSpecificConfig;
23class Id3Tag;
24class MediaSample;
25
27constexpr double kPackedAudioTimescale = 90000;
28
31constexpr char kTimestampOwnerIdentifier[] =
32 "com.apple.streaming.transportStreamTimestamp";
33
36constexpr char kAudioDescriptionOwnerIdentifier[] =
37 "com.apple.streaming.audioDescription";
38
44 public:
48 explicit PackedAudioSegmenter(int32_t transport_stream_timestamp_offset);
49 virtual ~PackedAudioSegmenter();
50
54 // This function is made virtual for testing.
55 virtual Status Initialize(const StreamInfo& stream_info);
56
59 // This function is made virtual for testing.
60 virtual Status AddSample(const MediaSample& sample);
61
65 // This function is made virtual for testing.
66 virtual Status FinalizeSegment();
67
70 // This function is made virtual for testing.
71 virtual double TimescaleScale() const;
72
74 BufferWriter* segment_buffer() { return &segment_buffer_; }
75
76 private:
78 PackedAudioSegmenter& operator=(const PackedAudioSegmenter&) = delete;
79
80 // These functions is made virtual for testing.
81 virtual std::unique_ptr<AACAudioSpecificConfig> CreateAdtsConverter();
82 virtual std::unique_ptr<Id3Tag> CreateId3Tag();
83
84 Status EncryptionAudioSetup(const MediaSample& sample);
85 Status StartNewSegment(const MediaSample& first_sample);
86
87 const int32_t transport_stream_timestamp_offset_ = 0;
88 // Codec for the stream.
89 Codec codec_ = kUnknownCodec;
90 std::vector<uint8_t> audio_codec_config_;
91 // Calculated by output stream's timescale / input stream's timescale. This is
92 // used to scale the timestamps.
93 double timescale_scale_ = 0.0;
94 // Whether it is the start of a new segment.
95 bool start_of_new_segment_ = true;
96
97 // Audio setup information for encrypted segment.
98 std::string audio_setup_information_;
99 // AAC is carried in ADTS.
100 std::unique_ptr<AACAudioSpecificConfig> adts_converter_;
101
102 BufferWriter segment_buffer_;
103};
104
105} // namespace media
106} // namespace shaka
107
108#endif // PACKAGER_MEDIA_FORMATS_PACKED_AUDIO_PACKED_AUDIO_SEGMENTER_H_
Class to hold a media sample.
virtual Status Initialize(const StreamInfo &stream_info)
virtual Status AddSample(const MediaSample &sample)
Abstract class holds stream information.
Definition stream_info.h:73
All the methods that are virtual are virtual for mocking.