Shaka Packager SDK
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 <memory>
11 
12 #include "packager/media/base/buffer_writer.h"
13 #include "packager/media/base/stream_info.h"
14 #include "packager/status.h"
15 
16 namespace shaka {
17 namespace media {
18 
19 class AACAudioSpecificConfig;
20 class Id3Tag;
21 class MediaSample;
22 
24 constexpr double kPackedAudioTimescale = 90000;
25 
28 constexpr char kTimestampOwnerIdentifier[] =
29  "com.apple.streaming.transportStreamTimestamp";
30 
33 constexpr char kAudioDescriptionOwnerIdentifier[] =
34  "com.apple.streaming.audioDescription";
35 
41  public:
43  virtual ~PackedAudioSegmenter();
44 
48  // This function is made virtual for testing.
49  virtual Status Initialize(const StreamInfo& stream_info);
50 
53  // This function is made virtual for testing.
54  virtual Status AddSample(const MediaSample& sample);
55 
59  // This function is made virtual for testing.
60  virtual Status FinalizeSegment();
61 
64  // This function is made virtual for testing.
65  virtual double TimescaleScale() const;
66 
68  BufferWriter* segment_buffer() { return &segment_buffer_; }
69 
70  private:
72  PackedAudioSegmenter& operator=(const PackedAudioSegmenter&) = delete;
73 
74  // These functions is made virtual for testing.
75  virtual std::unique_ptr<AACAudioSpecificConfig> CreateAdtsConverter();
76  virtual std::unique_ptr<Id3Tag> CreateId3Tag();
77 
78  Status EncryptionAudioSetup(const MediaSample& sample);
79  void StartNewSegment(const MediaSample& first_sample);
80 
81  // Codec for the stream.
82  Codec codec_ = kUnknownCodec;
83  std::vector<uint8_t> audio_codec_config_;
84  // Calculated by output stream's timescale / input stream's timescale. This is
85  // used to scale the timestamps.
86  double timescale_scale_ = 0.0;
87  // Whether it is the start of a new segment.
88  bool start_of_new_segment_ = true;
89 
90  // Audio setup information for encrypted segment.
91  std::string audio_setup_information_;
92  // AAC is carried in ADTS.
93  std::unique_ptr<AACAudioSpecificConfig> adts_converter_;
94 
95  BufferWriter segment_buffer_;
96 };
97 
98 } // namespace media
99 } // namespace shaka
100 
101 #endif // PACKAGER_MEDIA_FORMATS_PACKED_AUDIO_PACKED_AUDIO_SEGMENTER_H_
Abstract class holds stream information.
Definition: stream_info.h:59
All the methods that are virtual are virtual for mocking.
virtual Status Initialize(const StreamInfo &stream_info)
Class to hold a media sample.
Definition: media_sample.h:22
virtual Status AddSample(const MediaSample &sample)