stream.ffmpegmux: close sub-streams concurrently #4634
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Resolves #3137
The
FFMPEGMuxer
was closing its substreams sequentially, which is bad when closing a substream takes a bit of time. This is especially the case now that theSegmentedStreamReader
waits for its worker and writer threads to terminate.DASH streams need #4630 to be merged in order to close without any unnecessary additional delay.
One issue still remains though, and that is that HTTP requests don't get cancelled when a segmented stream gets closed, so if a segmented stream (eg. one of the substreams of a muxed stream) still has ongoing HTTP requests, then these need to finish first because the
SegmentedStreamWriter
waits for all of its thread-pool threads to terminate first. Thewait=True
parameter is set there intentionally, for being able to run tests deterministically. This wasn't the case until two years ago when I changed it in 3b5a2cb, because the original implementation was done only with Streamlink's CLI in mind, where it doesn't matter much that streams get closed ungracefully.