Updated AAC input
This commit is contained in:
		
							parent
							
								
									9232451a74
								
							
						
					
					
						commit
						9ba92823bb
					
				
					 2 changed files with 28 additions and 14 deletions
				
			
		| 
						 | 
				
			
			@ -66,12 +66,13 @@ namespace Mist{
 | 
			
		|||
    capa["source_file"] = "$source";
 | 
			
		||||
    capa["priority"] = 9;
 | 
			
		||||
    capa["codecs"][0u][1u].append("AAC");
 | 
			
		||||
    timestamp = 0;
 | 
			
		||||
    thisTime = 0;
 | 
			
		||||
    // init filePos at 1, else a 15 bit mismatch in expected frame size occurs
 | 
			
		||||
    // dtsc.ccp +- line 215
 | 
			
		||||
    // (  bpos, if >= 0, adds 9 bytes (integer type) and 6 bytes (2+namelen)  )
 | 
			
		||||
    // but at line 224: (packBytePos ? 15 : 0)
 | 
			
		||||
    filePos = 1;
 | 
			
		||||
    audioTrack = INVALID_TRACK_ID;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  inputAAC::~inputAAC(){}
 | 
			
		||||
| 
						 | 
				
			
			@ -177,7 +178,7 @@ namespace Mist{
 | 
			
		|||
    
 | 
			
		||||
    // Init track info
 | 
			
		||||
    meta.reInit(config->getString("streamname"));
 | 
			
		||||
    size_t audioTrack = meta.addTrack();
 | 
			
		||||
    audioTrack = meta.addTrack();
 | 
			
		||||
    meta.setID(audioTrack, audioTrack);
 | 
			
		||||
    meta.setInit(audioTrack, adtsPack.getInit());
 | 
			
		||||
    meta.setType(audioTrack, "audio");
 | 
			
		||||
| 
						 | 
				
			
			@ -186,11 +187,11 @@ namespace Mist{
 | 
			
		|||
    meta.setChannels(audioTrack, adtsPack.getChannelCount());
 | 
			
		||||
 
 | 
			
		||||
    // Add current frame info
 | 
			
		||||
    thisPacket.genericFill(timestamp, 0, audioTrack, adtsPack.getPayload(), adtsPack.getPayloadSize(), filePos, false);
 | 
			
		||||
    thisPacket.genericFill(thisTime, 0, audioTrack, adtsPack.getPayload(), adtsPack.getPayloadSize(), filePos, false);
 | 
			
		||||
    meta.update(thisPacket);
 | 
			
		||||
        
 | 
			
		||||
    // Update internal variables
 | 
			
		||||
    timestamp += (adtsPack.getSampleCount() * 1000) / adtsPack.getFrequency();
 | 
			
		||||
    thisTime += (adtsPack.getSampleCount() * 1000) / adtsPack.getFrequency();
 | 
			
		||||
    filePos += frameSize;
 | 
			
		||||
    
 | 
			
		||||
    // Parse the rest of the ADTS frames
 | 
			
		||||
| 
						 | 
				
			
			@ -202,7 +203,7 @@ namespace Mist{
 | 
			
		|||
    
 | 
			
		||||
    if (!inFile.seek(0))
 | 
			
		||||
      ERROR_MSG("Could not seek back to position 0!");
 | 
			
		||||
    timestamp = 0;
 | 
			
		||||
    thisTime = 0;
 | 
			
		||||
    M.toFile(config->getString("input") + ".dtsh");
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
| 
						 | 
				
			
			@ -211,6 +212,9 @@ namespace Mist{
 | 
			
		|||
  // Reads the ADTS frame at the current position then updates thisPacket
 | 
			
		||||
  // @param <idx> contains the trackID to which we want to add the ADTS payload
 | 
			
		||||
  void inputAAC::getNext(size_t idx){
 | 
			
		||||
    //packets should be initialised to null to ensure termination
 | 
			
		||||
    thisPacket.null();
 | 
			
		||||
 | 
			
		||||
    DONTEVEN_MSG("Parsing next ADTS frame...");
 | 
			
		||||
    // Temp variable which points to the urireader buffer so that we can copy this data
 | 
			
		||||
    char *aacData;
 | 
			
		||||
| 
						 | 
				
			
			@ -227,8 +231,6 @@ namespace Mist{
 | 
			
		|||
    // Amount of bytes to subtract from expected payload if the found payload
 | 
			
		||||
    // is smaller than the ADTS header specifies
 | 
			
		||||
    size_t disregardAmount = 0;
 | 
			
		||||
    //packets should be initialised to null to ensure termination
 | 
			
		||||
    thisPacket.null();
 | 
			
		||||
    
 | 
			
		||||
    if (!inFile || inFile.isEOF()){
 | 
			
		||||
      INFO_MSG("Reached EOF");
 | 
			
		||||
| 
						 | 
				
			
			@ -296,10 +298,11 @@ namespace Mist{
 | 
			
		|||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    thisPacket.genericFill(timestamp, 0, idx, adtsPack.getPayload(), adtsPack.getPayloadSize() - disregardAmount, filePos, false);
 | 
			
		||||
    thisIdx = audioTrack;
 | 
			
		||||
    thisPacket.genericFill(thisTime, 0, thisIdx, adtsPack.getPayload(), adtsPack.getPayloadSize() - disregardAmount, filePos, false);
 | 
			
		||||
        
 | 
			
		||||
    //Update the internal timestamp
 | 
			
		||||
    timestamp += (adtsPack.getSampleCount() * 1000) / adtsPack.getFrequency();
 | 
			
		||||
    thisTime += (adtsPack.getSampleCount() * 1000) / adtsPack.getFrequency();
 | 
			
		||||
    filePos = nextFramePos;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
| 
						 | 
				
			
			@ -307,13 +310,24 @@ namespace Mist{
 | 
			
		|||
   // @param <seekTime> timestamp of the DTSH entry containing required file pos info
 | 
			
		||||
   // @param <idx> trackID of the AAC track
 | 
			
		||||
  void inputAAC::seek(uint64_t seekTime, size_t idx){
 | 
			
		||||
    DTSC::Keys keys(M.keys(idx));
 | 
			
		||||
    uint32_t keyIdx = M.getKeyIndexForTime(idx, seekTime);
 | 
			
		||||
    if (audioTrack == INVALID_TRACK_ID){
 | 
			
		||||
      std::set<size_t> trks = meta.getValidTracks();
 | 
			
		||||
      if (trks.size()){
 | 
			
		||||
        audioTrack = *(trks.begin());
 | 
			
		||||
      }else{
 | 
			
		||||
        Util::logExitReason("no audio track in header");
 | 
			
		||||
        FAIL_MSG("No audio track in header - aborting");
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    DTSC::Keys keys(M.keys(audioTrack));
 | 
			
		||||
    uint32_t keyIdx = M.getKeyIndexForTime(audioTrack, seekTime);
 | 
			
		||||
    // We minus the filePos by one, since we init it 1 higher
 | 
			
		||||
    inFile.seek(keys.getBpos(keyIdx)-1);
 | 
			
		||||
    timestamp = keys.getTime(keyIdx);
 | 
			
		||||
    thisTime = keys.getTime(keyIdx);
 | 
			
		||||
    DONTEVEN_MSG("inputAAC wants to seek to timestamp %li on track %li", seekTime, idx);
 | 
			
		||||
    DONTEVEN_MSG("inputAAC seeked to timestamp %f with bytePos %li", timestamp, keys.getBpos(keyIdx)-1);
 | 
			
		||||
    DONTEVEN_MSG("inputAAC seeked to timestamp %f with bytePos %li", thisTime, keys.getBpos(keyIdx)-1);
 | 
			
		||||
  }
 | 
			
		||||
}// namespace Mist
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,7 +19,7 @@ namespace Mist{
 | 
			
		|||
    bool keepRunning();
 | 
			
		||||
    uint64_t lastModTime;
 | 
			
		||||
    HTTP::URIReader inFile;
 | 
			
		||||
    double timestamp;
 | 
			
		||||
    size_t audioTrack;
 | 
			
		||||
    size_t filePos;
 | 
			
		||||
  };
 | 
			
		||||
}// namespace Mist
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue