Mahlzeit!
Ich arbeite gerade an einem kleinen TV-Rekorder und habe ein Pipe-Problem. Um das Bild aufzuzeichnen und gleichzeitig anzuzeigen, verwende ich folgende Pipe:
gst-launch-0.10 v4l2src device=/dev/video1 ! tee name=videoout ! queue ! videorate ! video/x-raw-yuv,width=640,height=480,fps=25 ! queue ! xvidenc bitrate=300000 ! queue ! muxout. osssrc device=/dev/dsp ! tee name=audioout ! queue ! audio/x-raw-int,rate=44100,channels=1,width=16 ! queue ! audioconvert ! lame ! muxout. avimux name=muxout ! identity sync=TRUE ! filesink location=video.avi videoout. ! queue ! ffmpegcolorspace ! xvimagesink audioout. ! queue ! osssink
So weit, so gut. Nun möchte ich aber auch eine "time-shift" Funktion implementieren. Dazu muss ich - wenn der Benutzer auf Pause drückt - den Stream aufzeichnen und - wenn der Benutzer dann auf Wiedergabe klickt - eben diese Aufzeichnung wiedergeben. Das Problem dabei ist, dass die time-shift-Wiedergabe erfolgen muss, während der Stream noch geschrieben wird. Und genau das bekomme ich mit Gstreamer nicht hin! Wenn ich folgende Pipe nutze:
gst-launch-0.10 v4l2src device=/dev/video1 ! tee name=videoout ! queue ! videorate ! video/x-raw-yuv,width=640,height=480,fps=25 ! queue ! xvidenc bitrate=300000 ! queue ! muxout. osssrc device=/dev/dsp ! tee name=audioout ! queue ! audio/x-raw-int,rate=44100,channels=1,width=16 ! queue ! audioconvert ! lame ! muxout. avimux name=muxout ! filesink location=video.avi
wird der Stream zwar geschrieben, ich kann ihn aber nicht wiedergeben. Sowohl GStreamer selbst, als auch mplayer und vlc zeigen entweder gar nichts an, oder durchrattern das gesamte Bildmaterial in wenigen Sekunden, während der Ton wie gewünscht wiedergegeben wird. Laut diesem Eintrag besteht das Problem u.A. darin, dass GStreamer die Video-Daten asynchron schreibt. Allerdings helfen mir die dort angegebenen Tipps nicht die Bohne.
Wäre schön, wenn mir jemand dabei helfen könnte.
Gruß,
brb
/edit: Na toll - dieser Beitrag ist innerhalb weniger Minuten top-Suchergebnis bei Google zu "gstreamer timeshift" geworden. Erweckt nicht gerade Hoffnung 😉