云直播CSS 你问我答 第9季
本期共解答10个问题
Q1:为什么云直播控制台配置了一种录制格式,但却录制了两种不同格式的录制文件?
- 首先通过查询录制任务列表接口确定是否在同时间创建了录制任务进行录制;
- 确定是否是TRTC旁路到云直播CDN的流,如果是,并登录TRTC控制台,在应用管理中找到你正在使用的应用,查看是否开启了云端录制,关闭云端录制。
Q2:为什么网络正常,推流上行码率依然不稳定,导致播放卡顿?
在推流端去ping 推流域名地址,通过返回的节点IP查询是否附近的节点,比如主播端所在的城市是上海,而返回的节点IP是天津的IP,这样可能DNS解析异常导致的,建议客户检查下网络环境和本地DNS解析,或者更换DNS服务商。
Q3:在调用混流接口的时候报错1:"Message":"InnerErrCode : [ -10021 ],IrnerErrMsg: [ Params Error ]?
目前混流后台暂此支持2000及以下的分辨率,遇到 -10021 报错时,一般是混流输入某条流分辨率宽或高超过2000。可以使用 FFplay 播放直播流,查看源流分辨率,是否超过2000。
Q4:云直播在播放中造成延迟高的因素有哪些?
整个直播的全链路大致是这样的:采集->预处理->编码->封装->协议栈打包->[网络传输]->接流服务->转码服务->分发服务->[CDN 节点]->[网络传输]->协议栈解包->解封装->解码->渲染->显示。
- 编码/解码的延时主要来自于编解码器的 buffer 控制策略,一般是由 QoS 策略来控制,当编码器中数据产生后,如果协议栈不能及时把数据发送出去,网络产生了阻塞,会在推流端的缓冲空间里产生累积,从而导致推流的延时增加,同样的,播放器如果没有收到足够多的数据给解码器解码,也会导致解码器的缓冲空间一直无法填满,从而产生渲染延时增加。
- CDN 节点延时的累积主要是下行节点,因为 TCP 的可靠性,如果播放器没有及时地从 CDN 节点将数据取走,CDN 节点会将这些数据累积(通常是按帧堆积),从而导致延时增加。
- 网络传输的延时原因比较多,路由跳数多,中间路由转发慢,协议建连时间长等等,都可能造成延时增加,而且大多数的直播协议像 RTMP、HLS、HDL 都是基于TCP 的,TCP 本身的建连速度以及可靠性保证都有可能导致延时增加。想解决掉网络传输延时高的问题,还是使用 UDP 更好。
Q5:云直播在播放中为什么会出现马赛克、画面模糊?
所谓马赛克,就是画面中一个个纯色的小方块,一般出现马赛克的原因是编码器压缩率太高,输出码率低而引起颜色信息丢失。
- 推流端,需要从编码参数上入手,选择合适的 H.264 编码,并对不同分辨率选择适合的码率和帧率。
- 播放端在播放时,如果播放的是分辨率、码率低的流,不要进行太大的渲染拉伸,比如源码流是 360×640 的时候,渲染的时候,就不要拉伸绘制到 1080P 的View 中。
- 光照环境问题,比如主播就是在一个光线很暗的环境中直播,摄像头在暗光下本 身的画面质量就不好,这个时候,要么主播换设备,要么换个光照好的环境。
Q6:云直播中推流配置了SEI消息,但是在拉流播放中却收不到SEI自定义消息?
检查对应推流域名是否配置了转码模版和水印模版,如果配置的话会在转码过程中丢失自定义消息,需要在转码中保留的话可以联系我们特殊配置。
Q7:在直播中怎么统计用户端的播放时长?
建议集成IMSDK的房间管理,通过SDK 里面的回调方法去记录每个用户进入房间的时间,退出房间的时间,然后根据对应的名称保存到对应的表格里面来计算每个客户端的观看时长
Q8:海外直播播放失败如何排查?
目前海外播放支持 HTTP-FLV、HLS、RTMP、WebRTC 播放。对于播放异常的问题,可以通过以下方式逐步排查:
- ping 域名是否能通? 如果不通,检查当前的网络环境。
- 获取到的 HTTP 的状态码是否为200? 如果非200,区分不同的失败情况,403通常是播放鉴权失败,检查防盗链计算格式是否符合要求,404通常是播放的流不在平台上,检查推流是否正常。
Q9:云直播在播放中为什么会出现杂音、噪音、回音?
这类情况一般的表现是有电流音或爆音,声音断断续续,回声明显等情况,常见的原因有:
- 采样率不一致,比如采集时的采样率是 16000kHz,播放时却是 48000kHz,这就会有明显的声音变化,另外,Android 5.0 之前版本的重采样转换功能存在缺陷,也是一部分声音问题的原因。这种情况需要采集端和编码端都统一好采样率,并处理好重采样转换问题。
- 网络抖动导致音频收包不及时,引起断断续续,这种情况在弱网、丢包率高等情况下容易发生,但一般情况下播放器都会有 QoS 策略,会进行加、减速播放。
- 启用回声消除引起的问题,这类情况一般是在部分 Android 设备上使用了一些回声消除算法引发的问题,解决方法通常是在这类设备上关闭回声消除。
- 使用混音导致的声音问题,这种情况一般只有一些特定的机型会遇到问题,需要从底层混音处理算法上解决,腾讯云 LiteAVSDK 的混音使用的是由腾讯音视频实验室提供的 TRAE 技术,混音问题较少。
Q10:音视频处理基本概念
采集与预处理
从设备中获取音视频数据的操作过程叫做采集,采集到的音频通常是pcm数据,视频有yuv或rgb数据,这些也叫音视频原始数据,对音视频原始数据直接进行波形或色彩处理的操作叫做预处理。常见的预处理操作,音频有变声、变调等,视频有美颜、滤镜、人脸识别等。
编解码
编码的目的主要是为了对音视频数据进行压缩,编码的方式叫做编码算法,常见的视频编码算法有H.264等,音视频编码算法有AAC等,解码是编码的逆操作。
封装文件
将编码后的音频数据和视频数据打包成一个文件的过程叫封装,封装后的常见文件格式有flv、mp4、ts、mp3等等。
音视频协议
用于传输音视频文件的网络协议叫音视频协议,或流媒体协议,常见的流媒体协议有rtmp、hls、http、udp、rtp/rtcp等等。