Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: VLC Komentorivikoodit

Sivun loppuun

Macro [01.07.2010 18:23:26]

#

Moi taas!

Windows Media Playerin komentorivituki on hyvin huono, joten teen ohjelman käyttämään VLC:tä musiikin ja elokuvien toistoon. Tarvitsisin muutaman koodin, jolla saisin tehtyä erillaisia asioita VLC:ssä. Tässä nykyiset koodit, jotka toimivat. Windows XP käyttöjärjestelmänä siis.

Käynnistää ohjelman:
	"C:\Program Files\VideoLAN\VLC\vlc.exe"

Avaa kansion soitettavaksi:
	"C:\Program Files\VideoLAN\VLC\vlc.exe" "C:\Polku\Kansioon\Jossa\Kappaleet\Sijaitsevat"

Avaa tiedoston soitettavaksi:
	"C:\Program Files\VideoLAN\VLC\vlc.exe" "C:\Polku\Soitettavaan\Tiedostoon"

Vielä pitäisi komentorivillä saada tehtyä seuraavat asiat:

VLC:n omat ohjeet ovat todella sekavia, enkä ole niistä ymmärtänyt mitään.

-tossu- [02.07.2010 12:30:46]

#

Mikäli haluat antaa komentoja jo käynnissä olevalle VLC:lle, ei se onnistu komentoriviltä, vaan joudut käyttämään telnet- tai http-käyttöliittymää.

Macro [02.07.2010 12:37:47]

#

Selaimella se onnistuu (Selasin jotain ohjeita, jossa oli noita funktioita), mutta voiko ohjelmani lähettää suoraan ohjelmalle netin yli tietoa ilman, että tarvittaisiin selainta?

Miten telnet toimii tässä?

Blaze [02.07.2010 13:20:02]

#

Macro kirjoitti:

voiko ohjelmani lähettää suoraan ohjelmalle netin yli

Sun oma ohjelmas voi puhua ihan yhtä lailla HTTP:tä VLC:lle kuin se selainki.

Macro [02.07.2010 13:40:44]

#

Käsittääkseni selain vaatii VLC-laajennoksen, jotta se voi "puhua HTTP:tä" VLC:lle. Miten ohjelmani pystyy tälläisen tekemään?

Muokkaus. Selailtuani tarpeeksi kauan, löysin kirjaston pyvlc. Koitan tällä saada ohjelman toimimaan. Otan silti vinkkejä vastaan tähän "HTTP:n puhumiseen" VLC Playerille.

Blaze [02.07.2010 14:37:40]

#

Macro kirjoitti:

Käsittääkseni selain vaatii VLC-laajennoksen

Ai, olipa kökkö systeemi.

No, sitten voit puhua HTTP:n sijasta sitä samaa protokollaa kuin se laajennos puhuu.

Macro [02.07.2010 14:45:44]

#

Löysin pari kirjastoa, libvlc ja pyvlc. Kumminkin kirjastojen ohjeet olivat vajaita (libvlc:stä näin vain puhuttavan foorumeilla), joten niistä ei saanut mitään vihjeitä.

En ymmärrä noita juttuja, että "puhu samaa protokkollaa kuin se laajennos puhuu". Siis mitä pitäisi tehdä? Miten Python sovellukseni pystyy tekemään tuollaisia asioita?

Muokkaus. Onko VLC:n Telnet interface "näkymätön", kun mitään ei tapadu klikatessani View -> Add interface -> Telnet Interface. Pythonilla on telnetlib, jolla voisi keskustella tuon VLC:n kanssa. Onko tämä järkevä vaihtoehto?

Mitä funktioita telnetlib:stä tarvitsee, että voi lähettää tietoja VLC:lle telnetillä? Kun klikkaa yllä mainitsemastani menusta, niin klikatessa "Console", aukeaa rc interface. Täällä toimivat hienosti seuraavat komennot: next, prev, pause, play, stop ja moni muu. Toimisivatkohan kaikki samat telnetillä? Mm...

Koitin Windowsin HyperTerminalia, otin yhteyden localhostiin 4212 portilla ja enter. HyperTerminaalin ikkunaan tuli "Password: ", johon piti antaa salasana. Kirjoitin "admin", joka pitäisi olla VLC:n rc:n salasana (remote control). Mitään ei tapahtunut.

Pitääkö VLC:tä konfiguroida jotenkin, että sitä voi näin etähallita? Käynnistin VLC telnetin näin: "C:\Program Files\VideoLAN\VLC\vlc.exe" -- intf telnet
Aukesi konsoli-ikkuna, johon sai antaa komentoja. Pitääkö jotain erikoista tehdä vielä? Olen asetuksista enabloinut VLC:n rc:n.

Kirjoitin Pythonin dokumentaation pohjalta esimerkin klientistä, mutta tämä ei toiminut.

import telnetlib

tn = telnetlib.Telnet("localhost", 4212)
tn.read_until("Password: ")
tn.write("admin\n")

while True:
    s = input("Lähetä VLC:lle: ")

    if s == "exit":
        break
    tn.write(str(s) + "\n")

tn.write("exit\n")

Virhe tulee,

Traceback (most recent call last):
  File "C:\Documents and Settings\xxx\Desktop\telnetlib.py", line 1, in <module>
    import telnetlib
  File "C:\Documents and Settings\xxx\Desktop\telnetlib.py", line 3, in <module>
    tn = telnetlib.Telnet("localhost", 4212)
AttributeError: 'module' object has no attribute 'Telnet'

pake10 [02.07.2010 15:56:19]

#

Macro kirjoitti:

import telnetlib

tn = telnetlib.Telnet("localhost", 4212)
tn.read_until("Password: ")
tn.write("admin\n")

while True:
    s = input("Lähetä VLC:lle: ")

    if s == "exit":
        break
    tn.write(str(s) + "\n")

tn.write("exit\n")
Traceback (most recent call last):
  File "C:\Documents and Settings\xxx\Desktop\telnetlib.py", line 1, in <module>
    import telnetlib
  File "C:\Documents and Settings\xxx\Desktop\telnetlib.py", line 3, in <module>
    tn = telnetlib.Telnet("localhost", 4212)
AttributeError: 'module' object has no attribute 'Telnet'

Laita tuo "Telnet" pienellä. Se saattaa olla syynä. Eli näin:

import telnetlib

tn = telnetlib.telnet("localhost", 4212)
tn.read_until("Password: ")
tn.write("admin\n")

while True:
    s = input("Lähetä VLC:lle: ")

    if s == "exit":
        break
    tn.write(str(s) + "\n")

tn.write("exit\n")

Macro [02.07.2010 16:01:55]

#

Tuolla ei ollut mitään vaikutusta.

Chiman [02.07.2010 16:48:11]

#

Minkä olet laittanut kooditiedoston nimeksi? Et kai vaan telnetlib.py? Tuo virheilmoitus tulisi ainakin siinä tapauksessa, koska "import telnetlib" tulkittaisiin niin, että haluat importoida nykyisestä hakemistosta tuon saman tiedoston, eikä se sisällä Telnet- tai telnet-luokkaa.

Edit: olet, senhän näkee virheilmoituksestakin:
"File "C:\Documents and Settings\xxx\Desktop\telnetlib.py", line 1, in <module>"

Eli nimeä tuo tiedosto paremmin, jottei nimikonflikteja tule.

-tossu- [02.07.2010 16:54:58]

#

Kun olet antanut VLC:lle salasanan telnetillä, sen pitäisi tulostaa "Welcome Master!", jonka jälkeen voit antaa komentoja.

HTTP-käyttöliittymä ei ainakaan minulla vaatinut mitään laajennosta. Esimerkiksi soivan kappaleen pysäyttäminen onnistuu lähettämällä sivupyyntö: http://localhost:8080/requests/status.xml?command=pl_stop

Telnethän ei liikennöi mitään protokollakohtaista, joten Pythonissa normaalin socket-yhteyden pitäisi käydä ihan hyvin.

Edit: Kun käynnistät VLC:n telnet-käyttöliittymän VLC:n GUI:sta, ei siitä ilmoiteta mitenkään, se vain käynnistyy taustalla.

Macro [02.07.2010 17:20:19]

#

En ymmärrä, miksi tuo telnet-juttu ei toimi. Koodini ylhäällä toimii (kunhan lisäsin s-muuttujan lähetyksen yhteydessä encode("ascii") ja muuhun dataan b"data"), mutta mitään ei tapahdu serverillä. Koitan, saisinko sen paremmin toimimaan tuolla http-käyttöliittymällä, mutta kiinnostaisi tämä telnet silti :)

Joo, en muistanut että import sisällyttää tuolla tavalla tiedostoja, joten en tajunnut nimetä sitä tiedostoa eri nimellä.

-tossu- [02.07.2010 17:38:07]

#

Toimiiko se telnet-käyttöliittymä edes, jos kirjoitat komentoriville "telnet localhost 4212"?

Macro [02.07.2010 17:43:09]

#

-tossu- kirjoitti:

Toimiiko se telnet-käyttöliittymä edes, jos kirjoitat komentoriville "telnet localhost 4212"?

"Connecting To localhost...Could not open connection to the host, on port 4212: Connect failed"

Eli ei.

-tossu- [02.07.2010 17:55:50]

#

Olithan ottanut sen käyttöön parametrilla tai sieltä menusta? Eikös se joskus toiminut ainakin salasanakyselyyn asti?

Jos telnet ei ala toimimaan, voit tietysti käyttää HTTP:tä, mikäli se toimii, mutta telnet on varmasti helpompi.

Macro [02.07.2010 18:04:20]

#

Onnistuin sössimään jotain VLC:n asetuksissa, ja koko ohjelma ei enään käynnistynyt. Asensin uudelleen, laitoin ruksin asetuksissa kohtaan Remote control ja voilâ! telnet localhost 4212 toimi. En tiennytkään, että Windowsissa on tuollainen telnet-systeemi.

Jostain syystä samat komennot eivät toimi tässä kuin avaisi VLC:stä remote control interfacen. Eli, jos kirjoitan telnettiin pause, tulee "Unknown command".

VLC media player 1.1.0 The Luggage
                                  Password:
Welcome, Master
> help
    Commands Syntax:
        new (name) vod|broadcast|schedule [properties]
        setup (name) (properties)
        show [(name)|media|schedule]
        del (name)|all|media|schedule
        control (name) [instance_name] (command)
        save (config_file)
        export
        load (config_file)
    Media Proprieties Syntax:
        input (input_name)
        inputdel (input_name)|all
        inputdeln input_number
        output (output_name)
        option (option_name)[=value]
        enabled|disabled
        loop|unloop (broadcast only)
        mux (mux_name)
    Schedule Proprieties Syntax:
        enabled|disabled
        append (command_until_rest_of_the_line)
        date (year)/(month)/(day)-(hour):(minutes):(seconds)|now
        period (years_aka_12_months)/(months_aka_30_days)/(days)-(hours):(minute
s):(seconds)
        repeat (number_of_repetitions)
    Control Commands Syntax:
        play [input_number]
        pause
        stop
        seek [+-](percentage) | [+-](seconds)s | [+-](milliseconds)ms
    Telnet Specific Commands:
        quit : logout from telnet/shutdown VLC from local shell
        description : describe this module
        shutdown : shutdown VLC
        help : show this help
        logout : logout
        license : print VLC's license message
        lock : lock the telnet prompt
>

Näin saan tietää help komennolla. Eikös Control Commands Syntax kohdassa olekkin play, pause ja stop? Mikseivät nämä toimi? :o

Toisesta koneesta ei pysty yhdistämään telnetillä IP:n kanssa.

-tossu- [02.07.2010 18:44:02]

#

Jostain syystä koneeni VLC:tä ei huvita tiettyjä komentoriviparametrejä (--telnet-password, --telnet-port, --rc-host jne.), mutta kokeile komentoa

vlc --extraintf rc --rc-host localhost:4212

, ja yhdistä telnetillä, jos kaikki toimii hyvin pitäisi RC-käyttöliittymään pystyä yhdistämään.

Macro [02.07.2010 18:46:50]

#

Käynnistin sen noinkin, mutta ei se mitään auttanut. Samalla tavalla se toimii. Miten yllä olevan help-komennon tuloksen perusteella komennot pitäisi antaa? Minusta niin, kuin ehdotinkin.

-tossu- [02.07.2010 18:52:03]

#

Telnetissä on käytössä eri komennot, eli esim. "control <name> pause", eikä minulla ainakaan oli mitään aavistusta mitä <name>:n paikalle kuuluisi laittaa. Mikäli saisit VLC:n RC-käyttöliittymän tajuamaan, että pitää kuunella TCP-sockettia, eikä komentoriviä, voisit käyttää niitä yksinkertaisempia komentoja.
Lisäksi sinun kannattaa ainakin katsoa http://wiki.videolan.org/Console

Edit: VLC:n RC-käyttöliittymä tuntuu bugittavan aika pahasti, toisella koneella (VLC 1.0.6) komento

vlc --extraintf rc --rc-host localhost:1337

käynnisti hienosti RC-käyttöliittymän ja siihen voi yhdistää telnetillä, toisella koneella (VLC 1.1.0) sama komento käynnisti RC-käyttöliittymän konsoliin, vaikka sen piti toimia verkossa. Sinulla näyttää olevan juuri VLC:n versio 1.1.0, jossa tuo ei toimi.

Macro [02.07.2010 19:34:06]

#

Miten tuo ei toimi siis? Minulla tuo komento avaa VLC:n graafisen käyttöliittymän VLC:stä ja siihen voi yhdistää Telnetillä. Kyllä, minulla on uusin versio käytössä. Tietääkö joku, mitä -tossu-:n mainitseman <name>:n kohdalle kuuluu? Kun etsin netistä, niin sain käsityksen, että siihen kuuluisi "median" nimi. Mitä sitten tarkoittaneekaan.

Jos lähetän control audio pause, saan vastauksen "control : audio : media unknown".

-tossu- [02.07.2010 19:40:43]

#

Tuo minun komentoni ei avaa telnet-käyttöliittymää, vaan rc-käyttöliittymän, joka hyväksyy yksinkertaisempia komentoja esim. "pause". Versiossa 1.1.0 se ei vaan jostain syystä toimi niin kuin pitäisi.

Metabolix [02.07.2010 19:44:29]

#

-tossu- kirjoitti:

toisella koneella (VLC 1.1.0) sama komento käynnisti RC-käyttöliittymän konsoliin, vaikka sen piti toimia verkossa.

Kuten VLC osaa itsekin kertoa, on olemassa myös käyttöliittymä oldrc.

$ vlc -I oldrc --rc-host localhost:1234

Keskustelu onnistuu ihan tavallisella TCP-socketilla vaikka komentoriviltä netcat-ohjelmalla:

$ nc localhost 1234
help
+----[ Remote control commands ]
|
| add XYZ  . . . . . . . . . . . . add XYZ to playlist
| ...
| logout . . . . . . .  exit (if in socket connection)
| quit . . . . . . . . . . . . . . . . . . .  quit vlc
|
+----[ end of help ]
enqueue kappale.mp3
trying to enqueue kappale.mp3 to playlist
enqueue: returned 0 (no error)
play
play: returned 0 (no error)

-tossu- [02.07.2010 19:50:16]

#

Minulla VLC 1.1.0 ei ainakaan valittanut mitään kun yritin käyttää rc-käyttöliittymää, se ei vain toiminut niin kuin halusin, mutta oldrc tosiaan toimii, hyvä niin, eli sillä Macro voi käskyttää VLC:tä kätevästi.

Macro [02.07.2010 20:06:48]

#

Mulla on toi 1.1.0, joo, mutta ei tuo auttanut mitään kun laitoin sen oldrc:tä käyttämään. Samalla tavalla se toimii, paitsi graafinen käyttöliittymä jää uupumaan. Komennot eivät ole erillaiset.

-tossu- [02.07.2010 20:09:49]

#

Otithan yhteyden RC-käyttöliittymään, etkä telnet-käyttöliittymään. Mitä se RC-käyttöliittymä sanoo jos annat sille vaikka komennon "pause"?

Macro [02.07.2010 21:23:27]

#

Joo, emmä tollasta tajunnut. En saanut siihen millään yhteyttä noin, enkä jaksanut alkaa tehdä omaa ohjelmaa nyt. En löytänyt Windowsille mitään netcat ohjelmaa, tai vastaavaa, joka toimisi.

-tossu- [02.07.2010 21:39:02]

#

Et tarvitse netcattia, komento telnet ajaa saman asian. Mikäli käytit Metabolixin VLC-kometoa, saat RC-yhteyden komennolla "telnet localhost 1234".

Macro [02.07.2010 21:43:45]

#

Aaa. :D Joo, emmä tajunnut että se toimii, kun tuli vain musta ruutu. Se ei nähtävästi tulosta mitään kun se on yhdistänyt. Kiitos tiedosta.

Metabolixin käynnistyskoodi avaa vain terminaali-ikkunan, miten VLC:n GUI:n saisi myös näkyviin? Omalla ohjelmallani tuota on helppo kontrolloida, mutta koneen käyttäjä (eli minä) ei välttämättä tykkää kun joutuu koodeja syöttämään säätöä varten. Saako myös tuon terminaali-ikkunan piiloon, kun GUI näkyy?

-tossu- [02.07.2010 21:57:51]

#

Komennolla

vlc --extraintf oldrc --rc-host localhost:1234

pitäisi VLC:n GUI:n tulla näkyviin.

Macro [02.07.2010 22:09:37]

#

Joo, noin se toimikin. VLC:n asetuksista sai piilotettua komentorivi-ikkunan yhdellä ruksituksella. Nytten katson, miten se sopii ohjelmaani.

Macro [03.07.2010 14:09:58]

#

Miksei toisesta tietokoneesta saa yhteyttä Telnetillä VLC:n RC:hen? Kohdekoneen portti 1234 on auki, ja paikalliselta koneelta saa yhteyden. Käytin komentoa "vlc --extraintf oldrc --rc-host localhost:1234" VLC:n avaamiseen, ja "telnet 192.168.100.21 1234" yhteyden ottamiseen toiselta koneelta.

jalski [03.07.2010 14:41:18]

#

Macro kirjoitti:

Miksei toisesta tietokoneesta saa yhteyttä Telnetillä VLC:n RC:hen? Käytin komentoa "vlc --extraintf oldrc --rc-host localhost:1234" VLC:n avaamiseen, ja "telnet 192.168.100.21 1234" yhteyden ottamiseen toiselta koneelta.

Kokeilepas huviksesi muuttaa tuohon localhost:in paikalle tuo sama IP-osoite, mihin yrität telnetillä päästä kiinni. Tuo localhost on loopback network interface ja osoite on paikallinen: 127.0.0.1, siihen ei ole tarkoitus päästä ulkoapäin.

Macro [03.07.2010 14:42:59]

#

Ei tietenkään ulkoapäin pääse localhost-osoitteella toiseen koneeseen. Koitin paikallisella koneella ottaa samaiseen koneeseen yhteyden sen IP:llä; ei toiminut.

jalski [03.07.2010 14:48:59]

#

Etkö yllä kertonut käynnistäväsi VLC:n kuuntelemaan yhteydenottoja komennolla: "vlc --extraintf oldrc --rc-host localhost:1234" ?

Meinasin, että laita tuon localhost:in paikalle koneen oma hostname (sysname), tai IP-osoite, mikä näkyy ulospäin.

Macro [03.07.2010 14:57:40]

#

Äh, olimpas tyhmä. Kiitos sulle :)


Sivun alkuun

Vastaus

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

Tietoa sivustosta