在开发直播系统时,需要用到的技术非常多,例如:音视频采集与处理、音视频压缩、CDN分发等,每一个技术都够学好久了,下面就给大家介绍下一些常见的直播系统开发技术。
一、采集:包括图像采集和音频采集。
图像采集设置前置摄像头和后置摄像头,并配置采集参数、图像数据的长度和宽度、fps、输出方向、水平屏幕和垂直屏幕等。,然后从回调中获取数据。音频采集和编码面临的主要挑战是:噪声消除、回声消除算法等。当前期不需要音频数据处理时,只需要配置音频采集的采样频率、采样精度和频道。
二、预处理。
现在美颜已是标配,80%的主播没有美颜根本不能看。
美容算法需要GPU编程,需要懂图像处理算法的人,没有好的开源实现,需要参考论文进行研究。难点不在于美容效果,而在于GPU占用和美容效果之间的平衡。GPU虽然性能好,但也有功耗。GPU占用过高会导致手机烫伤,手机烫伤会导致摄像机采集掉帧,可能是因为过热会导致CPU降低主频。
三、代码。
一定要使用硬码,软码720p完全没有希望,勉强能够编码也会导致CPU过热烫到摄像机。
硬码兼容又是一个大坑,android上要有人填写。在分辨率、帧速率、码速率、GOP等参数设计中,编码应找到最佳平衡。
四、传输。
封包最重要的一点是时间戳。
由于使用的AVPacket封包,每一个封包都会有一个DST(DecodeTimeStamp),PST(PresentationTimeStamp)参数,从字面上可以理解,即解码时间和显示时间,在没有B帧的情况下,DTS的顺序和PTS的顺序应该是相同的。此块还涉及到重连和丢帧,当用户的网络波动断开时,将进行重连。如果不想卡顿,必须增加缓冲,会导致高延迟,高延迟会影响交互性,权衡。
五、解码和渲染。
获得封装视频数据后,必须通过解码器解码、渲染后才能在播放器上播放。
这是编码的逆过程,是指从音视频数据中提取原始数据。上述H.264和H.265编码格式都是有损压缩的,因此提取的原始数据,并非原始采样数据,而是存在一定的信息丢失。
六、推流。
为了推流,还必须使用传输协议将音视频数据封装成流数据。
常用的传输协议包括RTSP、RTMP、HLS等。用RTMP传输的延迟通常为1~3秒,在手机转播这一实时性非常高的情况下,RTMP也成为手机转播中最常用的传输协议。
七、拉流。
拉流其实是推流的逆过程。
先从播放端获取码流,标准的拉流格式有RTMP,HLS,FLV等。RTMP是Adobe的专利协议,开放源码软件和开放源码库都支持得比较好,比如开放源码的librtmp库,播放端只要支持flashPlayer,就可以非常简单地播放RTMP直播,直播延迟一般为1-3秒。Apple提出了基于HTTP的流媒体传输协议,HTML5可以直接打开播放,通过微信、QQ等软件共享,用户也可以直接观看直播,可以说手机直播app,HLS拉流协议是必须支持的。
八、录像直播连麦。
直播期间,直播者通过麦克风、摄像头等工具与观众交流。
协助双方进行更有效的沟通,也能给更多的行业场景带来极大的体验提升。而且连麦技术的创新更是的多人连麦互动成为可能。
上述就是媒体模块,其他的直播系统开发技术还有信令控制,登录,鉴权,权限管理,状态管理等,各种应用服务,信息推送,聊天,礼品系统,支付系统,操作支持系统。还有数据库,缓存,分布式文件存储,信息队列,运行系统等。
每一个技术都不是一两天能掌握的,所以想拥有自己的直播系统除了找有经验的人来帮忙,最好的办法还是找第三方来开发,因为不管是在技术、CDN、带宽上都是有很高门槛的。直播系统开发技术不过关,后期一旦出现问题,将会导致所有努力付之东流。