使用Swoole协程实现 WebRTC 信令服务器

这篇具有很好参考价值的文章主要介绍了使用Swoole协程实现 WebRTC 信令服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是WebRTC

WebRTC技术是激烈的开放的Web战争中一大突破-Brendan Eich, inventor of JavaScript。

简单来说,WebRTC 是一个音视频处理+及时通讯的开源库。在实时通信中,音视频的采集和处理是一个很复杂的过程。比如音视频流的编解码、降噪和回声消除等。由Google发起开源,其中包含视频音频采集,编解码,数据传输,音视频展示等功能,我们可以通过技术快速地构建出一个音视频通讯应用。虽然其名为WebRTC,但是实际上它不只是支持Web之间的音视频通讯,还支持Android以及IOS端,此外由于该项目是开源的,我们也可以通过编译C++代码,从而达到全平台的互通。

WebRTC的架构图为:

使用Swoole协程实现 WebRTC 信令服务器,swoole,webrtc,服务器

(图片来自网络)

我们可以看到模块化和分层的设计,我们文章的目的是演示浏览器端对端的连接流程,焦点是服务端信令服务器的实现方式,但需要提前介绍一些WebRTC的基本概念和连接流程。

二、基础概念

流和轨

  • Track 轨道,可以理解每一路音频或视频,为一个轨,互不相交,类比火车轨道。

  • MediaStream 媒体流,每个媒体流中包含若干轨道,可以将音频轨,视频轨打包在一起。

三、几个关键类

  • MediaStream 媒体流类,MeidiaStream用于将多个MediaStreamTrack对象打包到一起。一个MediaStream可包含audio track 与video track,并且可以添加或者删除。

  • RTCPeerConnection 连接类,包含非常多重要功能,屏蔽复杂技术细节,便于应用层使用,包括但不限于连接管理,P2P类型检测,NAT穿透,中转等。

  • RTCDataChannel 非音视频数据传输类,这个类在我们的例子中没有涉及到。可以简单理解为将媒体流信息或者数据信息塞到连接中,进行传输。

四、端对端连接流程

两个不同网络环境浏览器,要实现点对点的实时音视频对话,需要处理那些问题?

媒体协商

双方需要知道对方支持的媒体格式,SDP(Session Description Protocol)是一种会话描述协议,视频通讯的双方必须先交换SDP信息,才能进一步互相通信。

网络协商

双方要了解对方的网络情况,尝试寻求一个可以互相通讯的链路,其中有寻路选择,如果确实没办法建立点对点链路,会使用中继服务器来进行转发。如果是内网,或者大部分NAT网络环境下,是可以建立端到端连接。在解决网络打通问题时候,有几个概念。

  • STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT在公网的端口映射信息。这些信息被用来在两端创建UDP连接通信。

  • TURN (Traversal Using Relays around NAT),如果客户端在NAT之后, 那么在一些网络情景下,有可能建立点对点的通讯连接,这时就需要公网的服务器作为一个中继, 对数据进行转发。

学习过程中,STUN和TURN服务器我们可使用coturn开源项目来搭建。

数据交换服务-信令服务器

WebRTC实现并没有规定信令服务器的实现方式和相关协议,这给了业务方技术选型极大的灵活。我们今天就是使用PHP+Swoole协程实现一个简单信令服务器。下面是一个端到端连接的流程图,整个核心流程逻辑都在图里面。

使用Swoole协程实现 WebRTC 信令服务器,swoole,webrtc,服务器

(图片来自网络)

五、使用Swoole实现信令服务器

客户端代码模拟​​​​​​​文章来源地址https://www.toymoban.com/news/detail-843485.html

<body><div style="display: block">    <button class="btn" onclick="start()">连接</button>    <button class="btn" onclick="leave()">离开</button></div><div>    <div class="videos">        <h1>Local</h1>        <video id="localVideo" autoplay></video>    </div>    <div class="videos">        <h1>Remote</h1>        <video id="remoteVideo" autoplay></video>    </div></div><script src="assets/js/adapter.js"></script><script type="text/javascript">    const ws_config = '<?= $signaling_server ?>';    const localVideo = document.getElementById('localVideo');    const remoteVideo = document.getElementById('remoteVideo');    const configuration = {
          iceServers: [{
              urls: '<?= $stun_server ?>'        }]    };
    let room_id = getQueryVariable('room_id');    if (room_id == '' || room_id == null) {
          room_id = Math.random().toString(36).slice(-8);        location.href = '?room_id=' + room_id;    }    let subject = 'room-' + room_id;//当前主题    let answer = 0;    let ws = null;    let pc, localStream;
    function getMediaStream(stream) {
          localVideo.srcObject = localStream;        localStream = stream;    }
    function start() {
          ws = new WebSocket(ws_config);        ws.onopen = function (e) {
              subscribe(subject);            if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
                  console.error('the getUserMedia is not supported!');  

到了这里,关于使用Swoole协程实现 WebRTC 信令服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • WebRTC的学习(java版本信令服务)

    1.1 文档教学   WebRTC中文网:http://webrtc.p2hp.com/#google_vignette   WebRTC中文社区:https://webrtc.org.cn/   WebRTC英文官网:https://webrtc.org/   WebRTC安全相关:http://webrtc-security.github.io/   coturn开源地址:https://github.com/coturn/coturn   stun、trun测试网站:https://webrtc.github.io/samples/src/cont

    2024年02月13日
    浏览(37)
  • 搭建WebRTC服务器

    1、AppRTC 房间服务,代码:github.com/webrtc/appr… 2、Collider 信令服务,AppRTC源码里自带 3、CoTurn 打洞服务,代码:github.com/coturn/cotu… 打包资源: 链接: pan.baidu.com/s/1ulx1FVRN… 提取码: 3e5f 1、操作系统: Centos 64bits 2、Google webrtc的服务器Demo:详见https://github.com/webrtc/apprtc 3、域名: ap

    2024年02月13日
    浏览(36)
  • 2310C++协程超传服务器

    原文 告别 异步 回调模型,写代码更简单.同样也是跨平台, 仅头文件 的,包含头文件即可用,来看看它的用法. 提供 getpost 服务 coro_http_server 提供了三个 http 服务,通过 set_http_handler 注册的,注册了两个 http 处理函数:一个是 普通 函数,一个是 协程 函数. 注册为 普通函数 时,会在 i

    2024年02月06日
    浏览(32)
  • 用于WebRTC的coturn服务器的搭建

    前言:         自己在研究WebRTC相关内容,在远端连接老是绕不开搭建ICE服务器,搜索了无数文章和方法,还是久久无进展,最后头皮嗯嘛了才成功,故想总结一下我的搭建步骤,供大家参考,避免少走弯路!!! 1、前期准备 准备一个自己的公网服务器,可以是阿里云或其

    2024年01月24日
    浏览(41)
  • 互动直播之WebRTC服务器Kurento实战

    1. Kurento Kurento的主要组件是 Kurento媒体服务器 (KMS),负责媒体传输,处理,记录和播放。KMS建立在出色的GStreamer多媒体库之上,并提供以下功能: 网络流协议,包括HTTP,RTP和WebRTC。 支持媒体混合和媒体路由/调度的组通信(MCU和SFU功能)。 对实现计算机视觉和增强现实算

    2024年02月21日
    浏览(44)
  • [学习分享]----sylar服务器框架源码阅读--IO协程调度模块

    sylar作者在本站的地址为 这里,也可以查看 作者主页,也有视频教程可以 点击这里。此外,也可以看一下赵路强大佬的关于sylar协程模块的博客 点击这里,我本人在阅读sylar源码的时候也是参考了赵路强大佬的解析 可以点击这里。 各位看官也可以加我的qq和我讨论2511010742

    2024年01月17日
    浏览(45)
  • WebRTC+Kamamilio+rtpengine+Websocket SIP服务器搭建教程

    发现国内使用SIP的资料真的很少,由于公司需要使用语音视频电话,在网上找了一大圈也没找到相关案例,最后自己折腾出一个方案,故此分享出来。 开始之前不得不介绍一下这五个东西。 Kamamilio 是 OpenSER 的前身,是C语言写的一个Sip服务,支持在 在Linux/UNIX系统上运行,优

    2024年02月15日
    浏览(71)
  • docker部署SRS实时视频服务器,rtmp推流,用WebRTC播放

    SRS是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181 大家可以先去gitub上面看使用说明,地址是:v4_CN_Home · ossrs/srs Wiki · GitHub 然后我们通过docker去启动SRS,这些文档里面都有,就不用多说了,然后我们可以用rtmp推流 用WebRTC播放,首先要支持WebRTC我们需要

    2023年04月11日
    浏览(56)
  • SRS服务器RTMP2WebRTC外网拉流配置

    将前端服务开放到外网,并且在外网使用WebRTC拉流,要求全部使用同一端口。 外网地址:10.172.59.42(域名:test.com)外网端口为33333 内网SRS服务器地址:192.168.5.177,内网端口为10090 路由器将外网33333端口映射到内网192.168.5.177:10090 一、使用docker搭建SRS服务器 1、编辑~/.bashrc,添

    2024年04月11日
    浏览(34)
  • 重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar)

    重写Sylar基于协程的服务器系列: 重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar) 重写Sylar基于协程的服务器(1、日志模块的架构) 重写Sylar基于协程的服务器(2、配置模块的设计) 重写Sylar基于协程的服务器(3、协程模块的设计) 重写

    2024年04月26日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包