HarmonyOS 鸿蒙Next录制屏幕文件为空如何解决
HarmonyOS 鸿蒙Next录制屏幕文件为空如何解决
import media from ‘@ohos.multimedia.media’;
import fs from ‘@ohos.file.fs’;
import { CommonConstants } from ‘…/constants/CommonConstants’;
import { BusinessError } from ‘@kit.BasicServicesKit’;
export class AVScreenCaptureDemo {
private screenCapture?: media.AVScreenCaptureRecorder;
captureConfig: media.AVScreenCaptureRecordConfig = {
// 开发者可以根据自身的需要设置宽高
frameWidth: 768,
frameHeight: 1280,
// 参考应用文件访问与管理开发示例新建并读写一个文件fd
fd: 0,
};
constructor(captureConfig:media.AVScreenCaptureRecordConfig) {
this.captureConfig = captureConfig;
}
// 调用startRecording方法可以开始一次录屏存文件的流程,结束录屏可以通过点击录屏胶囊停止按钮进行操作。
public async startRecording() {
this.screenCapture = await media.createAVScreenCaptureRecorder();
if (this.screenCapture != undefined) {
// success
} else {
// failed
return;
}
this.screenCapture?.on(‘stateChange’, async (infoType: media.AVScreenCaptureStateCode) => {
switch (infoType) {
case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_STARTED:
console.info(“录屏成功开始后会收到的回调”);
break;
case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_CANCELED:
this.screenCapture?.release();
this.screenCapture = undefined;
console.info(“不允许使用录屏功能”);
break;
case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_STOPPED_BY_USER:
this.screenCapture?.release();
this.screenCapture = undefined;
console.info(“通过录屏胶囊结束录屏,底层录制会停止”);
break;
case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_INTERRUPTED_BY_OTHER:
console.info(“录屏因其他中断而停止,底层录制会停止”);
break;
case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_STOPPED_BY_CALL:
console.info(“录屏过程因通话中断,底层录制会停止”);
break;
case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_MIC_UNAVAILABLE:
console.info(“录屏麦克风不可用”);
break;
case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_MIC_MUTED_BY_USER:
console.info(“录屏麦克风被用户静音”);
break;
case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_MIC_UNMUTED_BY_USER:
console.info(“录屏麦克风被用户取消静音”);
break;
case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_ENTER_PRIVATE_SCENE:
// 目前可以从系统直接注册监听到进入隐私场景
console.info(“录屏进入隐私场景”);
break;
case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_EXIT_PRIVATE_SCENE:
console.info(“录屏退出隐私场景”);
break;
case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_STOPPED_BY_USER_SWITCHES:
console.info(“用户账号切换,底层录制会停止”);
break;
default:
break;
}
})
this.screenCapture?.on(‘error’, (err:BusinessError) => {
console.info(“处理异常情况”,JSON.stringify(err.message));
})
await this.screenCapture?.init(this.captureConfig);
// 豁免隐私窗口
// let windowIDs = [57, 86];
// await this.screenCapture?.skipPrivacyMode(windowIDs);
await this.screenCapture?.startRecording();
}
// 可以主动调用stopRecording方法来停止录屏。
public async stopRecording() {
if (this.screenCapture == undefined) {
// Error
return;
}
await this.screenCapture?.stopRecording();
// 调用release()方法销毁实例,释放资源。
await this.screenCapture?.release();
// 最后需要关闭创建的录屏文件fd, fs.close(fd);
}
}
4 回复
楼主文件的 fd 参数没给吧,我也是用的官方这个代码,但是模拟器中使用只有音频没有视频
fd参数是怎样的,有完整的demo么,官方的demo离谱,都不完整,创建fd和关闭都没有啊
可以检查下权限是否有申请,参考使用AVScreenCaptureRecorder录屏保存到文件(ArkTS)
针对HarmonyOS鸿蒙Next录制屏幕文件为空的问题,以下是一些可能的解决方案:
- 检查存储空间:确保设备存储空间充足,避免因空间不足导致录制文件丢失或损坏。
- 录制时间管理:如果录屏时间过长,尝试将录屏分割成多个小段进行保存,避免因处理或保存错误导致部分视频内容丢失。
- 系统稳定性:确保鸿蒙OS Next系统稳定,及时更新系统补丁,避免因系统故障导致录屏文件异常。
- 权限设置:检查录屏应用是否具有存储访问权限,确保应用能够正常写入录屏文件。
- 清理缓存:尝试清理系统缓存或重启设备,解决因缓存问题导致的录屏文件异常。
此外,还应确保录屏操作正确无误,避免因误触按键或关闭应用等操作导致数据丢失。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。