HarmonyOS鸿蒙Next中AVScreenCaptureRecorder怎么在让录制时没有声音和横屏录制

HarmonyOS鸿蒙Next中AVScreenCaptureRecorder怎么在让录制时没有声音和横屏录制 AVScreenCaptureRecorder怎么在让录制视频没有声音和横屏录制

3 回复

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进行无声和横屏录制,需配置录制参数。设置AVScreenCaptureRecorderConfigenableAudiofalse以禁用音频。横屏录制通过设置videoRotationVideoRotation.ROTATION_90ROTATION_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. 横屏录制

横屏录制通常指录制内容的画面方向为横向。这主要通过两种方式实现:

方式一:设置录制配置中的旋转参数(推荐)AVRecorderConfigprofile中或直接在同级设置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 // 实现横屏输出(如果原始内容需要旋转)
};

注意事项:

  1. 权限:确保应用已申请必要的屏幕录制权限(ohos.permission.MEDIA_LOCATIONohos.permission.CAPTURE_SCREEN)。
  2. 兼容性rotation参数的具体支持情况请参考对应HarmonyOS Next版本的API文档。
  3. 输入源videoSourceType需根据实际数据源类型(如YUV或RGBA的Surface)正确设置。

通过以上配置,AVScreenCaptureRecorder即可录制出无音频、画面方向为横屏的视频。

回到顶部