直播软件搭建技术原理:CDN 与直播

article/2025/8/15 9:26:36

直播软件搭建技术原理:CDN 与直播

很多直播都是基于 CDN 来实现的。而通过声网的服务,或基于声网SDK与 CDN 结合,还可以实现在直播中的连麦互动、白板同步等强调实时性的场景。本文源自社区投稿,介绍了该场景下的一些基础知识。如大家存有疑问,可以与作者交流。

对于直播业务场景,大家遇到问题时候获得的第一现场大多数都是从CDN观众端感受到,比如拉流发现主播卡了,有杂音,模糊,不出图等一类现象。在排查这类问题时候,其实从范围上讲,我们需要从两部分去排查。我们实时音视频云结合CDN直播构建的场景如下图所示:

 

 

 

左边是声网实时音视频云部分,右边是转推到CDN部分。问题上报点观察到的现象是在右边观众端。那很明显问题可能发生在声网A区也可能发生在B区。

所以为了确认范围,可以先了解排查下B区。

那对于实时音视频开发的同学可能对CDN不是很了解。这篇短文主要目的是介绍下CDN,CDN直播有关的一些基础知识和概念,已经简单的问题排查方式。

直播软件搭建

 

 

大家使用CDN云厂商的一个基础就是云存储,云存储是对象存储。首先,一个文件包含了了属性(术语叫metadata,元数据,例如该文件的大小、修改时间、存储路径等)以及内容(以下简称数据)。对象存储区别于块存储(DAS,SAN)和文件存储(NAS系统,NFS,CIFS),核心是将数据通路(数据读或写)和控制通路(元数据)分离,构成键值对,访问时候通过key访问。所以云存储访问时候可以通过HTTP协议post,get请求通过key值去下载数据访问。

云录制服务就是通过和CDN 结合,录制下的内容存放在云端,云存储。

CDN加速

存储只是存放在一台或多台服务器上但是地点是单一的,如果对于用户分布分散业务来说,访问肯定是低效缓慢一个是I/O压力,一个是地区偏远的来说访问速度慢。

这种情况结合使用CDN服务可以有效解决。

CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。

直播软件搭建

访问流程举个例子:

 

1. 用户向浏览器输入 www.web.com 这个域名,浏览器第一次发现本地没有dns缓存,则向网站的DNS服务器请求; 2.网站的DNS域名解析器设置了CNAME,指向了www.web.51cdn.com,请求指向了CDN网络中的智能DNS负载均衡系统; 3.智能DNS负载均衡系统解析域名,把对用户响应速度最快的IP节点返回给用户; 4.用户向该IP节点(CDN服务器)发出请求; 5.由于是第一次访问,CDN服务器会向原web站点请求,并缓存内容; 6.请求结果发给用户。 CDN加速可以做网页加速,下载文件加速,动态加速,那和我们音视频相关的主要是点播加速以及CDN直播,如下图:

 

访问链接如:abc.com/abc.mp3 形式。对于对象存储而言是没有任何格式的概念的。所以任何形式都可以去下载。但是有时候希望有些音视频文件能够浏览器支持直接打开播放,那是对格式有要求的,多数浏览器支持的是mp3的音频文件,h264+aac的mp4封装的视频文件,可以直接浏览器打开播放。Safari的话有个特例可以支持m3u8文件。

 

CDN相关基本概念如下:

加速域名: 由用户提供的需要被CDN加速的域名 源站地址: IP或域名,CDN节点从这里获取原始资源 边缘节点:CDN分发的载体,可以理解成离用户最近的缓存节点 回源: CDN边缘节点未命中时会从源站拉取资源 平台类型: 被加速资源的类型,如WEB页面、大文件下载、视频点播等等 缓存策略: CDN服务器保存的一套针对用户文件的缓存策略,根据缓存策略判断文件是否超时需要回源 防盗链: 终端用户访问加速域名下的资源时,CDN服务器根据此配置判断是否应该提供资源 刷新: 清除CDN缓存节点指定的文件或目录资源 预取: 将文件资源预加载到CDN缓存节点 运营商:电信,联通,移动,长城宽带等区域:上海,广东,江苏,浙江......等 区域覆盖:本运营商本地覆盖,跨运营商本地覆盖,本运营商跨区覆盖,跨运 营商跨区覆盖。

CDN直播

CDN直播是和我们直播业务场景最紧密的部分了。借用一下阿里官网的直播图如下,各厂商CDN直播服务都是如此。

  1. 采集视频流
  2. 推流到CDN节点(其实对于云存储来说就是个文件上传的过程)
  3. CDN节点转到直播中,直播中心类似于强大的具有计算能力的中间源,可以提供额外服务诸如落存(录制,录制到云存储,可以进行点播通过CDN外链访问),转码,审核等。
  4. 直播中间分发到CDN节点
  5. 播放

  1. 音视频的推流解决方案: 第一步和第二步,其实对客户而言只要提供一个 rtmp 推流地址给我们就可以了。与我们对接只要在接口addstreampublisURL 里面填写这个推流地址就可以往 CDN 推流了。rtmp地址需要客户自己去申请一个备案过的域名未备案的只能走海外了,然后在CDN厂商去生成一对基于这个域名的推拉流地址。

比如我申请了域名是 abc.com,那么在CDN那边厂商生成的一对推拉流地址格式如下:

推流地址: rtmp://xxpull.abc.com/(直播空间名或者有些叫APPNAME)/(流名/streamname) 拉流地址有三种: rtmp://xxpull.abc.com/(直播空间名或者有些叫APPNAME)/(流名/streamname)

xxpull.abc.com/(直播空间名或者有些叫…

xxpull.abc.com/(直播空间名或者有些叫…

直播软件搭建

上面流名可以随时创建,一个流名就代表一组流。 我们可以看到拉流有三种格式:rtmp,m3u8(HLS),flv(Http-flv) 大家可能比较关心这三种拉流的区别:

协议HTTP-FLVRTMPHLS
全称RTMP over HttpReal Time Message ProtocolHTTP Living Streaming
传输层HTTP长链接TCP 长链接HTTP短链接
视频格式flvflvTS文件(m3u8)
原理同RTMP,协议端口80每个时刻数据收到立即转发集合一段时间数据,生成ts 切片更新m3u8索引
延时3~5s10~30s3~5s
Web支持H5需要插件H5需要插件支持
其他播放时需要多次请求网络要求高需要flash,不便于seek跨平台支持差需要flash插件

注意: 网页端如果播放rtmp 或者flv 形式 的直播流,需要flash插件支持,由于手机web端基本无法调用flash插件,所以手机web端一般使用hls(即m3u8)的形式进行直播

如何选择拉流方式: PC/Phone+直播+实时性要求高:使用flash播放RTMP。 . PC/Phone+直播+没有实时性要求:使用RTMP或者HLS均可。 . PC/Phone+点播:使用HTTP-FLV或者HLS。 . PC/Phone+WEB+直播:想啥呢,老老实实用HLS吧。 再来看下咱们的推拉流的域名地址:

rtmp://xxpull.abc.com/(直播空间名或者有些叫APPNAME)/(流名/streamname)

客户自己提供的一级域名是abc.com,然后再CDN厂商配置后生成二级域名xxpull.abc.com(推流)和xxpull.abc.com(拉流)。

然后客户需要自己在域名管理处自己将域名做个C记录(CNAME)到CDN提供的域名上面去。何为C记录?可以理解为就是我域名在CDN厂商的映射别名,这样子DNS解析后先解析到CDN厂商的CNAME然后,CNAME解析到CDN节点IP服务器推拉流。

关于上面的地址,还有一点是我们看到有时候地址后面问号?后还有一串内容,这是鉴权。直播推拉流鉴权基本都是时间戳鉴权,时间戳+token的格式。

理解了地址接下来我们遇到CDN集成直播推不了问题可以先做下简单排查,排查是否是在CDN直播部分配置相关问题。

  1. 首先如果是带鉴权的地址,那我们就先看下时间是否过期了,拿出里面的时间戳,然后date -r (时间戳)看看是否过期

接下来,拿出地址里面的域名,dig/nslookup一下看下解析如何,

 

 

上图结果是正常的,域名有C记录对应到CDN厂商的域名,CDN厂商的域名可以解析附近可用的CDN节点服务器IP,这个结果告诉我们域名配置是OK的,但是配置OK不代表一定可用。接下来检查本地访问到的CDN节点是哪里,如下图

 

 

直播软件搭建

ping返回的IP 218.92.209.38, 检查这个IP的地址以及运营商,www.ipip.net/ip.html

直播软件搭建

 

查下本地的出口IP地区是哪里,比较是否CDN节点和本地出口差的距离很远或者不是一个运营商,如果这样子会发生延迟高,甚至无法访问的问题。

 

可以访问这个 [ping.huatuo.qq.com 查看本地出口IP] (ping.huatuo.qq.com查看本地出口ip/)

 

 

检查下来结果还不错~没问题。

直播软件搭建

FAQ:

  1. 直播CDN端卡顿咋办? 如果从我们声网转推的CDN,问题发生点可能出现在我们频道内或者CDN部分。 这里介绍一下CDN端的初步排查 A, 检查是否协议造成的问题。三种推流格式rtmp,flv,hls 使用同种网页播放器尝试或者ffplay,VLC ,网页播放器如 imgcache.qq.com/open/qcloud… www.cutv.com/demo/live_t… B.检查是否和播放器适配有关,不同播放器尝试一下 C.查看本地网络带宽,网络不好的比对值是直播的码率,假如推流是1M 的码率,那么观看端至少是8M 以上的带宽才能够支持这个直播流 www.speedtest.net/ D. 通过ping域名检查推流CDN节点是否正常 E.检查推流源(如果声网转推看频道内)
  2. 直播延时高咋办? a. 使用rtmp和flv一般是5s左右,如果hls比较高大于10s b. 检查CDN端GOP设置是否过大,一般情况下1~2s c. 使用不同播放器是否延时一致,因为播放器可能缓存了数据,由于缓存,导致播放的是几秒前的 d. 检查网络,由于 jitter 抖动或者网络不稳定等因素,造成的直播累加 e. 检查推流源,测试直接推CDN和经过比如我们声网转推后的延时差多少

本文转载自网络,感谢(声网Agora)的分享,转载仅为分享干货知识,如有侵权欢迎联系云豹科技进行删除处理


http://chatgpt.dhexx.cn/article/ojloFw0H.shtml

相关文章

暑期实习+秋招面经合集(更新ing)

大纲 开篇 自我介绍 :面试官你好,我叫林飞武,是一名通信工程大三学生,对计算机专业有着浓厚兴趣并且未来有志于在互联网的测试领域有深入发展。全套学习了计算机专业的专业课,计算机网络,操作系统等&#…

DNSPod十问王征:为什么你的网站无人问津?

📢 DNSPod十八周年庆将至,下期十问交给你来提问——《你,十问DNSPod》!评论区留下你想问DNSPod团队的问题,一旦提问被选中,将得到十八周年纪念T恤!详情请移步至DNSPod公众号十八周年庆推送。 广…

阿里云ACP认证考试笔记

课件:https://gitee.com/HanFerm/technical-documentation/tree/master/阿里云acp教材 本文档为公开内容 一、ACP是干嘛的 内容范围: 历史 二、阿里云综述 技术架构 优势 三、弹性计算 ECS ECS的组成与功能 ECS是由多个并列又相互关联的产品概念组成…

在互联网上,没有人知道你是一条狗?

1993 年,《纽约客》(The New Yorker)杂志刊登一则由彼得施泰纳(Peter Steiner)创作的漫画:标题是【On the Internet, nobody knows you’re a dog.】 这则漫画中有两只狗:一只黑狗站在电脑椅上…

分库分表和NewSQL如何选择?分库分表真的适合你的系统吗?

曾几何时,“并发高就分库,数据大就分表”已经成了处理 MySQL 数据增长问题的圣经。 面试官喜欢问,博主喜欢写,候选人也喜欢背,似乎已经形成了一个闭环。 但你有没有思考过,分库分表真的适合你的系统吗&am…

分库分表不一定适合你的系统,聊聊分库分表和NewSQL如何选择

曾几何时,“并发高就分库,数据大就分表”已经成了处理 MySQL 数据增长问题的圣经。 面试官喜欢问,博主喜欢写,候选人也喜欢背,似乎已经形成了一个闭环。 但你有没有思考过,分库分表真的适合你的系统吗&am…

分库分表真的适合你的系统吗?聊聊分库分表和NewSQL如何选择

曾几何时,“并发高就分库,数据大就分表”已经成了处理 MySQL 数据增长问题的圣经。 面试官喜欢问,博主喜欢写,候选人也喜欢背,似乎已经形成了一个闭环。 但你有没有思考过,分库分表真的适合你的系统吗&am…

分库分表和 NewSQL 到底怎么选?

文章来源:【公众号:CoderW】 目录 背景分表分库分库分表的成本NewSQLNewSQL 平滑接入方案NewSQL 真的有那么好吗?NewSQL 的应用分库分表和 NewSQL 到底怎么选? 背景 曾几何时,“并发高就分库,数据大就分表”…

软考初级-信息处理技术员

22年下半年也是顺利通过了软考初级-信息处理技术员,明年再报一次软设,今年上半年软设下午题没过,总结还是代码敲的少,想的太多hh,下面来看看我总结的上午题考点,非常感谢我好友老郑教我指点了我excel的函数…

学术交流 | InForSec 2023年网络空间安全国际学术研究成果分享及青年学者论坛

隐私计算研习社 InForSec定于2023年4月8日~9日(周六、日)在南方科技大学举办“InForSec 2023年网络空间安全国际学术研究成果分享及青年学者论坛”。本次学术活动将邀请在网络空间安全顶级会议上发表论文的研究者分享他们的最新研究成果&…

用matlab绘制光滑曲线(plot画出的为折线)

x[0 0.1 0.16 0.27 0.41 0.48 0.59 0.8] y[5 9 70 118 100 17 0 5]; 那么用plot画出的函数为折线,如下图: 要想把那个折点平滑掉。像论文中那样,具体采用样条函数:下面是样条函数的定义: spline function 一类分段&…

matlab plot画曲线/直线/椭圆

本博文源于matlab基础,每个图像一个案例引入,大家简单看,直接照猫画虎去套用就行了。 画直线 例子:画y2*x3 范围为[1,10] 代码: >> x1:10; >> y2*x3; >> plot(y) >> 画曲线 在区间[-Π,Π…

Matlab图形绘制(一)三维曲线

文章目录 1.三维曲线常用函数第一个例子第二个例子第三个例子:(更改线性,颜色)第四个例子:(有返回值的情况) 1.三维曲线常用函数 plot3函数,用于绘制3D图形的一个非常常用的函数。 …

【MATLAB】动态绘制曲线图(二维曲线)

先看效果✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 主程序: 加载数据的部分我省略了,就是data1这个矩阵 close all; X1:25; set(gcf,unit,normalized,position,[0.3,0.25,0.5,0.5]); %figure窗口位置、大小设置 ylabel(人数) xlabel(日期) title(2022年11月重庆…

MATLAB----绘制三维曲线

参考于:中国大学慕课科学计算于MATLAB语言专题四“4.4三维曲线” 1.plot3函数 plot3(x,y,z,选项) plot3用来绘制三维曲线,与plot用法类似。当x,y,z为同型矩阵时,以x,y,z对应列绘制曲线,曲线条…

matlab画平滑曲线的两种方法

自然状态下,用plot画的是折线,而不是平滑曲线。 有两种方法可以画平滑曲线,第一种是拟合的方法,第二种是用spcrv,其实原理应该都一样就是插值。下面是源程序,大家可以根据需要自行选择,更改拟合…

matlab参数方程画曲线

求x2 - 3x 1 0 x -5:0.1:5; y1 x.x-3x1; y2zeros(size(x)); plot(x,y1,x,y2); f (x) xx-3x1 x1fzero(f,0.5) x2 fzero(f,2.5) x [0.2,1.8,2.5] y [1.3,2.8,1.1] z [0.4,1.2,1.6] plot3(x,y,z) grid on axis([0,3,1,3,0,2]) t linspace(0,10*pi,200) %生成有200个元素…

matlab,多条曲线画到一张图上

在matlab中,经常遇到画图问题,甚至,有时候需要把其他软件中的数据,导出来,用matlab处理。 此处给出,用matlab处理数据的一些简单方法。 1)matlab加载excel文件 首先,数据在excel中&a…

利用matlab描点绘制平滑曲线

【本文所使用的matlab代码放在最后辽^_^】 figure 1是描点绘制的折线图,如图所示并不光滑。 通过进行曲线平滑,得到了比较美观光滑的figure 2,于是就可以在论文报告中插入使用啦! 【matlab代码如下:】 x1[11.2,11.4,1…

Matlab画平滑曲线的两种方法( 拟合或插值后再用plot即可)

自然状态下,用plot画的是折线,而不是平滑曲线。 有两种方法可以画平滑曲线,第一种是拟合的方法,第二种是用spcrv,其实原理应该都一样就是插值。下面是源程序,大家可以根据需要自行选择,更改拟合…