HLS input improvements:
- Added isOpen flag to the SegmentDownloader, so that we do not parse the data remaining from parseStreamHeader - In inputHLS::firstSegment, use streamIsLive to determine vod vs live, rather than the size of userSelect - Replaced check against 'smaller than zero', which always fails due to overflow of unsigned int - Added print before downloading main playlist
This commit is contained in:
		
							parent
							
								
									f8251cc115
								
							
						
					
					
						commit
						01f11dcfda
					
				
					 2 changed files with 9 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -211,12 +211,14 @@ namespace Mist{
 | 
			
		|||
  }
 | 
			
		||||
 | 
			
		||||
  SegmentDownloader::SegmentDownloader(){
 | 
			
		||||
    isOpen = false;
 | 
			
		||||
    segDL.onProgress(callbackFunc);
 | 
			
		||||
    encrypted = false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Returns true if packetPtr is at the end of the current segment.
 | 
			
		||||
  bool SegmentDownloader::atEnd() const{
 | 
			
		||||
    if (!isOpen){return true;}
 | 
			
		||||
    return segDL.isEOF();
 | 
			
		||||
    // return (packetPtr - segDL.const_data().data() + 188) > segDL.const_data().size();
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -295,6 +297,7 @@ namespace Mist{
 | 
			
		|||
  /// Attempts to read a single TS packet from the current segment, setting packetPtr on success
 | 
			
		||||
  void SegmentDownloader::close(){
 | 
			
		||||
    packetPtr = 0;
 | 
			
		||||
    isOpen = false;
 | 
			
		||||
    segDL.close();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -329,6 +332,7 @@ namespace Mist{
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    packetPtr = 0;
 | 
			
		||||
    isOpen = true;
 | 
			
		||||
    HIGH_MSG("Segment download complete and passed sanity checks");
 | 
			
		||||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -892,7 +896,7 @@ namespace Mist{
 | 
			
		|||
      }else{
 | 
			
		||||
        currentPlaylist = firstSegment();
 | 
			
		||||
      }
 | 
			
		||||
      if (currentPlaylist < 0){
 | 
			
		||||
      if (currentPlaylist == 0){
 | 
			
		||||
        VERYHIGH_MSG("Waiting for segments...");
 | 
			
		||||
        keepAlive();
 | 
			
		||||
        Util::wait(500);
 | 
			
		||||
| 
						 | 
				
			
			@ -1032,6 +1036,7 @@ namespace Mist{
 | 
			
		|||
 | 
			
		||||
    bool isUrl = (uri.find("://") != std::string::npos);
 | 
			
		||||
    if (isUrl){
 | 
			
		||||
      INFO_MSG("Downloading main playlist file from '%s'", uri.c_str());
 | 
			
		||||
      HTTP::Downloader plsDL;
 | 
			
		||||
      plsDL.dataTimeout = 15;
 | 
			
		||||
      plsDL.retryCount = 8;
 | 
			
		||||
| 
						 | 
				
			
			@ -1228,7 +1233,7 @@ namespace Mist{
 | 
			
		|||
  /// this will keep the playlists in sync while reading segments.
 | 
			
		||||
  size_t inputHLS::firstSegment(){
 | 
			
		||||
    // Only one selected? Immediately return the right playlist.
 | 
			
		||||
    if (userSelect.size() == 1){return getMappedTrackPlaylist(M.getID(userSelect.begin()->first));}
 | 
			
		||||
    if (!streamIsLive){return getMappedTrackPlaylist(M.getID(userSelect.begin()->first));}
 | 
			
		||||
    uint64_t firstTimeStamp = 0;
 | 
			
		||||
    int tmpId = -1;
 | 
			
		||||
    int segCount = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -1238,6 +1243,7 @@ namespace Mist{
 | 
			
		|||
         pListIt != listEntries.end(); pListIt++){
 | 
			
		||||
      segCount += pListIt->second.size();
 | 
			
		||||
      if (pListIt->second.size()){
 | 
			
		||||
        INSANE_MSG("Playlist %u contains %lu segments, with the earliest segment starting @%zu ms", pListIt->first, pListIt->second.size(), firstTimeStamp);
 | 
			
		||||
        if (pListIt->second.front().timestamp < firstTimeStamp || tmpId < 0){
 | 
			
		||||
          firstTimeStamp = pListIt->second.front().timestamp;
 | 
			
		||||
          tmpId = pListIt->first;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,6 +52,7 @@ namespace Mist{
 | 
			
		|||
    size_t encOffset;
 | 
			
		||||
    unsigned char tmpIvec[16];
 | 
			
		||||
    mbedtls_aes_context aes;
 | 
			
		||||
    bool isOpen;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  class Playlist{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue