实时音视频开发学习7 - CDN直播与回放

2020-08-25 12:07:54 浏览数 (1)

CDN直播观看

适用场景

CDN直播观看也叫“CDN旁路直播”,由于TRTC采用的是UDP协议进行传输音视频数据,而标准CDN则采用RTMP/HLS/FLV等协议进行数据传输,所以需要将TRTC中的音视频数据旁路到直播CDN中。

使用CDN可以解决超高并发观看问题,因为TRTC单房间支持的最大人数上限为10万人,且计费价格更便宜。此外还解决了移动端页面的播放问题,因为大多数浏览器对WebRTC协议兼容不理想,所以在Web页面直播还是推荐使用HLS播放协议。

在这里补一句上一篇内容的东西:云端录制开通不收费,但是一旦点播了就会收费,这个要注意,以免带来不便。

原理解析

腾讯云会使用一批旁路转码集群,将 TRTC 中的音视频数据旁路到直播 CDN 系统中,该集群负责将 TRTC 所使用的 UDP 协议转换为标准的直播 RTMP 协议。

单路画面直播:

当音视频房间只有一个主播时,TRTC的旁路推流和标准的RTMP协议功能相同,但TRTC的UDP较RTMP有更强大的弱网络抗性。

混合画面旁路直播:

音视频房间内若有多个主播,而CDN观看只希望拉去一路音视频画面,就需要使用云端混流服务将多路画面合并成一路,具体内容在下一章内容。

前提条件:

开通云直播服务,准备两个域名一个为播放域名,一个为推流域名,并且两个域名都完成了备案。域名可以在腾讯云进行购买,备案流程从备案小程序进入,填写备案信息然后交由腾讯云审核,在经过约20个工作日的管局审核,审核通过即可。

使用步骤

开通旁路推流服务:

登录实时音视频控制台,在左侧导航栏的应用管理中,选择功能配置,找到旁路推流设置,并单击打开。

配置域名和CNAME:

登录云直播控制台,找到左侧导航栏中的域名管理,点击“添加域名”。输入已经备案的域名,然后选择域名类型为播放域/推流域,最后选择加速区域,默认为中国大陆。

域名添加完后,系统会自动分配一个CNAME域名(以.liveplay.myzijiebao.com)。CNAME域名不能直接访问,需要在域名服务提供商处完成CNAME配置

直播推流

云直播本质上是一个广播的过程,类似于电视台直播节目通过有线电视网发送给千家万户。云直播包含采集和推流设备、云直播服务和播放设备TCPlayer。

准备工作:

开通腾讯云直播服务和添加已经备案的推流域名。

1.获取推流地址:

2.选择生成类型为:推流域名。

3.选择您在域名管理中已添加的推流域名。

4.填写 AppName,AppName为区分同一个域名下多个 App 的地址路径,默认为 live。

5.填写自定义的流名称 StreamName,例如:liveteststream。

6.选择地址过期时间,例如:2019-10-18 23:59:59。

7.单击 【生成地址】即可。

直播推流方式有多种,主要为PC端推流、Web端推流、移动端推流、直播SDK推流以及小程序推流。这里以Web端推流为例。

首先登录云直播控制台,选择辅助工具下的Web推流,并在Web端推流页面进行如下设置。

选择推流域名。

1.填写 AppName,AppName为区分同一个域名下多个 App 的地址路径,默认为 live。

2.填写自定义的流名称 StreamName,例如:liveteststream。

3.选择过期时间,例如:2019-10-30 23:59:59。

4.单击【开始推流】,并授权允许调用摄像头,即可开始推流。

这里需要注意的是Web推流功能需要您的设备安装了摄像头,并且浏览器支持Flash插件调用摄像头权限。选择的推流域名我在尝试时好像不能使用云直播提供的默认推流域名。

配置CNAME

配置CANME完成后需要15分钟生效,若设置多层CNAME,云直播无法有效解析结果。

腾讯云设置方法:

登录腾讯云控制台,搜索域名管理或DNS解析DNSPod进入域名服务控制台。在“我的域名”中单机右侧的“解析”进入指定域名的解析页面。

单击“添加记录”,在新增列中填写域名CNAME记录,内容主要包括主机记录、记录类型、线路类型、记录值以及TTL。最后单机保存即可完成CNAME的添加。

域名解析各种记录类型之间是有优先级差异的,在主机记录相同的情况下,同一条线路有几种不同的记录类型不能共存,否则将会提示冲突。CNAME 记录与除 CNAME 记录以外的任何记录类型都冲突,需要先删除掉其他记录,再进行配置

需要注意的是,推流域名和播放域名均需要完成CNAME解析,设置的CNAME需要15分钟才能生效,需要自己前往域名解析服务商配置CNAME记录。

阿里云设置方法:

1.登录阿里云控制台,进入【云解析DNS】>【域名解析】。

2.选择您需添加 CNAME 的域名,单击【解析设置】。

3.选择【添加记录】,在添加记录页进行如下设置:

记录类型:选择 CNAME。

主机记录:填写子域名的前缀。若播放域名为play.myzijiebao.com,则添加play;若需要直接解析主域名myqloud.com,则输入@;若需要解析泛域名,则输入*。

解析路线:建议选择默认。

记录值:填写腾讯云控制台域名管理页域名对应的 CNAME 值,格式为domain.livecdn.liveplay.myzijiebao.com。

TTL:建议填写10分钟。

4.单击【确定】即可。

关联TRTC直播的streamId

开启旁路推流功能后,TRTC房间里的每一路画面都配备了一路对应的播放地址,该地址为http://播放域名/live/[streamId].flv

自定义streamId:

系统指定:

如果没有设置streamId,系统会默认为您生成一个缺省的streamId,其生成规则由SDKAppID、bizid、roomId、userId和streamType共同生产。其中bizid为直播推流域的前缀。

拼装规则如下:

控制多路画面的混合方案需要调用 TRTCCloud 的 setMixTranscodingConfig 接口启动云端混流转码,该接口的参数 TRTCTranscodingConfig 可用于配置各个子画面的摆放位置和大小和混合画面的画面质量和编码参数。详细内容在高级应用中。

获取播放地址并对接播放

完成streamId的映射后既可以得到直播播放地址,当用户通过直播流ID进房后,可以得到三路播放地址rtmp协议播放地址、flv协议播放地址和hls协议播放地址。

这个推荐flv播放地址,因为该播放地址具有低延时、秒开效果好且稳定可靠性强的特点。对接方案有IOS、Android、web和微信小程序。这里以web端为例讲解。

Web端对接播放

腾讯云web超级播放器TCPlayerLite是为了解决在手机和PC浏览器上播放音视频流的问题,使得能够在不依赖用户安装APP的情况下就能在朋友圈和微博等社交平台进行传播。

直播和点播

直播是实时的,一旦主播停止直播,直播地址将销毁,且直播没有进度条。而点播是播放存储在服务器上的某个文件,只要其未被删除就能一直观看,且有播放时的进度条。

协议支持

TCPlayerLite的视频播放本身不是网页代码实现,而是靠浏览器支持,因此,不是所有手机浏览器都能符合预期的效果。一般用于网页直播的视频源地址是以M3U8结尾的地址,但是其延迟较大,一般为20~30s。下列为各视频协议的兼容性。

准备工作

播放页面引入TcPlayer脚本

如果在域名限制区域,则引入下面连链接,但是直接在本地网页是无法调用,web播放器无法处理跨域问题。

防止播放容器,并设置ID属性。

播放模式

当我们获取到正确的播放格式URL地址时,可以通过VLC播放器播放,或者使用javaScript中的video标签进行浏览器端的呈现。

VLC播放:

下载好VLC media player播放器,选择媒体—打开网络—串流,将直播拉流地址粘贴在相应的位置。我们也可以通过“更多选项”设置缓存的大小和开始播放的起始/停止时间,最后点击播放即可。

Web端展示:

仅需要一个创建一个TcPlayer实力,传入两个参数,一个为videoID,另一个为options对象,用于设置播放地址、播放器宽高等内容。

这里需要注意,如果你想很快跑起来,m3u8地址最好换位mp4播放地址,因为存在一个跨域问题。

PC浏览器支持也支持Flash,可以获得更好的延迟体验感

给播放器设置封面

设置播放器封面只需要通过poster属性设置即可,可以只传一个图片的字符串,或者传入一个对象。该对象包含属性style和src,前者为图片显示方式,有default、stretch和cover三个值,后者为图片路径。具体案例见demo8—setCover。

需要注意的是,在某些移动端设置封面会无效。

清晰度转换

播放器本身是没有能力去改变视频清晰度的,视频源只有一种清晰度,称之为原画,而原画视频的编码格式和封装格式多种,Web 端无法支持播放所有的视频格式,如点播支持以 H.264 为视频编码,MP4 和 FLV 为封装格式的视频。

清晰度依赖于视频云。对于直播,来自主播端的原始视频会在腾讯云进行实时转码,分出多路转码后的视频,每一路视频都有其对应的地址,例如“高清-HD”和“标清-SD”。

对于点播,一个视频文件上传到腾讯云后,您可以对该视频文件进行转码,产生其它几种清晰度的视频,例如“高清-HD”和“标清-SD”

需要注意的是,原始视频未经过腾讯云转码是不能直接用于播放的,换言之,录制视频就不能播放。案例见demo8—pictureQuality。

错误提示语

通过设定wording可以在相应错误报出是显示对应的内容,如2032为“请求视频失败,请检查网络”。以下为错误代码表:

相应属性和方法见:https://cloud.tencent.com/document/product/454/7503#.E5.AE.9E.E4.BE.8B.E6.96.B9.E6.B3.95.E5.88.97.E8.A1.A8

优化播放延时

开启旁路直播后,由于经过了直播CDN的扩散和分发,观看延时比直接在TRTC直播的延时要高。为此,腾讯云提出使用TXLivePlayer播放器来降低延时效果。

左侧iPhone 6s使用了TRTC SDK进行直播,右侧小米使用TXLivePlayer播放FLV协议的直播流。

通过设置TXLivePlayerConfig中的bAutoAdjustCacheTime、minAutoAdjustCacheTime和maxAutoAdjustCacheTime来实现极速模式,值分别为YES、1和1。

*更多直播内容请观看:https://cloud.tencent.com/document/product/267/20385

0 人点赞