如何终止Python启动的FFmpeg进程?进程无法正常退出问题
FFmpeg 进程无法通过写入"q"到STDIN正常退出的问题
向FFmpeg发送SIGTERM信号后,进程会以非零状态码退出,因此尝试通过向STDIN写入"q"的方式优雅终止进程,但该方案在当前场景下无效。
当前实现代码
主进程启动FFmpeg
stop_file_fd, _ = tempfile.mkstemp() with os.fdopen(stop_file_fd, 'w+') as stop_file_fp: p = subprocess.Popen(( 'ffmpeg', '-hide_banner', '-loglevel', 'error', '-i', m3u8_playlist_url, '-c:v', 'copy', '-c:a', 'copy', '-f', 'flv', rtmp_endpoint, ), stdin=stop_file_fp) launch_another_thread(p, stop_file_fp) p.communicate()
子线程终止逻辑
stop_file_fp.write('q') os.fsync(stop_file_fp.fileno()) stop_file_fp.seek(0)
执行上述操作后,FFmpeg看似停止了数据传输,但进程并未退出。
后续尝试结果
- 使用
p.stdin.write(b'q'):客户端主动触发停止时有效,但通过Ctrl+C终止服务器时,FFmpeg停止处理数据但进程仍存活。 - 尝试
'q'.encode("GBK")写入STDIN,结果与上述情况一致。
内容的提问来源于stack exchange,提问作者andre487
相关产品推荐
相关产品推荐

