- 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
All processes:
- Added process status system and relevant API calls
- Added ability to set track masks for input/output in processes
- Added support for unmasking tracks when there is a push target, by the "unmask" parameter.
- Added track unmasking support for processes on exit/error
- Make processes start faster, if possible, in the first few seconds of a stream
- Delay stream ready state if there are processes attempting to start
Livepeer process updates:
- Added Content-Resolution header to MistProcLivepeer as per Livepeer's request
- Renamed transcode from "Mist Transcode" to source stream name
- Added ability to send audio to livepeer
- Robustified livepeer timing code, shutdown code, and improved GUI
- Prevent "audio keyframes" from starting segments in MistProcLivepeer
- Multithreaded (2 upload threads) livepeer process
- Stricter downloader/uploader timeout behaviour
- Robustness improvements
- Fix small segment size 😒
- Streamname correction
- Prevent getting stuck when transcoding multiple qualities and they are not equal length
- Corrected log message print error
- Race condition fix
- Now always waits for at least 1 video track
- Made SRT support optional
- Make build options visible in cmake-gui
- Improved generic connection stats for outputs
- Added streamid handling configuration for MistInTSSRT
- Push input support over SRT
- Fixed support for SRT settings in push outputs
- Fix parsing of SRT-passed stream names
- Fixed hostnames in MistOutTSSRT, fixed PUSH_REWRITE trigger payload
- Opus support in TS-SRT
- Fixed SRT socket stats, fixed SRT socket address logic, improved SRT socket rolling restart support
- Fixed SRT push deny
Track matching fixes:
Input MP4 is not getting dimensions properly, causing resume to not find a collision
Fixed by overwriting dimensions when media frames are read
Detecting collisions using track identifier can cause issues (ie audio_AAC_2ch_44100hz_eng VS audio_AAC_2ch_44100hz)
Fixed by matching using init data, then check by identifier if there is more than 1 match
Fixed buffering code for playlist streams, ensuring correct page creation:
In resume mode new pages do not get created, but existing one(s) fill up
Keyframes were not being recognized due to them being deleted during track switching
Fixed by changing negotiationProxy::bufferNext:
Removed seemingly unnecessary function which cleared keyframes
Lastly, the offset of a resumed track seems wrong
Added to NegotiationProxy::continueNegotiate
pagesByTrack[tid][firstPage].curOffset = 0;
Added to negotiationProxy::bufferSinglePacket:
if (!pagesByTrack[tid][currentPageNum].curOffset) {
pagesByTrack[tid][currentPageNum].firstTime = packet.getTime();
}
Fixed numbering for keys from the buffer when accepting tracks (was amount of buffered keys, not last key number)