【音視頻】WebRTC C++ native 編譯

一、搭建環境

我們這里介紹在Windows10+VS2019的環境下編譯WebRTC源碼,由于WebRTC源碼在外網上,需要科學的方式下載,不然下載特別慢,建議直接找國內下載好的源碼,這里的源碼是2021年的版本:https://pan.baidu.com/s/1oHVz9bxXlW3Q6uO996c5XA#list/path=%2F,提取碼:ojbs

1.1 安裝VS2019

VS2019的安裝比較簡單,可執行安裝,注意的是安裝之后需要在VS Installer中下載Windows 10.0.19041版本的SDK,并且下載支持使用C ++進行桌面開發”組件和“ MFC / ATL支持”子組件,因為部分示例需要使用的Win32MFC

還需要下載SDK的調試工具:

  • 如果通過VS Installer 下載的SDK,可以在控制面板→程序→程序和功能→選擇“ Windows軟件開發工具包”→更改→更改→選中“Windows調試工具” ”→更改。或者,您可以下載獨立的SDK安裝程序,并使用它來安裝調試工具。

在這里插入圖片描述

在這里插入圖片描述

1.2 安裝python3

安裝需要先卸載之前的老版本,并安裝3.8以上的版本,主要是python3要求源碼必須下載c盤,下載地址:https://www.python.org/ftp/python/3.8.5/python-3.8.5.exe

1.3 安裝 depot_tools

depot_tools是個工具包,里面包含gclient、gcl、gn和ninja等工具,這些根據都是使用python寫的。其主要的功能是對git的增強,讓代碼管理和編譯更加簡單,要學這個的前提是要會使用git,下載地址:https://storage.googleapis.com/chrome-infra/depot_tools.zip

配置環境變量,這里需要注意,這個位置必須在python和以及git之前

在這里插入圖片描述

1.4 用gn生成工程和用ninjia編譯工程

下載好的webrtc源碼,我們進入到webrtc\win\webrtc\webrtc\webrtc-checkout\src目錄下,命令行在這個路徑下輸入:

取消更新檢查:

set DEPOT_TOOLS_WIN_TOOLCHAIN=0

然后生成解決方案:

gn gen out/X64Debug --winsdk="10.0.19041.0" --ide="vs2019" --args="ffmpeg_branding=\"Chrome\" rtc_use_h264 = true proprietary_codecs=true is_debug=true target_cpu=\"x64\" is_component_build=false use_custom_libcxx = false enable_iterator_debugging=true rtc_enable_protobuf=false"

如果上述環境配置的沒問題,那么等待一會顯示生成成功:

在這里插入圖片描述

1.5 編譯ninja工程

在生成好的目錄下我們編譯工程,把生成的輸出文件放到當前路徑下的out/X64Debug中:

ninja -C out/X64Debug

在這期間可能會遇到以下問題:

在這里插入圖片描述

這段報錯告訴我們這個宏ATOMIC_VAR_INIT(-1)識別不了,解決方法就是進入到報錯的文件:../../third_party/ffmpeg/libavutil/cpu.c中,將報錯的地方改為下述代碼:

static atomic_int cpu_flags = -1;

改完后,等待一會,應該就可以成功了

二、測試

編譯好的可執行文件在:src/out/x64Debug路徑下:
在這里插入圖片描述

先啟動服務器:

在這里插入圖片描述

然后啟動兩個客戶端:

在這里插入圖片描述

第二個客戶端啟動時,點擊連接列表:

在這里插入圖片描述

如果此時直接閃退,進入到src/modules/video_capture/windows/sink_filter_ds.cc文件,找到RTC_DCHECK_FUN_ON(&capture_checkr_),注釋這一行:

在這里插入圖片描述

進入到src/out/X64Debug中,找到all.sln,使用VS2019打開,找到peerconnection_clent項目,然后右鍵設置為啟動項,重寫編譯生成可執行文件

在這里插入圖片描述

按照上述步驟重新啟動服務器和客戶端,沒什么問題的話就能有畫面了:

在這里插入圖片描述

更多資料:https://github.com/0voice

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

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

相關文章

Selenium在Pyhton應用

目錄 1. selenium的基本原理 2. selenium環境的搭建步驟 3. 元素的定位和操作 4.元素的基本屬性方法 5.瀏覽器的操作方法 6.三種等待 強制等待 顯示等待 隱式等待 7. 鍵盤與鼠標的操作 鼠標懸停用 拖拽操作 8. 下拉框元素定位 9.頁面滾動操作 10. 頁面截圖操作 S…

【Docker】Redis基礎命令在Docker中的使用

文章目錄一 Redis 容器化部署指南1 獲取 Redis 鏡像2 服務啟動2.1 首次啟動新容器2.2 重啟已有容器3 服務驗證4 連接 Redis5 數據持久化方案5.1 使用 Docker 卷5.2 啟用 AOF 持久化6 容器管理6.1 停止容器6.2 刪除容器7 數據清理7.1 清空 Redis 數據7.2 完全移除7.3 刪除數據卷…

ubuntu 2024 安裝拼音輸入法

1. 卸載ibussudo apt remove ibus2. install fcitx5核心組件sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-material-color3. 安裝中文語言支持sudo apt install language-pack-zh-hans4. 設置默認輸入法im-config -n fcitx55. 配置環境變量sudo vim ~/.bashrc粘貼&am…

語言模型的多個agent

是的,語言模型 在某些情況下確實可以通過多個 agent(代理)來共同協作完成任務。這種設計通常用于復雜任務或需要多步驟處理的場景,具體的流程如下: 1. 什么是 Agent? Agent(代理) 是…

CSS--:root指定變量,其他元素引用

原文網址:CSS--:root指定變量,其他元素引用-CSDN博客 簡介 本文介紹CSS中使用變量的方法。 場景描述 CSS可以使用變量,比如:指定整個網頁的主體顏色作為變量,其他的元素去使用這個顏色。這樣在修改顏色時&#xff…

秋招筆記-8.7

今天先來補充一下關于Unity和UE的一些問題,后續開始深挖項目:Unity關于fixed update和update:同一幀中物理更新優先執行?關于協程:協程是基于迭代器實現的,而迭代器是基于狀態機實現的。協程的本質是編譯器…

DAY 26 函數專題1:函數定義與參數

浙大疏錦行知識點回顧: 函數的定義變量作用域:局部變量和全局變量函數的參數類型:位置參數、默認參數、不定參數傳遞參數的手段:關鍵詞參數傳遞參數的順序:同時出現三種參數類型時 作業 #作業1 import math def calcul…

跨學科視域下的深層語義分析與人類底層邏輯一致性探索

摘要本文章旨在系統性地探討一個前沿的交叉學科研究課題:如何通過深層語義分析,探索并建模人類認知中普遍存在的底層邏輯一致性。此研究橫跨自然語言處理(NLP)、知識圖譜(KG)、認知科學、腦神經科學、系統科…

Flink CDC如何保障數據的一致性?

Flink CDC 通過 Checkpoint 機制、冪等性設計 和 事務一致性協議 保障數據同步的一致性。以下是具體實現方式和關鍵配置:1. Checkpoint 機制(核心保障)作用:定期保存同步狀態(包括 Binlog 位置和全量快照進度&#xff…

上傳文件至華為云OBS

1 創建華為云Bucket1.1 創建Bucket1.2 獲取Bucket的Endpoint1.3 獲取訪問憑證注:每個訪問密鑰僅能下載一次,為了賬號安全性,建議您定期更換并妥善保存訪問密鑰。不再使用的訪問密鑰,建議停用和刪除。2 創建Sprint Boot工程創建一個…

使用驅動移除內核回調,

https://br-sn.github.io/Removing-Kernel-Callbacks-Using-Signed-Drivers/ 原創 大藍 RJ45實驗室 使用簽名驅動移除內核回調-安全KER - 安全資訊平臺 介紹 創建該PoC的目的是了解驅動漏洞利用程序的強大功能,以及EDR如何使用內核回調以防止惡意軟件的攻擊。…

從零搭建Cloud Alibaba (下) Sentinel篇

1.Sentinel控制臺的安裝 下載地址: Releases alibaba/Sentinelx 下載后是一個jar包 進入目錄 CMD命令 java -jar "sentinel-dashboard-1.8.8 .jar" 如果發生了端口沖突則使用以下命令啟動 修改端口號為8090 java -Dserver.port8090 -jar "sen…

Numpy科學計算與數據分析:Numpy數學函數入門與實踐

Numpy數學函數實戰:探索數學運算的無限可能 學習目標 通過本課程的學習,學員將掌握Numpy中常用的數學函數,包括三角函數、指數函數和對數函數的使用方法,以及如何利用這些函數對數組進行高效的數學運算。本課程不僅會講解理論知識…

BIGO Ads是什么?BIGO廣告營銷核心玩法解析

在全球化競爭白熱化的當下,BIGO Ads憑借其覆蓋150國家的龐大流量池和AI驅動的精準營銷能力,已成為出海企業突破增長瓶頸的利器。2025年Q1數據顯示,BIGO Ads廣告業務同比增長27%,非直播收入占比達24.9%,成為歡聚集團第二…

人工智能領域、圖歐科技、IMYAI智能助手2025年3月更新月報

2025年3月AI領域重要技術進展與平臺更新概覽 2025年3月,人工智能領域迎來一系列重要技術更新與平臺功能迭代,尤其在多模態模型、圖像生成編輯、視頻生成、大型語言模型(LLM)性能提升等方面表現活躍。以下是對關鍵進展的梳理&#…

STM32HAL 快速入門(一):點燈前的準備 —— 從軟件安裝到硬件原理

前言 大家好,這里是 Hello_Embed。嵌入式開發的 “Hello World” 是點燈 —— 通過控制單片機引腳的高低電平,讓 LED 亮滅。要實現這個功能,前期準備必不可少:從軟件安裝到硬件原理理解,每一步都很關鍵。本文就來詳細說…

Python網絡編程技術

一、網絡編程基礎概念 1.1 什么是網絡編程? 定義:程序通過網絡與其他程序進行通信的技術。核心目標:實現數據在不同主機或進程間的傳輸與交互。應用場景:Web服務、API調用、實時通信、分布式系統等。 1.2 網絡通信模型 OSI七層…

基于PHP的快遞管理系統的設計與實現

管理員:登錄:管理員可以通過用戶名和密碼登錄系統,進入管理員后臺管理界面。個人中心:管理員可以查看和編輯個人信息,如姓名、聯系方式等。用戶管理:管理員可以管理系統中的用戶信息,包括添加新…

WPF的C1FlexGrid的單元格回車換行輸入

重寫C1FlexGrid的按鍵事件PreviewKeyDown"flex_PreviewKeyUp" 定義按鍵方法private void flex_PreviewKeyUp(object sender, KeyEventArgs e){if (e.Key Key.Enter){// 獲取當前編輯的單元格var cell CfgReviewItem.Selection;if (cell.Column > 0 && …

簡單部署普羅米修斯(Promethus)與Grafana配置

環境信息:系統版本ubuntu2404k8s版本v1.22.2promethus節點IP192.168.31.210Grafana節點IP192.168.31.210node1節點IP192.168.31.214node2節點IP192.168.31.215部署Promethus(https://prometheus.io/download/) wget https://ghfast.top/https…