Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP(Mac OS X)通过浏览器打开VLC_Php_Apache_Vlc - Fatal编程技术网

如何使用PHP(Mac OS X)通过浏览器打开VLC

如何使用PHP(Mac OS X)通过浏览器打开VLC,php,apache,vlc,Php,Apache,Vlc,我试图通过浏览器打开VLC,让它在Mac OS X上立即播放给定的视频文件 这在我的本地服务器上运行,并且只在本地运行——因此我已经使用我的用户名和组“staff”(在httpd.conf中定义)运行了apache(MAMP) 是的-我知道VLC有http接口-但是这不是我需要的,所以不要建议 当我通过终端运行当前系统时,它不会出现任何问题: php /var/www/Movies/index.php ->这导致VLC打开,视频开始全屏播放 当我用浏览器运行同一个PHP页面时,问题就开始了

我试图通过浏览器打开VLC,让它在Mac OS X上立即播放给定的视频文件

这在我的本地服务器上运行,并且只在本地运行——因此我已经使用我的用户名和组“staff”(在httpd.conf中定义)运行了apache(MAMP)

是的-我知道VLC有http接口-但是这不是我需要的,所以不要建议

当我通过终端运行当前系统时,它不会出现任何问题:

php /var/www/Movies/index.php  
->这导致VLC打开,视频开始全屏播放

当我用浏览器运行同一个PHP页面时,问题就开始了。然后VLC进程启动,但没有GUI,视频文件无法开始播放,VLC进程占用了近100%的CPU

  • 两者都有;终端和浏览器启动的VLC进程与同一用户(我的)运行
  • 两者都有“父进程”bash
  • 以终端开始的VLC进程具有空的“进程组”(仅进程id号),而启动的浏览器具有“httpd”+(id号)
  • 通过浏览器启动的VLC过程产生的“马赫系统调用”比终端启动的对应过程多1000倍
有谁能给我指点一下如何使这东西运转起来吗

index.php

# $j is a file path to the videofile and is defined before
exec('/var/www/Movies/vlc.sh "' . $j . '" > /dev/null 2>&1 & echo $!;'); 

# If I do this in the given PHP-page it tells me that apache is running 
# with my username and with the group "staff" like it should be...
exec('whoamI');
vlc.sh

#!/bin/bash 
# Activate VLC in 5 seconds to make it the front-most window 
(sleep 5; open -a VLC) & 

# Open video file 
/Applications/VLC.app/Contents/MacOS/VLC --quiet --fullscreen "$1"

谢谢你的回复。我没有让VLC使用这个,但我证明了我可以用我的浏览器做一些事情

exec('osascript -e \'say "Hello"\'');
我通过浏览器获得了AppleScript,这是一个巨大的胜利现在的问题是,显然VLC不能作为root运行,并抱怨说:“VLC不应该作为root运行。对不起。 如果需要使用实时优先级和/或特权TCP端口 您可以使用/Applications/VLC.app/Contents/MacOS/VLC-wrapper(确保将其设置为UID root并 无法首先由不受信任的用户运行)。 “:(

所以-任务还在继续…仍然需要帮助来克服这个限制

这就是我想让魔法发生的地方:

$PID = exec('ps aux | grep "loginwindow" | grep -v grep | awk \'{ print $2 }\''); 
exec('sudo launchctl bsexec ' . $PID . ' /Applications/VLC.app/Contents/MacOS/VLC --quiet --fullscreen "' . $j . '" > /dev/null 2>&1 & echo $!;'); 

为了结束这个问题,对我有效的最终解决方案是:

exec('echo "OS_X_ROOT_PASSWORD" | sudo -S launchctl bsexec LOGIN_WINDOW_PROCESS_ID osascript -e \'do shell script "PATH_TO_vlc.sh" & " \"MOVIE_FILE_PATH\" \"SUBTITLE_FILE_PATH\""\' > /dev/null 2>&1 & echo $!;');
vlc.sh的内容

#!/bin/bash

# Activate VLC in x seconds to make it the front-most window
(sleep 4; open -a VLC) &

# Open video file
su - YOUR_MAC_OS_USERNAME -c "/Applications/VLC.app/Contents/MacOS/VLC --quiet --volume=1024 --fullscreen --sub-file=\"$2\" \"$1\""

我会给出一个答案,但我不能产生一个端到端都能工作的东西,所以我不确定它是否能工作。看看
man屏幕截图的结尾。我怀疑这是同一个问题(Apache不是loginwindow的孩子,所以它不能打开里面的东西)。
ps aux | grep“loginwindow”| grep-v grep | awk'{print$2}“
可能有用。我有一个类似的问题,我尝试了上面的解决方案,但不起作用。
OS\u X\u ROOT\u密码是否应该替换为我的ROOT帐户的密码?没错。登录窗口\u进程\u ID应该是$PID中的ID号(前面的答案)。