视频常用功能
更新时间:2021-05-26
功能简介
主要包括视频参数的设定功能,如下:
- 码率、帧率、分辨率的设置
- 切换前后置摄像头
- 是否开启自适应分辨率
开发者可以根据不同场景进行调整,以达到较好的用户体验。
基础属性设置
LinkV SDK
通过 setAVConfig
方法来设置视频相关的属性,其中包含视频分辨率、帧率、码率等参数。最大码率决定在正常网络情况下视频的清晰度,最小码率决定在弱网或者网络抖动严重的情况下视频的最低清晰度。注:最小码率如果设置过大,会影响弱网条件下的视频帧率,流畅度
LVAVConfig 参数使用说明:
参数名称 | 说明 |
---|---|
videoEncodeResolution | 视频编码分辨率大小,如何采集分辨率不一致会进行裁剪 |
videoCaptureResolution | 视频采集分辨率,如摄像头不支持会进行裁剪或者缩放 |
bitrate | 视频编码码率,值越大,画面越清晰,受当前用户可用带宽影响 |
min_bitrate | 视频编码最小码率,最小码率能控制画面的最低清晰度 |
videoDegradationPreference | 视频降级偏好设置,在网络抖动情况下支持多种视频降级方案 |
fps | 视频帧率,控制编码输出帧率,帧率越大越流畅 |
使用默认值
如果不设置参数,会使用默认值
// 使用 默认 分辨率,码率,帧率 ( 960x540 分辨率 15帧 1200000bps)
LVAVConfig mAVConfig = new LVAVConfig();
/*
默认帧率 videoFrameRate 为:15 fps
默认最大码率 videoTargetBitrate 为:1200000 bps
默认最小码率 videoMinBitrate 为:400000 bps
默认 videoDegradationPreference 为0(码率自适应,带宽不足时,只会模糊,不降帧率分辨率)
*/
手动配置
// 使用 SDK 内置的分辨率 ( 960x540 分辨率 15帧 1200000bps)
LVAVConfig mAVConfig = new LVAVConfig(LVAVConfig.PROFILE_540P);
// 视频最大码率, 单位 bps
mAVConfig.setVideoTargetBitrate(1200000);
// 最小码率
mAVConfig.setVideoMinBitrate(mAVConfig.getVideoTargetBitrate() / 3);
// 视频帧率
mAVConfig.setVideoFrameRate(15);
// 维持分辨率不变,也就是网络糟糕的时候会降低视频帧率,保持视频分辨率不变
mAVConfig.setVideoDegradationPreference(LVAVConfig.MAINTAIN_RESOLUTION);
// 设置音视频参数
mRtcEngine.setAVConfig(mAVConfig);
相关内置策略配置
videoDegradationPreference
自适应降级策略
- 开启自适应策略后,可根据不同的场景字使用调整分辨率,码率等。以下是支持的配置
/**
* 视频网络自适应降级策略
*/
public class LVAVConfig {
/**
* 维持帧率不变,网络糟糕时自动降低分辨率,保持帧率不变
*/
public static final int MAINTAIN_FRAMERATE = 1;
/**
* 维持分辨率不变,也就是网络糟糕的时候会降低视频帧率,保持视频分辨率不变
*/
public static final int MAINTAIN_RESOLUTION = 2;
}
LVRTCVideoProfile
SDK 内置支持的分辨率
- 支持多种分辨率,码率,帧率配置策略,可在
new LVAVConfig(LVAVConfig.PROFILE_540P)
中传递对应的配置枚举值进行设置。
public class LVAVConfig {
/**
* 320x180 15 300000
*/
public static final int PROFILE_180P = 0;
/**
* 480x270 15 500000
*/
public static final int PROFILE_270P = 1;
/**
* 640x360 15 800000
*/
public static final int PROFILE_360P = 2;
/**
* 960x540 15 1200000
*/
public static final int PROFILE_540P = 3;
/**
* 1280x720 15 1800000
*/
public static final int PROFILE_720P = 4;
};
其它 API
切换摄像头
- 通过指定前后摄像头,调用切换摄像头接口可以切换推流视频的来源
// 切换摄像头 LVConstants.CMRTCCameraPosition.FRONT | LVConstants.CMRTCCameraPosition.BACK
mRtcEngine.switchCamera(LVConstants.CMRTCCameraPosition.FRONT);
/**
* 摄像头类型枚举
*/
public static enum CMRTCCameraPosition {
/**
* 后置摄像头
*/
BACK(0),
/**
* 前置摄像头
*/
FRONT(1),
/**
* 外置摄像头
*/
EXTERNAL(2);
};
设置是否自动调整视频输出方向
- 开启后,设备旋转那么视频输出方向也会自动旋转。开启后,
setOutputVideoRotation
方法则会无效。
/**
* 设置是否允许 SDK 自动根据设备的方向调整视频的输出方向
* @param enable 打开和关闭(默认是 true)
*/
mRtcEngine.enableVideoAutoRotation(false);
手动管理视频输出方向
- 设置手动管理视频输出方向,该方法需要先调用
enableVideoAutoRotation
,将自动旋转方法关闭设置为 false 才能生效
/**
* 设置手动管理视频输出方向,该方法需要先调用 enableVideoAutoRotation,将自动旋转方法关闭才能生效
* @param rotation 视频输出方向,(默认是 LVConstants.CMVideoRotation.ROTATION_0))
*/
mRtcEngine.setOutputVideoRotation(LVConstants.CMVideoRotation.ROTATION_0);
常用分辨率、码率和帧率推荐
- 如果是多人连麦视频通话场景,建议分辨率可以低一些, 以减少带宽消耗和解码消耗。
- 如果是一对一的场景下,分辨率和码率可以稍微高一些,增加清晰度。
- 最小码率建议设置为视频码率的三分支一
以下是推荐场景使用:
一对一 | 多人连麦 |
---|---|
分辨率 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 |