Kurz vorweg, was ich eigentlich vorhabe.
Daheim habe ich einen Server mit tvheadend und halbwegs "viel" Rechenleistung, der via SAT Fernsehen empfängt und aufnimmt.
Mein fertiges Skript soll sich dann via SSH (einzige Verbindung nach Welt des Servers) zu diesem Verbinden,
ffmpeg anstoßen und dabei einen TV-Sender transcodieren, so dass ich hier im Uni-Wohnheim fernsehen kann/Aufnahmen betrachten.
Aktuell habe ich es schon soweit, dass er anhand eine Eingabe und ggf. Nachfrage (wenn mehrere Übereinstimmungen mit dem Suchbegriff) die Playlist nach dem gewünschten Sender durchsucht und die dazugehörige URL ausspuckt (zum Beispiel: http://localhost:9981/stream/channelid/ ... D06A94331E)
Auch das ffmpeg-Starten klappt schon, nur mit dem PIPEN noch nicht.
Die Funktion, die das mal machen soll, sieht bisher so aus. Aktuell noch alles "Hardcodiert"....
Code: Alles auswählen
def runFFmpeg(url):
ffcommand = "ffmpeg -i http://localhost:9981/stream/channelid/655202758?ticket=2D71F6B1C6185E1778DDB14E309B34C82FCB7063 -acodec libfdk_aac -b:a 128k -ac 2 -vcodec libx264 -preset superfast -b:v 1500k -profile:v baseline -bufsize 100k -s 720x576 -v quiet -f mpegts -"
sshstdin, sshstdout, sshstderr = ssh.exec_command(ffcommand)
player = subprocess.Popen(['C:\\Path\\To\\ffplay.exe', '-infbuf','-i',"-"], stdin=PIPE)
player.communicate(sshstdout.read())
Also ffmpeg wird gestartet und arbeitet auch ordentlich (via paralleler ssh-verbindung überprüft).
Auch ffplay startet und wartet brav auf Input. Nur scheint es keinen zu erhalten.
So völlig verkehrt kann die Funktion dann aber auch nicht sein, denn ändere ich "player.communicate(sshstdout.read())" zu "player.communicate(sshstdout)" meckert ffplay korrekt über ungültigen Input.
Ich vermute meinen Fehler in falscher/fehlender Beachtung, dass es sich um einen "rohen" Videostream handelt und nicht um typsiche "Text"-Dateien.
Oder in Unverständnis bezüglich der Nutzung von PIPE und subprocess.communicate()
Oder beidem.
Also könntet ihr mir abermals helfen? Danke schonmal.