Web即时通信技术——WebRTC

这篇具有很好参考价值的文章主要介绍了Web即时通信技术——WebRTC。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

WebRTC(Web Real-Time Communication)是一个开放的项目,旨在在网页端提供实时的音频、视频和数据通信,不需要插件或其他附加软件。它是由Google主导,并在Mozilla、W3C和IETF等组织的支持下开发。WebRTC的目标是使浏览器成为实时通信的强大平台,支持点对点(peer-to-peer)通信。

官方网址:https://webrtc.org/
WebRTC中文网 https://webrtc.org.cn
WebRTC官网 https://webrtc.org/
WebRTC范例 https://webrtc.github.io/samples/

WebRTC特点

实时通信: WebRTC专注于实时通信,包括音频、视频和其他数据。 WebRTC允许从设备中捕获音频和视频流,并在对等连接中传输这些流。WebRTC已经被现代浏览器(如Chrome、Firefox、Safari等)广泛支持,使得开发者能够在Web应用中集成实时通信功能。

点对点通信: WebRTC支持点对点通信,即在两个浏览器之间直接建立连接,而不需要通过中间服务器,不需要插件或其他附加软件。

多媒体引擎: WebRTC包括一个多媒体引擎,用于处理音频和视频流,提供了丰富的API和协议。

NAT穿越和防火墙遍历: WebRTC提供了一些机制,使得在NAT(Network Address Translation)和防火墙等网络设备背后进行通信更为容易。

WebRTC的网络拓扑结构

Mesh 结构

Web即时通信技术——WebRTC,音视频开发,webrtc,音视频

如果两个Client端能够顺利建立P2P 的连接,则直接通过 P2P 互相交换数据;如果由于网络原因,无法打通,则利用 Turn Server 来中转数据。图中的TURN Server 是指支持 TURN 协议的服务器,它扮演着一种网络中继的角色,支持把一个 Client 的数据包透明转发到多个其他的 Client 客户端。同理也可得出一对一的网络模型。

这种完全使用 P2P 方式的网络拓扑结称之为 Mesh 结构。

这种结构的优点在于逻辑简单,容易实现,较为轻量的服务端,TURN 服务器比较简单,一定比例的P2P 成功率可极大减轻服务端的压力。
缺点在于每新增一个客户端,所有的客户端都需要新增一路数据上行,客户端上行带宽占用太大。因此,通话人数越多,效果越差。

SFU通话模型

Web即时通信技术——WebRTC,音视频开发,webrtc,音视频
SFU 的全称是:Selective Forwarding Unit,它是一种通过服务器路由和转发 WebRTC 客户端音视频数据流的方法。

SFU 服务器将自己伪装成了一个WebRTC 的 Peer 客户端,WebRTC 的其他客户端其实并不知道自己通过 P2P 连接过去的是一台真实的客户端还是一台服务器,我们通常把这种连接称之为 P2S,即Peer to Server。

SFU服务器和TURN服务器的不同在于:
TURN 服务器仅仅是提供的一种辅助的数据转发通道,在P2P不通的时候进行透明的数据转发。而 SFU 是和客户端有业务交互的,两者是平等的关系,甚至是可以对WebRTC 客户端的数据转发的申请和控制。

MCU通话网络模型

Web即时通信技术——WebRTC,音视频开发,webrtc,音视频

MCU 的全称是:Multipoint Control Unit,又被称为混合,是实现多方WebRTC交流的另一种策略。
它的主要原理是由 MCU Server 将各路客户端上行的数据流合成为一路,再转发给其他客户端。这种模型相比于 SFU 降低了多人视频通话场景下客户端的下行带宽压力,但是由于合流需要转码操作,因此对服务器端压力比较大,且下发给客户端是固定的合流画面,灵活性不好。

WebRTC 实现服务端和客户端交互的代码

在 Linux 环境下使用 WebRTC 实现服务端和客户端交互的代码一般较为复杂,需要使用信令服务器进行 SDP 交换,并处理 ICE 候选等操作。下面例子是一个简化的代码,使用 WebSocket 作为信令服务器。文章来源地址https://www.toymoban.com/news/detail-820978.html

创建信令服务器

#include <iostream>
#include <websocketpp/config/asio_no_tls.hpp>
#include <websocketpp/server.hpp>
#include <webrtc/api/peerconnectioninterface.h>

class WebSocketServer {
public:
    WebSocketServer() {
        server_.init_asio();
        server_.set_message_handler(bind(&WebSocketServer::OnMessage, this, ::_1, ::_2));
        server_.set_open_handler(bind(&WebSocketServer::OnOpen, this, ::_1));
        server_.set_close_handler(bind(&WebSocketServer::OnClose, this, ::_1));
    }

    void Run(uint16_t port) {
        server_.listen(port);
        server_.start_accept();
        server_.run();
    }

private:
    void OnMessage(websocketpp::connection_hdl hdl, websocketpp::server<websocketpp::config::asio>::message_ptr msg) {
        std::string message = msg->get_payload();
        // Handle incoming message (Signaling, SDP exchange, etc.)
        // Example: Forward the message to the appropriate WebRTC peer connection
    }

    void OnOpen(websocketpp::connection_hdl hdl) {
        // Handle new WebSocket connection
    }

    void OnClose(websocketpp::connection_hdl hdl) {
        // Handle WebSocket connection close
    }

    websocketpp::server<websocketpp::config::asio> server_;
};

int main() {
    WebSocketServer ws_server;
    ws_server.Run(9000); // Run WebSocket server on port 9000

    return 0;
}


客户端

#include <iostream>
#include <websocketpp/config/asio_no_tls.hpp>
#include <websocketpp/client.hpp>
#include <webrtc/api/peerconnectioninterface.h>

class WebSocketClient {
public:
    WebSocketClient() {
        client_.init_asio();
        client_.set_message_handler(bind(&WebSocketClient::OnMessage, this, ::_1, ::_2));
        client_.set_open_handler(bind(&WebSocketClient::OnOpen, this, ::_1));
        client_.set_close_handler(bind(&WebSocketClient::OnClose, this, ::_1));
    }

    void Connect(const std::string& uri) {
        websocketpp::lib::error_code ec;
        client_.get_alog().write(websocketpp::log::alevel::app, "Connecting to " + uri);
        client_.connect(uri, ec);
        if (ec) {
            client_.get_alog().write(websocketpp::log::alevel::app, "Error connecting: " + ec.message());
        }
    }

    void Send(const std::string& message) {
        websocketpp::lib::error_code ec;
        client_.send(hdl_, message, websocketpp::frame::opcode::text, ec);
        if (ec) {
            client_.get_alog().write(websocketpp::log::alevel::app, "Error sending message: " + ec.message());
        }
    }

private:
    void OnMessage(websocketpp::connection_hdl hdl, websocketpp::client<websocketpp::config::asio>::message_ptr msg) {
        std::string message = msg->get_payload();
        // Handle incoming message (Signaling, SDP exchange, etc.)
        // Example: Forward the message to the appropriate WebRTC peer connection
    }

    void OnOpen(websocketpp::connection_hdl hdl) {
        client_.get_alog().write(websocketpp::log::alevel::app, "WebSocket connection opened");
        hdl_ = hdl;
        // Perform necessary setup, e.g., create WebRTC peer connection
    }

    void OnClose(websocketpp::connection_hdl hdl) {
        client_.get_alog().write(websocketpp::log::alevel::app, "WebSocket connection closed");
        // Perform necessary cleanup
    }

    websocketpp::client<websocketpp::config::asio> client_;
    websocketpp::connection_hdl hdl_;
};

int main() {
    WebSocketClient ws_client;
    ws_client.Connect("ws://localhost:9000"); // Connect to WebSocket server on localhost:9000
    ws_client.Send("Hello, WebSocket!"); // Send a message

    // Continue with WebRTC logic, e.g., setting up peer connection, SDP exchange, media stream control, etc.

    return 0;
}

到了这里,关于Web即时通信技术——WebRTC的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 浅谈卫星通信技术

    目录 1.卫星的概念 2.卫星的具体作用 3.利用卫星进行通信的优势 4.卫星通信带来的技术变革         卫星是指在地球轨道上运行的天体或人造物体。一般来说,我们所说的卫星主要指人造卫星,它是由人类设计、制造并送入轨道的人造宇宙飞行器。         人造卫星通

    2024年02月11日
    浏览(32)
  • 物联网通信技术

    UWB:超宽带无线通信技术(UWB)是一种无载波通信技术,UWB不使用载波,而是使用短的能量脉冲序列,并通过正交频分调制或直接排序将脉冲扩展到一个频率范围内。 NFC:全称是Near Field  Communication,即“近场通信”,也叫“近距离无线通信”。 ARQ:自动重传请求(Automati

    2024年02月09日
    浏览(34)
  • WebRTC音视频会议底层支撑技术

    WebRTC允许应用使用P2P通信。WebRTC是一个广泛的话题,在本文中,我们将重点讨以下问题。 为什么Web RTC 如此受欢迎? 在P2P连接过程中会发生什么 信号传递 NATs和ICE STUN TURN服务器 VP9视频编解码器 WebRTC APIs 安全 1.为什么Web RTC 如此受欢迎? 开放源代码 它为浏览器提供了端到端

    2024年02月11日
    浏览(57)
  • 世界前沿技术发展报告2023《世界信息技术发展报告》(六)网络与通信技术

    资料来自:《世界前沿技术发展报告2023》和网络 随着满足智慧交互、沉浸式拓展现实(Extended Reality, XR)全息通信、数字孪生等新兴技术的超高速率传输需求,新一代通信技术成为全球研究热点。伴随着5G在全球范围内的陆续应用,全球通信强国正开启对下一代网络技术6G的研发

    2024年02月07日
    浏览(38)
  • 物联网中的通信技术

    阅读引言: 本文主要大致为大家带来物联网中的常见的通信方式的知识梳理。 目录 一、概述 二、无线通信技术 1.物联网电子标签 RFID 1.1 RFID 概念 1.2 RFID 系统组成 2.WI-FI技术 3.UWB技术 4.ZigBee技术 5.NFC技术 6.蓝牙技术 7.EnOcean技术              物联网的通信层担负着极其重

    2024年01月18日
    浏览(37)
  • SpringBoot 集成 WebSocket 通信技术

    作者:禅与计算机程序设计艺术 WebSocket 是一种基于 TCP 的协议,它提供双向通信信道,可以实现浏览器和服务器端的全双工通信。通过 WebSocket ,网页应用可以实时地接收服务端传来的消息,并根据需要给予响应;也可以将用户操作如鼠标拖动、键盘输入等实时发送到服务端

    2024年02月07日
    浏览(39)
  • 无线网络通信技术详细介绍

    以下是对各类网络各自常见和常用的通信技术进行简单介绍。 一、无线广域网(WWAN) 无线广域网WWAN(Wireless Wide Area Networks)主要是为了满足超出一个城市范围的信息交流和网际接入需求,让用户可以和在遥远地方的公众或私人网络建立无线连接。在无线广域网的通信中一般要用

    2024年02月08日
    浏览(47)
  • W3电力线载波通信技术

    CK_Label_W3 CK_Label_W3(外接供电版) 产品型号 CK_Label_W3 尺寸 114.5*44.5*19mm 屏幕尺寸 2.9 inch 分辨率 296*128 像素密度 112dpi 显示技术 电子墨水屏显示 显示颜色 黑/白 外观颜色 白色 按键 4 指示灯 4 RGB灯 灯光颜色 7种(红/绿/蓝/黄/紫/白/青) 工作温度 0-50℃ 视角 180° 支持内容格式 文本

    2024年02月08日
    浏览(44)
  • 物联网通信技术复习题整理

    1【单选题】三层结构类型的物联网不包括( )。 A、感知层 B、网络层 C、应用层 D、会话层 答案:D 2【单选题】物联网的核心是( )。 A、应用 B、产业 C、技术 D、标准 答案:A 3【单选题】属于感知控制层通信技术的是( ). A、ZigBee技术 B、3G网络 C、4G网络 D、局域网 答案:

    2024年02月09日
    浏览(55)
  • 元宇宙挑战现实世界无线通信技术

    导 言 事 件 2021年10月28日,在名为Facebook Connect的年度大会上,Facebook宣布,公司名称将更改为“Meta”,这是元宇宙Metaverse的前缀,意思是包含万物无所不连。标志着这一世界级的科技巨头从传统的社交媒体公司,all in元宇宙的战略决心。这一信息也将酝酿多年的元宇宙概念研

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包