HarmonyOS鸿蒙Next中AVScreenCaptureRecorder怎么在让录制时没有声音和横屏录制
HarmonyOS鸿蒙Next中AVScreenCaptureRecorder怎么在让录制时没有声音和横屏录制 AVScreenCaptureRecorder怎么在让录制视频没有声音和横屏录制
setMicEnabled
setMicEnabled(enable: boolean): Promise<void>
设置麦克风开关。使用Promise异步回调。
系统能力: SystemCapability.Multimedia.Media.AVScreenCapture
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| enable | boolean | 是 | 麦克风开关控制,true代表麦克风打开,false代表麦克风关闭。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<void> | Promise对象,无返回结果。 |
错误码:
以下错误码的详细介绍请参见Media错误码。
| 错误码ID | 错误信息 |
|---|---|
| 5400103 | IO error. Return by promise. |
| 5400105 | Service died. Return by promise. |
import { BusinessError } from '@kit.BasicServicesKit';
avScreenCaptureRecorder.setMicEnabled(true).then(() => {
console.info('Succeeded in setMicEnabled avScreenCaptureRecorder');
}).catch((err: BusinessError) => {
console.error(`Failed to setMicEnabled avScreenCaptureRecorder. Code: ${err.code}, message: ${err.message}`);
});
至于横屏录制这就有点难控制了,毕竟横屏不横屏是用户手中的设备的方向问题。
更多关于HarmonyOS鸿蒙Next中AVScreenCaptureRecorder怎么在让录制时没有声音和横屏录制的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,使用AVScreenCaptureRecorder进行无声和横屏录制,需配置录制参数。设置AVScreenCaptureRecorderConfig的enableAudio为false以禁用音频。横屏录制通过设置videoRotation为VideoRotation.ROTATION_90或ROTATION_270实现。在调用startRecording()前应用这些配置。
在HarmonyOS Next中,使用AVScreenCaptureRecorder实现静音录制和横屏录制,可以通过配置录制参数来实现。
1. 静音录制
静音录制的核心是不采集音频信号。在创建AVScreenCaptureRecorder时,通过AVRecorderConfig中的audioSourceType参数进行控制。
关键代码示例:
import { avRecorder } from '@kit.AudioKit';
import { BusinessError } from '@kit.BasicServicesKit';
let avRecorderConfig: avRecorder.AVRecorderConfig = {
// 视频配置
videoSourceType: avRecorder.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV, // 或 VIDEO_SOURCE_TYPE_SURFACE_RGBA
// 将音频源类型设置为“无”,即可实现静音
audioSourceType: avRecorder.AudioSourceType.AUDIO_SOURCE_TYPE_NONE, // 这是关键设置
profile: {
// ... 您的视频profile配置(编码格式、分辨率、帧率等)
},
url: 'fd://xx', // 您的输出URL,例如文件描述符
rotation: 90 // 如果需要旋转,在此设置(见下方横屏部分)
};
let avScreenCaptureRecorder: avRecorder.AVRecorder | null = null;
// 创建实例并配置
avRecorder.createAVRecorder().then((recorder: avRecorder.AVRecorder) => {
avScreenCaptureRecorder = recorder;
avScreenCaptureRecorder.prepare(avRecorderConfig);
}).catch((err: BusinessError) => {
console.error(`Failed to create or prepare AVRecorder, code: ${err.code}, message: ${err.message}`);
});
说明: 将audioSourceType设置为avRecorder.AudioSourceType.AUDIO_SOURCE_TYPE_NONE,录制器将不会采集和编码任何音频数据,从而实现静音录制。
2. 横屏录制
横屏录制通常指录制内容的画面方向为横向。这主要通过两种方式实现:
方式一:设置录制配置中的旋转参数(推荐)
在AVRecorderConfig的profile中或直接在同级设置rotation参数,对编码输出的视频流进行旋转。
let avRecorderConfig: avRecorder.AVRecorderConfig = {
videoSourceType: avRecorder.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
audioSourceType: avRecorder.AudioSourceType.AUDIO_SOURCE_TYPE_NONE, // 静音
profile: {
videoBitrate: 2000000,
videoCodec: avRecorder.VideoCodec.VIDEO_CODEC_TYPE_AVC,
videoFrameWidth: 1920, // 横屏分辨率:宽 > 高
videoFrameHeight: 1080,
videoFrameRate: 30
},
url: 'fd://xx',
// 关键:设置旋转角度。例如,将原始画面顺时针旋转90度,使竖屏内容以横屏方向编码。
rotation: 90 // 可选值:0, 90, 180, 270
};
说明: rotation参数会直接修改视频编码时的元数据,播放器会根据此信息正确渲染横屏画面。此方法不改变原始输入数据,仅改变输出方向。
方式二:在视频数据源端处理
如果您的应用是通过getInputSurface()获取Surface并自行绘制内容,可以在绘制时控制内容的朝向,例如通过图形库(如OpenGL ES)的视图和投影矩阵将画面渲染为横屏。这种方式更灵活,但需要您管理绘制逻辑。
结合使用
将上述两种配置结合,即可实现静音且横屏的屏幕录制:
let avRecorderConfig: avRecorder.AVRecorderConfig = {
videoSourceType: avRecorder.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
audioSourceType: avRecorder.AudioSourceType.AUDIO_SOURCE_TYPE_NONE, // 实现静音
profile: {
// 配置横屏分辨率
videoFrameWidth: 1920,
videoFrameHeight: 1080,
// ... 其他视频参数
},
url: 'fd://xx',
rotation: 90 // 实现横屏输出(如果原始内容需要旋转)
};
注意事项:
- 权限:确保应用已申请必要的屏幕录制权限(
ohos.permission.MEDIA_LOCATION和ohos.permission.CAPTURE_SCREEN)。 - 兼容性:
rotation参数的具体支持情况请参考对应HarmonyOS Next版本的API文档。 - 输入源:
videoSourceType需根据实际数据源类型(如YUV或RGBA的Surface)正确设置。
通过以上配置,AVScreenCaptureRecorder即可录制出无音频、画面方向为横屏的视频。

