Youtube API, Audio, Länge des Videos

3r4g0n

Grünschnabel
Hallo,
Ich habe eine Liste mit youtube links, von dennen möchte ich die musik abspielen.
Ich habe es so gelöst das ich den link mit meinem Browser öffne. da ist jetzt nur das problem das ich nicht weiß wann das lied/video zu ende ist und es automatisch das nächste spielt. Außerdem habe ich versucht über die GoogleAPI eine Playlist zu erstellen. Doch da schon bei den APIs Beispielen, Imports sind die es anscheinend nicht mehr gibt. Habe ich den ansatz erst mal nicht weiter verfolgt,
Habt ihr eine Lösung wie ich die länge des Videos rausbekomme oder nur den Audio abspiele?
MfG Eragon
 
Hi

ohne den Zusammenhang zu kennen, wie wärs mit VLC?
Statt irgendeine Mischung von Java mit Browser selbst zu programmieren...
 
kann ich per java vlc anweisungen geben? also Lauter/Leiser, noch ein lied auf die liste setzten und vlt. stop/play?
 
Ja, das geht.

https://forum.videolan.org/viewtopic.php?f=14&t=85347 hat dazu auch eine Javaklasse (erster Beitrag, erste
Codebox), die zwar schon etwas älter ist, aber noch funktionieren sollte (beim Remotesteuerwerk von VLC hat
sich schon lang nichts Größeres geändert).

(Laut dem Thread ist das Ganze auch im VLC-Wiki, das ist aber grad nicht erreichbar)

Von Java aus muss VLC zuerst unabhängig von der Klasse gestartet werden, und zwar mit einer Option, die
direkt unter der Zeile mit "public class VLCControl" beschrieben ist. Dann gibts in der Klasse vA. die Befehle
connect, disconnect und sendCommand (die wohl ziemlich selbsterklärend sind), und eine Auflistung der
verfügbaren sendbaren Commands mit Beschreibung ist in dem Kommentarblock ober sendCommand.

Schaut jedenfalls deutlich einfacher aus, als einen Browser fernzusteuern. oder direkt mit YT herumzutun.
 
import org.apache.commons.net.telnet.*;
import org.apache.commons.net.telnet.TelnetClient;
bei beiden imports sagt er mir das er die nicht kennt. genau das selbe problem hab ich mit manchen GoogleAPIs Imports
 
ich starte vlc per cmd mit
"C:\Program Files\VideoLAN\VLC\VLC.exe" --rc-host=localhost:4444

und trotzdem kommt die fehlermeldung: WARNUNG: couldn't connect to VLC - you may need to start VLC with command line "vlc --rc-host=localhost:4444"
 
Hab gerade gemerkt, dass das ganze seit 2.1 (1.5 Jahre alt) unter Windows nicht funktioniert.
Die relevanten Bugreports sind alle geschlossen, mit der Begründung, dass die Entwickler nicht
verstehen, was das Problem ist (!) oder dass der Fehler behoben wurde. Zu Leuten, denen das nicht
passt bzw. die bei der Behebung mithelfen wollen, wird man auch beleidigend.
Was für ein Kindergarten.

Unter Linux funktionierts mit kleinen Anpassungen an der Klasse (wegen einem verpflichtend
zu setzenden Passwort bei VLC-Start) und dem Aufruf "vlc --intf=telnet --telnet-password=blabla"
(funktioniert wirklich, habs geprüft)

Unter Windows könnte man das Ganze über eine Pipe statt Socket machen, das geht nach wie vor.
Nur die fertige Javaklasse hilft so dann nicht. Hier gibts einen alternativen Ansatz in der ersten Antwort:
http://stackoverflow.com/questions/2286567/launch-vlc-in-java-and-connect-to-it-via-rc-interface
(auch den Kommentar drunter beachten). Die sendbaren Commands sind die selben, wie sie bei der
Telnetklasse im großen Kommentar stehen. Der lange Optionsstring in vlcParameters ist großteils nicht
so wichtig, nur die ersten zwei Optionen ("-I rc" und das zweite) sind relevant. Der Rest macht schon auch
was, hat aber nichts mit der Javasteuerung zu tun (--disable-screensaver könnte zB. auch für dich hilfreich sein)

(Windowsuser scheinen bei VLC generell zweite Klasse zu sein. Midi wurde auch schon lang weggenommen usw.usw.)
 
Habe es über VLCJ ("https://code.google.com/p/vlcj/") probiert. Da sagt er mir aber immer das eine 64Bit JVM keine 32 Bit native libraries laden kann. Habe daraufhin das 32 bit SDK geladen und das 64Bit komplett runtergeworfen und er sagt es trotzdem noch.
Bei deinem Link verstehe ich derzeitig nicht genau wie das arbeitet.
Code:
String vlcParameters = String.format(
                "-I rc --rc-fake-tty --video-on-top --disable-screensaver --no-video-title-show " +
                        "--no-mouse-events --no-keyboard-events --no-fullscreen --no-video-deco " +
                        "--x11-display \"%s\" --video-x %d --video-y %d --width %d --height %d",
                ":0.0", // X11 display
                top,      // X
                left,      //Y
                width,    //Width
                height     //Height
        );

Die Parameter verstehe ich. Wofür ist aber top, left, usw.? Wird mir halt auch als Fehler angezeigt.

Code:
vlcProcess = pb.start();
pb.start() startet den Processbuilder, woher kommt aber das vlcProcess?

Code:
writer.write("clear\n".getBytes());
        writer.flush();
Woher kommt das/ Was macht das writer?

Danke und MfG Eragon
 
Kein Ahnung, woher die Sachen in deinem Code kommen :)
Jedenfalls wäre die Pipe einfacher als VLCJ
Und dein Beispielcode scheint auf Linux beschränkt zu sein (X11...)
 
Zurück