LFLiveKit的背景什么的就不一一介绍了,这里主要介绍它的功能实现的基础架构以下表:服务器
|
LFLiveKit网络 |
LFLiveSessionsession |
是整个sdk核心,提供对外部的主要接口。其主要功能有:管理推流开关,管理音视频录制及渲染,管理录制渲染后的音视频编吗,管理编吗后的数据上传,管理音视频的基础配置,回调推流状态和异常上报等。架构 |
LFLiveAudioConfigurationide |
音频配置,配置相关音频信息(音频质量,码率,采样率,声道数)优化 |
LFLiveVideoConfiguration编码 |
视频配置,配置相关音频基本信息(视频质量,码率,帧数,分辨率)和应用配置如最大最小帧率等。spa |
LFVideoCapture代理 |
视频管理类,管理视频的输入和输出。同时处理业务需求如:美颜,亮度,水印等效果。用了一个第三方:GPUIImage处理渲染效果调试 |
LFAudioCapture |
音频管理,管理音频的输入开关。这一起没有多大的定制,应用的原生的API便可。 |
LFH264VideoEncoder,LFHardwareVideoEncoder |
视频编码类,分别对应8.0之前和8.0之后的两种设备的视频编码类。都遵照LFVideoEncoding协议,并设置LFStreamSocketDelegate协议给session管理 |
LFHardwareAudioEncoder |
音频编码类,遵照LFVideoEncoding协议,并设置LFStreamSocketDelegate协议给session管理 |
LFFrame |
数据信息的基类,做为上传到服务器数据的基本模型 |
LFVideoFrame |
视频信息,做为上传到服务器视频数据的模型 |
LFAudioFrame |
音频信息,做为上传到服务器音频数据的模型 |
LFLiveStreamInfo |
推流信息:推流地址(目前主要应用rtmp推流);流状态;音视频配置信息;异常信息 |
LFStreamRTMPSocket |
数据上传管理类:开关数据上传,回调链接状态和异常。遵循LFStreamSocket协议,并设置LFStreamSocketDelegate给session管理 |
LFLiveDebug |
调试信息:这个是开发时候的内部表示,主要用于记录调试做用。 |
LFStreamingBuffer |
本地采样:经过本地采样监控缓冲区,可实现相关切换帧率码率等策略 |
其主要功能流程以下:
1.其中:LFLiveSession是整个sdk对外主要提供的接口,除了对外提供业务需求接口,并且管理了整个推流过程的不一样功能的实现,并添加了一系列的回调接口。
2.经过LFLiveAudioConfiguration,LFLiveVideoConfiguration这两个配置信息做为一个参数,给各个类传值基本码率等基本信息。
3.LFVideoCapture,LFAudioCapture做为LFLiveSession的一个属性,能够管理视频类的输入的输入设备和输出设备,而且经过GPUIImage来进行一些图片的滤镜的操做,而后输出,经过代理方法回调给LFLiveSession。
4.LFH264VideoEncoder,LFHardwareVideoEncoder,LFHardwareAudioEncoder是管理音视频编吗的类。LFLiveSession接受到通过滤镜处理后的回调后,经过音视频编码类对buffer进行编码,而且在编码结束之后经过代理方法回调给LFLiveSession。
5.LFStreamRTMPSocket是数据上传管理类(目前只用rtmp上传),在LFLiveSession接收到编吗结束的回调后,就能够用LFStreamRTMPSocket进行数据上传。并提供网络状态回调和网络异常回调。
6.LFStreamingBuffer相对就比较灵活了,其功能呢主要是提供了一套根据本地缓冲区在规定时间内的量来回调缓冲区buffer是在增长仍是在减小。若是须要在这方面进行必定的优化能够在回调中实现切换帧率等方法。在LFLiveKit里面是没有具体实现这种策略的后续处理方法,只是回调了增长仍是减小的状态。
缺点:每个buffer数据上传后,没有回调上传的结果。若是能够这样的话,能够根据上传的结果来判断推流端的具体网络情况。自身逻辑能够添加切换线路或者下降码率来实现直播质量的优化。
-----------------------------分割线-------------------------------------
新手上路,共同进步群号:240970537