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
13#include <packager/media/base/buffer_writer.h>
14#include <packager/media/base/stream_info.h>
15#include <packager/status.h>
16
17namespace shaka {
18namespace media {
19
20class AACAudioSpecificConfig;
21class Id3Tag;
22class MediaSample;
23
25constexpr double kPackedAudioTimescale = 90000;
26
29constexpr char kTimestampOwnerIdentifier[] =
30 "com.apple.streaming.transportStreamTimestamp";
31
34constexpr char kAudioDescriptionOwnerIdentifier[] =
35 "com.apple.streaming.audioDescription";
36
42 public:
46 explicit PackedAudioSegmenter(int32_t transport_stream_timestamp_offset);
47 virtual ~PackedAudioSegmenter();
48
52 // This function is made virtual for testing.
53 virtual Status Initialize(const StreamInfo& stream_info);
54
57 // This function is made virtual for testing.
58 virtual Status AddSample(const MediaSample& sample);
59
63 // This function is made virtual for testing.
64 virtual Status FinalizeSegment();
65
68 // This function is made virtual for testing.
69 virtual double TimescaleScale() const;
70
72 BufferWriter* segment_buffer() { return &segment_buffer_; }
73
74 private:
76 PackedAudioSegmenter& operator=(const PackedAudioSegmenter&) = delete;
77
78 // These functions is made virtual for testing.
79 virtual std::unique_ptr<AACAudioSpecificConfig> CreateAdtsConverter();
80 virtual std::unique_ptr<Id3Tag> CreateId3Tag();
81
82 Status EncryptionAudioSetup(const MediaSample& sample);
83 Status StartNewSegment(const MediaSample& first_sample);
84
85 const int32_t transport_stream_timestamp_offset_ = 0;
86 // Codec for the stream.
87 Codec codec_ = kUnknownCodec;
88 std::vector<uint8_t> audio_codec_config_;
89 // Calculated by output stream's timescale / input stream's timescale. This is
90 // used to scale the timestamps.
91 double timescale_scale_ = 0.0;
92 // Whether it is the start of a new segment.
93 bool start_of_new_segment_ = true;
94
95 // Audio setup information for encrypted segment.
96 std::string audio_setup_information_;
97 // AAC is carried in ADTS.
98 std::unique_ptr<AACAudioSpecificConfig> adts_converter_;
99
100 BufferWriter segment_buffer_;
101};
102
103} // namespace media
104} // namespace shaka
105
106#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:72
All the methods that are virtual are virtual for mocking.