Twitch SDK (Internal)
flvmuxer.h
Go to the documentation of this file.
1 /********************************************************************************************
2 * Twitch Broadcasting SDK
3 *
4 * This software is supplied under the terms of a license agreement with Twitch Interactive, Inc. and
5 * may not be copied or used except in accordance with the terms of that agreement
6 * Copyright (c) 2012-2016 Twitch Interactive, Inc.
7 *********************************************************************************************/
8 
9 #pragma once
10 
14 
15 #include <memory>
16 #include <fstream>
17 
18 namespace ttv
19 {
20  namespace broadcast
21  {
22  // Some of this will go into a generic muxer header file
23  // when we have more than one muxer
24  struct Packet;
25  class FlvMuxer;
26  class RtmpStream;
27  class AMF0Encoder;
28  class StreamStats;
29  }
30 }
31 
32 
34 {
35 public:
36  FlvMuxer(std::shared_ptr<StreamStats> streamStats);
37  virtual ~FlvMuxer();
38 
39  void Update();
40 
48  TTV_ErrorCode GetAverageSendBitRate(uint64_t measurementWindowMilliseconds, uint64_t& bitsPerSecond) const;
52  TTV_ErrorCode GetCongestionLevel(uint64_t measurementWindowMilliseconds, double& congestionLevel) const;
53 
54  // IMuxer implementation
55  virtual TTV_ErrorCode Start(const MuxerParameters& params) override;
56  virtual TTV_ErrorCode WriteVideoPacket(const Packet& packet) override;
57  virtual TTV_ErrorCode WriteAudioPacket(const Packet& packet) override;
58  virtual TTV_ErrorCode WriteVideoSpsPps(const std::vector<uint8_t>& sps, const std::vector<uint8_t>& pps) override;
59  virtual TTV_ErrorCode Stop() override;
60 
61  void SetRtmpUrl(const std::string& url) { mRtmpUrl = url; }
62  void SetFlvPath(const std::wstring& path) { mFlvPath = path; }
63 
64 private:
65  TTV_ErrorCode WriteMetaPacket(const std::shared_ptr<AMF0Encoder>& encoder);
66  TTV_ErrorCode WriteAudioHeader(uint8_t audioFlags, AudioFormat encodingFormat);
67 
68  TTV_ErrorCode BeginChunk(flv::TagTypes type, uint32_t timestamp, size_t length);
69  TTV_ErrorCode EndChunk(size_t length);
70 
71  size_t WriteToOutput(const uint8_t* data, size_t length, bool rtmpData = true);
72 
73  template <class _T> size_t WriteToOutput(_T* data, bool rtmpData = true)
74  {
75  return WriteToOutput(reinterpret_cast<const uint8_t*> (data), sizeof(_T), rtmpData);
76  }
77 
78  size_t WriteToOutput(const std::vector<uint8_t>& data, bool rtmpData = true)
79  {
80  return WriteToOutput(data.data(), data.size(), rtmpData);
81  }
82 
83  FILE* mOutputFile;
84 
85  std::unique_ptr<RtmpStream> mRtmpStream;
86  std::shared_ptr<StreamStats> mStreamStats;
87 
88  std::vector<uint8_t> mAudioFlags;
89  std::vector<uint8_t> mVideoFlags;
90 
92  std::string mRtmpUrl;
93  std::wstring mFlvPath;
94 
96 };
Definition: packet.h:26
TTV_ErrorCode GetError()
FILE * mOutputFile
Definition: flvmuxer.h:83
TTV_ErrorCode EndChunk(size_t length)
void SetFlvPath(const std::wstring &path)
Definition: flvmuxer.h:62
std::unique_ptr< RtmpStream > mRtmpStream
Definition: flvmuxer.h:85
std::shared_ptr< StreamStats > mStreamStats
Definition: flvmuxer.h:86
TTV_ErrorCode GetAverageSendBitRate(uint64_t measurementWindowMilliseconds, uint64_t &bitsPerSecond) const
MuxerParameters mInitParams
Definition: flvmuxer.h:91
TTV_ErrorCode WriteAudioHeader(uint8_t audioFlags, AudioFormat encodingFormat)
uint64_t mTotalVideoPacketsSent
Definition: flvmuxer.h:95
std::string mRtmpUrl
Definition: flvmuxer.h:92
std::wstring mFlvPath
Definition: flvmuxer.h:93
JSON (JavaScript Object Notation).
Definition: adsapi.h:16
virtual TTV_ErrorCode WriteAudioPacket(const Packet &packet) override
virtual TTV_ErrorCode WriteVideoSpsPps(const std::vector< uint8_t > &sps, const std::vector< uint8_t > &pps) override
size_t WriteToOutput(const std::vector< uint8_t > &data, bool rtmpData=true)
Definition: flvmuxer.h:78
TTV_ErrorCode BeginChunk(flv::TagTypes type, uint32_t timestamp, size_t length)
FlvMuxer(std::shared_ptr< StreamStats > streamStats)
TagTypes
Definition: flvformat.h:22
void SetRtmpUrl(const std::string &url)
Definition: flvmuxer.h:61
uint32_t TTV_ErrorCode
Definition: errortypes.h:30
virtual TTV_ErrorCode Start(const MuxerParameters &params) override
std::vector< uint8_t > mAudioFlags
Definition: flvmuxer.h:88
std::vector< uint8_t > mVideoFlags
Definition: flvmuxer.h:89
virtual TTV_ErrorCode WriteVideoPacket(const Packet &packet) override
size_t WriteToOutput(const uint8_t *data, size_t length, bool rtmpData=true)
TTV_ErrorCode WriteMetaPacket(const std::shared_ptr< AMF0Encoder > &encoder)
Definition: imuxer.h:27
Definition: flvmuxer.h:33
Definition: broadcasttypes.h:253
AudioFormat
Definition: broadcasttypes.h:166
TTV_ErrorCode GetCongestionLevel(uint64_t measurementWindowMilliseconds, double &congestionLevel) const
size_t WriteToOutput(_T *data, bool rtmpData=true)
Definition: flvmuxer.h:73
virtual TTV_ErrorCode Stop() override