參考網址:
1. https://gstreamer.freedesktop.org/documentation/tutorials/basic/index.html
2. https://gstreamer.freedesktop.org/documentation/tutorials/basic/gstreamer-tools.html
程式範例:
git clone git://anongit.freedesktop.org/gstreamer/gst-docs
cd ./gst-docs/examples/tutorials
gcc basic-tutorial-1.c -o basic-tutorial-1 `pkg-config --cflags --libs gstreamer-1.0`
./basic-tutorial-1
3. Gstreamer 名詞解釋:
Elements: Gstreamer 的基礎單元
例如一些內建的基礎單元: videotestsrc, decodebin, videoconvert, xvimagesink 等等,
用 gst-inspect-1.0|egrep 查看說明:
gst-inspect-1.0|egrep "videotestsrc|decodebin|videoconvert|xvimagesink"
Pipeline: 管線, gst-launch-1.0 用 ! 將處理單元串接在一起, 根據輸入的順序由左至右一一串接資料流, 這種將資料流與處理單元互相串接集合成套稱之為管線
GstPad: Gstreamer 用來作為溝通的端口稱之為 pads,簡稱 GstPad, 分別有:
Sink pad: 作為資料吸入端
Source pad: 作為資料輸出端
Filter: 過濾中間端,有兩個端口(GstPads),端口型態一邊是輸入端(sink pad),另一邊則是輸出端(source pad)
Property: 屬性, 由成對的 key=value 所組成的敘述, 例如:
uri="http://127.0.0.1:8080/movie.mp4"
uri="file:///home/mint/movie.mp4"
location="movie.mp4"
Muxed: 例如一個檔案帶有 video 及 audio 資料流的稱之為 multiplexed (簡稱 muxed) file,
常見的資料流格式: Matroska(MKV), Quick Time(QT,MOV), Advanced System Format(ASF), MWV, WMA ...等等
Demuxer:資料流的解開程序稱之為 demuxers, 有一個吸入端(single sink pad), 多個輸出端(multiple source pad)
例如decodebin就有一個吸入端(sink pad)及兩個輸出端分別是audio及video(source pads),用來分離出影像及聲音用
4. Gstreamer 常用處理單元:
展現聲音單元通常用 osssink, 其他還有 "directsoundsink", "esdsink", "alsasink", "osxaudiosink", or "artsdsink".
展現影像單元通常用 xvimagesink, 其他還有 "d3dvideosink", "ximagesink", "sdlvideosink", "osxvideosink", or "aasink".
當處理單元無法連結時,有可能是格式不相容,可以先行轉換:
影像傳換用: videoconvert
聲音傳換用: audioconvert, 聲音取樣率轉換用 audioresample
5. 播放範例:
播放影像測試信號源, 花樣採用第 11 號影像源
gst-launch-1.0 videotestsrc pattern=11 ! videoconvert ! autovideosink
擷取檔案 oceans.mov,由 decodebin 先分離出聲音與影像, 再透過聲音/影像轉換器轉換後分別交由alsasink及xvimagesink播放出來
gst-launch-1.0 filesrc location=oceans.mov ! decodebin name=decoder decoder. ! queue ! audioconvert ! audioresample ! alsasink decoder. ! videoconvert ! xvimagesink
沒有留言:
張貼留言