【发布时间】:2014-02-27 01:21:23
【问题描述】:
我有一个提供 MJPEG 流的 ip 网络摄像头。我可以在 OSX 下使用 ffmpeg 成功转码并保存该流。以下内容几乎满足了我的需求:
ffmpeg -f mjpeg -i "http://user:pass@10.0.1.200/nphMotionJpeg?Resolution=640x480&Quality=Standard" -b:v 1500k -vcodec libx264 /tmp/test.mp4
这将启动 FFMPEG 会话并开始将实时流保存到我的 test.mp4 文件中。按 q 将退出 ffmpeg 并保存文件。
我想使用 PHP 或 Bash shell 脚本以编程方式开始和停止录制。我尝试了以下方法:
<?php
$pid = pcntl_fork();
if($pid == -1){
die("could not fork");
}elseif($pid){
// we are the parent...
print $pid.' started recording. waiting 10 seconds...';
sleep(10); // Wait 10 seconds
print_r(shell_exec("kill ".$pid)); // Kill the child recording process
echo 'done';
exit();
}else{
// we are the child process. call ffmpeg.
exec('../lib/ffmpeg -f mjpeg -i "http://user:pass@10.0.1.200/nphMotionJpeg?Resolution=640x480&Quality=Standard" -b:v 1500k -vcodec libx264 /tmp/test.mp4');
}
但是有两个问题:
- ffmpeg 进程没有结束/终止(可能是因为它再次分叉)
- 当我手动终止 ffmpeg 进程时,视频文件不可读
【问题讨论】:
标签: php macos bash ffmpeg webcam