视频常用功能
更新时间: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 |