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
		Add a link
		
	
		Reference in a new issue
	
	 Thulinma
						Thulinma