1. 程式人生 > >【視訊開發】Gstreamer框架中使用gst-launch進行流媒體播放

【視訊開發】Gstreamer框架中使用gst-launch進行流媒體播放

Gstreamer框架中使用gst-launch進行流媒體播放

Gstreamer是一套開源的流媒體框架,用其也可以進行流媒體開發,Gstreamer是基於glib庫編寫的,需要將多個不同功能的元件(element)裝進一個箱櫃(bin)中,在進行程式編寫前,我們可以使用Gstreamer提供的一個小工具gst-launch在終端中在驗證我們的想法,驗證我們選擇的元件和配置的管道是否正確,如果驗證正確,編碼對於各位小夥伴們就是小case啦!

不用廢話了,直接進入我們的主題,一下列出了我以前學習使用Gstreamer進行流媒體開發過程中的一些例項,都是使用gst-launch實現的。

一、RDP協議實現mp3播放

1、服務端

gst-launch filesrc location=/mnt/hgfs/fedshare/source/audio/test.mp3 ! mad! audioconvert \

! audio/x-raw-int,channels=1,depth=16,width=16, rate=44100 !rtpL16pay ! udpsink host=127.0.0.1 port=5000

2、接收端

gst-launch udpsrc port=5000 ! "application/x-rtp,media=(string)audio,clock-rate=(int)44100, width=16, height=16, \

encoding-name=(string)L16, encoding-params=(string)1, channels=(int)1,channel-positions=(int)1, payload=(int)96" ! gstrtpjitterbufferdo-lost=true ! rtpL16depay ! audioconvert ! alsasink sync=false

二、攝像頭遠端監控

1、傳送端

gst-launch -v gstrtpbin name=rtpbin v4l2src device=/dev/video0 ! videorate! videoscale ! ffmpegcolorspace ! 'video/x-raw-yuv, width=(int)320,height=(int)240, framerate=(fraction)15/1' ! \ rtpvrawpay !rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! multiudpsinkclients="127.0.0.1:9996" rtpbin.send_rtcp_src_0 ! multiudpsinkclients="127.0.0.1:9997" sync=false async=false udpsrc port=10000 !rtpbin.recv_rtcp_sink_0

2、接收端

gst-launch udpsrc caps=" application/x-rtp,media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW,sampling=(string)YCbCr-4:2:0, depth=(string)8, width=(string)320,height=(string)240, colorimetry=(string)SMPTE240M, ssrc=(guint)4294234526,payload=(int)96, clock-base=(guint)520513122, seqnum-base=(guint)28177"port=9996 ! queue ! rtpvrawdepay ! queue ! tee name="splitter"! queue ! ffmpegcolorspace ! autovideosink splitter. ! queue ! ffmpegcolorspace! jpegenc ! avimux ! filesink location=osug-udp-2.avi

三、音訊流媒體傳輸(

1、傳送端

gst-launch -v gstrtpbin name=rtpbin latency=100 \

uridecodebin uri=file:///mnt/hgfs/fedshare/source/audio/test.mp3name=decoder \

decoder. ! tee name=tee0 \

tee0. ! queue2 ! audioconvert ! ffenc_aac ! rtpmp4apay pt=96 ! queue2 !rtpbin.send_rtp_sink_1 rtpbin.send_rtp_src_1 ! queue2 ! udpsink host=127.0.0.1port=5002 async=false

2、接收端

gst-launch -v gstrtpbin name=rtpbin latency=100 \

udpsrccaps="application/x-rtp,media=(string)audio,clock-rate=(int)44100,encoding-name=(string)MP4A-LATM,cpresent=(string)0,config=(string)40002420,ssrc=(uint)4204015526,payload=(int)96,clock-base=(uint)4274968681,seqnum-base=(uint)44368"\

port=5002 ! queue2 ! rtpbin.recv_rtp_sink_1 rtpbin. ! rtpmp4adepay ! teename=teeaudio \

teeaudio. ! queue2 ! ffdec_aac ! audioconvert ! autoaudiosink

四、視訊檔案只傳輸音訊流

1、傳送端

gst-launch -v gstrtpbin name=rtpbin latency=100 \

uridecodebin uri=file:///mnt/hgfs/fedshare/source/video/loveStyle.mp4name=decoder \

decoder. ! tee name=tee0 \

tee0. ! queue2 ! ffmpegcolorspace ! x264enc ! rtph264pay pt=96 ! queue2 !rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! queue2 ! udpsink host=127.0.0.1port=5000 async=false \

rtpbin.send_rtcp_src_0 ! queue2 ! udpsink host=127.0.0.1 port=5001async=false \

udpsrc port=5005 ! queue2 ! rtpbin.recv_rtcp_sink_0

2、接收端

gst-launch -v gstrtpbin name=rtpbin latency=100 \

udpsrc caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264,ssrc=(uint)340005641,payload=(int)96,clock-base=(uint)2625017333,seqnum-base=(uint)5894"port=5000 \

! queue ! rtpbin.recv_rtp_sink_0 rtpbin. ! rtph264depay ! teename=teevideo \

teevideo. ! queue ! ffdec_h264 ! videoscale ! ffmpegcolorspace !xvimagesink \

udpsrc port=5001 ! queue ! rtpbin.recv_rtcp_sink_0 rtpbin.send_rtcp_src_0! queue ! udpsink host=127.0.0.1 port=5005 sync=true async=false

五、音視訊混合流媒體

1、傳送端

gst-launch -v gstrtpbin name=rtpbin latency=100 \

uridecodebin uri=file:///mnt/hgfs/fedshare/source/video/loveStyle.mp4name=decoder \

decoder. ! tee name=tee0 \

tee0. ! queue2 ! ffmpegcolorspace ! x264enc ! rtph264pay pt=96 ! queue2 !rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! queue2 ! udpsink host=127.0.0.1port=5000 async=false \

rtpbin.send_rtcp_src_0 ! queue2 ! udpsink host=127.0.0.1 port=5001async=false \

udpsrc port=5005 ! queue2 ! rtpbin.recv_rtcp_sink_0 \

decoder. ! tee name=tee1 \

tee1. ! queue2 ! audioconvert ! ffenc_aac ! rtpmp4apay pt=96 ! queue2 !rtpbin.send_rtp_sink_1 rtpbin.send_rtp_src_1 ! queue2 ! udpsink host=127.0.0.1port=5002 async=false \

rtpbin.send_rtcp_src_1 ! queue2 ! udpsink host=127.0.0.1 port=5003async=false \

udpsrc port=5006 ! queue2 ! rtpbin.recv_rtcp_sink_1

2、接收端

gst-launch -v gstrtpbin name=rtpbin latency=100 \

udpsrccaps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264,ssrc=(uint)340005641,payload=(int)96,clock-base=(uint)2625017333,seqnum-base=(uint)5894"port=5000 \

! queue2 ! rtpbin.recv_rtp_sink_0 rtpbin. ! rtph264depay ! teename=teevideo \

teevideo. ! queue2 ! ffdec_h264 ! videoscale ! ffmpegcolorspace ! xvimagesink\

udpsrc port=5001 ! queue2 ! rtpbin.recv_rtcp_sink_0 rtpbin.send_rtcp_src_0! queue2 ! udpsink host=127.0.0.1 port=5005 sync=true async=false \

udpsrccaps="application/x-rtp,media=(string)audio,clock-rate=(int)44100,encoding-name=(string)MP4A-LATM,cpresent=(string)0,config=(string)40002420,ssrc=(uint)4204015526,payload=(int)96,clock-base=(uint)4274968681,seqnum-base=(uint)44386"port=5002 ! queue2 ! rtpbin.recv_rtp_sink_1 rtpbin. ! rtpmp4adepay ! teename=teeaudio \

teeaudio. ! queue2 ! ffdec_aac ! audioconvert ! autoaudiosink \

udpsrc port=5003 ! queue2 ! rtpbin.recv_rtcp_sink_1 rtpbin.send_rtcp_src_1! queue2 ! udpsink host=127.0.0.1 port=5006 sync=true async=false

相關推薦

視訊開發Gstreamer框架使用gst-launch進行媒體播放

Gstreamer框架中使用gst-launch進行流媒體播放 Gstreamer是一套開源的流媒體框架,用其也可以進行流媒體開發,Gstreamer是基於glib庫編寫的,需要將多個不同功能的元件(element)裝進一個箱櫃(bin)中,在進行程式編寫前,我們可以使

視訊開發EasyIPCamera通過RTSP協議接入海康、大華等攝像機,摒棄私有SDK接入弊端

近期工作中需要開發一套視訊監控系統,實現WEB端、手機APP端預覽區域網內的道路監控攝像機,我負責一些後臺服務的開發工作。       由於之前專案中的程式都是採用私有協議、各攝像機廠商的SDK進行視訊監控系統開發,這種技術方案更適合C/S架構的系統,應用於此次專案存在

視訊開發RTSP SERVER(基於live555)詳細設計

/* *本文基於LIVE555的嵌入式的RTSP流媒體伺服器一個設計文件,箇中細節現剖於此,有需者可參考指正,同時也方便後期自己查閱。(本版本是基於2011年的live555) 作者:[email protected] */ RT

視訊開發Live555live555實現h264碼RTSP傳輸

1.概述 liveMedia 庫中有一系列類,基類是Medium,這些類針對不同的流媒體型別和編碼。 其中的StreamFrame類檔案(如MPEG4VideoStreamFramer)為流傳輸關鍵。 2 重要概念: StreamFrame類:該類繼承Framed

OpenCV開發OpenCV:使用VideoCapture類進行視訊讀取和顯示

註釋比較詳盡,相信大家都能看得懂,這裡再做幾點補充: 1.由於原視訊是網路攝像頭採集的,所以有很多雪花點,在這裡進行了簡單的均值濾波處理。 2.雖然VideoCapture類中有grab(捕獲下一幀)和retrieve(對該幀進行解碼)操作,但是直接用read比較簡單。 3.get函式的功能很強大,

ARM-Linux開發CUDA開發視訊開發關於Linux下利用GPU對視訊進行硬體加速轉碼的方案

最近一直在研究Linux下利用GPU進行硬體加速轉碼的方案,折騰了很久,至今沒有找到比較理想的硬加速轉碼方案。似乎網上討論這一方案的文章也特別少,這個過程中也進行了各種嘗試,遇到很多具體問題,以下便對之前所作的一些工作做一些總結和分享,省的時間長了自己也忘記了,也希望後來

視訊開發opencv不能讀取MP4格式檔案

   用OpenCV對視訊進行處理時,不能開啟.mp4格式的檔案。後來解決辦法是用ffmpeg.exe將mp4檔案轉碼為avi檔案,然後再進行處理。但是轉碼過程比較慢。後來檢視opencv原始碼,發現它也是用ffmpeg庫進行視訊解碼的,那應該也可以直接讀取MP4檔案才對。

視訊傳輸二、Opencv結合socket進行視訊傳輸(TCP協議)

        博文由來:筆者突發奇想,做採集4個USB攝像頭畫面小實驗時,卻遇到了在電腦上最多隻能同時開啟3個這樣頭痛的問題(個人分析認為是電腦的問題),故出此下策,在客戶端掛1個,伺服器掛3個攝像頭,利用socket進行視訊傳輸,本篇文章是利用的是TCP協議。筆者拙見,

遊戲開發淺談遊戲開發常見的設計原則

依賴關系 unity 說過 srp des log gof https 類繼承   俗話說得好:“設計模式,常讀常新~”。的確,每讀一遍設計模式都會有些新的體會和收獲。馬三不才,才讀了兩遍設計模式(還有一遍是在學校學的),屬於菜鳥級別的。這次準備把閱

Visual StudioVisual C# XML註釋的使用(含註釋在開發時顯示換行)

title visual toc sum .net art detail 段落 結構 為函數方法註釋說明要用到 xml 語句 <summary> 段落說明 </summary> 、<para> 新段示例說明 </para>、&

VS開發VS編譯時提示"已經在 LIBCMT.lib(new.obj) 定義uafxcw.lib"解決辦法

  錯誤  1  error LNK2005: "void * __cdecl operator new(unsigned int)" ( [email protected]@Z )

移動開發關於一對一視訊聊天直播技術(七):直播雲 SDK 效能測試模

本篇是《一對一視訊直播技術詳解》系列的最後一篇直播雲 SDK 效能測試模型,SDK 的效能對最終 App 的影響非常大。SDK 版本迭代快速,每次釋出前都要進行系統的測試,測試要有比較一致的行為,要有效能模型作為理論基礎,對 SDK 的效能做量化評估。本文就是來探討影響 SDK 效能的指標並建立相應的效能模型

移動開發關於一對一視訊交友直播(五)延遲優化

6 月底釋出了一個針對視訊直播的實時流網路 LiveNet 和完整的直播雲解決方案,很多開發者對這個網路和解決方案的細節和使用場景非常感興趣。 結合實時流網路 LiveNet 和直播雲解決方案的實踐,我們用一系列文章,更系統化地介紹當下大熱的視訊直播各環節的關鍵技術,幫助視訊直播創業者們更全面、深入地瞭解視

移動開發關於一對一視訊交友技術原始碼(六)現代播放器原理

在上一篇延遲優化中,我們分享了不少簡單實用的調優技巧。本篇是《一對一視訊直播技術詳解》系列之六:現代播放器原理。 近年來,多平臺適配需求的增長導致了流媒體自適應位元速率播放的興起,這迫使 Web 和移動開發者們必須重新思考視訊技術的相關邏輯。首先,巨頭們分分發布了 HLS、HDS 和 Smooth Stre

Qt開發QThread的互斥、讀寫鎖、訊號量、條件變數

在gemfield的《從pthread到QThread》一文中我們瞭解了執行緒的基本使用,但是有一大部分的內容當時說要放到這片文章裡討論,那就是執行緒的同步問題。關於這個問題,gemfield在《從進 程到執行緒》中有一個比喻,有必要重新放在下面溫習下: ***************

Python開發Python資料分析環境的搭建

注:無論是任何一門語言,剛開始入門的時候,語言執行環境的搭建都是一件不輕鬆的事情。 Python的執行環境 要執行或寫Python程式碼,就需要Python的執行環境,主要的Python有以下三類: 原生態的Python:就是直接從Python的官網下載,然後安裝使

linuxjpeglib庫,Linux開發jpeglib使用指南

我覺得,你應該現在應該是libjpeg的dev沒有安裝. 檢視下是否已經安裝了,沒安裝的話,apt-get install libjpeg-dev 或者yum install -y libjpeg libjpeg-devel 您可以到www.ijg.org網站下載libj

備忘AssetBundle框架設計_框架視訊

課時1:實戰專案開發AB技術問題分析.mp4 課時2:實戰專案開發AB技術解決方案.mp4 課時3:AB框架整體設計方案詳解.mp4 課時4:自動標記AB包名原理講解.mp4 課時5:按場景歸類的AB包名命名規則詳解.mp4 課時6:自動打包流程_開發自動標記類(A).mp4

web開發docker的資料庫

注:自從開始使用docker,部署方面的事情就簡單多了。使用docker構建的資料庫容器不用直接安裝,開啟後就可以使用,也比以前方便很多。下面將一些要點記錄下來。 下面的例子使用以下環境: - 系統:CentOS Linux release 7.4.1708 - docker:Docker versio

Qt開發QT顯示影象資料

一般影象資料都是以RGBRGBRGB……位元組流的方式(解碼完成後的原始影象流),我說成位元組流,那就表明R,G,B的值各佔一個位元組,在程式設計時表示的就是unsigned char * data。        我們先來看一下QT中的QImage物件。在載入data資料