LFLiveKit如何推1080p流

說在最前面!

感謝開源!!!

做過直播的朋友們肯定不會不熟悉來瘋的這個開源框架 LFLiveKit

通過它我們可以通過簡單的幾行代碼就能進行高清的視頻直播推流。如果自己寫我覺得我得改行了。

不過。。。我們老板要求手機能直播1080p ???♂?。。

好吧 那就翻代碼唄
先找到這個文件LFLiveVideoConfiguration
有關視頻推送配置都在這個文件中

先在LFLiveVideoConfiguration.h文件中加個枚舉值方便后面調用

  • 視頻分辨率枚舉 主要加了LFCaptureSessionPreset1080x1920 這個枚舉
/// 視頻分辨率(都是16:9 當此設備不支持當前分辨率,自動降低一級)
typedef NS_ENUM (NSUInteger, LFLiveVideoSessionPreset){
    /// 低分辨率
    LFCaptureSessionPreset360x640 = 0,
    /// 中分辨率
    LFCaptureSessionPreset540x960 = 1,
    /// 高分辨率
    LFCaptureSessionPreset720x1280 = 2,
    /// 1080p分辨率
    LFCaptureSessionPreset1080x1920 = 3,
    // 4 : 3
    LFCaotureSessionPreset480x640 = 4,
};
  • 視頻分辨率詳細配置枚舉 加了這個枚舉LFLiveVideoQuality_High4
/// 視頻質量
typedef NS_ENUM (NSUInteger, LFLiveVideoQuality){
    /// 分辨率: 360 *640 幀數:15 碼率:500Kps
    LFLiveVideoQuality_Low1 = 0,
    /// 分辨率: 360 *640 幀數:24 碼率:800Kps
    LFLiveVideoQuality_Low2 = 1,
    /// 分辨率: 360 *640 幀數:30 碼率:800Kps
    LFLiveVideoQuality_Low3 = 2,
    /// 分辨率: 540 *960 幀數:15 碼率:800Kps
    LFLiveVideoQuality_Medium1 = 3,
    /// 分辨率: 540 *960 幀數:24 碼率:800Kps
    LFLiveVideoQuality_Medium2 = 4,
    /// 分辨率: 540 *960 幀數:30 碼率:800Kps
    LFLiveVideoQuality_Medium3 = 5,
    /// 分辨率: 720 *1280 幀數:15 碼率:1000Kps
    LFLiveVideoQuality_High1 = 6,
    /// 分辨率: 720 *1280 幀數:24 碼率:1200Kps
    LFLiveVideoQuality_High2 = 7,
    /// 分辨率: 720 *1280 幀數:30 碼率:1200Kps
    LFLiveVideoQuality_High3 = 8,
    /// 分辨率: 1080 * 1920 幀數:24 碼率:1200Kps
    LFLiveVideoQuality_High4 = 9,
    /// 分辨率: 480 * 640 4 : 3
    LFLiveVideoQuality_Medium4 = 10,
    /// 默認配置
    LFLiveVideoQuality_Default = LFLiveVideoQuality_Low2
};

在LFLiveVideoConfiguration.m 中 修改代碼

先到方法 + (instancetype)defaultConfigurationForQuality:(LFLiveVideoQuality)videoQuality outputImageOrientation:(UIInterfaceOrientation)outputImageOrientation;
中加入 LFLiveVideoQuality_High4 這個枚舉的case

case LFLiveVideoQuality_High4: {
        configuration.sessionPreset = LFCaptureSessionPreset1080x1920;// 增加
        configuration.videoFrameRate = 24;//幀數 越高越流暢 打過fps游戲的都懂
        configuration.videoMaxFrameRate = 24;
        configuration.videoMinFrameRate = 15;
        configuration.videoBitRate = 1400 * 1000; //bit率越高越清晰 為了手機不是特別燙 我這設的不是很高
        configuration.videoMaxBitRate = 2160 * 1000;
        configuration.videoMinBitRate = 500 * 1000;
        configuration.videoSize = CGSizeMake(1080, 1920);// size 這里決定輸出時視頻尺寸的大小
    }
        break;

接著設置一下手機的采集率
在這個方法中- (NSString *)avSessionPreset
增加case

case LFCaptureSessionPreset1080x1920:{////
        avSessionPreset = AVCaptureSessionPreset1920x1080;
    }
    break;

其他還需要修改以下方法

#pragma mark -- Custom Method
- (LFLiveVideoSessionPreset)supportSessionPreset:(LFLiveVideoSessionPreset)sessionPreset {
    AVCaptureSession *session = [[AVCaptureSession alloc] init];
    AVCaptureDevice *inputCamera;
    NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
    for (AVCaptureDevice *device in devices){
        if ([device position] == AVCaptureDevicePositionFront){
            inputCamera = device;
        }
    }
    AVCaptureDeviceInput *videoInput = [[AVCaptureDeviceInput alloc] initWithDevice:inputCamera error:nil];
    if ([session canAddInput:videoInput]){
        [session addInput:videoInput];
    }
    if (![session canSetSessionPreset:self.avSessionPreset]) {
        if (sessionPreset == LFCaptureSessionPreset1080x1920) { //====增加
            sessionPreset = LFCaptureSessionPreset720x1280; //====增加
        } else if (sessionPreset == LFCaptureSessionPreset720x1280) {
            sessionPreset = LFCaptureSessionPreset540x960;
            if (![session canSetSessionPreset:self.avSessionPreset]) {
                sessionPreset = LFCaptureSessionPreset360x640;
            }
        } else if (sessionPreset == LFCaptureSessionPreset540x960) {
            sessionPreset = LFCaptureSessionPreset360x640;
        } else {
            sessionPreset = LFCaotureSessionPreset480x640;
        }
    }
    return sessionPreset;
}
- (CGSize)captureOutVideoSize{
    CGSize videoSize = CGSizeZero;
    switch (_sessionPreset) {
        case LFCaptureSessionPreset360x640:{
            videoSize = CGSizeMake(360, 640);
        }
            break;
        case LFCaptureSessionPreset540x960:{
            videoSize = CGSizeMake(540, 960);
        }
            break;
        case LFCaptureSessionPreset720x1280:{
            videoSize = CGSizeMake(720, 1280);
        }
            break;
        case LFCaptureSessionPreset1080x1920: { // ====增加
            videoSize = CGSizeMake(1080, 1920);
        }
            break;
        case LFCaotureSessionPreset480x640: {
            videoSize = CGSizeMake(640, 480);
        }
            break;
        default:{
            videoSize = CGSizeMake(360, 640);
        }
            break;
    }
    if (self.landscape){
        return CGSizeMake(videoSize.height, videoSize.width);
    }
    return videoSize;
}

需要獲取具體LFLiveVideoConfiguration文件移步 項目地址

具體路徑在 一些第三方的使用? ? ?一些第三方的使用? ? ?Tool? ? ?Resource? ? ?LFLiveKit? ? configuration

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容