Запуск imagesnap в PHP с Mac Server

Я пытаюсь разработать небольшой сайт, чтобы делать снимки моего дома с помощью веб-камеры, подключенной к моему Mac Mini дома. На mac mini работает OS X Server. Веб-камера представляет собой веб-камеру Logitech HD Pro Webcam C920 (подключение через USB). Он основан на PHP и HTML5 (никакого другого кода, кроме CSS).

Моя машина для разработки — это MacBook Pro, использующий внутреннюю камеру iSight. На нем не работает сервер 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.";
            }
?>

и запустил его в командной строке как пользователь _www с помощью php-cli:

sudo -u _www php test.php

и он также работал нормально (создал файл снимка и не выдал ошибки).

Я думаю, может быть, это как-то связано с серверным приложением OS X, но поиск Google ничего не возвращает.

Я в тупике. Почему он ломается, когда я запускаю тот же самый код в браузере, но отлично работает в командной строке, используя те же самые инструменты и пользователя?


person yebo29    schedule 31.01.2014    source источник
comment
Еще одна вещь: при запуске imagesnap через веб-сайт (там, где он ломается), кажется, что камера включается (горит индикатор, указывающий на то, что камера включена). Просто никогда не завершается; индикатор продолжает гореть, а процесс в системе продолжает выполняться; вероятно, занят выплевыванием одного и того же сообщения об ошибке, которое я публиковал выше, снова и снова.   -  person yebo29    schedule 01.02.2014


Ответы (1)


Неизвестно, правильный ли это способ, но в итоге я использовал sudo для запуска скрипта.

visudo

а затем предоставьте пользователю _www root-доступ без пароля к сценарию:

_www    ALL=NOPASSWD: /path/to/script

и теперь это работает. Всегда есть несколько способов содрать шкуру с кошки.

person yebo29    schedule 07.02.2014