關於流媒體的簡介及技術梳理

理解什麼是流媒體

一種具備邊傳邊播特點的多媒體,核心爲流式傳輸技術,也被稱爲新的媒體傳送方式。

不必等到把媒體全部下載完畢,只需要將視音頻文件經過壓縮處理, 放在媒體服務器上, 在網絡中使用流式傳輸技術分段傳送,大概幾秒的延時就可以獲取到媒體服務器推送的視頻數據。

流媒體的出現節省了下載時間和存儲空間, 使延時大大減少,極大地方便了人們的工作和生活。

 

示意圖:

   

舉個例子:

視頻直播的應用,某用戶手機下載視頻直播軟件在推流端進行拍攝視頻,利用推流協議然後在網上進行發佈進入流媒體服務器,其他用戶進入視頻直播軟件拉流端進行點播,利用拉流播放協議從流媒體服務器接收視頻數據傳輸進行播放。

 

 

流媒體處理技術:

說說基於Pipeline結構的Gstreamer

Gstreamer是一個支持Windows,Linux,Android, iOS的跨平臺的多媒體框架,應用程序可以通過管道(Pipeline)的方式,將多媒體處理的各個步驟串聯起來,達到預期的效果。每個步驟通過元素(Element)基於GObject對象系統通過插件(plugins)的方式實現,方便了各項功能的擴展。

通過構建由元素組成的管道,GStreamer可用於實現各種多媒體應用程序,包括臺式機播放器,音頻/視頻記錄器,多媒體服務器,代碼轉換器等。元素是對多媒體流執行某些操作的對象,例如:

-讀取文件

-在格式之間解碼或編碼

-從硬件設備捕獲

-渲染到硬件設備

-混合或多路複用多個流元素

GStreamer的設計目標包括:

-快速處理大量數據

-允許完全多線程處理

-能夠處理多種格式

-同步不同的數據流

-能夠處理多個設備

存在不同類別的元素:

-源元素,這些元素不消耗數據,僅爲管道提供數據。

-下沉元素,這些元素不產生數據,而是將數據呈現給輸出設備。

-轉換元素,這些元素將某種格式的輸入流轉換爲另一種格式的流。編碼器/解碼器/轉換器是示例。

-解複用器元素,這些元素解析流併產生幾個輸出流。

-混合器/混合器元素,將多個輸入流合併爲一個輸出流。

(除此之外,還可以構造其他類別的元素。)

 

Bins ---- Bin是元素的子類,並充當其他元素的容器,因此可以將多個元素組合爲一個元素。

管道是特殊的bin子類,提供以下功能作爲其子類:

-爲所有子類選擇和管理全局時鐘。

-根據所選時鐘管理運行時間。Running_time是管道在PLAYING狀態花費的經過時間,用於同步。

-管理管道中的延遲。

-提供讓GstBus與應用程序通訊的元素的方法。

-管理元素的全局狀態,例如錯誤和流結束。

通常,應用程序創建一個管道來管理應用程序中的所有元素

 

GStreamer支持兩種可能的數據流類型,即推模型和拉模型。在推模型中,上游元素通過調用接收服務器上的方法將數據發送到下游元素。在拉模型中,下游元素通過調用來源服務器上的方法從上游元素請求數據。

 

Gstreamer使用出現的一些坑

系統:ubuntu18.04

安裝gstreamer基本庫,工具,以及插件

 

sudo apt-get install libgstreamer0.10-dev gstreamer-tools gstreamer0.10-tools gstreamer0.10-doc

sudo apt-get install gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse

 

* 安裝ffmpeg支持

 

sudo apt-get install gstreamer0.10-ffmpeg

 

* 測試(錄製攝像頭視頻)

gst-launch autovideosrc ! ffmpegcolorspace ! autovideosink

 

唯一需要的其他“開發環境”是gcc編譯器和文本編輯器。爲了編譯需要GStreamer並使用GStreamer核心庫的代碼,請記住將此字符串添加到gcc命令:

pkg-config --cflags --libs gstreamer-1.0

如果使用其他GStreamer庫,例如視頻庫,必須在上面的字符串gstreamer-1.0之後添加額外的包(例如視頻庫的gstreamer-video-1.0)。

如果應用程序是在libtool的幫助下構建的,例如當使用automake / autoconf作爲構建系統時,必須從gst-sdk-shell環境中運行configure腳本。

 

獲取官方教程的源代碼:

 

git clone https://gitlab.freedesktop.org/gstreamer/gst-docs

 

在每個教程的源代碼的底部,需要找到該特定教程的命令,包括所需的庫,按要求的順序。在開發自己的應用程序時,GStreamer文檔將說明函數所屬的庫。

 

構建:gcc basic-tutorial-1.c -o basic-tutorial-1 `pkg-config --cflags --libs gstreamer-1.0`

 

運行:./basic-tutorial-1

 

如果遇到

Element = gst_element_factory_make("mad", "decoder");

Element爲null,說明沒安裝mad插件,可以通過

gst-inspect mad

命令查看mad插件是否正常安裝,如沒有安裝,在ubuntu下可以通過如下命令進行安裝:

sudo apt-get install gstreamer0.10-plugins-ugly、

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章