WebRTC搭建與應用(一)-ICE服務搭建

WebRTC搭建與應用(一)

近期由于項目需要在研究前端WebGL渲染轉為云渲染,借此機會對WebRTC、ICE信令協議等有了初步了解,在此記錄一下,以防遺忘。

第一章 ICE服務搭建

文章目錄
  • WebRTC搭建與應用(一)
  • 前言
  • 一、ICE是什么?
  • 二、什么是STUN、TURN
  • 三、Coturn開源框架
    • 環境準備
    • 部署過程
      • 1.Ubuntu開啟圖形桌面化
      • 2.Windows遠程連接Ubuntu
      • 3 安裝Coturn
  • 總結

前言

之前工作主要集中于桌面端和前端的輕量化圖形渲染與數據組織,服務端相關技術主要是接口調用,沒有什么技術積累,本次搭建工作屬于摸著石頭過河。
最開始在本地測試WebRTC點對點傳輸沒有任何問題,但是跨電腦測試時會提示ICE失敗,所以還是得研究一下什么是ICE。

一、ICE是什么?

ICE即交互式連通建立方式(Interactive Connectivity Establishment),ICE并非一種新的協議,而是通過綜合運用某幾種協議(STUN、TURN等),使之在最適合的情況下工作,以彌補單獨使用其中任何一種所帶來的固有缺陷。

基于IP的語音、數據、視頻等業務在網絡中所面臨的一個實際困難就是如何有效地穿透各種NAT(Network Address Translator:網絡地址轉換)以及FW(Fire Wall:防火墻)的問題。對此,SIP(會話初始化協議)以往的解決方法由ALGs(Application Layer Gateway Service:應用層網關)、STUN、TURN等方式。

二、什么是STUN、TURN

STUN(Session Traversal Utilities for NAT)即網絡地址轉換會話穿越應用程序。STUN提供了一種方式使一個端點能夠確定NAT分配的和本地私有IP地址和端口相對應的公網IP地址和端口以及NAT的類型信息。它也為端點提供了一種方式保持一個NAT綁定不過期。NAT綁定過期則表示為相同的內網地址重新分配外網地址也就是端口號。

TURN(Traversal Using Relay NAT)即網絡地址轉換中繼穿越協議。

TURN與STUN的共同點都是通過修改應用層中的私網地址達到NAT穿透的效果,不同點是TURN是通過兩方通訊的“中間人”方式實現穿透。

三、Coturn開源框架

Coturn 是一種開源服務器框架用于實現 TURN及STUN協議,用于解決 NAT 穿透問題。它幫助客戶端在受限網絡環境(例如防火墻或 NAT 后面)中實現雙向通信。

環境準備

Coturn主要部署在Linux系統中,本次測試采用華為云服務器Ubuntu 24.04版本。

部署過程

1.Ubuntu開啟圖形桌面化

之前僅通過FinalShell遠程連接過Ubuntu系統的命令行模式,此次是本人第一次操刀服務器使用,說來慚愧,各種坑各種不會,所以好好記錄一下一路的曲折。
sudo startx 啟動圖形用戶界面;
如果失敗,查看是否安裝了圖形界面,如果沒有,可按下述流程安裝:
(1)確保apt源可用并更新源
sudo apt-get update
(2)安裝桌面圖形化顯示
sudo apt-get install ubuntu-desktop
(3)設置默認開啟方式為圖形化界面顯示
sudo systemctl set-default graphical.target
(4)重啟
reboot

2.Windows遠程連接Ubuntu

對于前端開發人員來說一般都是在Windows環境進行開發,如果想要連接到Ubuntu服務器進行操作和測試,需要進行一些配置。
Windows的遠程桌面使用的協議為RDP,首先需要在Ubuntu的操作系統中安裝xrdp。
sudo apt-get install tightvncserver xrdp
安裝完成后,在Windows中通過遠程桌面連接輸入Ubuntu的ip以及用戶名、密碼即可實現遠程連接。
在這里插入圖片描述
在這里插入圖片描述

3 安裝Coturn

安裝過程請參考:
https://blog.csdn.net/yushangyong/article/details/129973873

切記:listening-port設置的監聽端口一定要將TCP和UDP都開放,min-port和max-port設置的端口一定要將UDP開放對外,否則會無法連接。

以下是中文版TURN服務測試地址
https://docs.wildfirechat.cn/webrtc/trickle-ice/

總結

以上步驟如果都正確完成以后,那恭喜你WebRTC的長征邁出了堅實的一步,下面就要開始研究點對點通信以及WebRTC推流了,后續有時間在嘗試一下使用docker部署Coturn,我們下一章繼續WebRTC之旅。

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

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

相關文章

【學習筆記】深入淺出詳解Pytorch中的View, reshape, unfold,flatten等方法。

文章目錄 一、寫在前面二、Reshape(一)用法(二)代碼展示 三、Unfold(一)torch.unfold 的基本概念(二)torch.unfold 的工作原理(三) 示例代碼(四&a…

深入理解 MySQL 索引

引言 在數據庫管理中,索引(Index)是提高查詢性能的關鍵技術之一。MySQL 是最流行的關系型數據庫管理系統之一,廣泛應用于各種規模的應用程序中。本文將深入探討 MySQL 中的索引概念、類型、工作原理以及最佳實踐,幫助…

利用notepad++刪除特定關鍵字所在的行

1、按組合鍵Ctrl H,查找模式選擇 ‘正則表達式’,不選 ‘.匹配新行’ 2、查找目標輸入 : ^.*關鍵字.*\r\n (不保留空行) ^.*關鍵字.*$ (保留空行)3、替換為:(空) 配置界面參考下圖: ??…

docker安裝和換源

安裝: https://www.runoob.com/docker/ubuntu-docker-install.html sudo apt-get remove docker docker-engine docker.io containerd runcsudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-commoncurl -fsS…

CSSmodule的作用是什么

CSS Modules的作用主要體現在以下幾個方面: 1. 解決全局樣式污染問題 在傳統的CSS管理方式中,樣式定義通常是全局的,這很容易導致全局樣式污染。當多個組件或頁面共享同一個樣式時,可能會出現樣式沖突和覆蓋的情況,從…

創建第一個QML項目

文章目錄 使用 Qt Creator 創建 Qt Quick 項目詳解為什么選擇 Qt Creator?1. 打開 Qt Creator2. 選擇項目模板3. 設置項目名稱與路徑4. 定義項目細節5. 配置構建套件6. 檢查項目配置7. 編譯并運行項目后續操作修改界面添加功能 總結 使用 Qt Creator 創建 Qt Quick …

【k8s集群應用】K8S二進制安裝大致步驟(簡略版)

文章目錄 K8S二進制安裝部署etcd測試etcd集群(可選)恢復etcd數據庫 部署master組件部署node組件K8S kubeadm安裝關鍵命令更新kubeadm安裝的K8S證書有效期方法一方法二查看證書有效期 K8S二進制安裝 部署etcd 使用cfssl工具簽發證書和私鑰下載解壓etcd軟…

瑞吉外賣項目學習筆記(二)Swagger、logback、表單校驗和參數打印功能的實現

瑞吉外賣項目學習筆記(一)準備工作、員工登錄功能實現 文章目錄 3 項目組件優化3.1 實現Swagger文檔輸出3.2 實現logback日志打印3.3 實現表單校驗功能3.4 實現請求參數和響應參數的打印 3 項目組件優化 3.1 實現Swagger文檔輸出 1)在application.yml中增加knife4…

leetcode刷題-回溯算法04

代碼隨想錄回溯算法part01| 491.遞增子序列、46.全排列、47.全排列II 491.遞增子序列46.全排列47.全排列II 491.遞增子序列 leetcode題目鏈接 代碼隨想錄文檔講解 思路: 與上一題不同,不能用used列表,因為這個題不能排序, 在每一…

基于字節大模型的論文翻譯(含免費源碼)

基于字節大模型的論文翻譯 源代碼: 👏 star ? https://github.com/boots-coder/LLM-application 展示 項目簡介 本項目是一個基于大語言模型(Large Language Model, LLM)的論文閱讀與翻譯輔助工具。它通過用戶界面&#xff08…

mysql的事務控制和數據庫的備份和恢復

事務控制語句 行鎖和死鎖 行鎖 兩個客戶端同時對同一索引行進行操作 客戶端1正常運行 客戶端2想修改,被鎖行 除非將事務提交才能繼續運行 死鎖 客戶端1刪除第5行 客戶端2設置第1行為排他鎖 客戶端1刪除行1被鎖 客戶端2更新行5被鎖 如何避免死鎖 mysql的備份和還…

Tengine:Nginx二次開發-高性能進化

前言:在當今的互聯網時代,Web 服務器的性能和穩定性對于網站的成功至關重要。Nginx 以其高性能和可擴展性而聞名,但有時候,我們需要更多的特性來滿足特定的業務需求。Tengine,作為一個由淘寶網發起的 Nginx 二次開發版…

RK3588, FFmpeg 拉流 RTSP, mpp 硬解碼轉RGB

RK3588 ,基于FFmpeg, 拉取RTSP,使用 mpp 實現硬解碼. ?? 傳送 ?? Ubuntu x64 架構, 交叉編譯aarch64 FFmpeg mppRK3588, FFmpeg 拉流 RTSP, mpp 硬解碼轉RGBRk3588 FFmpeg 拉流 RTSP, 硬解碼轉RGBRK3588 , mpp硬編碼yuv, 保存MP4視頻文件.

Windows 下 Anaconda的安裝與配置 GPU 版

給之前的電腦安一下深度學習環境 判斷是否有NVIDIA GPU Ctrl Shift Esc 打開任務管理器 帶此字眼表示有 NVIDIA GPU 安裝Anaconda anaconda 打開郵箱會看到下載鏈接 這里建議修改為其他盤,要不然下載的包和創建的環境都在C盤,占用空間 三個都打鉤 取…

【openssl】 version `OPENSSL_3.0.3‘ not found 問題

【openssl】 version OPENSSL_3.0.3 not found 問題 使用openssl時候報錯: openssl lib/libcrypto.so.3: version OPENSSL_3.0.3 not found查閱CSDN發現有博主說把別的地方的libcrypto.so.3 復制過去就好了。 嘗試無效 警告!這個操作不對: 不…

flask flask-socketio創建一個網頁聊天應用

應用所需環境: python 3.11.11 其他 只需要通過這個命令即可 pip install flask3.1.0 Flask-SocketIO5.4.1 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 最好是用conda創建一個新的虛擬環境來驗證 完整的pip list如下 Package Version ----…

聯邦學習防止數據泄露

文章目錄 聯邦學習防止數據泄露的原理聯邦學習的優勢聯邦學習與集中式學習的成本分析聯邦學習的實際應用案例個人設想參考文獻 聯邦學習 (Federated Learning) 是一種分布式機器學習技術,旨在解決數據隱私保護問題。它允許在分散的數據源上進行模型訓練,…

STM32 水質水位檢測項目(硬件架構)及(軟件架構)

硬件選型 水位測量模塊 TDS采集模塊 外置ADC模塊(ADS1115) 水位測量模塊使用方法 水位測量原理 壓力傳感器:水越深壓力越大 P ρgh Fps Fρgh*s P大氣壓 水位測量傳感器本質上是一個壓力測量傳感器。壓力的值和傳感器產生的電壓值是線…

C# 6.0 連接elasticsearch數據庫

在 C# 6.0 中連接 Elasticsearch 數據庫,您可以使用官方的 Elasticsearch 客戶端庫 NEST。NEST 是一個高性能的 .NET 客戶端,用于與 Elasticsearch 進行交互。以下是一個詳細的步驟指南,幫助您在 C# 6.0 項目中連接和操作 Elasticsearch。 1. 安裝 NEST 包 首先,您需要在您…

服務器數據恢復—RAIDZ離線硬盤數超過熱備盤數導致陣列崩潰的數據恢復案例

服務器存儲數據恢復環境: ZFS Storage 7320存儲陣列中有32塊硬盤。32塊硬盤分為4組,每組8塊硬盤,共組建了3組RAIDZ,每組raid都配置了熱備盤。 服務器存儲故障: 服務器存儲運行過程中突然崩潰,排除人為誤操…