Wie kann man mplayer dazu bringen, von stdin zu spielen?

7

Warum funktioniert das nicht?

cat /dev/video1 | mplayer -

Wenn ich das zum Laufen bringen könnte, könnte ich gleichzeitig Videos abspielen und aufnehmen, indem ich 'tee' verwende, um mplayer und mencoder zu füttern.

Ich möchte Live-Videos (von / dev / video1: input = 1: norm = NTSC) abspielen und gleichzeitig ohne Verzögerung aufnehmen.

mplayer spielt das Video gut ab (keine merkliche Verzögerung).

Mencoder zeichnet es gut auf.

Aber ich kann nicht herausfinden, wie ich die Ausgabe von / dev / video "abschlagen" kann, damit ich sie beiden gleichzeitig zuführen kann. (Ich kenne Möglichkeiten, es zu codieren und dann das codierte Video sofort abzuspielen, aber das führt zu einer zu großen Verzögerung).

Wenn mplayer und mencoder von stdin lesen würden, könnte ich 'tee' verwenden, um dies zu lösen.

Wie kann ich es tun?

[Übrigens, ich würde mich über JEDE Lösung freuen, die gleichzeitig abgespielt und aufgenommen wird, solange sie keine Verzögerung hinzufügt - ich bin nicht mit mplayer verbunden. Aber zuerst codieren und dann spielen fügt Verzögerung hinzu.]

nerdfever.com
quelle
Woher kommt die /dev/video0Eingabe? Eine Webkamera?
slm
/ dev / video0 ist die eingebaute Webcam (es ist ein Netbook). / dev / video1 ist der Eingang, den ich zu lesen versuche (ein USB-Videoadapter; er ist an einen Empfänger für eine drahtlose Kamera angeschlossen)
nerdfever.com

Antworten:

10

Sie müssen ihm einen Cache geben, wenn Sie von stdin spielen

cat /dev/video1 | mplayer -cache 1024 -

Ohne diese Cache-Option wird die Fehlermeldung "Suche fehlgeschlagen Kann in linearen Streams nicht rückwärts suchen" angezeigt.

Mike Redrobe
quelle
1
Wenn Sie dies auf einer Website gefunden haben, können Sie hier den Verweis darauf hinzufügen? Ansonsten ist es schwer zu verstehen, warum dies das Problem des OP löst.
slm
Ich habe die Gegenstimme kompensiert, aber nur, weil Sie hier ein Anfänger sind. Bitte geben Sie beim nächsten Mal mindestens eine minimale Ausarbeitung an (Referenzen, Erklärungen, alles).
Peter - Wiedereinsetzung Monica
Ich habe in einer Klarstellung bearbeitet - mplayer benötigt die Cache-Option, um viele Streams von stdin wiederzugeben.
Mike Redrobe
Dies löst auch das gleiche Problem ("Suche fehlgeschlagen Kann in linearen Streams nicht rückwärts suchen") für http-Audio-Dämpfe.
Rudy Matela
3

Laut der mplayer-Manpage mplayer -sollte von stdin gelesen werden, aber Sie müssen auch angeben -noconsolecontrols, um zu verhindern, dass mplayer versucht, Tastatursteuerungsereignisse von stdin zu lesen.

Kyle Jones
quelle
Danke, aber das scheint nicht zu helfen - siehe hier: pastebin.com/ai78v5W1 <br /> Auch wenn ich es mit / dev / video1 versuche, erhalte ich "Kann in linearen Streams nicht rückwärts suchen! Suche fehlgeschlagen" (dies ist ein Live- Video-Stream)
nerdfever.com
3

Ich denke nicht, dass das, was Sie tun möchten, mit einem einzigen Mplayer möglich ist. Ich fand genau diese Frage gestellt und beantwortete sie anscheinend so:

Auszug: [MPlayer-Benutzer] Einen Kamera-IP-Stream gleichzeitig anzeigen und aufzeichnen?

Diese Arbeit, aber ich möchte sie wirklich im selben Mplayer-Prozess machen. Irgendeine Idee, wie man einen Stream in eine Datei im Slave-Modus schreibt? Ich habe noch nicht den richtigen Befehl in der Dokumentation gefunden.

Ich denke, das geht nicht. MPlayer kann einen Stream abspielen oder ausgeben, nicht beide gleichzeitig.

Sie können jedoch einen Stream mit einer Aufgabe sichern und den Aufnahmestream mit einer anderen Aufgabe abspielen. Zumindest hätten Sie dann nicht den doppelten Netzwerkverkehr.

Die ursprüngliche Frage zu dieser Antwort lautete:

Ich muss gleichzeitig den Stream anzeigen und die Möglichkeit haben, ihn in eine Datei zu schreiben (also aufzeichnen). Mein Punkt ist: Ich möchte dies tun, ist der gleiche Prozess.

Eigentlich habe ich einen Prozess für mplayer im Slave-Modus:

    $ mplayer -slave -wid id_window  camera_address/

Und jedes Mal, wenn ich aufnehmen muss, starte ich einen neuen Prozess, diesmal nicht im Slave:

    $ mplayer -dumpvideo camera_address -dumpfile stream.mp4/

Diese Arbeit, aber ich möchte sie wirklich im selben Mplayer-Prozess machen. Irgendeine Idee, wie man einen Stream in eine Datei im Slave-Modus schreibt? Ich habe noch nicht den richtigen Befehl in der Dokumentation gefunden.

Mit ffmpeg?

Nur eine Idee, aber ich habe diesen Wiki-Beitrag auf der ffmpeg-Website gefunden, in dem das Erstellen mehrerer Ausgaben erläutert wird . Vielleicht könnten Sie /dev/video1die doppelten Streams in mplayer aufteilen und dann verwenden?

slm
quelle
Ich verstehe nicht - das wird nur den Stream abspielen, nicht aufnehmen. Ich habe kein Problem beim Abspielen oder Aufnehmen - ich kann einfach nicht beide gleichzeitig machen.
nerdfever.com
@ nerdfever.com - whoops Ich wusste nicht, dass du es aufnehmen wolltest, lass mich das aktualisieren.
slm
Vielen Dank; Ich weiß, dass mplayer nicht gleichzeitig aufnehmen und spielen kann. Aus diesem Grund möchte ich zwei Instanzen (einen Mplayer, einen Mencoder) gleichzeitig ausführen, die beide vom selben / dev / video1-Gerät lesen. Wenn ich sie beide (mplayer & mencoder) dazu bringen könnte, von stdin zu lesen, könnte ich 'tee' verwenden, um sie beide zu füttern. Aber wie kann man sie dazu bringen, überhaupt Input von stdin zu nehmen? [Übrigens, ich würde mich über JEDE Lösung freuen, die gleichzeitig
abgespielt und aufgenommen wird
@ nerdfever.com - zusätzliche Informationen zu ffmpeg hinzugefügt, lassen Sie mich wissen, was Sie denken.
slm
Nochmals vielen Dank, ich werde es versuchen. Ich verwende Mint (Ubuntu), daher muss ich ffmpeg selbst kompilieren (sie haben auf avconv umgestellt). Wenn ffmpeg ein Video-Durchgang (ohne Codierung) ausführen kann, funktioniert dies möglicherweise. Wenn es zuerst auf der Codierung besteht, führt dies zu einer Verzögerung und funktioniert bei mir nicht ... aber ich werde es versuchen.
nerdfever.com