Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: VLC:n käynnistys palvelimella PHP:n kautta (Mac OS X)

Sivun loppuun

Damiqib [31.03.2010 20:09:40]

#

Tarkoitus on saada VLC käynnistymään selainkäyttöliittymän avulla.

Systeemi toimii ongelmitta jos kokeilen sitä terminaalin kautta:
php /var/www/Movies/index.php
-> Videotiedosto aukeaa ja leffa alkaa pyörimään...

Selaimella käytettäessä VLC-prosessi käynnistyy, mutta videotiedosto ei käynnisty. Selaimen kautta käynnistetty VLC-prosessi vie lähes 100% CPU:n.

- Molemmat toimivat samalla käyttäjällä
- Molempien "Parent process" on bash
- Terminaalin kautta käynnistetyn VLC-prosessin "Process group" on tyhjä ja selaimen kautta käynnistetyn "httpd"
- Selaimen kautta käynnistetty VLC-prosessi tekee 1000-kertaisen määrän "Mach System Calls" verrattuna terminaalin kautta käynnistettyyn prosessiin

Mikä mahtaa olla ongelmana?

index.php

<?php

  # $j on tiedostopolku videotiedostaan ja se saadaan aiemmin
  exec('/var/www/Movies/vlc.sh "' . $j . '" > /dev/null 2>&1 & echo $!;');

?>

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"

Grez [31.03.2010 20:25:35]

#

Lähtökohtaisesti mielestäni on aika erikoista yrittää käynnistää käyttäjän ympäristöön ohjelmia palvelinprosessista käsin (httpd). Ehkäpä juuri siksi se ei toimi. Jos ajatellaan että sinulla olisi sama käyttäjä kirjautuneena useampaan istuntoon, niin kumpaan istunnoista palvelinprosessin käynnistämä työpöytäsovellus tulisi?

Metabolix [31.03.2010 20:26:17]

#

Ei kuulosta hyvältä idealta ajaa VLC:tä HTTP-palvelimen käyttäjätunnuksella; en lainkaan ihmettele, ettei se näy.

Järkevä ratkaisu voisi olla erillinen, itse kirjoitettu palvelin, joka toimisi kirjautuneen käyttäjän omilla tunnuksilla ja käsittelisi VLC:tä. PHP-skripti voisi sitten vain lähettää tälle palvelimelle ilmoituksen, mitä pitää tehdä.

Damiqib [01.04.2010 12:32:33]

#

Jos unohdetaan miksi näin ei kannattaisi tehdä, niin osaisiko joku kertoa miten tämän saisi toimimaan?

Apache toimii jo muutenkin omalla käyttäjätunnuksellani ja groupilla "staff", mutta silti en saa ohjelmaa käynnistymään selaimen kautta. Prosessi siis kyllä käynnistyy, mutta jostain syystä "WindowServer" ei suostu avaamaan VLC:n GUI:ta, vaan VLC-prosessi vaan jumahtaa.

Kyseessä on siis mediakoneeni, jota ohjataan toiselta koneeltani selaimen kautta ja helpottaisi elämää suuresti, jos saisin tuon VLC:nkin tottelemaan komentoja...

Metabolix [01.04.2010 13:27:43]

#

Suosittelen VLC:n ajamista ilman käyttöliittymää. Testaa ensin jollain äänitiedostolla (siis ilman videota):

vlc -Idummy /jokin/kappale/jossain.mp3 vlc://quit

Videoita varten ainakin Linuxissa täytyy asettaa DISPLAY-ympäristömuuttuja:

DISPLAY=":0.0" vlc -Idummy /jokin/video.mpg vlc://quit

En tunne Mac OS X:ää, mutta ympäristömuuttujat näet komentorivillä luultavasti komennolla export, joten arvaile sieltä.

Tiedät kai, että VLC:ssä on jo itsessäänkin selainkäyttöliittymä?

Marbo [01.04.2010 15:08:54]

#

Miks et kokeilis ihan Mac OS X:n AppleScriptillä?

PHP+AppleScript koodi

<?php

exec("osascript -e 'tell application \"VLC\"' -e 'delay 5' -e 'open \"polku/video/tiedstoon.wmv\"' -e 'activate' -e 'fullscreen' -e 'end tell'");

?>

Pelkkä AppleScript koodi

tell application "VLC"
	delay 5
	open "polku/video/tiedstoon.wmv"
	activate
	fullscreen
end tell

Damiqib [01.04.2010 16:34:36]

#

Marbo kirjoitti:

Miks et kokeilis ihan Mac OS X:n AppleScriptillä?

Ei toimi tämäkään. :(

Sama juttu, eli terminaalin kautta kokeiltaessa toimii, mutta selaimen kautta tuloksena tällä kertaa pyöreä nolla, eli tämä ei käynnistä edes prosessia.

Kokeilin vielä yksinkertaistetetumpaa esimerkkiä, eli (terminaalin kautta ok - selaimen kautta osascript ei sano mitään):

<?php

  // Näyttää, että Apache toimii minun käyttäjänimelläni ja samalla groupilla...
  echo exec('whoamI');

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

?>

Marbo [01.04.2010 16:40:20]

#

Sulla on sitten jotain vikaa siellä. Koska itselläni toimii netinkauttakin aivan loistavasti.

EDIT: Olikohan se niin, että piti ajaa noita omalla tunnuksella niin toimi. Jotain pientä kikkaa piti ensin tehä niin lähti rullaan, mutta ei voi millään muistaa enään, että mitä. :/

Damiqib [01.04.2010 17:18:44]

#

Hieman edistystä taas...

Ongelmana on ollut se, että apache ei ole loginwindow:n "lapsi" - no sen saa kierrettyä näin, jonka jälkeen on mahdollista saada selaimen kautta ohjelmia, jne. toimimaan...

<?php

  $PID =  exec('ps aux | grep "loginwindow" | grep -v grep | awk \'{ print $2 }\'');

  // Tämä toimii :D
  exec('sudo launchctl bsexec ' . $PID . ' osascript -e \'say "Hello"\'');

?>

Tämä ei kuitenkaan näytä toimivan VLC:n kanssa, koska se mokoma valittaa tätä: "VLC is not supposed to be run as root. Sorry."

Nyt menee ongelma jo reilusti ohi nettiohjelmoinnista, mutta jatketaan samaa ketjua, eli olisiko tietoa miten tämä ongelma ohitetaan, jotta tämä toimisi? :D

<?php

  $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 $!;');

?>

Metabolix [01.04.2010 17:37:32]

#

No varmaan sitten lisäät ketjuun vielä su:lla käyttäjän vaihdon takaisin.

sudo ... su pertsa -c 'VLC --jeejee biisi.mp3'

Damiqib [01.04.2010 18:25:17]

#

Ratkaistu:

<?php

  $PID = exec('ps aux | grep "loginwindow" | grep -v grep | awk \'{ print $2 }\'');
  $file = "/path/to/video/file.mkv";

  exec('sudo launchctl bsexec ' . $PID . ' osascript -e \'tell application "VLC"\' -e \'open "' . $file . '"\' -e \'activate\' -e \'fullscreen\' -e \'end tell\'');

?>

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta