Question

I am trying to develop a small site to take snapshots of my house using a webcam connected to to my mac mini at home. The mac mini is running OS X Server. The Webcam is a Logitech HD Pro Webcam C920 (USB connected). It is based on PHP and HTML5 (no other code besides CSS).

My development machine is a MacBook Pro using the internal iSight camera. It is not running OS X server; I manually enabled apache and PHP. While developing the site on my laptop, everything worked flawlessly. When I installed it on my mac mini the imagesnap program turns on the camera but never finishes; I have to manually kill the process, and the snapshot is never created.

The following error is logged:

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.

This is only when running it from the site directly. If I run the same program from the command-line, it works just fine... even running it as the _www user!

sudo -u _www bin/imagesnap images/snapshot_$DATE.jpg

This is the code that does the call in PHP:

<?php 
if(isset($_POST['submit'])) {
system('bin/run_imagesnap.sh', $return_value);
        if ($return_value) {
                echo "The command failed.";
        }
}
?>

I was unable to figure out how to write the date to the output filename (I'm a noob with PHP), so I used a bash script to do it for me (I'm better with BASH):

#!/bin/bash

DATE=`date +"%m-%d-%y_%T"`
bin/imagesnap -q -w 3 images/snapshot_$DATE.jpg

I've also tried exec(), passthru(), and shell_exec() all with the same results.

Finally, I've also tried the following: Create test.php, put code:

<?php
system('bin/run_imagesnap.sh', $return_value);
            if ($return_value) {
                    echo "The command failed.";
            }
?>

and ran it on the command-line as the _www user using the php-cli:

sudo -u _www php test.php

and it also worked just fine (created the snapshot file and did not give error).

I'm thinking maybe it has something to do with the OS X server app, but google searches return nothing.

I'm stumped. Why does it break when I run the same exact code on the browser but works fine on the command-line using the same exact tools and user?

Was it helpful?

Solution

Unknown if this is the correct way, but I ended up using sudo to run the script.

visudo

and then give the _www user passwordless root access to the script:

_www    ALL=NOPASSWD: /path/to/script

and now it works. There's always more than one way to skin a cat..

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top