从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打造音视频直播系统
登录|注册

11 | 如何通过Node.js实现一套最简单的信令系统?

李超 2019-08-08
通过前面几篇文章的讲解,我想现在你应该已经对 WebRTC 有了一个清楚的认知了。接下来的章节咱们就使用 WebRTC 逐步实现一套真实可用的 1 对 1 实时直播系统吧。
WebRTC 1.0 规范对 WebRTC 要实现的功能、API 等相关信息做了大量的约束,比如规范中定义了如何采集音视频数据、如何录制以及如何传输等。甚至更细的,还定义了都有哪些 API,以及这些 API 的作用是什么。但这些约束只针对于客户端,并没有对服务端做任何限制。
那 WebRTC 规范中为什么不对服务器也做约束呢?其实,这样做有以下三点好处。
第一点,可以集中精力将 WebRTC 库做好。WebRTC 的愿景是使浏览器能够方便地处理音视频相关的应用,规范中不限制服务端的事儿,可以使它更聚焦。
第二点,让用户更好地对接业务。你也清楚,信令服务器一般都与公司的业务有着密切的关系,每家公司的业务都各有特色,让它们按照自已的业务去实现信令服务器会更符合它们的要求。
第三点,能得到更多公司的支持。WebRTC 扩展了浏览器的基础设施及能力,而不涉及到具体的业务或产品,这样会更容易得到像苹果、微软这种大公司的支持,否则这些大公司之间就会产生抗衡。
当然,这样做也带来了一些坏处,最明显的一个就是增加了学习 WebRTC 的成本,因为你在学习 WebRTC 的时候,必须自己去实现信令服务器,否则你就没办法让 WebRTC 运转起来,这确实增加了不少学习成本。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《从0打造音视频直播系统》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(17)

  • Ethan
    客户端一定要引入socket. io吗?可以直接用 websocket api吗

    作者回复: 可以,用websoket你要自己写一个房间服务器

    2019-08-09
    1
  • 伟龙
    老师,您在介绍node. js的Reactor模式时和我以往理解的有点出入。您说道有个线程池的概念,我的理解应该是没有的喔(虽然我们可以使用worker来创建)还请提点一下我呦,推我篇文章也行😁谢谢啦
    2019-12-11
  • 人生苦短
    老师你好,我下载了您的代码,更改了cert,但是报了一个错误,我不知道怎么解决
     node server.js
    /root/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> (/root/node_modules/streamroller/lib/index.js:2:27)

    是我的环境有问题么

    作者回复: 应该是你的环境问题,你看一下你的node版本和npm版本是不是太低了?

    2019-11-21
    1
  • jike
    不懂 node 的小白
    客户端运行报错 404 http://127.0.0.1:8000/socket.io/?EIO=3&transport=polling&t=MvPeDk4;
    服务端运行没有任何输出 浏览器也访问不了

    作者回复: 如果你对 node 不熟悉的话,确实会有这类问题。建议你看一下我在imooc.com中的webrtc入门与实战的视频,在那个视频中有讲具体的步骤!

    2019-11-11
  • 老王的老李头
    跑起来报啦个错误,页面显示Cannot GET

    作者回复: web信令服务器没有搭建好吧!

    2019-11-04
  • dahaowenge
    node serves.js Error: ENOENT: no such file or directory, open './cert/1557605_www.learningrtc.cn.key'

    作者回复: 你要使用自己的证书,这是我的证书你是不能用的。另外要使用真正的证书,你可以通过购买域的,然后申请免费证书的方式获取。购买一个域名最便宜的 6元。但如果在国内购买域名的话,还要进行备案,这个在北京需要 20天的时间

    2019-10-10
  • dahaowenge
    老师,用的是官方demo,但是运行node server.js时,报错 Error: Cannot find module 'log4js'

    作者回复: 应该是你的log4js 没有装好,你可以找个懂nodejs的同学帮忙安装一下。实在不行,你可以将 log4js注释掉。

    2019-10-10
  • 花果山の酸梅汤
    client代码运行于浏览器渲染引擎中的V8引擎,server代码运行于Node.js的JS运行时的V8引擎部分。一个面向渲染一个面向提供后台服务。

    作者回复: very good!

    2019-09-10
  • Geek_leo长沙
    老师,要做多短在线音视频的话是不是就得考虑mesh,router,mix这三种架构呢。

    作者回复: MESH, SFU, MCU三种

    2019-09-03
    1
  • 小狂
    老师,是否能发一下这节的代码

    作者回复: 代码已经提交了,https://github.com/avdance/webrtc_web/tree/master/11_signal

    2019-08-29
  • Jason
    老师好,问一下, 这套简单的信令系统,已经实现了交换各端sdp信息的功能了吗?

    作者回复: 实现了,不过对他的讲解在第23篇文章中才会做详细介绍

    2019-08-27
  • hao11111205
    老师,启动服务,报错,什么原因?
    hao@hao-Aspire-4820TG:~$ node server.js
    /home/hao/node_modules/debug/src/node.js:165
    const (namespace: name, useColors) = this;
    ^

    SyntaxError: Unexpected token :
        at exports.runInThisContext (vm.js:53:16)
        at Module._compile (module.js:374:25)
        at Object.Module._extensions..js (module.js:417:10)
        at Module.load (module.js:344:32)
        at Function.Module._load (module.js:301:12)
        at Module.require (module.js:354:17)
        at require (internal/module.js:12:17)
        at Object.<anonymous> (/home/hao/node_modules/debug/src/index.js:9:19)
        at Module._compile (module.js:410:26)
        at Object.Module._extensions..js (module.js:417:10)

    作者回复: 我这两天把代码放上去,到时候你对照着看一下吧!

    2019-08-23
  • Beast-Of-Prey
    老师 http://file/socket.io/?EIO=3&transport=polling&t=MnpuVBE net::ERR_NAME_NOT_RESOLVED 这个错误是什么原因导致的?我百度了 说是浏览器设置了代理,但是我检查我的浏览器,没有进行设置啊。

    作者回复: Http://file/. ?这个开头?你是本地文件访问的?

    2019-08-09
    1
  • Beast-Of-Prey
    老师 我按步骤安装了 socket.io 但是 我本地 html 加载 socket.io.js文件的时候 提示2 个错误,1、文件未发现ERR_FILE_NOT_FOUND,2、io 未定义 io is not defined。

    作者回复: 是库没有加载对,改为这样试试 <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>

    2019-08-08
  • 许童童
    两个不同的 V8 引擎上,你知道它们的对应关系吗
    一个是nodejs服务端的V8,一个是浏览器中客户端的V8。

    作者回复: 没错!

    2019-08-08
  • Beast-Of-Prey
    读了好几遍

    作者回复: 赞!

    2019-08-08
  • 彭刚
    期待更新 每篇文章都能看好几次 都是精华

    作者回复: 谢谢!

    2019-08-08
收起评论
17
返回
顶部