直播系统平台开发的了解、入门、熟练、精通并不容易
理解编写程序开发的功能文档是一件容易的事,毕竟市场上有用那么多的优秀的程序可以借鉴。但是想要把一些直播程序功能实现的的门槛很高。用代码实现功能是一个十分困难的任务。一套优秀的程序,需要极强的使用上便利性,还有优秀的UI交互逻辑,完善的功能和便于理解操作逻辑;简洁优美的界面设计......
可以说良好的直播源码 直播代码是高效稳定的基础,完善架构能力和有效易用的基础是程序开发的基石。用心开发的直播程序才能充分满足用户需求,每个技术步骤都做到稳定可行可以真正解决直播系统平台开发的痛点。
直播系统平台开发:可以分为 采集、前处理、编码、传输、解码、渲染, 推流, 拉流、连麦、直播、互动等几个环节如下:
采集 :包含图像采集和音频采集
图像采集设置前置摄像头、后置摄像头,并配置采集的参数、图像数据的长宽、fps、输出的方向、横屏竖屏等,然后从回调中取到数据。音频采集和编码主要面临的挑战在于:噪声消除(Denoise)、回声消除(AEC)算法等。前期不需要音频数据处理需求的时候, 只需配置音频采集的采样频率、采样精度和声道。
前处理
现在直播美颜已经是标配了,80%的主播没有美颜根本没法看
美颜算法需要用到GPU编程,需要懂图像处理算法的人,没有好的开源实现,要自己参考论文去研究。难点不在于美颜效果,而在于GPU占用和美颜效果之间找平衡。GPU虽然性能好,但是也是有功耗的,GPU占用太高会导致手机发烫,而手机发烫会导致摄像头采集掉帧,可能原因是过热会导致CPU降低主频。
编码
要采用硬编码,软编码720p完全没希望,勉强能编码也会导致CPU过热烫到摄像头。
硬编码兼容性又是一个大坑,android上要有人去填。编码要在分辨率,帧率,码率,GOP等参数设计上找到最佳平衡点。
传输
封包最主要注意的一个点是时间戳。
因为用的 AVPacket 封包,每个包都会有一DST(Decode Time Stamp)、PST (Presentation Time Stamp) 参数,从字面上可以理解,就是解码时间和显示时间,在没有 B 帧存在的情况下 DTS 的顺序和 PTS 的顺序应该是一样的。这块还涉及到重连和丢帧,用户的网络情况波动断开了,会进行重连。不想要卡顿,必然要加大缓冲,会导致延迟高,延迟高影响互动性,要做权衡。
解码和渲染
拉流获取封装的视频数据后,必须通过解码器解码、渲染后才能在播放器上播放
它是编码的逆过程,是指从音视频的数据中提取原始数据。前面介绍的H.264和H.265编码格式都是有损压缩,所以在提取后的原始数据,并非原始采样数据,存在一定的信息丢失。
推流
要想用于推流还必须把音视频数据使用传输协议进行封装,变成流数据。
常用的流传输协议有RTSP、RTMP、HLS等,使用RTMP传输的延时通常在1–3秒,对于手机直播这种实时性要求非常高的场景,RTMP也成为手机直播中最常用的流传输协议。
拉流
拉流实际是推流的逆过程
首先通过播放端获取码流,标准的拉流格式有RTMP、HLS、FLV等。RTMP是Adobe的专利协议,开源软件和开源库都支持的比较好,如开源的librtmp库,播放端只要支持flashPlayer的就能非常简单的播放RTMP直播,直播延迟一般在1–3秒。HLS是苹果提出的基于HTTP的流媒体传输协议,HTML5可以直接打开播放,通过微信、QQ等软件分享出去,用户也可以直接观看直播,可以说手机直播app,HLS拉流协议是必须支持的。
视频直播连麦
直播过程中,直播者与观众通过麦克风、摄像头等工具沟通交流
帮助双方进行更有高效地沟通,也可以为更多行业场景带来极大的体验提升。而连麦技术的创新更是使得直播中多人连麦互动成为可能。
以上是媒体模块,还有信令控制,登录、鉴权、权限管理、状态管理等等,各种应用服务,消息推送,聊天,礼物系统,支付系统,运营支持系统。后台还有数据库,缓存,分布式文件存储,消息队列,运维系统等。
一个直播系统平台开发在技术方面的要求很高,尤其是CDN一块专业性很强,要么就用标准化的直播源码技术解决方案——毕竟直播平台技术过决定着及格线,真正的核心竞争力在于产品本身怎么样。
文(山东布谷科技马庄)