Windows下PHP用popen/proc_open启动ffmpeg并获取PID终止进程问询
Windows环境PHP通过proc_open管理ffmpeg进程实现方案
原有title设置不生效的原因
你之前在popen中写入的title $title \r start ...逻辑仅作用于popen临时创建的cmd进程,而start /min会触发Windows新开独立的cmd窗口运行ffmpeg,两个进程完全独立,所以title设置不会同步到新窗口,也无法通过这个标题关联到实际运行的ffmpeg进程。
步骤1:启动ffmpeg并获取PID存储
使用proc_open启动进程后可以通过proc_get_status拿到进程PID,将PID和对应标题绑定存储到数据库、SESSION或缓存中即可用于后续管理。注意要把start /min替换为start /B避免新开独立进程,导致PID获取错误。
// 对用户输入做转义,避免命令注入风险 $title = $_POST['title']; $ip = escapeshellarg($_POST['IPtxt']); $UIP = escapeshellarg($_POST['UDPAddress']); $UPort = escapeshellarg($_POST['UDPPort']); // 构造ffmpeg命令,/B参数表示后台运行不弹出窗口 $ffmpegCommand = "start /B ffmpeg -loglevel quiet -re -i udp://{$UIP}:{$UPort} -codec: copy -f mpegts udp://{$ip}?pkt_size=1316"; // 配置proc_open的IO描述符 $descriptorspec = [ 0 => ["pipe", "r"], // 标准输入 1 => ["pipe", "w"], // 标准输出 2 => ["pipe", "w"] // 标准错误 ]; // 启动进程 $process = proc_open($ffmpegCommand, $descriptorspec, $pipes); if (is_resource($process)) { // 获取进程状态,拿到PID $procInfo = proc_get_status($process); $ffmpegPid = $procInfo['pid']; // 将标题与PID绑定存储,示例存SESSION,多用户场景建议存数据库绑定用户ID session_start(); if (!isset($_SESSION['ffmpeg_processes'])) { $_SESSION['ffmpeg_processes'] = []; } $_SESSION['ffmpeg_processes'][$title] = $ffmpegPid; // 关闭管道避免PHP执行阻塞 fclose($pipes[0]); fclose($pipes[1]); fclose($pipes[2]); echo "ffmpeg启动成功,对应PID:{$ffmpegPid}"; } else { echo "进程启动失败"; }
步骤2:停止对应ffmpeg进程
收到停止请求时,根据传入的标题取出对应PID,调用Windows的taskkill命令强制关闭进程即可,/T参数会连带关闭所有子进程避免ffmpeg残留。
session_start(); $stopTitle = $_POST['stop_title']; // 停止按钮传过来的对应进程标题 if (isset($_SESSION['ffmpeg_processes'][$stopTitle])) { $targetPid = $_SESSION['ffmpeg_processes'][$stopTitle]; // 执行强制杀进程命令 exec("taskkill /F /T /PID ".escapeshellarg($targetPid)); // 删除存储的进程记录 unset($_SESSION['ffmpeg_processes'][$stopTitle]); echo "对应进程已停止"; } else { echo "未找到匹配的运行进程"; }
注意事项
- 不要使用
start /min参数,会触发新开独立窗口导致拿到的PID是临时cmd进程的ID,无法关联到实际ffmpeg进程 - 所有传入命令的用户参数必须做转义处理,避免命令注入漏洞
- 业务场景如果是多用户使用,不要仅用SESSION存储PID,建议将PID、标题、用户ID绑定存储到数据库中
内容的提问来源于stack exchange,提问作者Cameron Allen
相关产品推荐
相关产品推荐

