0

我正在尝试通过浏览器打开 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 倍。

任何人都可以给我任何关于如何让这个东西工作的指示吗?

索引.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"
4

2 回答 2

1

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

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\""
于 2011-02-03T15:08:17.793 回答
0

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

exec('osascript -e \'say "Hello"\'');

我让 AppleScript 通过浏览器工作,这是一个巨大的胜利。:D 现在的问题是显然 VLC 不能以 root 身份运行并抱怨:“VLC 不应该以 root 身份运行。抱歉。如果您需要使用实时优先级和/或特权 TCP 端口,您可以使用/Applications/VLC.app/Contents/MacOS/VLC-wrapper (确保它是 Set-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 $!;'); 
于 2010-04-01T14:00:26.840 回答