GStreamer (三)常?插件

在這里插入圖片描述

常?插件

  • 1、Source
    • 1.1、filesrc
    • 1.2. videotestsrc
    • 1.3. v4l2src
    • 1.4. rtspsrc和rtspclientsink
  • 2、 Sink
    • 2.1. filesink
    • 2.2. fakesink
    • 2.3. xvimagesink
    • 2.4. kmssink
    • 2.5. waylandsink
    • 2.6. rkximagesink
    • 2.7. fpsdisplaysink
  • 3 、視頻推流/拉流
    • 3.1. 本地推流/拉流
      • 3.1.1 USB攝像頭
      • 3.1.2 ov8858 mipi攝像頭
    • 3.2. RTSP推流/拉流

1、Source

GStreamer的Source插件用于生成和提供媒體數據流。它們可以從不同的數據源讀取音頻或視頻,比如文件、網絡、設備等。 常見的Source插件包括文件源(如 filesrc)、網絡源(如 tcpserversrc)、設備源(如 v4l2src),這些插件允許開發者靈活地構建多媒體管道, 以滿足不同的應用需求。通過配置Source插件,用戶可以輕松獲取和處理多種類型的媒體數據。

1.1、filesrc

從?件讀取數據,?例如下:

#創建/tmp/test
echo 666 > /tmp/test#讀取文件數據到/tmp/test2
gst-launch-1.0 filesrc location=/tmp/test ! filesink location=/tmp/test2#查看
cat /tmp/test2

1.2. videotestsrc

?成視頻數據,?例如下:

# 使?默認格式輸出視頻
gst-launch-1.0 videotestsrc ! xvimagesink
# 使?指定格式輸出視頻
gst-launch-1.0 videotestsrc ! "video/x-raw,width=1920,height=1080,format=(string)NV12" ! xvimagesink

1.3. v4l2src

從攝像頭獲取視頻數據,?例如下:

#如果不指定攝像頭編號,默認使用系統的第一個視頻設備/dev/video0
gst-launch-1.0 v4l2src ! video/x-raw,width=1920,height=1080,format=NV12 ! xvimagesink#如果需要使用特定的攝像頭,可以通過device屬性指定設備,例如
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=1920,height=1080,format=NV12 ! xvimagesink

1.4. rtspsrc和rtspclientsink

rtspsrc和rtspclientsink是GStreamer中用于處理RTSP流的兩個不同元素。

rtspsrc:這是一個源元素,用于接收RTSP流。它可以從RTSP服務器拉取音視頻流,并將其傳遞給管道的下游元素進行處理。

rtspclientsink:這是一個接收元素,用于將處理后的音視頻流發送到RTSP服務器。

簡單來說,rtspsrc用于接收流,rtspclientsink用于發送流。

系統默認沒有安裝插件,需要進行安裝:

#安裝插件
sudo apt install gstreamer1.0-rtsp

具體使用方法,參考本章節推流、拉流部分。

2、 Sink

GStreamer的Sink插件用于接收和處理媒體數據流,通常用于輸出到不同的目標,例如文件、音頻設備、視頻顯示等。 常見的Sink插件包括文件接收器(如filesink)、音頻輸出(如 alsasink)、視頻顯示(如 ximagesink)。 這些插件使開發者能夠靈活地將媒體數據導出到所需的格式或設備,方便實現多媒體播放和錄制功能。

2.1. filesink

將收到的數據保存為?件,?例如下:

#創建/tmp/test
echo 666 > /tmp/test#讀取文件數據到/tmp/test2
gst-launch-1.0 filesrc location=/tmp/test ! filesink location=/tmp/test2#查看
cat /tmp/test2

2.2. fakesink

將收到的數據全部丟棄,?例如下:

gst-launch-1.0 filesrc location=/tmp/test ! fakesink

2.3. xvimagesink

視頻Sink,接收視頻并顯?,使?X11接口實現,?例如下:

gst-launch-1.0 videotestsrc ! xvimagesink

2.4. kmssink

視頻Sink,接收視頻并顯?,使?kms接口實現,需要獨占硬解圖層,?例如下:

gst-launch-1.0 videotestsrc ! kmssink
# 常?命令
connector-id #指定屏幕
plane-id #指定硬件圖層
render-rectangle #指定渲染范圍

2.5. waylandsink

視頻Sink,接收視頻并顯?,使?wayland接口實現,?例如下:

gst-launch-1.0 videotestsrc ! waylandsink

2.6. rkximagesink

視頻Sink,接收視頻并顯?,使?drm接口實現零拷?等功能,性能較好,但需要獨占硬解圖層。?例如下:

gst-launch-1.0 videotestsrc ! rkximagesink

2.7. fpsdisplaysink

視頻Sink,接收視頻并統計幀率,同時會將視頻中轉?下?級Sink顯?,?例如下:

#?志等級為TRACE(7)即可查看實時幀率,設置為DEBUG(5)則只顯?最?/最小幀率
GST_DEBUG=fpsdisplaysink:7 gst-play-1.0 --flags=3 --videosink="fpsdisplaysink \
video-sink=xvimagesink signal-fps-measurements=true text-overlay=false \
sync=false" test.mp4#信息輸出如下
Press 'k' to see a list of keyboard shortcuts.
Now playing /home/cat/test.mp4
0:00:00.111413754  7044   0x5580fc5d90 DEBUG         fpsdisplaysink fpsdisplaysink.c:440:fps_display_sink_start:<fpsdisplaysink0> Use text-overlay? 0
Redistribute latency...
0:00:02.035048410  7044   0x7f6004e2d0 DEBUG         fpsdisplaysink fpsdisplaysink.c:372:display_current_fps:<fpsdisplaysink0> Updated max-fps to 44.703224
0:00:02.036371046  7044   0x7f6004e2d0 DEBUG         fpsdisplaysink fpsdisplaysink.c:376:display_current_fps:<fpsdisplaysink0> Updated min-fps to 44.703224
0:00:02.037667141  7044   0x7f6004e2d0 LOG           fpsdisplaysink fpsdisplaysink.c:381:display_current_fps:<fpsdisplaysink0> Signaling measurements: fps:44.703224 droprate:0.000000 avg-fps:44.703224
0:00:02.552749637  7044   0x7f6004e2d0 DEBUG         fpsdisplaysink fpsdisplaysink.c:372:display_current_fps:<fpsdisplaysink0> Updated max-fps to 46.356696
0:00:02.554009567  7044   0x7f6004e2d0 LOG           fpsdisplaysink fpsdisplaysink.c:381:display_current_fps:<fpsdisplaysink0> Signaling measurements: fps:46.356696 droprate:0.000000 avg-fps:45.532539

3 、視頻推流/拉流

3.1. 本地推流/拉流

3.1.1 USB攝像頭

攝像頭接口為device=/dev/video9,需要先運行接收端命令,然后再運行服務端(注意如果是ssh需要指定export DISPLAY=:0環境變量)

#板卡接收端
gst-launch-1.0 udpsrc port=1234 ! "application/x-rtp, payload=96" ! rtph264depay ! decodebin ! autovideosink sync=false#板卡服務端測試1
gst-launch-1.0 v4l2src device=/dev/video9  !  video/x-raw,width=640,height=480,framerate=30/1 ! videoconvert ! video/x-raw,format=UYVY !  mpph264enc ! queue ! h264parse ! rtph264pay ! udpsink host=127.0.0.1 port=1234#板卡服務端測試2
gst-launch-1.0 v4l2src device=/dev/video9  ! image/jpeg !  mppjpegdec ! videoconvert ! video/x-raw,height=1080,width=1920,frame=30/1,format=NV12 !  mpph264enc ! queue ! h264parse ! rtph264pay ! udpsink host=127.0.0.1 port=1234

說明如下:

接收端,命令通過udpsrc從指定的端口(1234)接收RTP數據流,使用rtph264depay解封裝RTP數據,接著通過decodebin解碼視頻流,最后將解碼后的視頻輸出到自動選擇的視頻窗口(autovideosink)。

服務端測試1:使用v4l2src直接捕獲原始視頻流,輸出為YUYV格式,并進行H.264編碼,然后通過rtph264pay封裝成RTP數據包,最后使用udpsink將數據推送到指定的地址(127.0.0.1:1234)。

服務端測試2:同樣使用v4l2src,但輸入的是JPEG格式的圖像,通過解碼后再轉換成NV12格式,并進行H.264編碼,然后通過rtph264pay封裝成RTP數據包,最后使用udpsink將數據推送到指定的地址(127.0.0.1:1234)。

3.1.2 ov8858 mipi攝像頭

攝像頭接口為device=/dev/video0,需要先運行接收端命令,然后再運行服務端(注意如果是ssh需要指定export DISPLAY=:0環境變量)

#板卡接收端
gst-launch-1.0 udpsrc port=1234 ! "application/x-rtp, payload=96" ! rtph264depay ! decodebin ! autovideosink sync=false#板卡服務端測試1
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480,framerate=23/1 ! videoconvert ! video/x-raw,format=UYVY !  mpph264enc ! queue ! h264parse ! rtph264pay ! udpsink host=127.0.0.1 port=1234#板卡服務端測試2
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=1280,height=960,framerate=23/1 ! videoconvert ! video/x-raw,format=NV12 !  mpph264enc ! queue ! h264parse ! rtph264pay ! udpsink host=127.0.0.1 port=1234

以上和usb相似,只是ov8858不支持輸出JPEG格式,測試1和測試2分辨率和格式不同。

3.2. RTSP推流/拉流

系統默認沒有安裝插件,需要進行安裝:

#安裝插件

sudo apt install gstreamer1.0-rtsp

推流前需要啟動RTSP服務器,需要運行mediamtx

訪問: mediamtx,下載mediamtx_vx.x.x_linux_arm64v8.tar.gz

將mediamtx_v1.9.1_linux_arm64v8.tar.gz傳到板卡解壓并運行:

#運行mediamtx
sudo ./mediamtx &#信息輸出如下
2024/09/18 16:24:54 INF MediaMTX v1.9.1
2024/09/18 16:24:54 INF configuration loaded from /home/cat/mediamtx.yml
2024/09/18 16:24:54 INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
2024/09/18 16:24:54 INF [RTMP] listener opened on :1935
2024/09/18 16:24:54 INF [HLS] listener opened on :8888
2024/09/18 16:24:54 INF [WebRTC] listener opened on :8889 (HTTP), :8189 (ICE/UDP)
2024/09/18 16:24:54 INF [SRT] listener opened on :8890 (UDP)

將視頻流發送到RTSP服務器,簡單?例如下:

以下測試USB攝像頭,攝像頭接口為device=/dev/video9

gst-launch-1.0 v4l2src device=/dev/video9  ! image/jpeg !  mppjpegdec ! videoconvert ! video/x-raw,height=1080,width=1920,frame=30/1,format=NV12 ! tee name=t \
t. ! queue ! videoconvert ! autovideosink \
t. ! videoconvert ! mpph264enc ! queue ! h264parse  ! rtspclientsink location=rtsp://127.0.0.1:8554/live

以下測試mipi攝像頭,攝像頭接口為device=/dev/video0

gst-launch-1.0 v4l2src device=/dev/video0  !  video/x-raw,width=1920,height=1080,framerate=23/1 ! tee name=t \
t. ! queue ! videoconvert ! autovideosink \
t. ! videoconvert ! mpph264enc ! queue ! h264parse  ! rtspclientsink location=rtsp://127.0.0.1:8554/live

從RTSP服務器中獲取視頻流,簡單?例如下:

#指定為實際推流板卡ip
gst-launch-1.0 rtspsrc location=rtsp://192.168.103.101:8554/live ! rtph264depay ! h264parse ! mppvideodec ! xvimagesink

或者使用VLC工具,打開左上角媒體->打開網絡串流
在這里插入圖片描述

然后根據推流板卡實際IP輸入RTSP地址
在這里插入圖片描述

如果鏈接成功則會出現攝像頭畫面。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906699.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906699.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906699.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot與Kafka集成實踐:實現高效消息隊列

Spring Boot與Kafka集成實踐 引言 在現代分布式系統中&#xff0c;消息隊列是實現異步通信和解耦的重要組件。Apache Kafka作為一種高性能、分布式的消息隊列系統&#xff0c;被廣泛應用于大數據和實時數據處理場景。本文將介紹如何在Spring Boot項目中集成Kafka&#xff0c;…

Linux PXE批量裝機+無人值守技術(自動化裝機)

目錄 PXE所需條件 服務端所需服務 客戶端所需功能 1.準備系統安裝rpm倉庫 (1)安裝vsftpd服務 (2)啟動并設置開機自啟 (3)準備yum倉庫文件 2.安裝配置dhcpd服務 (1)安裝dhcoo軟件包 (2)配置dhcp服務 (3)啟動并設置開機自啟 3.部署TFTP服務 (1)安裝軟…

linux_cmake的筆記

include_directories()的使用 今天在運行一個cmakelist.txt如下所示時候&#xff0c;發現一個問題&#xff1a; cmake_minimum_required(VERSION 3.28) project(l_trajectoryError CXX) option(USE_UBUNTU_20 "Set to ON if you are using Ubuntu 20.04" OFF) find…

論文略讀:If Multi-Agent Debate is the Answer, What is the Question?

202502 arxiv 1 intro 多智能體辯論&#xff08;Multi-Agent Debate, MAD&#xff09;&#xff1a;通過讓多個智能體在大模型推理時展開多輪辯論&#xff0c;可提升生成內容的事實準確性和推理質量 但論文認為&#xff0c;目前多智能體辯論在大多數情況下不敵簡單的單智能體方…

使用RUST在Arduino上進行編程(MacOS,mega板)

近年來&#xff0c;RUST成為了嵌入式編程的熱門語言&#xff0c;本文通過實現&#xff08;1&#xff09;LED閃燈&#xff0c;以及&#xff08;2&#xff09;在console&#xff08;終端&#xff09;實現“Hello Rust World”兩項功能來完成實操的入門。 深入學習可以參考RUST語言…

(15)關于窗體的右鍵菜單的學習與使用,這關系到了信號與事件 event

&#xff08;1&#xff09;起因來源于 4.11 的老師講的例題&#xff0c;標準的&#xff0c;規范的使用右鍵菜單的代碼及參考資料如下&#xff1a; &#xff08;2&#xff09; 接著脫離上面的那個復雜的環境&#xff0c;用簡單的例子測試一下 &#xff1a; 說明老師講的都是對…

C 語言學習筆記(指針4)

內容提要 指針 函數指針與指針函數二級指針 指針 函數指針與指針函數 函數指針 定義 函數指針本質上是指針&#xff0c;是一個指向函數的指針。函數都有一個入口地址&#xff0c;所謂指向函數的指針&#xff0c;就是指向函數的入口地址。&#xff08;這里的函數名就代表…

C#串口打印機:控制類開發與實戰

C#串口打印機&#xff1a;控制類開發與實戰 一、引言 在嵌入式設備、POS 終端、工業控制等場景中&#xff0c;串口打印機因其穩定的通信性能和廣泛的兼容性&#xff0c;仍是重要的數據輸出設備。本文基于 C# 語言&#xff0c;深度解析一個完整的串口打印機控制類Printer&…

通過vue-pdf和print-js實現PDF和圖片在線預覽

npm install vue-pdf npm install print-js <template><div><!-- PDF 預覽模態框 --><a-modal:visible"showDialog":footer"null"cancel"handleCancel":width"800":maskClosable"true":keyboard"…

SQL解析工具JSQLParser

目錄 一、引言二、JSQLParser常見類2.1 Class Diagram2.2 Statement2.3 Expression2.4 Select2.5 Update2.6 Delete2.7 Insert2.8 PlainSelect2.9 SetOperationList2.10 ParenthesedSelect2.11 FromItem2.12 Table2.13 ParenthesedFromItem2.14 SelectItem2.15 BinaryExpressio…

安裝完dockers后就無法聯網了,執行sudo nmcli con up Company-WiFi,一直在加載中

Docker服務狀態檢查 執行 systemctl status docker 確認服務是否正常 若未運行&#xff0c;使用 sudo systemctl start docker && sudo systemctl enable docker 網絡配置沖突 Docker會創建docker0虛擬網橋&#xff0c;可能與宿主機網絡沖突 檢查路由表 ip route sho…

Docker 運維管理

Docker 運維管理 一、Swarm集群管理1.1 Swarm的核心概念1.1.1 集群1.1.2 節點1.1.3 服務和任務1.1.4 負載均衡 1.2 Swarm安裝準備工作創建集群添加工作節點到集群發布服務到集群擴展一個或多個服務從集群中刪除服務ssh免密登錄 二、Docker Compose與 Swarm 一起使用 Compose 三…

軟媒魔方——一款集合多種系統輔助組件的軟件

停更4年&#xff0c;但依舊吊炸天&#xff01; 親們&#xff0c;是不是覺得電腦用久了就像老牛拉車&#xff0c;慢得讓人著急&#xff1f;別急&#xff0c;我今天要給大家安利一個超好用的電腦優化神器——軟媒魔方&#xff01; 軟件介紹 首先&#xff0c;這貨真心是免費的&a…

upload-labs通關筆記-第19關文件上傳之條件競爭

目錄 一、條件競爭 二、源碼分析 1、源碼分析 2、攻擊原理 3、滲透思路 三、實戰滲透 1、構造腳本 2、制作圖片馬 3、獲取上傳腳本URL 4、構造訪問母狼腳本的Python代碼 5、bp不斷并發上傳母狼圖片馬 &#xff08;1&#xff09;開啟專業版bp &#xff08;2&#xf…

分布式消息隊列kafka詳解

分布式消息隊列kafka詳解 引言 Apache Kafka是一個開源的分布式事件流平臺&#xff0c;最初由LinkedIn開發&#xff0c;現已成為處理高吞吐量、實時數據流的行業標準。Kafka不僅僅是一個消息隊列&#xff0c;更是一個完整的分布式流處理平臺&#xff0c;能夠發布、訂閱、存儲…

uni-app(3):互相引用

1 絕對路徑和相對路徑 在日常開發中&#xff0c;經常會遇到使用絕對路徑還是相對路徑的問題&#xff0c;下面我們介紹下這兩種路徑。 1.1 絕對路徑 絕對路徑&#xff1a;是指從項目根目錄開始的完整路徑。它用于指定文件或目錄的確切位置。絕對路徑通常以斜杠&#xff08;/&am…

python與flask框架

一、理論 Flask是一個輕量級的web框架&#xff0c;靈活易用。提供構建web應用所需的核心工具。 Flask依賴python的兩個庫 Werkzeug&#xff1a;flask的底層庫&#xff0c;提供了WSGI接口、HTTP請求和響應處理、路由等核心功能。 Jinja2&#xff1a;模板引擎&#xff0…

esp32-idf框架學習筆記/教程

esp32型號: 環境搭建 安裝:就按這個來,別的試了好多次都不行,這個一次成功!!!! vscode下ESP32開發環境配置&#xff08;100%成功&#xff09;_嗶哩嗶哩_bilibili esp芯片的兩種模式: ESP32 固件燒錄教程_嗶哩嗶哩_bilibili 1.運行模式 2.下載模式 esp32s3程序下載 1.數據…

VKontakte(VK)注冊教程

VKontakte&#xff08;簡稱VK&#xff09;是俄羅斯最大的社交網絡平臺&#xff0c;類似于Facebook&#xff0c;用戶可以通過它進行社交、分享圖片、視頻、音樂等內容&#xff0c;并參與各類社群討論&#xff0c;是與俄羅斯及其他東歐地區的朋友建立聯系的便捷平臺。對于做俄羅斯…

STM32+ESP8266+ONENET+微信小程序上傳數據下發指令避坑指南

之前只做過類似的但是以為這種爛大街的功能應該不難結果還是踩了不少坑&#xff0c;記錄幾個需要注意的點 首先貼一個非常有用的視頻&#xff0c;里面講的很詳細&#xff0c;給的資料也很全【【新版OneNet云平臺】STM32ESP8266上傳數據&#xff0c;簡單易上手&#xff01;】 h…