0

ブラウザでVLCを開き、MacOSXで指定されたビデオファイルをすぐに再生できるようにしようとしています。

これはローカルサーバーで実行され、ローカルでのみ実行することを目的としています。したがって、ユーザー名とグループ「staff」(httpd.confで定義)を使用してapache(MAMP)を実行しています。

はい-私はVLCがhttpインターフェースを持っていることを知っています-しかしそれは私が必要とするものではないので、それを示唆しないでください...

現在のシステムは、ターミナル経由で実行すると問題なく動作します。

php /var/www/Movies/index.php  

->これにより、VLCが開き、ビデオが意図したとおりにフルスクリーンで再生され始めます。

同じPHPページをブラウザで実行すると問題が発生します。次に、VLCプロセスが開始されますが、そのGUIがなく、ビデオファイルの再生が開始されず、VLCプロセスがCPUのほぼ100%を使用します。

  • 両方; ターミナルとブラウザが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"
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ルートであり、信頼できないユーザーが最初に実行できないことを確認してください)。:(

だから-探求は続く...この制限を克服するためにまだ助けが必要です...

これは私が魔法を起こさせたいところです:

$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 に答える