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

08 | 有话好商量,论媒体协商

李超 2019-08-01
《07 | 你竟然不知道 SDP?它可是 WebRTC 的驱动核心!》一文中,我向你详细介绍了标准 SDP 规范,以及 WebRTC 与标准 SDP 规范的一些不同,而本文我们将重点学习一下 WebRTC 究竟是如何使用 SDP 规范进行媒体协商的。
我们平时所说的协商你应该清楚是什么意思,说白了就是讨价还价。以买白菜为例,商家说 5 元一颗,买家说身上只有 4.5 元卖不卖?商家同意卖,这样一次协商就完成了。
媒体协商也是这个意思,只不过它们讨价还价的不是一般商品,而是与媒体相关的能力。那媒体能力是什么呢?实际就是你的设备所支持的音视频编解码器、使用的传输协议、传输的速率是多少等信息。
所以简单地说,媒体协商就是看看你的设备都支持那些编解码器,我的设备是否也支持?如果我的设备也支持,那么咱们双方就算协商成功了。

在 WebRTC 处理过程中的位置

在正式进入主题之前,我们还是来看看本文在整个 WebRTC 处理过程中的位置,如下图所示:
WebRTC 处理过程图
通过这张图你可以了解到,本文所涉及的内容包括创建连接信令两部分。
创建连接,指的是创建 RTCPeerConnection,它负责端与端之间彼此建立 P2P 连接。在后面 RTCPeerConnection 一节中,我们还会对其做进一步的介绍。
信令,指的是客户端通过信令服务器交换 SDP 信息。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《从0打造音视频直播系统》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(9)

  • wuqilv
    客户端通过信令服务器交换 SDP 信息。
    2019-08-01
    3
  • Jian
    呼叫方和被呼叫方的角色是如何确认的呢?会否存在两端都向对方发送offer的情况?是由服务器确定的?

    作者回复: 谁先发起呼叫谁就发offer,另一方发answer;这完全有应用层控制;比如第一个人进入房间后,就在哪里等待,当发现第二个人上来的时候它就给对方发offer 就好了。如果两个人同时进入房间,就在服务器端建个队列,让他们顺序进入就好了,非常好处理对吧?另外两端都发offer 那协商必然失败。

    2019-08-01
    1
  • 俊哥
    老师,我有一个疑问,A怎么知道呼叫的B而不是其他的C、D呢?从你的js代码里没有看出来对B的描述,比如B的ip地址是xxx.xxx.xxx.xxx。那么A调用sendMessage(sessionDescription)发到哪里去了呢?

    作者回复: 通过信令服务器转发。 A与B都要先与信令服务器建立连接,之后通过服务器转发。

    2019-10-18
  • scorpio
    老师,从NVR推流到Web端展示监控的实时视频,有什么好的解决方案吗?系统运行在内网上

    作者回复: 应该要做协议转换, 要看 NVR用的啥协议,SIP?

    2019-08-02
  • 请问老师哪些开源的sip框架支持webrtbc的吗

    作者回复: 你可以使用sip 协议做信令,但sip 协议用的人比较少,一般都在监控系统中使用,目前开源的基本没有人使用sip 与WebRTC 结合

    2019-08-02
    1
  • Geek_e39e6f
    WebRTC 底层会收集 Candidate,就是通过stun,turn服务获取候选地址吗?
    这个流程不是在交换sdp之前就应该获取,然后记录在sdp里,发送给对端的吗?

    作者回复: 你说的那是以前了,现在方式已经改了!

    2019-08-01
    1
  • 花果山の酸梅汤
    感谢讲解,请问李老师webrtc的c++ API是如何映射为JS API的,另外官方JS API规范定义的功能,如何可以确认那些是在浏览器中实现,那些是在webrtc c++中实现?

    作者回复: Js 与 c++的互调是通过V8 引擎,至于那些是WebRTC 实现的,那些是浏览器实现的,你后面慢慢熟悉了就清楚了,别着急

    2019-08-01
  • Jason
    思考题:从老师的讲解来看,SDP 消息的交换不是使用 RTCPeerConnection对象完成的,RTCPeerConnection对象负责创建offer、设置本地SDP描述信息、设置远端SDP描述信息、创建answer。交换SDP消息应该是socket对象完成的,但socket的类型啥呢,还不知道。

    作者回复: 有没有想过用http?它可是浏览器天然的哈

    2019-08-01
  • Beast-Of-Prey
    发送信令用socket?

    作者回复: 由于信令数据量不大,所以你可选择的协议就比较多了,TCP、HTTP/HTTPS、WS/WSS,都可以,底层实现都是用的socket

    2019-08-01
收起评论
9
返回
顶部