SlideShare una empresa de Scribd logo
1 de 80
Descargar para leer sin conexión
GStreamer
Application Development Manual 導讀
第一章到第十章
Wen Liao
目標
了解GStreamer是什麼
注意
● 只包含手冊第一章到第十章
● 可能有誤,請自行斟酌對照手冊
● 請留意囉唆的程式碼變數顏色
my_var = my_func();
my_hash(my_var);
Outline
● Backgrounds
● Overview
● Demo
● References
Background
● Framework
○ Longman:
■ the main supporting parts of a building, vehicle,
or object
● http://www.ldoceonline.com/dictionary/framework
● Software framework
○ 一般性,可重複使用的軟體平台
○ 用於降降低開發軟體的成本
Multimedia Framework
● 一種Software framework
● 專門來處理多媒體相關應用程式
○ 多媒體播放器
○ 多媒體格式轉換
○ 多媒體編輯器
○ Video conference
○ ….
GStreamer
● 一種Multimedia framework
● 以基於C語言開發的GObject發展
● 支援多平台
● LGPL
Element and Pipeline in GStreamer:
Series of Producer - Consumer
http://en.wikipedia.org/wiki/GStreamer#Technical_overview
PAD
兩邊有協定溝
通決定要傳送
那些資料
兩邊有協定溝
通決定要傳送
那些資料
Plugin
● 一種Element
● 大部分以static library形式
● 種類
○ codec
○ container formats
○ IO driver
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-gstreamer.html
Outline
● Backgrounds
● Overview
● Demo
● References
前情提要
http://en.wikipedia.org/wiki/GStreamer#Technical_overview
PAD
兩邊有協定溝
通決定要傳送
那些資料
兩邊有協定溝
通決定要傳送
那些資料
Overview
● Element
● Pad
● Bin and pipeline
● Communication
Element
● 提供基本功能的元件。可以透過Pad和其他
Element組合。
○ 播放聲音
○ 讀取檔案
○ 透過網路取得多媒體內容
○ 多媒體解碼
○ …
● 分類
○ Source element
○ 一般element
○ Sink element
Source Element
● 從檔案或是音效卡讀出資料用
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-elements.html
一般Element
● 有輸入有輸出
● 應用:
○ Filters
○ convertors
○ demuxers
○ muxers
○ codecs
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-elements.html
Sink Element
● 單純Consume資料,通常就是Render或是音
效卡
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-elements.html
產生Element
方法一:懶人法
/* 建立 */
element =
gst_element_factory_make ("fakesrc", "source");
...
/* 宰掉 */
gst_object_unref (GST_OBJECT (element));
Factory
name
自己給的名稱
Factory name
GST會內部maintain
reference counter,每次unref
就遞減。減到0就deallocate
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-elements.html
產生Element
方法二:非懶人法
/* 建立 */
factory = gst_element_factory_find ("fakesrc");
element = gst_element_factory_create (factory, "source");
...
/* 宰掉 */
gst_object_unref (GST_OBJECT (element));
Factory
name
自己給的名稱
Factory name
GST會內部maintain
reference counter,每次unref
就遞減。減到0就deallocate
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-elements.html
Element
● gst-inspect指令可以顯示系統可用的element
資訊
● GstElement資料結構繼承自GObject
○ 可用GObject的屬性
○ 可用GObject的signal及對應的callback
○ GObject資訊
■ https://developer.gnome.org/gobject/stable/rn01.
html
Element和Factory
● GstElementFactory
○ Framework maintain所有系統上可以用的plugin
(element)資訊(metadata)
■ ex:
● gst_element_factory_get_metadata (factory,
GST_ELEMENT_METADATA_DESCRIPTION))
○ 這些metadata可以用來確認目前element和element之
間是否可以互相連接
連接Elements
1. 產生pipeline
2. 決定並產生elements
3. 把elements打包成bin
a. (要記得pipeline是bin的一種)
4. 建立link
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-elements-link.html
範例
/* 1.產生 pipeline */
pipeline = gst_pipeline_new ("my-pipeline");
/* 2. 產生elements */
source = gst_element_factory_make ("fakesrc", "source");
filter = gst_element_factory_make ("identity", "filter");
sink = gst_element_factory_make ("fakesink", "sink");
/* 3. 打包 */
gst_bin_add_many (GST_BIN (pipeline), source, filter, sink,
NULL);
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-elements.html
接關
/* 4. 連連看 */
if (!gst_element_link_many (source, filter, sink, NULL)) {
g_warning ("Failed to link elements!");
}
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-elements.html
Element內部狀態
● GST_STATE_NULL
○ 建立時預設狀態
○ 內部沒有分配任何資源
○ 狀態被設成NULL framework會自動清除資源
○ 當reference count為零時必須要在該狀態
● GST_STATE_READY
○ 資源已配置或是被reset掉
Element內部狀態
● GST_STATE_PAUSED
○ 資源已分配並可以執行,但是偏不去處理資料
○ 此時可以趁機更動控制資料以達到trick play的目的
○ 因為隨時都有可能從暫停狀態切換到播放狀態,
Element需要想辦法降低狀態切換所需時間。
● GST_STATE_PLAYING
○ 和PAUSE差別就是會去處理資料
○ 精確的說法,是clock有沒有在run的差別
■ 在這邊有解釋clock
● http://gstreamer.freedesktop.
org/data/doc/gstreamer/head/manual/html/chapter-clocks.
關於Element狀態
● 透過下面API更改
○ gst_element_set_state (GstElement *element,
GstState state);
NULL
READY PAUSE
PLAYING
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GstState
NULL
READY PAUSE
PLAYING
Upward state
change
Downward
state change
Overview
● Element
● Pad
● Bin and pipeline
● Communication
Pad
● Element的input/output部份
○ Sink: Input
○ Source: Output
● Element之間的連結方式
● GStreamer允許element之間透過negociate
決定link以及資料傳輸方式
○ GstCaps
■ GStreamer capabilities of an element
● 想像螢幕可以顯示HDMI或是VGA訊號,這些
信號線就是PAD
More about Pad
● 主要組成
○ 資料傳輸方向
■ Source
■ Sink
○ Availability
■ Always
■ Sometimes (Dynamic)
● 應用程式可以透過監聽pad-added event處理對應行為
● gst-inspect指令會列出支援的events
■ On request
● element夠過下面API產生Pad
○ gst_element_get_request_pad
○ gst_element_get_compatible_pad
Capabilities
● 支援的屬性稱為property
○ Key: 字串
○ Value:
■ 基本type如int, float
■ Range: 如1~100
■ List
● 多個基本type
■ Array
● 多個相同的基本type
Capabilities
● 想像Mimetype
● 用途
○ PnP
○ 檢查相容性
○ 提供Metadata
○ Filter,限制處理的資料特性
取得Capabilities metadata範例
cap_str = gst_caps_get_structure (caps, 0);
if (!gst_structure_get_int (cap_str, "width", &width) ||
!gst_structure_get_int (cap_str, "height",
&height))
{
g_print ("No width/height availablen");
return;
}
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-caps-api.html
Capabilities 作為filter應用方式
● 設定elements兩邊link滿足條件(下面方式擇一)
○ filter_cap = gst_caps_new_full(..);
○ filter_cap = gst_caps_new_simple(..);
● link兩個element,前面的條件作為參數帶入
○ gst_element_link_filtered (ele1, ele2, filter_cap);
Ghost Pad
● 用於處理bin的pad問題。因為bin沒有pad,並
且實際上處理pad的仍然是element
● 想法:Unix下的symbolic link
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-pads-ghost.html
做一個假的
bin本身沒有pad
建立Ghost Pad
● 產生element和bin
● 把element打包到bin
● link element內部
● 產生Ghost Pad
範例
/* 產生element和bin */
sink = gst_element_factory_make ("fakesink", "sink");
bin = gst_bin_new ("mybin");
gst_bin_add (GST_BIN (bin), sink);
/* 產生ghost pad */
pad = gst_element_get_static_pad (sink, "sink");
gst_element_add_pad (bin,
gst_ghost_pad_new ("sink", pad));
gst_object_unref (GST_OBJECT (pad));
把element的pad
轉給ghost pad
Overview
● Element
● Pad
● Bin and pipeline
● Communication
Bin
● Bin
○ 一組透過pad連接起來的elements
○ GStreamer提供針對bin的操作。只要操作bin,
GStreamer幫你搞定裏面的element。
■ 設定狀態
■ 傳送錯誤通知
■ …
Bin
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-bins.html
● 精確的來說,Bin是一個container element
○ 所有對element/GObject的操作都可以apply到bin
Pipeline
● Pipeline
○ 一種bin
○ 最高層的bin,和一般bin的差別是他提供介面給應用程
式控制
○ 實作上面,每個pipe都是單獨的thread
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-intro-basics-bins.html
使用bin
● 產生pipeline給應用程式使用
● 產生bin
● 產生element處理實體資料
● 打包成bin
● 告訴pipeline處理bin
● 連連看
● 開工
範例
/* 1. 產生pipeline給應用程式使用 */
pipeline = gst_pipeline_new ("my_pipeline");
/* 2. 產生bin */
bin = gst_bin_new ("my_bin");
/* 3. 產生element處理實體資料 */
source = gst_element_factory_make ("fakesrc", "source");
sink = gst_element_factory_make ("fakesink", "sink");
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-bin-create.html
範例
/* 4. 打包成bin */
gst_bin_add_many (GST_BIN (bin), source, sink, NULL);
/* 5. 告訴pipeline處理bin */
gst_bin_add (GST_BIN (pipeline), bin);
/* 6. 連連看 */
gst_element_link (source, sink);
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-bin-create.html
Overview
● Element
● Pad
● Bin and pipeline
● Communication
○ bus and message
○ buffer
Bus
● 用來傳遞GStreamer framework和應用程式
之間的訊息
Communication
● 對象:Pipeline、element、應用程式
● 方式
○ buffer object
■ 對象:element之間
■ 用於傳送Streaming需要的資料
■ 單向的從source 到 sink
○ event object
■ 對象:
● Element之間
● 應用程式到element
■ 雙向
■ source 到 sink的event可支援和streaming 同步
Communication
● 對象:Pipeline、element、應用程式
● 方式
○ message object
■ 對象:element到應用程式
■ 支援同步或非同步方式
■ Thread safe
○ Queries object
■ 對象:
● 應用程式到pipeline
● Element之間
■ 用來讓應用程式查詢狀態如已播放時間等
■ 為同步傳輸。表示應用程式送出query要等到
pipeline回應才能繼續執行。
圖示
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-intro-basics-communication.html
➀
➁
➂
➃
Overview
● Element
● Pad
● Bin and pipeline
● Communication
○ bus and message
○ buffer
More about Bus and Message
● Pipeline產生時就會自動分配Bus資源
● 使用方式
○ 使用GLib/Gtk+ main loop去
i. 告訴loop要聽bus event,從對應的callback參數中
去撈event如
● GST_MESSAGE_EOS
● GST_MESSAGE_ERROR
● ..
ii. polling
使用GLib/Gtk+ main loop 處理message (1)
● 撰寫callback,撈想看的event
● 應用程式中
○ 告訴main loop要聽bus event,前面的callback為參數
○ 啟動main loop
範例
/* 1. 寫callback */
my_bus_callback (...)
{
...
switch (GST_MESSAGE_TYPE (message)) {
case GST_MESSAGE_ERROR:
…
}
}
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-bus.html
範例
/* 以下都在main() 裏面 */
/* 2. 我要從main loop 聽GStreamer bus event */
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
bus_watch_id = gst_bus_add_watch (bus,
my_bus_callback, NULL);
gst_object_unref (bus);
/* 3. 開工 */
loop = g_main_loop_new (NULL, FALSE);
g_main_loop_run (loop);
….
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-bus.html
上頁callback
function
使用GLib/Gtk+ main loop 處理message (2)
● 直接註冊signal callback
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline);
gst_bus_add_signal_watch (bus);
g_signal_connect (bus, "message::error", G_CALLBACK
(cb_message_error), NULL);
g_signal_connect (bus, "message::eos", G_CALLBACK
(cb_message_eos), NULL);
Callback function for
events
Messages
● 格式
○ message source
■ 從哪個element送出
○ message type
○ timestamp
● 分類
○ 錯誤或警告通知
○ 播放結束通知 (EOS)
○ Tag:和metadata 相關
○ 狀態改變,如從PLAYING轉換到PAUSE
○ 緩衝相關
○ Element自訂訊息
Overview
● Element
● Pad
● Bin and pipeline
● Communication
○ bus and message
○ buffer
More about Buffer
● GStreamer element之間實際傳送的多媒體資
料
● GStreamer幫你弄buffer 機制
● 包含
○ 指標
○ timestamp
○ reference count。減到零自動GG
○ flag
典型Buffer生命週期
● Source element: 新增分配、分配記憶體空間、
放資料、傳給Sink element
● Sink element: 從buffer讀資料、處理資料、
unreference buffer、framework發現reference
count變為0所以釋放相關資源
Outline
● Backgrounds
● Overview
● Demo
● References
Environment
● Ubuntu 12.04.4 64-bit
Element Information
● gst-inspect oggdemux
○ Class hierarchy
○ Details
手冊Hello World範例程式
● 程式說明
● 編譯
● Demo
程式描述
● 出處:
○ http://gstreamer.freedesktop.
org/data/doc/gstreamer/head/manual/html/chapter-helloworld.html#section-
helloworld
● 目的:從檔案播放 Ogg影片中Vorbis格式的聲音
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-helloworld.html
架構 Recap
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-helloworld.html
ogg為一個container。
可放audio/video等資料
vorbis為一種聲音格式
需要把解出來的資料轉
成音效卡支援的格式
元件
Elements
Pads
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-helloworld.html
程式架構
● Element訊息處理Callback
● 處理pad add event
● 主程式
○ 準備
■ 分配資源
● elements
● GLib mainloop協助處理message
■ 把element打包成pipeline
■ 連連看
■ 設定通訊及相關callback
○ 開始執行
○ 結束、清場
很囉唆的細節,請自行斟酌
/* 1. Element訊息處理Callback */
bus_call (...)
{
GMainLoop *loop = (GMainLoop *) data;
switch (GST_MESSAGE_TYPE (msg)) {
case GST_MESSAGE_EOS:
g_main_loop_quit (loop);
break;
...
}
}
播放結束處理
很囉唆的細節,請自行斟酌
/* 2. 處理pad add event */
on_pad_added(..., GstPad *pad, gpointer data)
{
GstPad *sinkpad;
GstElement *decoder = (GstElement *) data;
….
sinkpad = gst_element_get_static_pad (decoder, "sink");
gst_pad_link (pad, sinkpad);
gst_object_unref (sinkpad);
}
oggdemux動態產
生pad,所以產生
時才link decoder
很囉唆的細節,請自行斟酌
main(...)
{
...
/* 3. 初始化 GStreamer和GLib mainloop */
gst_init (&argc, &argv);
loop = g_main_loop_new (NULL, FALSE);
….
/* 接下頁 */
很囉唆的細節,請自行斟酌
/* 4. 分配資源 */
pipeline = gst_pipeline_new ("audio-player");
source = gst_element_factory_make ("filesrc",
"file-source");
demuxer = gst_element_factory_make ("oggdemux",
"ogg-demuxer");
decoder = gst_element_factory_make ("vorbisdec",
"vorbis-decoder");
conv = gst_element_factory_make ("audioconvert",
"converter");
sink = gst_element_factory_make ("autoaudiosink",
"audio-output");
很囉唆的細節,請自行斟酌
/* 5. 告訴程式開哪個檔案 */
g_object_set (G_OBJECT (source), "location",
argv[1], NULL);
/* 6. 叫mainloop聽GStreamer bus */
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
bus_watch_id = gst_bus_add_watch (bus,
bus_call,
loop);
gst_object_unref (bus);
前面的callback
很囉唆的細節,請自行斟酌
/* 7. 打包 */
gst_bin_add_many (GST_BIN (pipeline),
source, demuxer, decoder, conv, sink, NULL);
/* 8. 連連看 */
gst_element_link (source, demuxer);
gst_element_link_many (decoder, conv, sink, NULL);
/* 9. 註冊要處理的event */
g_signal_connect (demuxer, "pad-added", G_CALLBACK
(on_pad_added), decoder);
oggdemux動態產
生pad,所以產生
時才link decoder
前面的callback
callback
吃的參數
很囉唆的細節,請自行斟酌
/* 10. 將pipeline內的elements狀態設為可以播放 */
gst_element_set_state (pipeline, GST_STATE_PLAYING);
/* 11. 開工 */
g_main_loop_run (loop);
很囉唆的細節,請自行斟酌
/* 12. 收工 */
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (GST_OBJECT (pipeline));
g_source_remove (bus_watch_id);
g_main_loop_unref (loop);
}
狀態設成null,
element要自行釋
放資源
bus_call() 中呼叫g_main_loop_quit
(loop)就會到這邊
手冊Hello World範例程式
● 程式說明
● 編譯
● Demo
編譯參數
● gcc -Wall helloworld.c -o helloworld $(pkg-
config --cflags --libs gstreamer-1.0)
$ echo $(pkg-config --cflags --libs gstreamer-0.10)
-pthread -I/usr/include/gstreamer-0.10 -
I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0
/include -I/usr/include/libxml2 -pthread -lgstreamer-0.10
-lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lxml2 -
lglib-2.0
Ubuntu 12.04.4使
用0.10
手冊Hello World範例程式
● 程式說明
● 編譯
● Demo
Outline
● Backgrounds
● Terminology
● Demo
● References
References
● GStreamer - Wikipedia
○ http://en.wikipedia.org/wiki/GStreamer
● Overview of the design of GStreamer
○ http://cgit.freedesktop.
org/gstreamer/gstreamer/plain/docs/design/part-
overview.txt
● Application Development Manual
○ http://gstreamer.freedesktop.org/documentation/

Más contenido relacionado

La actualidad más candente

強化学習 DQNからPPOまで
強化学習 DQNからPPOまで強化学習 DQNからPPOまで
強化学習 DQNからPPOまでharmonylab
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことMasahiko Sawada
 
やりなおせる Git 入門
やりなおせる Git 入門やりなおせる Git 入門
やりなおせる Git 入門Tomohiko Himura
 
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...SSII
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
Pythonのシグナル処理
Pythonのシグナル処理Pythonのシグナル処理
Pythonのシグナル処理Atsuo Ishimoto
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミングNorishige Fukushima
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11nekko1119
 
機械学習プラットフォーム5つの課題とAmazon SageMakerの4つの利点
機械学習プラットフォーム5つの課題とAmazon SageMakerの4つの利点機械学習プラットフォーム5つの課題とAmazon SageMakerの4つの利点
機械学習プラットフォーム5つの課題とAmazon SageMakerの4つの利点西岡 賢一郎
 
動的計画法の並列化
動的計画法の並列化動的計画法の並列化
動的計画法の並列化Proktmr
 
機械学習におけるオンライン確率的最適化の理論
機械学習におけるオンライン確率的最適化の理論機械学習におけるオンライン確率的最適化の理論
機械学習におけるオンライン確率的最適化の理論Taiji Suzuki
 
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算 (移流方程式)
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算(移流方程式)2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算(移流方程式)
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算 (移流方程式)智啓 出川
 
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健Preferred Networks
 
Network miner 使ってみた
Network miner 使ってみたNetwork miner 使ってみた
Network miner 使ってみた彰 村地
 
Graphic Notes on Linear Algebra and Data Science
Graphic Notes on Linear Algebra and Data ScienceGraphic Notes on Linear Algebra and Data Science
Graphic Notes on Linear Algebra and Data ScienceKenji Hiranabe
 
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-gree_tech
 
機械学習・機械発見から見るデータ中心型化学の野望と憂鬱
機械学習・機械発見から見るデータ中心型化学の野望と憂鬱機械学習・機械発見から見るデータ中心型化学の野望と憂鬱
機械学習・機械発見から見るデータ中心型化学の野望と憂鬱Ichigaku Takigawa
 
新しい並列for構文のご提案
新しい並列for構文のご提案新しい並列for構文のご提案
新しい並列for構文のご提案yohhoy
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたKazuya Wada
 

La actualidad más candente (20)

強化学習 DQNからPPOまで
強化学習 DQNからPPOまで強化学習 DQNからPPOまで
強化学習 DQNからPPOまで
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいこと
 
やりなおせる Git 入門
やりなおせる Git 入門やりなおせる Git 入門
やりなおせる Git 入門
 
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
Pythonのシグナル処理
Pythonのシグナル処理Pythonのシグナル処理
Pythonのシグナル処理
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
 
機械学習プラットフォーム5つの課題とAmazon SageMakerの4つの利点
機械学習プラットフォーム5つの課題とAmazon SageMakerの4つの利点機械学習プラットフォーム5つの課題とAmazon SageMakerの4つの利点
機械学習プラットフォーム5つの課題とAmazon SageMakerの4つの利点
 
動的計画法の並列化
動的計画法の並列化動的計画法の並列化
動的計画法の並列化
 
機械学習におけるオンライン確率的最適化の理論
機械学習におけるオンライン確率的最適化の理論機械学習におけるオンライン確率的最適化の理論
機械学習におけるオンライン確率的最適化の理論
 
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算 (移流方程式)
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算(移流方程式)2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算(移流方程式)
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算 (移流方程式)
 
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
 
Network miner 使ってみた
Network miner 使ってみたNetwork miner 使ってみた
Network miner 使ってみた
 
Graphic Notes on Linear Algebra and Data Science
Graphic Notes on Linear Algebra and Data ScienceGraphic Notes on Linear Algebra and Data Science
Graphic Notes on Linear Algebra and Data Science
 
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
 
機械学習・機械発見から見るデータ中心型化学の野望と憂鬱
機械学習・機械発見から見るデータ中心型化学の野望と憂鬱機械学習・機械発見から見るデータ中心型化学の野望と憂鬱
機械学習・機械発見から見るデータ中心型化学の野望と憂鬱
 
新しい並列for構文のご提案
新しい並列for構文のご提案新しい並列for構文のご提案
新しい並列for構文のご提案
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
 

Similar a Guide to GStreamer Application Development Manual: CH1 to CH10

基于Tornado后端系统架构暨最佳实践
基于Tornado后端系统架构暨最佳实践基于Tornado后端系统架构暨最佳实践
基于Tornado后端系统架构暨最佳实践ZY Zhang
 
Deep learning hardware architecture and software deploy with docker
Deep learning hardware architecture and software deploy with dockerDeep learning hardware architecture and software deploy with docker
Deep learning hardware architecture and software deploy with dockerYa-Lun Li
 
Tornado开发实践
Tornado开发实践Tornado开发实践
Tornado开发实践ZY Zhang
 
SRE Study Notes - CH2,3,4
SRE Study Notes - CH2,3,4SRE Study Notes - CH2,3,4
SRE Study Notes - CH2,3,4Rick Hwang
 
HTML5 实战 WebApp 阅读应用– Shiu
HTML5 实战 WebApp 阅读应用– ShiuHTML5 实战 WebApp 阅读应用– Shiu
HTML5 实战 WebApp 阅读应用– ShiuJingchao Di
 
初探 Elastic Observability 的實踐方法
初探 Elastic Observability 的實踐方法初探 Elastic Observability 的實踐方法
初探 Elastic Observability 的實踐方法Joe Wu
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on praticeKenny (netman)
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統Hsu Ping Feng
 
Ops as Code using Serverless
Ops as Code using Serverless Ops as Code using Serverless
Ops as Code using Serverless Rick Hwang
 
用Raspberry PI學Linux驅動程式
用Raspberry PI學Linux驅動程式用Raspberry PI學Linux驅動程式
用Raspberry PI學Linux驅動程式Stanley Ho
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub維佋 唐
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐zhangsuoyong
 
Python 2 - 快速簡介
Python 2 - 快速簡介Python 2 - 快速簡介
Python 2 - 快速簡介Cheyin L
 
20130325 mldm monday spide r
20130325 mldm monday spide r20130325 mldm monday spide r
20130325 mldm monday spide rChia-Chi Chang
 
SRE Study Notes - CH2,3,4
SRE Study Notes - CH2,3,4SRE Study Notes - CH2,3,4
SRE Study Notes - CH2,3,4Rick Hwang
 
Axure RP Prototyping Tool
Axure RP Prototyping ToolAxure RP Prototyping Tool
Axure RP Prototyping ToolSouyi Yang
 
Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發建興 王
 
2016-04-07-清大-國際化開源專案技術實務與經驗分享
2016-04-07-清大-國際化開源專案技術實務與經驗分享2016-04-07-清大-國際化開源專案技術實務與經驗分享
2016-04-07-清大-國際化開源專案技術實務與經驗分享Jen Yee Hong
 
認試軟體測試的世界 & TDD/BDD 入門
認試軟體測試的世界 & TDD/BDD 入門認試軟體測試的世界 & TDD/BDD 入門
認試軟體測試的世界 & TDD/BDD 入門wantingj
 

Similar a Guide to GStreamer Application Development Manual: CH1 to CH10 (20)

基于Tornado后端系统架构暨最佳实践
基于Tornado后端系统架构暨最佳实践基于Tornado后端系统架构暨最佳实践
基于Tornado后端系统架构暨最佳实践
 
Using vim
Using vimUsing vim
Using vim
 
Deep learning hardware architecture and software deploy with docker
Deep learning hardware architecture and software deploy with dockerDeep learning hardware architecture and software deploy with docker
Deep learning hardware architecture and software deploy with docker
 
Tornado开发实践
Tornado开发实践Tornado开发实践
Tornado开发实践
 
SRE Study Notes - CH2,3,4
SRE Study Notes - CH2,3,4SRE Study Notes - CH2,3,4
SRE Study Notes - CH2,3,4
 
HTML5 实战 WebApp 阅读应用– Shiu
HTML5 实战 WebApp 阅读应用– ShiuHTML5 实战 WebApp 阅读应用– Shiu
HTML5 实战 WebApp 阅读应用– Shiu
 
初探 Elastic Observability 的實踐方法
初探 Elastic Observability 的實踐方法初探 Elastic Observability 的實踐方法
初探 Elastic Observability 的實踐方法
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on pratice
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統
 
Ops as Code using Serverless
Ops as Code using Serverless Ops as Code using Serverless
Ops as Code using Serverless
 
用Raspberry PI學Linux驅動程式
用Raspberry PI學Linux驅動程式用Raspberry PI學Linux驅動程式
用Raspberry PI學Linux驅動程式
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐
 
Python 2 - 快速簡介
Python 2 - 快速簡介Python 2 - 快速簡介
Python 2 - 快速簡介
 
20130325 mldm monday spide r
20130325 mldm monday spide r20130325 mldm monday spide r
20130325 mldm monday spide r
 
SRE Study Notes - CH2,3,4
SRE Study Notes - CH2,3,4SRE Study Notes - CH2,3,4
SRE Study Notes - CH2,3,4
 
Axure RP Prototyping Tool
Axure RP Prototyping ToolAxure RP Prototyping Tool
Axure RP Prototyping Tool
 
Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發
 
2016-04-07-清大-國際化開源專案技術實務與經驗分享
2016-04-07-清大-國際化開源專案技術實務與經驗分享2016-04-07-清大-國際化開源專案技術實務與經驗分享
2016-04-07-清大-國際化開源專案技術實務與經驗分享
 
認試軟體測試的世界 & TDD/BDD 入門
認試軟體測試的世界 & TDD/BDD 入門認試軟體測試的世界 & TDD/BDD 入門
認試軟體測試的世界 & TDD/BDD 入門
 

Más de Wen Liao

Hello world 的一生
Hello world 的一生Hello world 的一生
Hello world 的一生Wen Liao
 
Notes on oracle solaris 11.3 linkers and libraries guide chapter one
Notes on oracle solaris 11.3 linkers  and libraries guide  chapter oneNotes on oracle solaris 11.3 linkers  and libraries guide  chapter one
Notes on oracle solaris 11.3 linkers and libraries guide chapter oneWen Liao
 
開放街圖 自助旅行的好幫手
開放街圖   自助旅行的好幫手開放街圖   自助旅行的好幫手
開放街圖 自助旅行的好幫手Wen Liao
 
GNU AS簡介
GNU AS簡介GNU AS簡介
GNU AS簡介Wen Liao
 
UPnP 1.0 簡介
UPnP 1.0 簡介UPnP 1.0 簡介
UPnP 1.0 簡介Wen Liao
 
故事:自由軟體和 Richard Stallman
故事:自由軟體和 Richard Stallman故事:自由軟體和 Richard Stallman
故事:自由軟體和 Richard StallmanWen Liao
 
Hello world在那邊?背景說明
Hello world在那邊?背景說明Hello world在那邊?背景說明
Hello world在那邊?背景說明Wen Liao
 
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀Wen Liao
 
GNU ld的linker script簡介
GNU ld的linker script簡介GNU ld的linker script簡介
GNU ld的linker script簡介Wen Liao
 
Trace 程式碼之皮
Trace 程式碼之皮Trace 程式碼之皮
Trace 程式碼之皮Wen Liao
 
淺談Debian套件打包
淺談Debian套件打包淺談Debian套件打包
淺談Debian套件打包Wen Liao
 
GNU Make, Autotools, CMake 簡介
GNU Make, Autotools, CMake 簡介GNU Make, Autotools, CMake 簡介
GNU Make, Autotools, CMake 簡介Wen Liao
 
A Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
A Brief Introduction to Regular Expression with Python 2.7.3 Standard LibraryA Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
A Brief Introduction to Regular Expression with Python 2.7.3 Standard LibraryWen Liao
 
GNU gettext簡介 - 以C語言為範例
GNU gettext簡介 - 以C語言為範例GNU gettext簡介 - 以C語言為範例
GNU gettext簡介 - 以C語言為範例Wen Liao
 
Testing in python 2.7.3
Testing in python 2.7.3Testing in python 2.7.3
Testing in python 2.7.3Wen Liao
 
從組裝軟體中談談軟體發展管理
從組裝軟體中談談軟體發展管理從組裝軟體中談談軟體發展管理
從組裝軟體中談談軟體發展管理Wen Liao
 
軟體組裝心得分享
軟體組裝心得分享軟體組裝心得分享
軟體組裝心得分享Wen Liao
 
Introduce to Linux command line
Introduce to Linux command lineIntroduce to Linux command line
Introduce to Linux command lineWen Liao
 

Más de Wen Liao (18)

Hello world 的一生
Hello world 的一生Hello world 的一生
Hello world 的一生
 
Notes on oracle solaris 11.3 linkers and libraries guide chapter one
Notes on oracle solaris 11.3 linkers  and libraries guide  chapter oneNotes on oracle solaris 11.3 linkers  and libraries guide  chapter one
Notes on oracle solaris 11.3 linkers and libraries guide chapter one
 
開放街圖 自助旅行的好幫手
開放街圖   自助旅行的好幫手開放街圖   自助旅行的好幫手
開放街圖 自助旅行的好幫手
 
GNU AS簡介
GNU AS簡介GNU AS簡介
GNU AS簡介
 
UPnP 1.0 簡介
UPnP 1.0 簡介UPnP 1.0 簡介
UPnP 1.0 簡介
 
故事:自由軟體和 Richard Stallman
故事:自由軟體和 Richard Stallman故事:自由軟體和 Richard Stallman
故事:自由軟體和 Richard Stallman
 
Hello world在那邊?背景說明
Hello world在那邊?背景說明Hello world在那邊?背景說明
Hello world在那邊?背景說明
 
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀
 
GNU ld的linker script簡介
GNU ld的linker script簡介GNU ld的linker script簡介
GNU ld的linker script簡介
 
Trace 程式碼之皮
Trace 程式碼之皮Trace 程式碼之皮
Trace 程式碼之皮
 
淺談Debian套件打包
淺談Debian套件打包淺談Debian套件打包
淺談Debian套件打包
 
GNU Make, Autotools, CMake 簡介
GNU Make, Autotools, CMake 簡介GNU Make, Autotools, CMake 簡介
GNU Make, Autotools, CMake 簡介
 
A Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
A Brief Introduction to Regular Expression with Python 2.7.3 Standard LibraryA Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
A Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
 
GNU gettext簡介 - 以C語言為範例
GNU gettext簡介 - 以C語言為範例GNU gettext簡介 - 以C語言為範例
GNU gettext簡介 - 以C語言為範例
 
Testing in python 2.7.3
Testing in python 2.7.3Testing in python 2.7.3
Testing in python 2.7.3
 
從組裝軟體中談談軟體發展管理
從組裝軟體中談談軟體發展管理從組裝軟體中談談軟體發展管理
從組裝軟體中談談軟體發展管理
 
軟體組裝心得分享
軟體組裝心得分享軟體組裝心得分享
軟體組裝心得分享
 
Introduce to Linux command line
Introduce to Linux command lineIntroduce to Linux command line
Introduce to Linux command line
 

Guide to GStreamer Application Development Manual: CH1 to CH10