Ability to send silence to RTMP outputs
This commit is contained in:
parent
dc2239e70f
commit
99907782ae
6 changed files with 131 additions and 29 deletions
|
@ -464,28 +464,22 @@ bool FLV::Tag::DTSCVideoInit(DTSC::Meta &meta, uint32_t vTrack){
|
|||
}
|
||||
|
||||
/// FLV Audio init data loader function from metadata.
|
||||
bool FLV::Tag::DTSCAudioInit(DTSC::Meta &meta, uint32_t aTrack){
|
||||
bool FLV::Tag::DTSCAudioInit(const std::string & codec, unsigned int sampleRate, unsigned int sampleSize, unsigned int channels, const std::string & initData){
|
||||
len = 0;
|
||||
// Unknown? Assume AAC.
|
||||
if (meta.getCodec(aTrack) == "?"){meta.setCodec(aTrack, "AAC");}
|
||||
std::string initData = meta.getInit(aTrack);
|
||||
if (meta.getCodec(aTrack) == "AAC"){len = initData.size() + 17;}
|
||||
if (codec == "AAC"){len = initData.size() + 17;}
|
||||
if (len <= 0 || !checkBufferSize()){return false;}
|
||||
memcpy(data + 13, initData.c_str(), len - 17);
|
||||
data[12] = 0; // AAC sequence header
|
||||
data[11] = 0;
|
||||
if (meta.getCodec(aTrack) == "AAC"){data[11] += 0xA0;}
|
||||
if (meta.getCodec(aTrack) == "MP3"){data[11] += 0x20;}
|
||||
unsigned int datarate = meta.getRate(aTrack);
|
||||
if (datarate >= 44100){
|
||||
data[11] += 0x0C;
|
||||
}else if (datarate >= 22050){
|
||||
data[11] += 0x08;
|
||||
}else if (datarate >= 11025){
|
||||
data[11] += 0x04;
|
||||
data[11] = 0xA0;
|
||||
if (sampleRate >= 44100){
|
||||
data[11] |= 0x0C;
|
||||
}else if (sampleRate >= 22050){
|
||||
data[11] |= 0x08;
|
||||
}else if (sampleRate >= 11025){
|
||||
data[11] |= 0x04;
|
||||
}
|
||||
if (meta.getSize(aTrack) != 8){data[11] += 0x02;}
|
||||
if (meta.getChannels(aTrack) > 1){data[11] += 0x01;}
|
||||
if (sampleSize != 8){data[11] += 0x02;}
|
||||
if (channels > 1){data[11] += 0x01;}
|
||||
setLen();
|
||||
data[0] = 0x08;
|
||||
data[1] = ((len - 15) >> 16) & 0xFF;
|
||||
|
|
|
@ -51,7 +51,7 @@ namespace FLV{
|
|||
bool ChunkLoader(const RTMPStream::Chunk &O);
|
||||
bool DTSCLoader(DTSC::Packet &packData, const DTSC::Meta &M, size_t idx);
|
||||
bool DTSCVideoInit(DTSC::Meta &meta, uint32_t vTrack);
|
||||
bool DTSCAudioInit(DTSC::Meta &meta, uint32_t aTrack);
|
||||
bool DTSCAudioInit(const std::string & codec, unsigned int sampleRate, unsigned int sampleSize, unsigned int channels, const std::string & initData);
|
||||
bool DTSCMetaInit(const DTSC::Meta &M, std::set<long unsigned int> &selTracks);
|
||||
void toMeta(DTSC::Meta &meta, AMF::Object &amf_storage);
|
||||
void toMeta(DTSC::Meta &meta, AMF::Object &amf_storage, size_t &reTrack, const std::map<std::string, std::string> &targetParams);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue