视频常用功能

更新时间:2021-05-26

功能简介

主要包括视频参数的设定功能,如下:

  • 码率帧率、分辨率的设置
  • 切换前后置摄像头
  • 是否开启自适应分辨率

开发者可以根据不同场景进行调整,以达到较好的用户体验。

基础属性设置

LinkV SDK 通过 setAVConfig 方法来设置视频相关的属性,其中包含视频分辨率、帧率、码率等参数。最大码率决定在正常网络情况下视频的清晰度,最小码率决定在弱网或者网络抖动严重的情况下视频的最低清晰度。注:最小码率如果设置过大,会影响弱网条件下的视频帧率,流畅度

LVAVConfig 参数使用说明:

参数名称说明
videoEncodeResolution视频编码分辨率,如何与采集分辨率不一致会进行裁剪
videoCaptureResolution视频采集分辨率,如摄像头不支持会进行裁剪或缩放
bitrate视频编码码率,值越大,画面越清晰,受当前用户可用带宽影响
min_bitrate视频编码最小码率,最小码率能控制画面的最低清晰度
videoDegradationPreference视频降级偏好设置,在网络抖动情况下支持多种视频降级方案
fps视频帧率,控制编码输出帧率,帧率越大越流畅

使用默认值

如果不设置参数,会使用默认值*

/* 使用 默认 分辨率,码率,帧率 ( 640x480 分辨率  15帧   500000bps) */
LVAVConfig *config = [[LVAVConfig alloc] init];
/*
 *
 * 默认帧率 fps            为:15 fps
 * 默认最大码率 bitrate     为:500000 bps
 * 默认最小码率 min_bitrate 为:500000 bps
 * 默认 videoDegradationPreference 为0(码率自适应,带宽不足时,只会模糊,不降帧率分辨率)
 *
 */

手动配置

/* 使用 SDK 内置的分辨率 ( 640x480 分辨率  15帧   500000bps) */
LVAVConfig *config = [[LVAVConfig alloc] initWithVideoProfile:LVRTCVideoProfile_480P];

/* 最大码率, 单位 bps */
config.bitrate = 500000;

/* 最小码率 */
config.min_bitrate = config.bitrate / 3.0;

/* 帧率 */
config.fps = 15;

/* 维持分辨率不变,网络糟糕时会降低视频帧率,保持视频分辨率不变 */
config.videoDegradationPreference = LVVideoDegradationPreference_MAINTAIN_RESOLUTION;

/* 让配置生效 */
[[LVRTCEngine sharedInstance] setAVConfig:config];

相关内置策略配置

LVVideoDegradationPreference

自适应降级策略

  • 开启自适应策略后,可根据不同的场景自动调整分辨率、码率、帧率等,以下是支持的配置:
/**
 * 视频网络自适应降级策略
 */
typedef enum : NSUInteger {
    /**
     *  码率自适应,带宽不足时,只会模糊,不降帧率分辨率
     */
    LVVideoDegradationPreference_DISABLED = 0,

    /**
     *  维持帧率不变,网络糟糕时自动降低分辨率,保持帧率不变
     */
    LVVideoDegradationPreference_MAINTAIN_FRAMERATE = 1,

    /**
     *  维持分辨率不变,网络糟糕时降低视频帧率,保持分辨率不变
     */
    LVVideoDegradationPreference_MAINTAIN_RESOLUTION = 2,

    /**
     *  根据网络状态自动降低分辨率和帧率(测试功能,请勿使用)
     */
    LVVideoDegradationPreference_BALANCE = 3
} LVVideoDegradationPreference;

LVRTCVideoProfile

SDK 内置支持的分辨率

  • 支持多种分辨率、码率、帧率配置策略,可在 [[LVAVConfig alloc] initWithVideoProfile:LVRTCVideoProfile_480P] 中传递对应的配置枚举值进行设置,也可以直接创建 LVAVConfig 对象,设置自定义参数。
/**
 视频编码参数
 */
typedef NS_ENUM(NSInteger, LVRTCVideoProfile) {
    /**
        320x180   15   300
     */
    LVRTCVideoProfile_180P = 0,
    /**
        480x270   15   500
     */
    LVRTCVideoProfile_270P = 1,
    /**
        640x360   15   800
     */
    LVRTCVideoProfile_360P = 2,
    /**
        640x480   15   1000
     */
    LVRTCVideoProfile_480P = 3,
    /**
        960x540    15   1200
     */
    LVRTCVideoProfile_540P = 4,
    /**
        1280x720  15   1800
     */
    LVRTCVideoProfile_720P = 5
};

其它 API

切换摄像头

  • 通过指定前后摄像头,调用切换摄像头接口可以切换推流视频的来源
/* 切换摄像头 LVRTCCameraPositionBack | LVRTCCameraPositionFront */
[[LVRTCEngine sharedInstance] switchCamera:LVRTCCameraPositionFront];
/**
 * 前后摄像头枚举
 */
typedef NS_OPTIONS( NSUInteger, LVRTCCameraPosition )
{
    /**
     *  前置摄像头
     */
    LVRTCCameraPositionFront,


    /**
     *  后置摄像头
     */
    LVRTCCameraPositionBack,
};

设置是否自动调整视频输出方向

默认为打开,视频方向会自动跟随设备方向进行旋转,该方法仅对 SDK 内部采集的视频生效

  • 关闭后,开发者可以通过 setOutputVideoRotation 方法来自动调整视频的输出方向。
/*
 * 设置是否允许 SDK 自动根据设备的方向调整视频的输出方向
 * @param enable 打开和关闭(默认是 YES)
 */
[[LVRTCEngine sharedInstance] enableVideoAutoRotation:false];

手动管理视频输出方向

  • 设置手动管理视频输出方向,该方法需要先调用 enableVideoAutoRotation,将自动旋转方法关闭设置为 false 才能生效
/* @param rotation 视频输出方向,(默认是 LVVideoRotation_0) */
[[LVRTCEngine sharedInstance] setOutputVideoRotation:LVVideoRotation_0];

视频预处理

  • SDK 内部采集的视频数据在发送前会回调给开发者,开发者可以通过该回调直接修改采集的视频数据,完成视频的发送前预处理功能。

  • 使用场景:美颜、换脸、视频内容动态检测等

/// SDK 内部采集数据回调
/// @param videoFrame 视频原始数据
/// @return 处理后的视频数据,SDK 内部不会调用 CFRetain 增加引用计数, 会调用 CFRelease 减少引用计数, 视频开发者创建的视频对象
-(CMSampleBufferRef)OnCaptureVideoFrame:(CMSampleBufferRef)videoFrame;

常用分辨率、码率和帧率推荐

  • 如果是多人连麦视频通话场景,建议分辨率可以低一些, 以减少带宽消耗和解码消耗。
  • 如果是一对一的场景下,分辨率和码率可以稍微高一些,增加清晰度。
  • 最小码率建议设置为视频码率的三分支一

以下是推荐场景使用:

一对一多人连麦
分辨率 320 x 240、帧率 15 fps、码率 200 Kbps分辨率 160 x 120、帧率 15 fps、码率 65 Kbps
分辨率 640 x 360、帧率 15 fps、码率 800 Kbps分辨率 320 x 180、帧率 15 fps、码率 140 Kbps
分辨率 1280 x 720、帧率 15 fps、码率 1800 Kbps分辨率 320 x 180、帧率 15 fps、码率 140 Kbps