GStreamer是著名的開源多媒體框架,功能強大,其命令行程序 gst-launch 可以實現很多常規測試、播放等,作為系統調試等是非常方便的。
1、攝像頭測試
gst-launch v4l2src ! xvimagesink
gst-launch v4l2src ! video/x-raw-yuv,width=320,height=240,framerate=20/1 ! xvimagesink
上述命令不一定能夠成功,或者出現的攝像頭圖像窗口沒有正常的圖像,這是因為攝像頭支持的圖像格式會有差別,gstreamer 默認采用的格式不被支持,這時可以嘗試:
gst-launch v4l2src ! video/x-raw-yuv,format=\(fourcc\)YUY2,width=320,height=240 ! xvimagesink
基本上可以了。根據 gstreamer 的文檔,針對 v4l2src 這個插件,能夠支持的圖像格式在這里有詳細說明說明。這里要注意,強制指定圖像格式是采用 format 參數,並且要用到 (fourcc) 指示字,必須帶有括號的,但是在命令行下,括號是特殊含義字符,所以用 \ 反斜杠轉意處理!這只是一個例子說明,你可以嘗試確定你的攝像頭到底支持哪種圖像格式,然后就可以用通過 format 參數來指定了。
2、播放文件
gst-launch playbin uri=file:///path/to/test.avi
據說還有 playbin2 插件,采用的是新的播放解碼。
具體有關 gstreamer 的一些資源參考:
http://blog.csdn.net/fancycow/article/details/7552520
http://blog.csdn.net/wzwxiaozheng/article/details/6099397
http://blog.csdn.net/shallon_luo/article/details/5400708
http://blog.csdn.net/wzwxiaozheng/article/details/6130818
http://blog.chinaunix.net/uid-10747583-id-282761.html
http://wiki.oz9aec.net/index.php/Gstreamer_cheat_sheet#Webcam_Capture(重點推薦文章)
Gstreamer中一些gst-launch常用命令
用Linux系統中使用gstreamer架構做對媒體開發時,gst-inspect
和gst-launch是兩個非常使用的小工具,gst-inspect 在開發時用於查詢庫各個插件element的詳細信息,后者用於在終端快速構建一條pipeline用於播放多媒體。下面列出我在以前的學習和項目開發時常用的gst-launch播放各種多媒體文件的實例:
一、gstreamer實現視頻顯示
gst-launch videotestsrc ! xvimagesink
二、gstreamer實現攝像頭采集:
1、可以現實圖像,但圖像卡住不動
gst-launch v4l2src ! xvimagesink
2、攝像頭視頻顯示正常
gst-launch v4l2src !video/x-raw-yuv,format=\(fourcc\)YUY2,width=640,height=480,framerate=15/1 !videorate ! videoscale ! ffmpegcolorspace ! xvimagesink
gst-launch v4l2src ! video/x-raw-yuv,width=640,height=480,framerate=15/1 !queue2 ! videorate ! videoscale ! ffmpegcolorspace ! xvimagesink
三、攝像頭視頻現實及保存為avi格式文件
gst-launch -e v4l2src !video/x-raw-yuv,format=\(fourcc\)YUY2,width=640,height=480,framerate=30/1 ! teename=srctee \
srctee. ! queue2 name=squeue ! ffmpegcolorspace ! xvimagesink \
srctee. ! queue2 name=fqueue ! videorate ! ffmpegcolorspace !ffenc_mpeg4 ! avimux ! filesink location=test.avi
四、將攝像頭視頻比例設置為16:9
gst-launch v4l2src ! video/x-raw-yuv,width=640,height=480,framerate=15/1 !aspectratiocrop aspect-ratio=16/9 ! ffmpegcolorspace ! xvimagesink
五、保存攝像頭的視頻為avi格式
gst-launch -e v4l2src ! video/x-raw-yuv, format=\(fourcc\)YUY2,framerate=30/1, width=640, height=480 ! videorate ! ffmpegcolorspace !ffenc_mpeg4 ! avimux ! filesink location=test.avi
六、多個流數據同時錄制
gst-launch -e avimux name="muxer" ! filesink location=multi.avi\
v4l2src ! video/x-raw-yuv, format=\(fourcc\)YUY2, framerate=25/1,width=640, height=480 ! videorate ! ffmpegcolorspace ! ffenc_mpeg4 ! queue2 !muxer. \
pulsesrc ! audioconvert ! audioresample! lamemp3enc target=1 bitrate=64cbr=true ! queue2 ! muxer.
七、畫中畫
1、videomixer可以將兩個或多個視頻流混合到一起:
gst-launch -e videotestsrc pattern="snow" ! video/x-raw-yuv,framerate=10/1, width=200, height=150 ! videomixer name=mix ! \
ffmpegcolorspace ! xvimagesink videotestsrc !video/x-raw-yuv, framerate=10/1, width=640, height=360 ! mix.
2、GstVideoMixerPad能夠改變Z軸和圖像的位置
gst-launch videotestsrc pattern="snow" ! video/x-raw-yuv,framerate=10/1, width=200, height=150 ! \
videomixer name=mix sink_1::xpos=20 sink_1::ypos=20sink_1::alpha=0.5 sink_1::zorder=3 sink_2::xpos=100 sink_2::ypos=100sink_2::zorder=2 ! \
ffmpegcolorspace ! xvimagesink videotestsrc pattern=13 !video/x-raw-yuv, framerate=10/1, width=200, height=150 ! mix. \
videotestsrc ! video/x-raw-yuv, framerate=10/1, width=640,height=360 ! mix.
3、GstVideoMixerPad可以制定每個sink
gst-launch \
videomixer name=mix sink_1::xpos=20 sink_1::ypos=20sink_1::alpha=0.5 sink_1::zorder=3 sink_2::xpos=100 sink_2::ypos=100 sink_2::zorder=2! \
ffmpegcolorspace ! xvimagesink \
videotestsrc ! video/x-raw-yuv, framerate=10/1, width=640,height=360 ! mix.sink_0 \
videotestsrc pattern="snow" ! video/x-raw-yuv,framerate=10/1, width=200, height=150 ! mix.sink_1 \
videotestsrc pattern=13 ! video/x-raw-yuv, framerate=10/1,width=200, height=150 ! mix.sink_2
八、VideoBox可以用來制定視頻框的大小和位置和apha混合透明度等
1、不透明
gst-launch -e videotestsrc pattern="snow" ! video/x-raw-yuv,framerate=10/1, width=200, height=150 ! videobox border-alpha=0 top=-100left=-100 ! \
videomixer name=mix ! ffmpegcolorspace ! xvimagesink videotestsrc !video/x-raw-yuv, framerate=10/1, width=640, height=360 ! mix.
2、指定透明度
gst-launch -e videotestsrc pattern="snow" ! video/x-raw-yuv,framerate=10/1, width=200, height=150 ! \
videobox border-alpha=0 alpha=0.6 top=-20 left=-25 !videomixer name=mix ! ffmpegcolorspace ! xvimagesink \
videotestsrc ! video/x-raw-yuv, framerate=10/1, width=640,height=360 ! mix.
3、添加邊框
gst-launch -e videotestsrc pattern="snow" ! video/x-raw-yuv,framerate=10/1, width=200, height=150 ! \
videobox border-alpha=1.0 top=-2 bottom=-2 left=-2 right=-2 !videobox border-alpha=0 alpha=0.6 top=-20 left=-25 ! \
videomixer name=mix ! ffmpegcolorspace ! xvimagesinkvideotestsrc ! video/x-raw-yuv, framerate=10/1, width=640, height=360 ! mix.
九、VideoWall視頻牆
gst-launch -e videomixer name=mix ! ffmpegcolorspace ! xvimagesink \
videotestsrc pattern=1 ! video/x-raw-yuv, framerate=5/1,width=320, height=180 ! videobox border-alpha=0 top=0 left=0 ! mix. \
videotestsrc pattern=15 ! video/x-raw-yuv, framerate=5/1,width=320, height=180 ! videobox border-alpha=0 top=0 left=-320 ! mix. \
videotestsrc pattern=13 ! video/x-raw-yuv, framerate=5/1,width=320, height=180 ! videobox border-alpha=0 top=-180 left=0 ! mix. \
videotestsrc pattern=0 ! video/x-raw-yuv, framerate=5/1,width=320, height=180 ! videobox border-alpha=0 top=-180 left=-320 ! mix. \
videotestsrc pattern=3 ! video/x-raw-yuv, framerate=5/1,width=640, height=360 ! mix.
十、TextOverlay 在視頻上面添加文本,由textoverlay插件實現,可以設置文本的屬性
gst-launch videotestsrc !video/x-raw-yuv,width=640,height=480,framerate=15/1 ! textoverlaytext="Hello" ! ffmpegcolorspace ! ximagesink
十一、TimeOverlay ,由timeoverlay插件實現
1、由timeoverlay插件實現
gst-launch videotestsrc ! timeoverlay ! xvimagesink
gst-launch -v videotestsrc ! video/x-raw-yuv, framerate=25/1, width=640,height=360 ! \
timeoverlay halign=left valign=bottom text="Streamtime:" shaded-background=true ! xvimagesink
2、cairotimeoverlay
gst-launch videotestsrc ! cairotimeoverlay ! ffmpegcolorspace ! xvimagesink
3、clockoverlay時鍾
gst-launch videotestsrc ! cairotimeoverlay ! ffmpegcolorspace ! xvimagesink
gst-launch videotestsrc ! clockoverlay halign=right valign=bottomshaded-background=true time-format="%Y.%m.%D" ! ffmpegcolorspace !ximagesink
十二、錄制視頻為ogg格式,帶時間和日期overlay
gst-launch -e v4l2src ! video/x-raw-yuv, format=\(fourcc\)YUY2,framerate=20/1, width=640, height=480 ! \
ffmpegcolorspace ! \
timeoverlay halign=right valign=top ! clockoverlayhalign=left valign=top time-format="%Y/%m/%d %H:%M:%S" ! \
tee name="splitter" ! queue2 ! xvimagesinksync=false splitter. ! \
queue2 ! videorate ! ffmpegcolorspace ! theoraenc bitrate=256! oggmux ! filesink location=webcam.ogg
十三、視頻牆
gst-launch videomixer name=mix sink_1::xpos=20 sink_1::ypos=20sink_1::alpha=1.0 sink_1::zorder=3 sink_2::xpos=40 sink_2::ypos=40sink_2::zorder=2 ! ffmpegcolorspace ! xvimagesink \
uridecodebinuri=file:///mnt/hgfs/fedshare/source/video/loveStyle.mp4 ! ffmpegcolorspace !videoscale ! mix. \
uridecodebin uri=file:///mnt/hgfs/fedshare/source/video/davincieffect_480p30.mp4! ffmpegcolorspace ! videoscale ! mix. \
videotestsrc ! video/x-raw-yuv, framerate=10/1,width=800, height=540 ! mix.
十四、播放視頻文件,帶聲音
gst-launch uridecodebinuri=file:///mnt/hgfs/fedshare/source/video/loveStyle.mp4 name=decoder \
decoder. ! audioconvert ! autoaudiosink \
decoder. ! ffmpegcolorspace ! xvimagesink