从0打造音视频直播系统
李超
前新东方音视频直播技术专家,前沪江音视频架构师
立即订阅
2827 人已学习
课程目录
已完结 40 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 5G的到来将会为音视频插上飞翔的翅膀
免费
WebRTC 1对1通话 (23讲)
01 | 原来通过浏览器访问摄像头这么容易
02 | 如何通过WebRTC进行音视频设备检测呢?
03 | 如何使用浏览器给自己拍照呢?
04 | 可以把采集到的音视频数据录制下来吗?
05 | 原来浏览器还能抓取桌面?
06 | WebRTC中的RTP及RTCP详解
07 | 你竟然不知道SDP?它可是WebRTC的驱动核心!
08 | 有话好商量,论媒体协商
09 | 让我们揭开WebRTC建立连接的神秘面纱
10 | WebRTC NAT穿越原理
11 | 如何通过Node.js实现一套最简单的信令系统?
12 | RTCPeerConnection:音视频实时通讯的核心
13 | 在WebRTC中如何控制传输速率呢?
14 | 如何打开/关闭音视频?
15 | WebRTC中的数据统计原来这么强大(上)
16 | WebRTC中的数据统计原来这么强大(下)
17 | 如何使用Canvas绘制统计图表(上)?
18 | 如何使用Canvas绘制统计图表(下)?
19 | WebRTC能不能进行文本聊天呢?
20 | 原来WebRTC还可以实时传输文件?
21 | 如何保证数据传输的安全(上)?
22 | 如何保证数据传输的安全(下)?
23 | 实战演练:通过WebRTC实现一个1对1音视频实时直播系统
WebRTC多人音视频实时通话 (7讲)
24 | 多人音视频实时通讯是怎样的架构?
25 | 那些常见的流媒体服务器,你该选择谁?
26 | 为什么编译Medooze Server这么难?
27 | 让我们一起探索Medooze的具体实现吧(上)
28 | 让我们一起探索Medooze的具体实现吧(下)
29 | 如何使用Medooze 实现多方视频会议?
30 | 实战演练:通过WebRTC实现多人音视频实时互动直播系统
支持上万人同时在线的直播系统 (8讲)
31 | 一对多直播系统RTMP/HLS,你该选哪个?
32 | HLS:实现一对多直播系统的必备协议
33 | FLV:适合录制的多媒体格式
34 | 如何使用Nginx搭建最简单的直播服务器?
35 | 如何构建云端一对多直播系统?
36 | 如何使用 flv.js 播放 FLV 多媒体文件呢?
37 | 如何使用 video.js 播放多媒体文件?
38 | 实战推演:带你实现一个支持万人同时在线的直播系统
结束语 (1讲)
结束语 | 路漫漫其修远兮,吾将上下而求索
从0打造音视频直播系统
登录|注册

23 | 实战演练:通过WebRTC实现一个1对1音视频实时直播系统

李超 2019-09-05
在前面的 22 篇文章中,我分步骤向你介绍了如何在浏览器上实现一套简单的直播系统。比如,如何采集音视频数据,如何在同一个浏览器上进行音视频通话,如何传输非音视频数据,等等。
但这些知识点都是一个个独立的,并没有形成一个完整的系统,那么本篇文章我们就将所有这些知识点串联起来,做成一个完整的系统。当这套系统搭建完成之后,你就可以在浏览器上实现从北京到上海这种远距离的实时通信了。
接下来我们就来详述这套系统的实现步骤(运行环境的搭建,Web 服务器的实现,信令系统的实现,TURN 服务器的搭建,RTCPeerConnection 的创建,音视频数据的采集、传输、渲染与播放)。通过这部分内容的讲解,再配合我们之前的文章,相信你一定可以快速搭建出这样一套系统来。

运行环境搭建

要实现这套系统,运行环境是特别关键的,其中有三个条件是必须要满足的:云主机、2M 以上的带宽HTTPS 证书
为什么需要这三个条件呢?下面我们就来详细看一下。
云主机就不必多说了,要实现远距离的音视频通信,就得进行信令的交换和数据的中转,这些都需要我们有一台云主机。换句话说,有了云主机后,通信的双方才可以进行信令的交换;在 P2P 不通的情况下,通过服务器中转的方式才能保障端与端之间的连通性。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《从0打造音视频直播系统》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(13)

  • Geek_leo长沙
    老师,我要在移动端实现点对点呼叫,A呼叫B的时候,B能被动的拉起视频界面(B事先不知道A想和他视频),我Android移动端是不是要有一个service服务一直在监听socketio的广播消息,例如在socket.on()监听协商好的指令,然后B在主动选择是否加入房间。不知道是否

    作者回复: 是的,你要自己做一个 service 一直侦听着服务端的消息,当有消息呼叫你的时候,你用service将应用拉起来,同时加入到同一个房间里,这样就可以了。

    2019-09-11
    1
    2
  • dahaowenge
    老师你好,前几节加入本地流用的addstream 获取远端流用的是onaddstream。这一节里用的是addtrack和ontrack,这两套写法有什么区别么

    作者回复: addtrack 和 ontrack 是最新的API, 慢慢 addstream 就不用了。

    2019-10-31
    1
  • Joseph
    老师我遇到了个新问题,就是createAnswer的时候生成的sdp中并没有candidate信息。配置的参数和您给的一样,只是修改为我的stun/turn服务器地址。请问candidate信息的生成和什么参数有关系?

    作者回复: 现在的candidate都不会在 SDP 中出现了,都是通过事件触发的,看一下媒体协商的那篇文章

    2019-09-11
    1
  • 王乐
    启动node server.js,报错误,请老师给看下,错误信息如下:
    /usr/local/download/node_modules/streamroller/lib/RollingFileWriteStream.js:133
      async _shouldRoll() {
            ^^^^^^^^^^^

    SyntaxError: Unexpected identifier
        at createScript (vm.js:56:10)
        at Object.runInThisContext (vm.js:97:10)
        at Module._compile (module.js:549:28)
        at Object.Module._extensions..js (module.js:586:10)
        at Module.load (module.js:494:32)
        at tryModuleLoad (module.js:453:12)
        at Function.Module._load (module.js:445:3)
        at Module.require (module.js:504:17)
        at require (internal/module.js:20:19)
        at Object.<anonymous> (/usr/local/download/node_modules/streamroller/lib/index.js:2:27)

    作者回复: 看一下你的 node 版本是不是太低了?现然都是 10.0 以上的版本

    2019-10-18
  • 哈哈哈
    必须使用云服务器吗?使用公司的实体服务器不可以吗?

    作者回复: 可以,有固定的外网IP地址吗?如果没有的话,你需要在公司做个代理。如果不熟悉的话,找IT/运维人员帮你弄一下。

    2019-10-16
  • 用官网https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/测试报如下错误
    The server stun:xxx.xxx.x.xx:3478 returned an error with code=701:
    STUN host lookup received error
    老师是否知道,这大概率是由什么引起的吗?

    作者回复: 可能是你的浏览器有问题,换个浏览器试试。或找别人的浏览器试试

    2019-10-13
  • 孤芳浪子
    你好,janus这个开源库,能作为server用吗?

    作者回复: 可以的,后面有文章对这几个服务器做比较

    2019-09-26
  • turnserver测试,结果如下
    0: SQLite DB connection success: /var/lib/turn/turndb
    179: IPv4. tcp or tls connected to: xxx.30.2xxx.112:57281
    179: HTTPS connection has been disabled due Vulnerability in the Web interface !!!
    179: session 001000000000000001: client socket to be closed in client handler: ss=0x7fcb180043a0
    179: session 001000000000000001: closed (2nd stage), user <> realm <xxxx.xyz> origin <>, local xx.17.xx.9:3478, remote xxx.30.xxx.112:57281, reason: general是什么意思啊?

    作者回复: 用这个测,https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/, 如果这个不通的话,说明你的配置有问题。一定要按照文中的配置进行设置,否则会出现各种问题

    2019-09-15
  • Joseph
    老师,是这样的,我现在在对接别人的服务,他们提供的sdp是包含candidate,那我这边是需要降低webrtc的版本吗?

    作者回复: 不用,webrtc是兼容的。如果你在 SDP中放了candidate,那么它也能识别出来

    2019-09-12
  • 初音韶歌
    老师,请问怎么停止获取桌面与音频呢?我不需要将桌面与音频向外发送的时候总不能继续获取吧?

    作者回复: 有 stop 函数呀。在stream中有 track, track 有stop 函数。

    2019-09-08
  • Joseph
    老师,现在我通过trickle-ice网站测试可以relay回地址,但通过通过浏览器访问IP:3478端口,显示访问不到网页,但是p2p通信是可以的。请问是什么问题呢?

    作者回复: turn服务不是http/https服务,你用浏览器访问它是啥意思呢?

    2019-09-05
    1
  • 刘丹
    请问怎样查询房间号码或者名称列表?另外登录turn服务器时,客户端能否用自己的用户名和密码呢?

    作者回复: 登录turn应该要用turn配置中设置的用户名和密码了。你要想查房间号,需要自己做一个小的管理系统。

    2019-09-05
  • rencwang
    老师,有个问题想请教一下,网页端支持播放avi格式视频,改怎么实现

    作者回复: 系统默认应该是不支持的,你可以用ffmpeg将 avi 转成浏览器支持的格式,一般都是这样做

    2019-09-05
收起评论
13
返回
顶部