Streampunk / beamcoder

Node.js native bindings to FFmpeg.
GNU General Public License v3.0
397 stars 76 forks source link

Add demuxer.interrupt() #56

Open jbaudanza opened 3 years ago

jbaudanza commented 3 years ago

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