【问题标题】:Using SWIG/PHP to control applications on the Raspberry Pi (mjpg-streamer)使用 SWIG/PHP 控制 Raspberry Pi (mjpg-streamer) 上的应用程序
【发布时间】:2016-04-06 20:32:59
【问题描述】:

我尝试通过树莓派上的 swig/c/php 界面启动“mjpg-streamer”。之前通过swig/c/php成功控制了两个app:

  • 通过 i2cset 控制 GPIO
  • 通过wiringPI控制GPIO

对于“mjpg-streamer”,我使用了以下代码:

    void stream(void) {
        system("export LD_LIBRARY_PATH=/usr/local/lib/");
        system("mjpg_streamer -o 'output_http.so -w /media/MINIUSB/dev/Control/www' -i 'input_raspicam.so -x 640 -y 480 -fps 15'");
    }

并像使用 GPIO 控件一样运行“make”

    swig -Wextra -php camera.i
    gcc -fpic -c `php-config --includes` camera.c camera_wrap.c
    gcc -shared camera_wrap.o camera.o -o camera.so
    cp camera.so `php-config --extension-dir`
    service lighttpd restart

最后我运行“chmod 4755 /usr/local/lib/input_raspicam.so”和“chmod 4755 /usr/local/lib/output_http.so”,因为我这样做是为了启用“i2cset”等。

在这个例子中我没有使用 /dev/video[0..n],也许它应该是另一个设备。

系统运行在raspbian jessie, php-5.6.14, php5-[dev,cli,cgi], lighttpd, swig-2.0.12下。根据phpinfo(),模块加载成功。

有人知道出了什么问题吗?

【问题讨论】:

  • 你没有提到你遇到了什么问题。
  • 乔,对不起。问题是,什么都没有发生,我没有在日志文件(/var/log/lighttpd/error.log、dmesg 等)中得到任何信息
  • 您希望看到什么?我不确定,但可能在 PHP 中,因为在其他目标语言中加载模型不会运行任何代码。由于您没有发布任何 PHP 代码,因此我认为不应单独运行任何内容。

标签: php raspberry-pi swig lighttpd


【解决方案1】:

我认为对系统的两次调用不会像您希望它们像这样连续运行时所做的那样。第一次调用的导出只会影响为特定调用system 而生成的shell 进程的环境。对 system 的下一次调用将继承其父级的环境,该环境不会被更改。相反,您可能想要做的是:

system("LD_LIBRARY_PATH=/usr/local/lib/ mjpg_streamer -o 'output_http.so -w /media/MINIUSB/dev/Control/www' -i 'input_raspicam.so -x 640 -y 480 -fps 15'");

这将为调用 mjpg_streamer 的进程设置环境。或者更好的是使用 putenv/setenv 代替。

由于您使用的是 PHP 并且只是调用系统,因此您最好使用 PHP shell_exec 或类似的,因为您的 C 语言中没有任何 PHP 不能做的事情(它只是为您调用 bash以某种方式)

【讨论】:

  • PHP 代替 C 是可能的 - 是的,但是在下一个开发步骤中,我想在一个程序中集成几个函数而不是调用一个程序。合并这两个命令没有帮助。我假设,我必须 chmod 一些其他文件和/或设备 /dev/* ...我查看了 jpg_streamer 和 raspistill 的源代码,但我没有找到任何东西。 /dev/video0 未使用,在我的情况下也不存在。
【解决方案2】:

在构建您的应用程序时,您可以使用 gcc -Wl,-rpath,/usr/local/lib ... 将 rpath 构建到 .so 中,而不是使用 LD_LIBRARY_PATH。

正如@Flexo 所指出的,用于设置环境变量的单独 system() 不会影响后续调用 system() 时的环境

【讨论】:

    猜你喜欢
    • 2016-12-04
    • 2021-01-22
    • 2018-05-02
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多