This PR adds an interrupt() function to the demuxer instance. Calling interrupt will cause any blocking IO on the demuxer to abort with the AVERROR_EXIT error code.
I considered adding some special error handling for AVERROR_EXIT, but I wanted to get your feedback first. It might be useful for client applications to be able to differentiate between intentional early exit errors and regular errors. In my app, I'm doing a string match for "Immediate exit requested" on error.message. It's not ideal, but good enough for now.
This PR adds an
interrupt()
function to the demuxer instance. Calling interrupt will cause any blocking IO on the demuxer to abort with the AVERROR_EXIT error code.This is accomplished using the AVIOInterruptCB structure in ffmpeg https://github.com/FFmpeg/FFmpeg/blob/6087692a60699a5eac5b061dd458e5a856e0662f/libavformat/avio.h#L47-L61
I considered adding some special error handling for AVERROR_EXIT, but I wanted to get your feedback first. It might be useful for client applications to be able to differentiate between intentional early exit errors and regular errors. In my app, I'm doing a string match for "Immediate exit requested" on error.message. It's not ideal, but good enough for now.
This resolves my issue https://github.com/Streampunk/beamcoder/issues/54 and I think could also help with https://github.com/Streampunk/beamcoder/issues/53