58技术沙龙第十三期-音视频技术实践

2019/07/30 17:30
阅读数 0



背景


2019年06月14日,由58集团技术工程平台联合人力资源部神奇学院共同组织的58集团技术沙龙第十三期,直播和音视频通话在58同城北京总部举办。沙龙邀请了腾讯云资深架构师张元涛、58基础体验部、58移动技术部。沙龙当日,腾讯云资深架构师张元涛、58基础体验资深开发工程师文立家、58移动技术部资深开发工程师张英,分别分享讨论了腾讯云上的视频云在各领域应用、实时音视频在58的技术实践、58移动端播放器推流技术的实现相关问题。


 

部分干货总结

 

一. 腾讯云上的视频云 


腾讯云经过多年的技术深耕,已经打造出完备的腾讯云视频生态,并且以视频云的形式进行对外技术输出。提供的直播、点播、实时音视频、急速高清的技术,在业内处于领先地位。广泛应用于教育、医疗、金融、娱乐等行业。


1. 直播

经过多年的技术积累,视频云的直播业务已经非常成熟,可以支持丰富的直播功能,文字互动、弹幕消息、飘星点赞、连麦互动等功能。同时在直播的协议上支持RTMP&HLS&FLV的多种直播的协议,拥有强大的资源能力,全国部署1100+加速节点,分布在各省市自治区;涵盖移动、联通、电信三大运营商,十几家中小型运营商;全网节点带宽储备100T+;所有的节点都部署在腾讯自建机房中,高规格安全级别及可用性;共享运营商服务高质量网络链路;可同时支持1.6T极速带宽增长。斗鱼、龙珠等知名的直播都已成功的接入。


2.点播一体化

腾讯云点播提供包括音视频存储管理、音视频转码处理、音视频加速播放的一站式解决方案。视频处理任务发起后需要一定的时间才能执行完成并输出结果(几分钟到几小时),它本质上属于一种离线任务。针对视频处理任务的特点,点播提供了一套“同步发起 + 异步感知”的任务体系,业务方可以同步地发起任务,并异步接收结果通知,感知任务的执行结果。通过任务流模式进行高效处理,可以根据不同的需求自定义模板进行任务流配置;采用标准的防盗链模式支持视频播放的权限控制。



3.实时音视频

腾讯实时音视频(Tencent-RTC)是腾讯云基于 QQ 十多年来在音视频通话技术上积累,提供全平台互通高品质实时视频通话服务的一款产品;支持微信小程序/H页面/APP/PC客户端等接入方式之间互通,通过本方案可快速从零开始搭建出实时音视频通信平台,很好的应用于在线教育、保险定损、远程医疗与微警务等场景。



4.极速高清

所谓的极速高清,即智能判断视频场景类型,对不同类型的视频优化处理,以更低的带宽给用户提供更高清的观看体验。利用深度学习模型判断直播视频类型,将直播场景分成游戏、室内、室外、体育、短视频、动漫六大类细分几十个小类场景;根据视频亮度和纹理变化复杂度、实时检测运动方向变化强度及结合场景分类配合最优编码参数;ROI人体检测特征提取对用户感兴趣和视觉关注的重点区域降噪及纹理亮度增强;深度学习模型预处理降噪增强处理应用。动态调整码率,转码过程中根据画面纹理、亮度、运动幅度等因子码率动态调整。



. 实时音视频通话在58的技术实践


实时音视频是基于微聊APP对文本图片沟通的一个补充,使连接更多样化,使用户沟通更加紧密;IP电话是对音视频电话的补充,被叫APP不在线或者没有APP的情况下进行通信。通过两个补充提高58用户的连通性。


1.实现架构

实时音视频采用的是WebRTC协议栈。目前实时音视频客户端已经支持了APP、PC、小程序极大助力业务的增长。主叫通过IM(微聊)创建的房间ID传输给被叫;通过长连接进行信令的传递;通过打洞中继服务完成NAT的穿透;通话管理是管理整个通话过程中的逻辑控制和主被叫的状态变化;信令转换&媒体中转服务负责处理媒体数据。



2.IP电话架构

音视频电话的集成在微聊中,如果被叫不在线或者没有微聊情况下,音视频电话不能呼叫到被叫,基于此类场景下,如果能直接打电话到被叫的手机上可以解决问题,所以IP电话应运而生。IP电话的选型是基于客户端改动最小的原则。所以,信令协议上依然采用WebRTC的协议栈,因此后端的服务需要将WebRTC转换为IP电话的SIP协议;媒体协议上依然采用RTP的协议,后端服务需要进行媒体的中转。通过信令的转换和媒体的中转实现音视频和IP电话进行打通。




3. 业务接入

音视频电话已经接入了58APP、赶集、招才猫、安居客、转转等业务,并在一些特定的场景下做了架构升级。

1)   二手车的业务需求,二手车的业务场景是C端的用户打音视频电话给B端车商,如果这时候B端车商不在线,就会损失了商机。所以B端商家希望可以转到自己的手机上,架构实现上可以通过拨打IP电话解决这个痛点,但同时考虑需求本身是想打音视频电话进行沟通看车。因此在优先打音视频电话,在呼叫4秒后,被叫不在线自动转为IP电话,只要被叫手机没有接听,如果被叫在线的话再转回音视频电话。保证在用户无感知的情况下提高连通性。

2)   招聘直面业务需求,需要将音视频录制下来。P2P(peer-to-peer)模式已经不再适合业务,架构上升级为PSP(peer-server-peer)模式,使所有的音视频流都经过服务端进行中转。信令&媒体服务中模拟出两个WebRTC的端进行和主被叫通信,并旁路录制音视频。



. 移动端直播推流在58的技术实践


58直播推流SDK是为58各业务线移动端接入直播推流功能提供的一站式解决方案。目前接入的业务案例有58房产、58部落、安居客、移动经纪人、商家通、美事等项目。提供了图像采集、音频采集、图像和音频处理、图像编码、音频编码、FLV封装、RTMP推流、直播间聊天等功能模块。



1.采集

直播的数据采集分为图像采集和音频采集,图像采集时通过手机摄像头获取的连续播放的图片数据,音频采集时通过录音器获取的音频模拟信号数据。

1)    图像采集的主要参数有分辨率、帧率、图像数据格式。

Ø  采集分辨率是摄像头的预览分辨率,与编码的分辨率不是同一个值,采集分辨率必须大于或等于推流分辨率,可以用屏幕分辨率作为采集分辨率,这样既能达到预览的最好效果,又不会因为图像过大,导致图像处理消耗过多资源。

Ø 帧率通常用FPS表示,是1秒时间内获取图像的帧数,其中一帧就是一副图画,通常设置在15~24之间,帧率越高视频流畅度就越好,画面越逼真。采集帧率最好等于推流帧率,保证推流的稳定性,如果摄像头无法设置额定的帧率,则应该设置一个比推流帧率更高的值,采集完后再进行丢帧。

Ø 摄像头通常的采集为YUV格式数据,Y”表示明亮度,“U”和“V”则是色度、饱和度。YUV的几种常用排列格式有I420、YV12、NV12、NV21,处理图像数据前需要注意格式转换。

2)     音频采集的主要参数有采样率、声道、位宽。

Ø  采样率是录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然,每个采样点需要用一个数值表示,这个数值越大则声音越细腻,这个数值的最大位数就是位宽。58使用的默认采样率为44100Hz,声道支持单声道与双声道(立体声)、位宽16bit。


2.处理

处理模块分为图像处理和音频处理。58直播推流图像处理有裁剪、水印、滤镜、美颜、田字格、高斯模糊、灵魂出窍、时间幻影等功能,是基于OpenGL ES的图像渲染功能实现的图像处理,音频处理有降噪、回声消除、自动增益等功能。


3.编码

视频数据编码的主要意义是压缩数据,原始图像数据、音频数据的体积是非常巨大的,按照目前的带宽不可能完成实时的音视频网络传输需求,所以音视频数据必须经过编码压缩。58直播流选择的图像编码格式为H264、音频编码格式为AAC,这也是各大直播技术平台选择的主流编码方式。编码方式为软编码、硬编码都支持。图像软编码使用的是open264,音频软编码使用的是faad,使用软编码的优点是在android、ios各系统版本、各机型都能实现h264编码功能且稳定性较好,缺点是编码时会占用大量CPU资源性能较差。硬编码使用的是MediaCodec、VideoToolbox,分别调用了Android、iOS的硬件编码器进行数据编码。优点是编码过程几乎不占用CPU资源且速度较快,缺点是不同手机使用的编码器生产厂商不一致,部分编码器兼容性较差,需要额外适配部分机型的编码器。


4.封装与传输

目前在直播行业内数据的封装格式主要采用的是FLV和MPEG2-TS,分别用于RTMP、HTTP-FLV和HLS协议进行网络数据传输。58直播推流采用的数据封装格式是FLV、数据推送协议是RTMP。RTMP的优点是业内支持好,有较成熟技术实现方案,实现简单、开发成本低。缺点是RTMP是基于TCP的协议,弱网情况下丢包较多传输效果差。直播流支持HTTP-FLV和HLS协议进行拉流,使用HTTP-FLV协议拉流的正常延迟时间为1~3秒,HLS主要是H5环境下拉流使用的协议,数据封装格式在CDN从FLV转码为MPEG2-TS,延迟时间较长通常在10秒左右。


5.直播中的疑难问题解决

1)    马赛克

图像产生马赛克的原因有光线环境差、预览分辨率小于编码分辨率、码率低、帧率低、gop帧太小、码率模式设置问题、profile参数设置问题。业务端分辨率、码率的设置可以参考下图:



2)    花屏、绿屏

花屏产生的原因有关键帧丢失、图像输入输出格式配置不正确。绿屏产生的原因有部分硬编码器宽高只支持16的倍数否则会有部分绿屏问题,部分安卓硬编码器编码数据为多slice的h264数据,iOS部分机器硬解码时需要适配。


3)    延时、卡顿、声画不同步

基于RTMP、HTTP-FLV实现的直播正常延时3s以内,导致延时的主要原因有采集处理延时、编码延时、网络延时、协议延时、缓存延时。卡顿的主要原因有网络环境差、设备性能差、音视频流时间戳设置不正确。声画不同步的主要原因有网络环境差、时间戳设置不正确。58直播SDK会自动适配网络环境与设备性能动态调整码率与分辨率达到更好的流畅性与清晰度。


. 总结


本次技术沙龙,对直播和音视频通话的实践有着重大的意义,对于直播、音视频有了新的认识和理解。腾讯云资深架构师张元涛全方面的解释了直播中的各个环节的优化策略。尤其秒开的优化更是全面完善;利用深度学习在直播场景下内容感知编码的应用,极大的提高了低带宽下用户的观看体验。音视频下在58的实践中赋能业务,助力业务发展。音视频电话和ip电话的灵活组合使用户链接更加紧密。58对直播的技术实现细节做了充分讲解,并对直播中的各种疑难问题提供了丰富的排查及解决经验。


. 展望


实时音视频在58实践中目前支持H264&VP8的编解码,后续还会在H265&VP9的协议支持上做升级,积极拥抱新协议带来的质量提升。直播与AI结合可以实现更丰富的图像、音频的处理功能。H265、VP9等编码协议对移动端设备性能有较高的要求,但随着硬件性能不断提升,在移动端音视频领域普及会越来越广泛,可极大提升图像质量并降低带宽。直播网络传输协议可升级为QUIC协议,能够极大的提升直播中的延时,使业务端得到更好的直播交互体验。


下期沙龙预告



本文分享自微信公众号 - 58技术(architects_58)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部