Merge branch 'development' into LTS_development
# Conflicts: # src/output/output_progressive_flv.cpp # src/output/output_rtmp.cpp
This commit is contained in:
		
						commit
						de4fea643a
					
				
					 5 changed files with 134 additions and 71 deletions
				
			
		|  | @ -182,7 +182,11 @@ const char * FLV::Tag::getVideoCodec() { | ||||||
| const char * FLV::Tag::getAudioCodec() { | const char * FLV::Tag::getAudioCodec() { | ||||||
|   switch (data[11] & 0xF0) { |   switch (data[11] & 0xF0) { | ||||||
|     case 0x00: |     case 0x00: | ||||||
|       return "PCMPE"; |       if (data[11] & 0x02){ | ||||||
|  |         return "PCMPE";//unknown endianness
 | ||||||
|  |       }else{ | ||||||
|  |         return "PCM";//8 bit is always regular PCM
 | ||||||
|  |       } | ||||||
|     case 0x10: |     case 0x10: | ||||||
|       return "ADPCM"; |       return "ADPCM"; | ||||||
|     case 0x20: |     case 0x20: | ||||||
|  |  | ||||||
|  | @ -132,6 +132,18 @@ namespace Mist { | ||||||
|       return getNext(); |       return getNext(); | ||||||
|     } |     } | ||||||
|     thisPacket.genericFill(tmpTag.tagTime(), tmpTag.offset(), tmpTag.getTrackID(), tmpTag.getData(), tmpTag.getDataLen(), lastBytePos, tmpTag.isKeyframe); //init packet from tmpTags data
 |     thisPacket.genericFill(tmpTag.tagTime(), tmpTag.offset(), tmpTag.getTrackID(), tmpTag.getData(), tmpTag.getDataLen(), lastBytePos, tmpTag.isKeyframe); //init packet from tmpTags data
 | ||||||
|  | 
 | ||||||
|  |     DTSC::Track & trk = myMeta.tracks[tmpTag.getTrackID()]; | ||||||
|  |     if (trk.codec == "PCM" && trk.size == 16){ | ||||||
|  |       char * ptr = 0; | ||||||
|  |       uint32_t ptrSize = 0; | ||||||
|  |       thisPacket.getString("data", ptr, ptrSize); | ||||||
|  |       for (uint32_t i = 0; i < ptrSize; i+=2){ | ||||||
|  |         char tmpchar = ptr[i]; | ||||||
|  |         ptr[i] = ptr[i+1]; | ||||||
|  |         ptr[i+1] = tmpchar; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   void inputFLV::seek(int seekTime) { |   void inputFLV::seek(int seekTime) { | ||||||
|  |  | ||||||
|  | @ -174,7 +174,17 @@ namespace Mist { | ||||||
|       H.Chunkify("", 0, myConn); |       H.Chunkify("", 0, myConn); | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|     tag.DTSCLoader(thisPacket, myMeta.tracks[thisPacket.getTrackId()]); |     DTSC::Track & trk = myMeta.tracks[thisPacket.getTrackId()]; | ||||||
|  |     tag.DTSCLoader(thisPacket, trk); | ||||||
|  |     if (trk.codec == "PCM" && trk.size == 16){ | ||||||
|  |       char * ptr = tag.getData(); | ||||||
|  |       uint32_t ptrSize = tag.getDataLen(); | ||||||
|  |       for (uint32_t i = 0; i < ptrSize; i+=2){ | ||||||
|  |         char tmpchar = ptr[i]; | ||||||
|  |         ptr[i] = ptr[i+1]; | ||||||
|  |         ptr[i+1] = tmpchar; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|     if (tag.len){ |     if (tag.len){ | ||||||
|       H.Chunkify(tag.data, tag.len, myConn); |       H.Chunkify(tag.data, tag.len, myConn); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -103,7 +103,17 @@ namespace Mist { | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     tag.DTSCLoader(thisPacket, myMeta.tracks[thisPacket.getTrackId()]); |     DTSC::Track & trk = myMeta.tracks[thisPacket.getTrackId()]; | ||||||
|  |     tag.DTSCLoader(thisPacket, trk); | ||||||
|  |     if (trk.codec == "PCM" && trk.size == 16){ | ||||||
|  |       char * ptr = tag.getData(); | ||||||
|  |       uint32_t ptrSize = tag.getDataLen(); | ||||||
|  |       for (uint32_t i = 0; i < ptrSize; i+=2){ | ||||||
|  |         char tmpchar = ptr[i]; | ||||||
|  |         ptr[i] = ptr[i+1]; | ||||||
|  |         ptr[i+1] = tmpchar; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|     myConn.SendNow(tag.data, tag.len);  |     myConn.SendNow(tag.data, tag.len);  | ||||||
|     if (config->getBool("keyframeonly")){ |     if (config->getBool("keyframeonly")){ | ||||||
|       config->is_active = false; |       config->is_active = false; | ||||||
|  |  | ||||||
|  | @ -293,6 +293,8 @@ namespace Mist { | ||||||
|                          0, 0, 0, 0}; //bytes 12-15 = extended timestamp
 |                          0, 0, 0, 0}; //bytes 12-15 = extended timestamp
 | ||||||
|     char dataheader[] ={0, 0, 0, 0, 0}; |     char dataheader[] ={0, 0, 0, 0, 0}; | ||||||
|     unsigned int dheader_len = 1; |     unsigned int dheader_len = 1; | ||||||
|  |     static char * swappyPointer = 0; | ||||||
|  |     static uint32_t swappySize = 0; | ||||||
|     char * tmpData = 0;//pointer to raw media data
 |     char * tmpData = 0;//pointer to raw media data
 | ||||||
|     unsigned int data_len = 0;//length of processed media data
 |     unsigned int data_len = 0;//length of processed media data
 | ||||||
|     thisPacket.getString("data", tmpData, data_len); |     thisPacket.getString("data", tmpData, data_len); | ||||||
|  | @ -344,6 +346,22 @@ namespace Mist { | ||||||
|         dataheader[0] |= 0x10; |         dataheader[0] |= 0x10; | ||||||
|       } |       } | ||||||
|       if (track.codec == "PCM"){ |       if (track.codec == "PCM"){ | ||||||
|  |         if (track.size == 16){ | ||||||
|  |           if (swappySize < data_len){ | ||||||
|  |             char * tmp = (char*)realloc(swappyPointer, data_len); | ||||||
|  |             if (!tmp){ | ||||||
|  |               FAIL_MSG("Could not allocate data for PCM endianness swap!"); | ||||||
|  |               return; | ||||||
|  |             } | ||||||
|  |             swappyPointer = tmp; | ||||||
|  |             swappySize = data_len; | ||||||
|  |           } | ||||||
|  |           for (uint32_t i = 0; i < data_len; i+=2){ | ||||||
|  |             swappyPointer[i] = tmpData[i+1]; | ||||||
|  |             swappyPointer[i+1] = tmpData[i]; | ||||||
|  |           } | ||||||
|  |           tmpData = swappyPointer; | ||||||
|  |         } | ||||||
|         dataheader[0] |= 0x30; |         dataheader[0] |= 0x30; | ||||||
|       } |       } | ||||||
|       if (track.codec == "Nellymoser"){ |       if (track.codec == "Nellymoser"){ | ||||||
|  | @ -1127,6 +1145,15 @@ namespace Mist { | ||||||
|               onFinish(); |               onFinish(); | ||||||
|               break; |               break; | ||||||
|             } |             } | ||||||
|  |             if (myMeta.tracks[reTrack].codec == "PCM" && myMeta.tracks[reTrack].size == 16){ | ||||||
|  |               char * ptr = F.getData(); | ||||||
|  |               uint32_t ptrSize = F.getDataLen(); | ||||||
|  |               for (uint32_t i = 0; i < ptrSize; i+=2){ | ||||||
|  |                 char tmpchar = ptr[i]; | ||||||
|  |                 ptr[i] = ptr[i+1]; | ||||||
|  |                 ptr[i+1] = tmpchar; | ||||||
|  |               } | ||||||
|  |             } | ||||||
|             thisPacket.genericFill(tagTime, F.offset(), reTrack, F.getData(), F.getDataLen(), 0, F.isKeyframe); |             thisPacket.genericFill(tagTime, F.offset(), reTrack, F.getData(), F.getDataLen(), 0, F.isKeyframe); | ||||||
|             ltt = tagTime; |             ltt = tagTime; | ||||||
|             if (!nProxy.userClient.getData()){ |             if (!nProxy.userClient.getData()){ | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Thulinma
						Thulinma