Shaka Packager SDK
Loading...
Searching...
No Matches
muxer_factory.cc
1// Copyright 2017 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#include <packager/app/muxer_factory.h>
8
9#include <memory>
10
11#include <absl/log/log.h>
12
13#include <packager/media/base/container_names.h>
14#include <packager/media/base/muxer.h>
15#include <packager/media/base/muxer_options.h>
16#include <packager/media/formats/mp2t/ts_muxer.h>
17#include <packager/media/formats/mp4/mp4_muxer.h>
18#include <packager/media/formats/packed_audio/packed_audio_writer.h>
19#include <packager/media/formats/ttml/ttml_muxer.h>
20#include <packager/media/formats/webm/webm_muxer.h>
21#include <packager/media/formats/webvtt/webvtt_muxer.h>
22#include <packager/packager.h>
23#include <packager/utils/clock.h>
24
25namespace shaka {
26namespace media {
27
28MuxerFactory::MuxerFactory(const PackagingParams& packaging_params)
29 : mp4_params_(packaging_params.mp4_output_params),
30 temp_dir_(packaging_params.temp_dir),
31 transport_stream_timestamp_offset_ms_(
32 packaging_params.transport_stream_timestamp_offset_ms) {}
33
34std::shared_ptr<Muxer> MuxerFactory::CreateMuxer(
35 MediaContainerName output_format,
36 const StreamDescriptor& stream) {
37 MuxerOptions options;
38 options.mp4_params = mp4_params_;
39 options.transport_stream_timestamp_offset_ms =
40 transport_stream_timestamp_offset_ms_;
41 options.temp_dir = temp_dir_;
42 options.output_file_name = stream.output;
43 options.segment_template = stream.segment_template;
44 options.bandwidth = stream.bandwidth;
45
46 std::shared_ptr<Muxer> muxer;
47
48 switch (output_format) {
49 case CONTAINER_AAC:
50 case CONTAINER_MP3:
51 case CONTAINER_AC3:
52 case CONTAINER_EAC3:
53 muxer = std::make_shared<PackedAudioWriter>(options);
54 break;
55 case CONTAINER_WEBM:
56 muxer = std::make_shared<webm::WebMMuxer>(options);
57 break;
58 case CONTAINER_TTML:
59 muxer = std::make_shared<ttml::TtmlMuxer>(options);
60 break;
61 case CONTAINER_WEBVTT:
62 muxer = std::make_shared<webvtt::WebVttMuxer>(options);
63 break;
64 case CONTAINER_MPEG2TS:
65 muxer = std::make_shared<mp2t::TsMuxer>(options);
66 break;
67 case CONTAINER_MOV:
68 muxer = std::make_shared<mp4::MP4Muxer>(options);
69 break;
70 default:
71 LOG(ERROR) << "Cannot support muxing to " << output_format;
72 break;
73 }
74
75 if (!muxer) {
76 return nullptr;
77 }
78
79 // We successfully created a muxer, then there is a couple settings
80 // we should set before returning it.
81 if (clock_) {
82 muxer->set_clock(clock_);
83 }
84
85 return muxer;
86}
87
88void MuxerFactory::OverrideClock(std::shared_ptr<Clock> clock) {
89 clock_ = clock;
90}
91} // namespace media
92} // namespace shaka
All the methods that are virtual are virtual for mocking.
This structure contains the list of configuration options for Muxer.
std::string temp_dir
Specify temporary directory for intermediate files.
Mp4OutputParams mp4_params
MP4 (ISO-BMFF) specific parameters.