6.4 LFLiveKit框架介绍

LFLiveKit框架是实现直播推流的开源框架,利用H264和AAC硬编码,支持GPUImage美化,rtmp传输推流,弱网络丢帧,展性非常强,支持动态切换码率功能。

LFLiveKit的集成

  • 1.LFLiveKit导入之前,需要先导入一些相关类库:UIKit、Foundation、AVFoundation、VideoToolbox、AudioToolbox、libz、libstdc++。
  • 2.导入依然有两种方式
  • 3.引入头文件
#Import <LFLiveKit/LFLiveKit.h>

注意:如果导入LFLiveKit无需再导入GPUImage,LFLiveKit已经为我们集成了GPUImage。如图6-4所示

图6-4

LFLiveKit的基础架构

LFLiveKit的基础架构如表6-1所示。

表6-1

类名 说明
LFLiveSession 是整个sdk核心,提供对外部的主要接口。其主要功能有:管理推流开关,管理音视频录制及渲染,管理录制渲染后的音视频编吗,管理编吗后的数据上传,管理音视频的基础配置,回调推流状态和异常上报等。
LFLiveAudioConfiguration 音频配置,配置相关音频信息(音频质量,码率,采样率,声道数)
LFLiveVideoConfiguration 视频配置,配置相关音频基本信息(视频质量,码率,帧数,分辨率)和应用配置如最大最小帧率等。
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 本地采样:通过本地采样监控缓冲区,可实现相关切换帧率码率等策略

LFLiveKit的简单使用

Objective-C

- (LFLiveSession*)session {
    if (!_session) {
        _session = [[LFLiveSession alloc] initWithAudioConfiguration:[LFLiveAudioConfiguration defaultConfiguration] videoConfiguration:[LFLiveVideoConfiguration defaultConfiguration]];
        _session.preView = self;
        _session.delegate = self;
    }
    return _session;
}

- (void)startLive { 
    LFLiveStreamInfo *streamInfo = [LFLiveStreamInfo new];
    streamInfo.url = @"your server rtmp url";
    [self.session startLive:streamInfo];
}

- (void)stopLive {
    [self.session stopLive];
}

//MARK: - CallBack:
- (void)liveSession:(nullable LFLiveSession *)session liveStateDidChange: (LFLiveState)state;
- (void)liveSession:(nullable LFLiveSession *)session debugInfo:(nullable LFLiveDebug*)debugInfo;
- (void)liveSession:(nullable LFLiveSession*)session errorCode:(LFLiveSocketErrorCode)errorCode;

Swift

// import LFLiveKit in [ProjectName]-Bridging-Header.h
#import <LFLiveKit.h> 

//MARK: - Getters and Setters
lazy var session: LFLiveSession = {
    let audioConfiguration = LFLiveAudioConfiguration.defaultConfiguration()
    let videoConfiguration = LFLiveVideoConfiguration.defaultConfigurationForQuality(LFLiveVideoQuality.Low3, landscape: false)
    let session = LFLiveSession(audioConfiguration: audioConfiguration, videoConfiguration: videoConfiguration)

    session?.delegate = self
    session?.preView = self.view
    return session!
}()

//MARK: - Event
func startLive() -> Void { 
    let stream = LFLiveStreamInfo()
    stream.url = "your server rtmp url";
    session.startLive(stream)
}

func stopLive() -> Void {
    session.stopLive()
}

//MARK: - Callback
func liveSession(session: LFLiveSession?, debugInfo: LFLiveDebug?) 
func liveSession(session: LFLiveSession?, errorCode: LFLiveSocketErrorCode)
func liveSession(session: LFLiveSession?, liveStateDidChange state: LFLiveState)

results matching ""

    No results matching ""