2017年4月17日 星期一

玩玩 Gstreamer

先安裝: sudo apt-get install gstreamer-1.0  libgstreamer1.0-dev gstreamer-tools
參考網址:
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




 

沒有留言: