2012-10-03 119 views
4

我有保存MJPEG流到文件的問題。 當我使用這種管道流MJPEGGStreamer - MJPEG流到文件

gst-launch filesrc location=thirdmovie640x360.mp4 ! decodebin2 name=dec \ 
    ! queue ! ffmpegcolorspace ! jpegenc ! queue ! avimux name=mux \ 
    ! udpsink host=192.168.0.2 port=5000 

我能夠使用這種管道我的第二臺機器上玩這個流:

gst-launch -v udpsrc port=5000 ! jpegdec ! autovideosink 

但是,我怎麼能保存此類MJPEG流文件(沒有轉碼!),這將能夠在一些媒體播放器播放?你能推薦一些管道嗎?


,我發現這樣的管道輸出流保存爲Matroska文件:

gst-launch udpsrc port=5000 ! multipartdemux ! jpegparse ! jpegdec \ 
    ! ffmpegcolorspace ! matroskamux ! filesink location=output.mkv 

如何改變它來保存mp4文件?這樣的管線:

gst-launch udpsrc port=5000 ! multipartdemux ! jpegparse ! jpegdec \ 
    ! ffmpegcolorspace ! mp4mux ! filesink location=output.mp4 

不起作用。你能否幫我把它保存爲mp4 contener(或avi contener)而不需要轉碼MJPEG視頻。

回答

1

MJPEG是一種編解碼器,簡單地說就是有一系列jpeg圖像。如果您想將它們視爲視頻,則必須將這些jpeg存儲在容器中。 MP4是存儲它們的普通容器。

因此,您可以將jpegenc輸出複合回mp4mux並將其存儲在文件中。任何體面的媒體播放器都應該能夠播放它。

+0

它看起來像'mp4mux'不允許在MP4文件容器中錄製MJPEG。 [https://stackoverflow.com/questions/46276014/how-to-record-image-jpeg-mjpeg-within-mp4-container-with-gstreamer] – Ahresse

6

我解決了我的問題。這裏是我一直在尋找piplines:

服務器

gst-launch filesrc location=thirdmovie640x360.mp4 ! decodebin2 name=dec 
! queue ! ffmpegcolorspace ! jpegenc ! queue ! multipartmux 
! udpsink host=192.168.0.4 port=5000 

客戶

gst-launch udpsrc port=5000 ! multipartdemux ! image/jpeg, framerate=25/1 
! jpegparse ! jpegdec ! ffmpegcolorspace ! jpegenc 
! avimux ! filesink location=output.avi 
+5

不錯。其實爲什麼你解碼和rencode。爲什麼不直接從jpegparse直接提供給avimux? – av501