LFLiveKit架构简介

LFLiveSession

LFLiveSession 是整个sdk的核心,提供对外部的主要接口。主要功能有:管理推流开关、管理音视频录制及渲染、管理录制渲染后的音视频编码、管理编码后的数据上传、管理音视频的基础配置,回调推流状态和异常上报等。

LFLiveAudioConfiguration

音配配置,配置相关音频信息(音频质量、码率、采样率、声道数)

LFLiveVideoConfiguration

视频配置,配置相关视频的基本信息(视频质量、码率、帧数、分辨率)和应用配置如最大、最小帧率等。

LFVideoCapture 

视频管理类,管理视频的输入和输出。同时处理业务需求,如:美颜、亮度、水印等效果,使用了一个第三方GPUImage处理渲染效果。

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的一个属性,可以管理视频类的输入的输入设备的输出设备,并且通过GPUImage来进行一些图片的滤镜的操作,然后输出,通过代理方法回调给LFLiveSession。

4、LFH264VideoEncoder,LFHardwareVideoEncoder,LFHardwareAudioEncoder是管理音视频编码的类。LFLiveSession接收到经过滤镜处理后的回调后,通过音视频编码类对buffer进行编码,并且在编码结束以后通过代理方法回调给LFLiveSession。

5、LFStreamRTMPSocket是数据上传管理类(目前只用rtmp上传),在LFLiveSession接收到编码结束的回调后,就可以用LFStreamRTMPSocket进行数据上传,并提供网络状态回调和网络异常回调。

6、LFStreamingBuffer相对就比较灵活了,其功能主要是提供了一套根据本地缓冲区在规定时间内的量来回调缓冲区buffer是增加还是减少。如果需要在这方面进行一定的优化可以在回调中实现切换帧率等方法。在LFLiveKit里面是没有具体实现这种策略的后续处理方法,只是回调了增加还是减少的状态。

缺点:每一个buffer数据上传后,没有回调上传的结果。如果可以这样的话,可以根据上传的结果来判断推流端的具体网络状况。自身逻辑可以添加切换线路或者降低码率来实现直播质量的优化。

视频配置

分辨率:视频画面的大小,分辨率越高画面越清晰,分辨率控制着画面的清晰度。

采样帧数:每秒的画面数,视频是由很多帧画面连贯起来的。帧数越高越流畅。人眼识别16帧(别人统计的数字我也不清楚)以上就很难感觉出来画面的卡顿。帧率控制画面的流畅度。

码率:每秒显示的图片压缩后的数据量。码率控制着画面的清晰度。

注:

1、体积 = 码率 * 时间

2、压缩前每秒的数据量= 帧率 * 分辨率 = 码率 * 压缩比

1.分辨率是被AVCaptureSession控制的,它有长宽固定比例的值提供选择,不能自定义比例。例:AVCaptureSessionPreset640x480
 2.帧率和码率虽然能自定义设置,但是不建议自定义设置,可以通过直接设置LFLiveVideoQuality来配套的配置这些属性的值。
 3.LFLiveVideoConfiguration还包含了最大最小帧率、最大最小码率和最大关键帧的设置。

声道数:单声道的声道数为1个声道,双声道的声道数为2个声道,立体声道的声道数默认是2个声道,立体声道(4声道)的声道数为4个声道。普通食品是两个声道,左右声道。也就是左耳麦和右耳麦,多数视频都是左右混合到一起了,有的配音视频区分左右声道,一边是原声,一边是配音。还有第三种声道形式,就是2.1省道,那个.1只的是低频段环绕立体声。

采样率:音频采样率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真是自然。在当今的主流的采集卡上,采样频率一般分为22.05KHz、44.1KHz、48KHz三个等级。22.05KHz只能达到FM广播的声音品质,44.1KHz则是理论上的CD音质界限,48KHz则更加准确一些。LFLiveKit中默认是44.1KHz。

音频码率(比特率)比特率是指将数字声音由模拟格式转化成数字格式的采样率。比特率表示单位时间(1秒)内传送的比特数bps的速度。通常我们使用kbps(通俗的讲就是每秒钟1000比特)作为单位。128kbps = 磁带(手机立体声MP3播放器最佳设定值,低档MP3播放器最佳设定值)。LFLive默认是96kbps。

缓存区的长度:这个也是SDK自己定义的,用于声音在视频编码的时候判断,内存过大的时候暂缓编码的作用,保证内存的稳定性的作用。缓存区长度和声道数相关,这个在SDK里面是定位1024*2* numberOfChannels

原文地址:https://www.cnblogs.com/chenjiangxiaoyu/p/7308395.html