GStreamer開發筆記(九):gst-rtcp-server安裝和部署實現簡單的rtsp-server服務器推流Demo

若該文為原創文章,轉載請注明原文出處
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/149054288

長沙紅胖子Qt(長沙創微智科)博文大全:開發技術集合(包含Qt實用技術、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機、軟硬結合等等)持續更新中…

FFmpeg、SDL和流媒體開發專欄


上一篇:《GStreamer開發筆記(八):gstreamer代碼打開usb攝像頭》
下一篇:敬請期待…


前言

??Gstreamer還有一個重要的功能就是充當rtsp流媒體服務器。


注意

??本ubuntu是虛擬機,對延遲可能影響較大,延遲可作為參考,物理機可能更快。


Demo

??在這里插入圖片描述


RTP和RTSP支持

??GStreamer對RTP和RTSP都有很好的支持,其RTP/RTSP棧多年來已被廣泛應用于各種關鍵任務和低延遲場景的生產中,從小型嵌入式設備到大型視頻會議和指揮控制系統。

安裝gst和gst-rtsp-server

安裝gstreamer1.0環境

sudo apt-get update
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
sudo apt-get install libglib2.0-0

查看本地gst版本

??在這里插入圖片描述

下載對應版本GStreamer-rtsp-server

??下載地址:https://gstreamer.freedesktop.org/src/gst-rtsp-server/
??在這里插入圖片描述


Ubuntu編譯gstreamer-rtsp-server

步驟一:下載解壓

cd ~/work/src
tar xvf gst-rtsp-server-1.16.3.tar.xz

??在這里插入圖片描述

步驟二:配置

cd gst-rtsp-server-1.16.3/
./autogen.sh

??在這里插入圖片描述

步驟三:出現配置錯誤“gtk-doc >= 1…12”

??在這里插入圖片描述

sudo apt-get install gtk-doc-tools

??繼續:

./autogen.sh

??完成:
??在這里插入圖片描述

步驟四:編譯

make -j4
make

??在這里插入圖片描述

??在這里插入圖片描述

步驟五:安裝部署

sudo make install

??在這里插入圖片描述

??在這里插入圖片描述

步驟六:測試gst-rtsp-server

./test-launch "( v4l2src device=/dev/video0 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! mpph264enc ! rtph264pay name=pay0 pt=96 )"

??在這里插入圖片描述

./test-launch “( videotestsrc ! video/x-raw,width=640,height=480,framerate=30/1 ! timeoverlay ! tee name=vsrc vsrc. ! queue ! videoconvert ! ximagesink vsrc. ! queue ! x264enc tune=zerolatency ! rtph264pay name=pay0 pt=96 )

??在這里插入圖片描述

??在這里插入圖片描述

??關掉防火墻重啟,再次連接:
??在這里插入圖片描述

??檢查攝像頭支持的格式:
??在這里插入圖片描述

??推送測試視頻流:

./test-launch "( videotestsrc ! x264enc ! rtph264pay name=pay0 pt=96 )"  

??在這里插入圖片描述

??繼續測試攝像頭,增加調試宏:
??在這里插入圖片描述

??在這里插入圖片描述

??整理如下:
??在這里插入圖片描述

??將:

./test-launch "( v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480,framerate=30/1 ! queue ! x264enc ! rtph264pay name=pay0 pt=96 )"

??改為:

./test-launch "(  v4l2src device=/dev/video0 ! video/x-raw, format='YUY2', width=640, height=480, framerate=30/1  ! queue ! x264enc ! rtph264pay name=pay0 pt=96 )"

??繼續,報錯:
??在這里插入圖片描述

??修改:

GST_DEBUG=1 ./test-launch "( v4l2src device=/dev/video0 ! video/x-raw, format=YUY2, width=640, height=480, framerate=30/1  ! queue ! x264enc ! rtph264pay name=pay0 pt=96 )"

??繼續:
??在這里插入圖片描述

??修改:

./test-launch "( v4l2src device=/dev/video0 ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! queue ! videoconvert ! x264enc ! rtph264pay name=pay0 pt=96 )"

??繼續,播放了,延遲4-5s左右:
??在這里插入圖片描述

??優化參數:

./test-launch "( v4l2src device=/dev/video0 ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! queue ! videoconvert ! x264enc tune=zerolatency speed-preset=ultrafast ! rtph264pay name=pay0 pt=96 )"

??繼續,延遲還有1.4s左右:
??在這里插入圖片描述

??繼續優化:

./test-launch "( v4l2src device=/dev/video0 ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! queue max-size-buffers=1 max-size-bytes=0 max-size-time=0 ! videoconvert ! x264enc tune=zerolatency speed-preset=ultrafast ! rtph264pay name=pay0 pt=96 )"

??還是1.4s左右:
??在這里插入圖片描述

步驟七:使用image/jepg格式

./test-launch "( v4l2src device=/dev/video0 ! image/jpeg,width=640,height=480,framerate=30/1 ! queue max-size-buffers=1 max-size-bytes=0 max-size-time=0 ! videoconvert ! x264enc tune=zerolatency speed-preset=ultrafast ! rtph264pay name=pay0 pt=96 )"

??在這里插入圖片描述

??修改為:

GST_DEBUG=1 ./test-launch "( v4l2src device=/dev/video0 ! image/jpeg,width=640,height=480,framerate=30/1 ! queue max-size-buffers=1 max-size-bytes=0 max-size-time=0 ! jpegdec ! videoconvert ! x264enc tune=zerolatency speed-preset=ultrafast ! rtph264pay name=pay0 pt=96 )"

??在這里插入圖片描述


與live555直接在getNextFramed對比

??在這里插入圖片描述

?? 在這里插入圖片描述

??此方法需要2秒多,且用的是mpeg。


上一篇:《GStreamer開發筆記(八):gstreamer代碼打開usb攝像頭》
下一篇:敬請期待…


本文章博客地址:https://blog.csdn.net/qq21497936/article/details/149054288

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

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

相關文章

C++ namespace機制以及同時使用多個namespace可能存在的問題

在一個 .cpp 文件中使用了多個 using namespace 會怎么樣? 核心答案是:可能會導致“命名沖突(Name Collision)”和“二義性(Ambiguity)”,從而引發編譯錯誤。 當你使用 using namespace SomeNam…

基于R語言的分位數回歸技術應用

回歸是科研中最常見的統計學研究方法之一,在研究變量間關系方面有著極其廣泛的應用。由于其基本假設的限制,包括線性回歸及廣義線性回歸在內的各種常見的回歸方法都有三個重大缺陷:(1)對于異常值非常敏感,極少量的異常值可能導致結…

網絡I/O模型詳解-一次了解全部(面試經常會問到相關知識)

前言 網絡I/O模型的五種類型,其實在我們開發程序、設計程序、實現程序的方方面面都一直存在著,本文從實現原理、使用場景、優缺點、詳細的流程圖等方面進行深入的解釋,幫助大家更好的理解常用的五種網絡io模型,助力大家在工作、面…

面試150 合并K個升序鏈表

思路 對鏈表元素進行獲取,然后進行sort()排序,最后通過空節點建立鏈表法重新建立一個有序的鏈表,返回頭節點即可。 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val …

BitDistiller:通過自蒸餾釋放 Sub-4-Bit 大語言模型的潛力

溫馨提示: 本篇文章已同步至"AI專題精講" BitDistiller:通過自蒸餾釋放 Sub-4-Bit 大語言模型的潛力 摘要 大語言模型(LLMs)的規模不斷擴大,在自然語言處理方面取得了令人矚目的進展,但這也帶來…

JavaScript 的 `querySelector` 方法詳解

querySelector 是 JavaScript 中用于選擇 DOM 元素的最強大方法之一,它允許你使用 CSS 選擇器語法來查找元素。 基本語法 // 返回文檔中第一個匹配指定 CSS 選擇器的元素 element document.querySelector(selectors);// 從指定元素后代中查找 element parentEle…

第九講:C++中的list與forward_list

目錄 1、list的介紹及使用 1.1、構造及賦值重載 1.2、迭代器 1.3、空間 1.4、訪問 1.5、修改 1.6、操作 2、迭代器失效 3、list的模擬實現 4、forward_list介紹與使用 4.1、構造及賦值重載 4.2、迭代器 4.3、容量 4.4、訪問 4.5、修改 4.6、操作 5、迭代器的分…

華為云數據庫 GaussDB的 nvarchar2隱式類型轉換的坑

bigint 與 nvarchar2比較時發生隱式類型轉換的坑 1. 案例分析 假設: table1有下面兩個字段:id:bigint, source_id nvarchar2(50)數據庫中id 的值一定大于 int4 的最大值,例如存在一條單據: id1947854462980792321&…

spring boot 集成netty,及其一些基本概念

一、基本概念 1、channel:通道,入站或者出站數據的載體 2、ChannelHandler:通道處理器,業務邏輯寫在這里面,netty 5版本將入戰和出站合并成了ChannelHandler 3、ChannelPipeline:通道里的管道,是一個或者多…

7月23日華為機考真題第一題100分

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? bishipass.com 01. 創業投資收益優化 問題描述 K小姐剛剛大學畢業,手頭有 m m m 元資金想要進行創業投資。她發現了 k k

HTML5 跨文檔通信機制:postMessage API 詳解與應用

postMessage 是 HTML5 規范中定義的跨文檔通信(Cross-Document Messaging)API,其設計目的是解決不同源(協議、域名、端口任一存在差異)的窗口(如 iframe 嵌入的文檔、window.open 創建的新窗口)…

Kafka——Kafka中的位移提交

引言:為什么位移提交至關重要?在Kafka的分布式消息系統中,消費者組(Consumer Group)通過分區分配機制實現負載均衡和容錯,但如何準確記錄每個消費者的消費進度,是保證消息不丟失、不重復的關鍵。…

java設計模式 -【裝飾器模式】

裝飾器模式的定義 裝飾器模式(Decorator Pattern)是一種結構型設計模式,允許向一個現有對象動態添加新功能,同時不改變其結構。它通過創建包裝對象(裝飾器)來包裹原始對象,并在保持原始對象方法…

手寫字體生成器:一鍵模擬真實筆跡

軟件介紹 在自媒體創作領域,手寫體文案因其獨特的藝術感而備受青睞。然而,真實的手寫往往效率低下且效果難以保證。今天為大家推薦一款專業的手寫模擬軟件,能夠一鍵生成逼真的手寫字體效果,完美解決創作效率與質量的雙重需求。…

【Android】用 ViewPager2 + Fragment + TabLayout 實現標簽頁切換

文章目錄【Android】用 ViewPager2 Fragment TabLayout 實現標簽頁切換一、引入:什么是 ViewPager2 ?二、ViewPager2 的基礎使用1. 在布局文件 (activity_main.xml)中添加 ViewPager22. 制作一個 Fragment2.1 創建一個布局文件2.2 創建一個 Fragment 類…

嵌入式學習-土堆目標檢測(4)-day28

Pytorch中加載自定義數據集 - VOC其中需要pip install xmltodict#voc_dataset.pyimport os import torch import xmltodict from PIL import Image from torch.utils.data import Dataset import torchvision.transforms as transformsclass VOCDataset(Dataset): def __init_…

Spring MVC上下文容器在Web容器中是如何啟動的(源碼深入剖析)?

文章目錄一、雙容器架構:MVC容器與根容器的關系二、啟動全流程解析1. 啟動流程全景圖2. 初始化根容器(Root WebApplicationContext)2.1 Tomcat 中啟動入口源碼解析2.2 Spring 根上下文啟動源碼解析3. 初始化 MVC 容器(DispatcherS…

【iOS】編譯和鏈接、動靜態庫及dyld的簡單學習

文章目錄編譯和鏈接1??核心結論:一句話區分2??編譯過程:從源代碼到目標文件(.o)2.1 預處理(Preprocessing):“替換變量復制粘貼”2.2 編譯(Compilation):…

金山辦公WPS項目產品總監陳智新受邀為第十四屆中國PMO大會演講嘉賓

全國PMO專業人士年度盛會珠海金山辦公軟件有限公司WPS項目產品總監 陳智新先生 受邀為“PMO評論”主辦的2025第十四屆中國PMO大會演講嘉賓,演講議題為:中小團隊PMO的成長之路,敬請關注!議題簡要:在競爭激烈、需求多變的…

web安全 | docker復雜環境下的內網打點

本文作者:Track-syst1m一.前言本文涉及的相關漏洞均已修復、本文中技術和方法僅用于教育目的;文中討論的所有案例和技術均旨在幫助讀者更好地理解相關安全問題,并采取適當的防護措施來保護自身系統免受攻擊。二.大概流程1. 外網打點? 漏洞利…