【視訊開發】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
【視訊開發】【Live555】live555實現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 Studio】Visual 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的官網下載,然後安裝使
linux中jpeglib庫,【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資料