Attempt to fix FLV
This commit is contained in:
parent
63bf65952b
commit
68e4697a29
2 changed files with 22 additions and 12 deletions
|
@ -319,7 +319,7 @@ bool FLV::Tag::DTSCLoader(DTSC::Stream & S){
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
((unsigned int *)(data+len-4))[0] = len-15;
|
setLen();
|
||||||
switch (S.lastType()){
|
switch (S.lastType()){
|
||||||
case DTSC::VIDEO: data[0] = 0x09; break;
|
case DTSC::VIDEO: data[0] = 0x09; break;
|
||||||
case DTSC::AUDIO: data[0] = 0x08; break;
|
case DTSC::AUDIO: data[0] = 0x08; break;
|
||||||
|
@ -333,6 +333,19 @@ bool FLV::Tag::DTSCLoader(DTSC::Stream & S){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Helper function that properly sets the tag length from the internal len variable.
|
||||||
|
void FLV::Tag::setLen(){
|
||||||
|
int len4 = len - 4;
|
||||||
|
int i = data+len-1;
|
||||||
|
data[--i] = (len4) & 0xFF;
|
||||||
|
len4 >>= 8;
|
||||||
|
data[--i] = (len4) & 0xFF;
|
||||||
|
len4 >>= 8;
|
||||||
|
data[--i] = (len4) & 0xFF;
|
||||||
|
len4 >>= 8;
|
||||||
|
data[--i] = (len4) & 0xFF;
|
||||||
|
}
|
||||||
|
|
||||||
/// FLV Video init data loader function from DTSC.
|
/// FLV Video init data loader function from DTSC.
|
||||||
/// Takes the DTSC Video init data and makes it into FLV.
|
/// Takes the DTSC Video init data and makes it into FLV.
|
||||||
/// Assumes init data is available - so check before calling!
|
/// Assumes init data is available - so check before calling!
|
||||||
|
@ -355,15 +368,10 @@ bool FLV::Tag::DTSCVideoInit(DTSC::Stream & S){
|
||||||
data[13] = 0;
|
data[13] = 0;
|
||||||
data[14] = 0;
|
data[14] = 0;
|
||||||
data[15] = 0;
|
data[15] = 0;
|
||||||
data[11] = 0x57;//H264 init data (0x07 & 0x50)
|
data[11] = 0x17;//H264 keyframe (0x07 & 0x10)
|
||||||
}
|
|
||||||
((unsigned int *)(data+len-4))[0] = len-15;
|
|
||||||
switch (S.lastType()){
|
|
||||||
case DTSC::VIDEO: data[0] = 0x09; break;
|
|
||||||
case DTSC::AUDIO: data[0] = 0x08; break;
|
|
||||||
case DTSC::META: data[0] = 0x12; break;
|
|
||||||
default: break;
|
|
||||||
}
|
}
|
||||||
|
setLen();
|
||||||
|
data[0] = 0x09;
|
||||||
data[1] = ((len-15) >> 16) & 0xFF;
|
data[1] = ((len-15) >> 16) & 0xFF;
|
||||||
data[2] = ((len-15) >> 8) & 0xFF;
|
data[2] = ((len-15) >> 8) & 0xFF;
|
||||||
data[3] = (len-15) & 0xFF;
|
data[3] = (len-15) & 0xFF;
|
||||||
|
@ -400,13 +408,14 @@ bool FLV::Tag::DTSCAudioInit(DTSC::Stream & S){
|
||||||
if (S.metadata.getContentP("audio")->getContentP("size")->NumValue() == 16){data[11] += 0x02;}
|
if (S.metadata.getContentP("audio")->getContentP("size")->NumValue() == 16){data[11] += 0x02;}
|
||||||
if (S.metadata.getContentP("audio")->getContentP("channels")->NumValue() > 1){data[11] += 0x01;}
|
if (S.metadata.getContentP("audio")->getContentP("channels")->NumValue() > 1){data[11] += 0x01;}
|
||||||
}
|
}
|
||||||
((unsigned int *)(data+len-4))[0] = len-15;
|
setLen();
|
||||||
switch (S.lastType()){
|
switch (S.lastType()){
|
||||||
case DTSC::VIDEO: data[0] = 0x09; break;
|
case DTSC::VIDEO: data[0] = 0x09; break;
|
||||||
case DTSC::AUDIO: data[0] = 0x08; break;
|
case DTSC::AUDIO: data[0] = 0x08; break;
|
||||||
case DTSC::META: data[0] = 0x12; break;
|
case DTSC::META: data[0] = 0x12; break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
data[0] = 0x08;
|
||||||
data[1] = ((len-15) >> 16) & 0xFF;
|
data[1] = ((len-15) >> 16) & 0xFF;
|
||||||
data[2] = ((len-15) >> 8) & 0xFF;
|
data[2] = ((len-15) >> 8) & 0xFF;
|
||||||
data[3] = (len-15) & 0xFF;
|
data[3] = (len-15) & 0xFF;
|
||||||
|
@ -487,7 +496,7 @@ bool FLV::Tag::DTSCMetaInit(DTSC::Stream & S){
|
||||||
}
|
}
|
||||||
memcpy(data+11, tmp.c_str(), len-15);
|
memcpy(data+11, tmp.c_str(), len-15);
|
||||||
}
|
}
|
||||||
((unsigned int *)(data+len-4))[0] = len-15;
|
setLen();
|
||||||
data[0] = 0x12;
|
data[0] = 0x12;
|
||||||
data[1] = ((len-15) >> 16) & 0xFF;
|
data[1] = ((len-15) >> 16) & 0xFF;
|
||||||
data[2] = ((len-15) >> 8) & 0xFF;
|
data[2] = ((len-15) >> 8) & 0xFF;
|
||||||
|
@ -512,7 +521,7 @@ bool FLV::Tag::ChunkLoader(const RTMPStream::Chunk& O){
|
||||||
}
|
}
|
||||||
memcpy(data+11, &(O.data[0]), O.len);
|
memcpy(data+11, &(O.data[0]), O.len);
|
||||||
}
|
}
|
||||||
((unsigned int *)(data+len-4))[0] = O.len;
|
setLen();
|
||||||
data[0] = O.msg_type_id;
|
data[0] = O.msg_type_id;
|
||||||
data[3] = O.len & 0xFF;
|
data[3] = O.len & 0xFF;
|
||||||
data[2] = (O.len >> 8) & 0xFF;
|
data[2] = (O.len >> 8) & 0xFF;
|
||||||
|
|
|
@ -51,6 +51,7 @@ namespace FLV {
|
||||||
int buf; ///< Maximum length of buffer space.
|
int buf; ///< Maximum length of buffer space.
|
||||||
bool done; ///< Body reading done?
|
bool done; ///< Body reading done?
|
||||||
unsigned int sofar; ///< How many bytes are read sofar?
|
unsigned int sofar; ///< How many bytes are read sofar?
|
||||||
|
void setLen();
|
||||||
//loader helper functions
|
//loader helper functions
|
||||||
bool MemReadUntil(char * buffer, unsigned int count, unsigned int & sofar, char * D, unsigned int S, unsigned int & P);
|
bool MemReadUntil(char * buffer, unsigned int count, unsigned int & sofar, char * D, unsigned int S, unsigned int & P);
|
||||||
bool SockReadUntil(char * buffer, unsigned int count, unsigned int & sofar, Socket::Connection & sock);
|
bool SockReadUntil(char * buffer, unsigned int count, unsigned int & sofar, Socket::Connection & sock);
|
||||||
|
|
Loading…
Add table
Reference in a new issue