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:
Marco van Dijk 2021-09-30 13:08:06 +02:00 committed by Thulinma
parent f8251cc115
commit 01f11dcfda
2 changed files with 9 additions and 2 deletions

View file

@ -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;

View file

@ -52,6 +52,7 @@ namespace Mist{
size_t encOffset;
unsigned char tmpIvec[16];
mbedtls_aes_context aes;
bool isOpen;
};
class Playlist{