WebRTC 源碼原生端Demo入門-1

1、概述

我的代碼是比較新的,基于webrtc源碼倉庫的main分支的,在windows下把源碼倉庫下載好了后,用visual stdio 2022打開進行編譯調試src/examples/peerconnection_client測試項目,主要是跑通這個demo來入手和調試,純看代碼很難理解,只有編看代碼編調試,然后遇到不懂的網上搜索,逐個技術點擊破,希望通過這樣的學習來了解WebRTC

圖1-1 webrtc倉庫源碼分支信息

2、peerconnection_client例子

2.1 簡介

peerconnection_client是原生端的測試例子,但是麻雀雖小,五臟俱全,從信令服務器通信到雙向的音視頻通話,什么都有,從這個例子進行學習分析webrtc源碼是最好的選擇,我們主要從client入手

圖2.1-1 peerconnection_client代碼圖

2.2 如何運行demo

直接運行會報錯,通信不了,需要對demo做一些修改

2.2.1 添加socket類

class CustomSocketServer : public rtc::PhysicalSocketServer {public:bool Wait(webrtc::TimeDelta max_wait_duration, bool process_io) override {if (!process_io)return true;return rtc::PhysicalSocketServer::Wait(webrtc::TimeDelta::Zero(),+process_io);}};

備注:在main.cc函數前面添加即可

圖2.2.1-1 添加CustomSocketServer類的位置圖

2.2.2 修改wWinMain函數

把webrtc::PhysicalSocketServer ss;注釋掉,替換為上面2.2.1新的類CustomSocketServer

圖2.2.2-1 替換socket通信代碼位置圖

2.2.3 添加main_thread.Start()

在? // Main loop 注釋前面添加

2.2.3-1 線程啟動代碼位置圖

2.2.4 修改webrtc服務器的地址(媒體服務器)

采用的是coturn作為webrtc的服務器,具體的coturn是怎么搭建的,可以看我的博客WebRTC服務器Coturn服務器部署和相關系列文檔

圖2.2.4-1 配置webrtc服務器圖

采用的是coturn服務器,STUN和TURN服務器都是在同一臺,所以配置格式如下

stun:ip:port

turn:ip:port?transport:udp

2.2.5?編譯運行結果

運行起來就得到下圖這個結果了,這個127.0.0.1是我自己改的,默認是localhost,我本機調試發現localhost連接不上,所以我改為了127.0.0.1

圖2.2.5-1 修改localhost為127.0.0.1圖

windows下編譯運行peerconnection_client如下結果

圖2.2.5-2 編譯運行demo圖

2.2.6?運行peerconnection_server.exe

peerconnection_server.exe是webrtc源碼提供的信令服務器,我們offer,answer,candidate這些信令的交互就是通過這個peerconnectoin_server來透傳的了

我們在本地再運行一個peerconnecton_client.exe來進行通信,下圖中間是peerconnection_server.exe運行起來的樣子

圖2.2.6-1 兩兩通話和信令服務器運行圖

兩兩通話的結果如下

圖2.2.6-2 通過實際視頻數據傳輸渲染結果圖

備注:我本地是windows臺式機的,沒有攝像,所以我下載了個vcam虛擬攝像頭來測試

3、peerconnection_client的代碼簡單介紹

圖3-1 client代碼組成圖

圖3-2 各個類之間的關系UML

conductor類: 整個demo邏輯的大腦核心,負責創建peerconnection,注冊回調函數到peerconnection,從回調函數得到offer、answer、candidate等信息后續的處理,還協調窗口的顯示和信令的發送處理,從UML類圖也可以發現,MainWnd和PeerConnectionClient是它的成員,協調這個兩個類進行邏輯處理

main_wnd類:主要是界面的顯示和界面的切換邏輯的處理,主要的技術點有windows窗口和消息機制,視頻數據的渲染,采用BitBlt原生windows API進行圖像數據的渲染

peer_connection_client類:主要就是與信令服務器進行交互,發送信令offer、answer、candidate等信令消息,并處理接收信令消息,然后通過callback回調數據給Conductor類進行具體的邏輯處理。

4、結論說明

這個demo是比較重要的,作為分析源碼的開始,這是個很好的入門例子,很多技術點都是可以從這個demo開始,然后邊調試邊分析總結,WebRTC的源碼很龐大,涉及到的知識點很多,需要一步步慢慢地進行學習分析。

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

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

相關文章

【LeetCode】刪除排序數組中的重復項 II

題目 鏈接 思路 雙指針 我好聰明啊,自己想出了這個雙指針的辦法,哈哈哈哈哈哈哈,太高興了 代碼 class Solution(object):def removeDuplicates(self, nums):""":type nums: List[int]:rtype: int"""nlen…

通義千問席卷日本!開源界“卷王”阿里通義千問成為日本AI發展新基石

據日本經濟新聞(NIKKEI)報道,通義千問已成為日本AI開發的新基礎,其影響力正逐步擴大,深刻改變著日本AI產業的格局。 同時,日本經濟新聞將通義千問Qwen2.5-Max列為全球AI模型綜合評測第六名,不僅…

第J7周:對于ResNeXt-50算法的思考

目錄 思考 一、代碼功能分析 1. 構建 shortcut 分支(殘差連接的旁路) 2. 主路徑的第一層卷積(11) 4. 主路徑的第三層卷積(11) 5. 殘差連接 激活函數 二、問題分析總結:殘差結構中通道數不一致的…

如何解決Jmeter中的亂碼問題?

在 JMeter 中遇到亂碼問題通常是由于字符編碼不一致導致的,常見于 HTTP 請求響應、參數化文件讀取、報告生成等場景。以下是系統化的解決方案: 1. HTTP 請求響應亂碼 原因: 服務器返回的字符編碼(如UTF-8、GBK)與 J…

# YOLOv2:目標檢測的升級之作

YOLOv2:目標檢測的升級之作 在目標檢測領域,YOLO(You Only Look Once)系列算法以其高效的速度和創新的檢測方式受到了廣泛關注。今天,我們就來深入探討一下 YOLOv2,看看它是如何在繼承 YOLOv1 的基礎上進行…

小白入!WiFi 技術大解析

WiFi,全稱Wireless Fidelity,是一種無線局域網技術,允許電子設備通過無線電波連接到互聯網。以下是對WiFi的一些介紹: 一、基本概述 定義:WiFi是一種基于IEEE 802.11標準系列的無線局域網技術,使設備能夠…

【prometheus+Grafana篇】基于Prometheus+Grafana實現windows操作系統的監控與可視化

💫《博主主頁》: 🔎 CSDN主頁 🔎 IF Club社區主頁 🔥《擅長領域》:擅長阿里云AnalyticDB for MySQL(分布式數據倉庫)、Oracle、MySQL、Linux、prometheus監控;并對SQLserver、NoSQL(MongoDB)有了…

推薦一個感覺非常好的文章,是知識圖譜的

為了省瀏覽的事兒,以后打算寫文章都短一些,這樣不用被強制登錄、關注了 正文 鏈接是 https://blog.csdn.net/Appleyk/article/details/80422055 放個截圖 推薦理由 兩個,第一內容確實硬核。第二算是緣分吧,我之前公司好像&am…

《企業級前端部署方案:Jenkins+MinIO+SSH+Gitee+Jenkinsfile自動化實踐》

文章目錄 前言前端項目CICD時序圖一、環境準備1、服務器相關2、Jenkins憑據3、注意事項 二、設計思想1. 模塊化設計2.多環境支持3. 制品管理4. 安全部署機制5. 回滾機制 三、CI階段1、構建節點選擇2、代碼拉取3、代碼編譯4、打包并上傳至minio 四、CD階段五、回滾階段六、構建通…

Go語言超時控制方案全解析:基于goroutine的優雅實現

一、引言 在構建高可靠的后端服務時,超時控制就像是守護系統穩定性的"安全閥",它確保當某些操作無法在預期時間內完成時,系統能夠及時止損并釋放資源。想象一下,如果沒有超時控制,一個簡單的數據庫查詢卡住…

WTK6900C-48L:離線語音芯片重構玩具DNA,從“按鍵操控”到“聲控陪伴”的交互躍遷

一:開發背景 隨著消費升級和AI技術進步,傳統玩具的機械式互動已難以滿足市場需求。語音控制芯片的引入使玩具實現了從被動玩耍到智能交互的跨越式發展。通過集成高性價比的語音識別芯片,現代智能玩具不僅能精準響應兒童指令,還能實…

WebSocket的原理及QT示例

一.WebSocket 介紹 1.概述 WebSocket 是一種在單個 TCP 連接上進行全雙工通訊的協議,它在 2011 年被 IETF 定為標準 RFC 6455,并由 RFC7936 補充規范。與傳統的 HTTP 協議不同,WebSocket 允許服務器和客戶端之間進行實時、雙向的數據傳輸&a…

設置GO程序在離線情況下讀取本地緩存的模塊

在 Go 中,GOPROXY 環境變量用于指定模塊代理服務器的地址。如果你想讓 GOPROXY 讀取本地的模塊,可以通過以下幾種方式實現: 1. 使用本地代理服務器 你可以搭建一個本地的 Go 模塊代理服務器,將需要的模塊代碼推送到代理服務器中…

live555開發筆記(三):live555創建RTSP服務器源碼剖析,創建h264文件rtsp服務器源碼深度剖析

若該文為原創文章,轉載請注明原文出處 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/147879917 長沙紅胖子Qt(長沙創微智科)博文大全:開發技術集合(包含Qt實用技術、樹莓派、三維、OpenCV…

STM32-模電

目錄 一、MOS管 二、二極管 三、IGBT 四、運算放大器 五、推挽、開漏、上拉電阻 一、MOS管 1. MOS簡介 這里以nmos管為例,注意箭頭方向。G門極/柵極,D漏極,S源極。 當給G通高電平時,燈泡點亮,給G通低電平時&a…

基于定制開發開源AI智能名片S2B2C商城小程序的公私域流量融合運營策略研究

摘要:本文以定制開發開源AI智能名片S2B2C商城小程序為技術載體,系統探討公域流量向私域流量沉淀的數字化路徑。研究通過分析平臺流量(公域流量)與私域流量的共生關系,提出"公域引流-私域沉淀-數據反哺"的閉環…

mysql中索引的使用

前言 最近一直在學習mysql以及忙學校課程的事情。已經好久沒寫過博客了,今天跟大家分享一下在mysql中關于索引的知識,希望可以幫助到大家。 索引的定義 mysql中的索引是一種數據結構,它可以幫助數據庫高效地查詢,更新數據表中的…

深度拆解!MES如何重構生產計劃與排產調度全流程?

?引言 在制造業數字化轉型浪潮中,生產計劃與排產調度的精準性直接決定企業競爭力。深藍易網MES系統通過智能化調度與全流程管控,幫助企業破解排產難題,實現資源高效協同與生產透明化管理,為制造企業打造柔性化、敏捷化的生產體系…

【深度學習】計算機視覺(18)——從應用到設計

文章目錄 1 不同的注意力機制1.1 自注意力1.2 多頭注意力1.3 交叉注意力1.3.1 基礎1.3.2 進階 1 不同的注意力機制 在學習的過程中,發現有很多計算注意力的方法,例如行/列注意力、交叉注意力等,如果對注意力機制本身不是特別實現&#xff0c…

洛谷 P1955 [NOI2015] 程序自動分析

【題目鏈接】 洛谷 P1955 [NOI2015] 程序自動分析 【題目考點】 1. 并查集 2. 離散化 【解題思路】 多組數據問題,對于每組數據,有多個 x i x j x_ix_j xi?xj?或 x i ≠ x j x_i \neq x_j xi?xj?的約束條件。 所有相等的變量構成一個集合&…