【发布时间】:2014-02-24 10:54:30
【问题描述】:
我正在尝试开发一个小型网站,以使用连接到我家中的 mac mini 的网络摄像头拍摄我的房子的快照。 mac mini 正在运行 OS X 服务器。网络摄像头是罗技 HD Pro 网络摄像头 C920(USB 连接)。它基于 PHP 和 HTML5(除了 CSS 之外没有其他代码)。
我的开发机器是使用内部 iSight 摄像头的 MacBook Pro。它不是运行OS X服务器;我手动启用了 apache 和 PHP。在我的笔记本电脑上开发网站时,一切都完美无缺。当我将它安装在我的 mac mini 上时,imagesnap 程序会打开相机但永远不会完成;我必须手动终止该进程,并且永远不会创建快照。
记录以下错误:
imagesnap[2363]: *** QTCaptureSession warning: Session received the following error while decompressing video: Error Domain=NSOSStatusErrorDomain Code=-12903 "The operation couldn’t be completed. (OSStatus error -12903.)". Make sure that the formats of all video outputs are properly configured.
仅当直接从站点运行它时。如果我从命令行运行相同的程序,它就可以正常工作......甚至以 _www 用户身份运行它!
sudo -u _www bin/imagesnap images/snapshot_$DATE.jpg
这是在 PHP 中执行调用的代码:
<?php
if(isset($_POST['submit'])) {
system('bin/run_imagesnap.sh', $return_value);
if ($return_value) {
echo "The command failed.";
}
}
?>
我无法弄清楚如何将日期写入输出文件名(我是 PHP 的菜鸟),所以我使用 bash 脚本来为我做这件事(我更适合使用 BASH):
#!/bin/bash
DATE=`date +"%m-%d-%y_%T"`
bin/imagesnap -q -w 3 images/snapshot_$DATE.jpg
我还尝试了 exec()、passthru() 和 shell_exec(),结果都一样。
最后,我还尝试了以下方法:创建test.php,放入代码:
<?php
system('bin/run_imagesnap.sh', $return_value);
if ($return_value) {
echo "The command failed.";
}
?>
并使用 php-cli 以 _www 用户身份在命令行上运行它:
sudo -u _www php test.php
而且它也工作得很好(创建了快照文件并且没有给出错误)。
我在想这可能与 OS X 服务器应用程序有关,但谷歌搜索没有返回任何内容。
我被难住了。为什么当我在浏览器上运行完全相同的代码但使用完全相同的工具和用户在命令行上运行良好时,它会中断?
【问题讨论】:
-
还有一件事:当通过网站运行 imagesnap 时(它中断的地方),相机似乎确实打开了(指示相机打开的灯亮起)。只是永远不会完成;指示灯保持亮起,进程保持在系统中运行;可能正忙着吐出我一遍又一遍地发布的相同错误消息。
标签: php html macos bash osx-server