HarmonyOS鸿蒙Next中录制的视频,在相册及文件夹内无法播放
HarmonyOS鸿蒙Next中录制的视频,在相册及文件夹内无法播放
private videoProfile: media.AVRecorderProfile = {
fileFormat: media.ContainerFormatType.CFT_MPEG_4,
videoBitrate: 200000,
videoCodec: media.CodecMimeType.VIDEO_MPEG4,
videoFrameWidth: 1920,
videoFrameHeight: 1080,
videoFrameRate: 30,
audioBitrate: 48000,
audioChannels: 1,
audioCodec: media.CodecMimeType.AUDIO_AAC,
audioSampleRate: 48000,
}
let currConfig: media.AVRecorderConfig = {
audioSourceType: media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
videoSourceType: media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
profile: this.videoProfile,
url: fd://${this.Mp4fd},
rotation: 90,
location: {
latitude: 30, longitude: 130
}
}
其中,videoCodec和videoSourceType都尝试过各个枚举值。在录制视频结束保存到相册后,在相册播放会提示:当前格式暂不支持播放,请问怎么解决这个问题
更多关于HarmonyOS鸿蒙Next中录制的视频,在相册及文件夹内无法播放的实战教程也可以访问 https://www.itying.com/category-93-b0.html
如果prepare报错5400106当前使用的格式规格不支持,建议检查下video的url,在尝试按下面这种方式修改下再试试:
private async createVideoOutput() {
let {width, height} = this.selVideoProfile.size
let audioRoutingManager = audio.getAudioManager().getRoutingManager()
let deviceDesArray = audioRoutingManager.getDevicesSync(audio.DeviceFlag.INPUT_DEVICES_FLAG)
let micDeviceDes = deviceDesArray.find(value => {
let dt = value.deviceType
return dt == audio.DeviceType.MIC || dt == audio.DeviceType.DEFAULT
}) || {sampleRates: [audio.AudioSamplingRate.SAMPLE_RATE_12000], channelCounts: [audio.AudioChannel.CHANNEL_2]}
let aVRecorderProfile: media.AVRecorderProfile = {
audioBitrate: 48000,
audioChannels: 1,
audioCodec: media.CodecMimeType.AUDIO_AAC,
audioSampleRate: 48000,
fileFormat: media.ContainerFormatType.CFT_MPEG_4,
videoBitrate: 30000000,
videoCodec: media.CodecMimeType.VIDEO_AVC,
videoFrameWidth: 1920,
videoFrameHeight: 1080,
videoFrameRate: 30,
};
console.info("++++++++++++++++++++++++++++++++++")
console.info('' + this.selVideoProfile.frameRateRange.min)
let filePath = this.context.filesDir + '/' + await systemDateTime.getCurrentTime() + '.mp4'
let file = fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE)
this.videoFile = file
let fd = file.fd
console.info('fd=' + fd + '; filePath=' + filePath + '; file=' + file.path)
let {openFront} = this.initConfig
let aVRecorderConfig: media.AVRecorderConfig = {
audioSourceType: media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
videoSourceType: media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
profile: aVRecorderProfile,
url: 'fd://' + file.fd,
rotation: 0,
location: { latitude: 30, longitude: 130 }
};
let avRecorder: media.AVRecorder | undefined = this.avRecorder;
if(!avRecorder){
try {
avRecorder = await media.createAVRecorder();
} catch (error) {
let err = error as BusinessError;
console.error(`createAVRecorder call failed. error code: ${err.code}`);
}
if (avRecorder === undefined) {
console.error(`createAVRecorder call failed. avRecorder == undefined`);
return undefined;
}
console.info(`createAVRecorder call succ`);
avRecorder.on('stateChange', (state: media.AVRecorderState, reason: media.StateChangeReason) => {
console.info('avRecorder current state is: ' + state);
})
avRecorder.on('error', (err: BusinessError) => {
console.error('error ocConstantSourceNode, error message is ' + err);
})
} else{
await avRecorder.reset()
}
try{
await avRecorder.prepare(aVRecorderConfig);
} catch (err) {
console.error('Failed to avRecorder prepare. errorCode = ' + err);
}
this.avRecorder = avRecorder
let videoSurfaceId = await avRecorder.getInputSurface()
let videoOutput: camera.VideoOutput | undefined = undefined;
try {
videoOutput = this.cameraManager.createVideoOutput(this.selVideoProfile, videoSurfaceId);
} catch (error) {
let err = error as BusinessError;
console.error('Failed to create the videoOutput instance. errorCode = ' + err.code);
}
this.videoOutput = videoOutput
}
更多关于HarmonyOS鸿蒙Next中录制的视频,在相册及文件夹内无法播放的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
尝试下删除audio相关配置,保留video相关配置,更换配置AVRecorderProfile信息为
let aVRecorderProfile: media.AVRecorderProfile = {
fileFormat: media.ContainerFormatType.CFT_MPEG_4, // 视频文件封装格式,只支持MP4
videoBitrate: 100000, // 视频比特率
videoCodec: media.CodecMimeType.VIDEO_AVC, // 视频文件编码格式,支持avc格式
videoFrameWidth: 640, // 视频分辨率的宽
videoFrameHeight: 480, // 视频分辨率的高
videoFrameRate: 30 // 视频帧率
};
创建视频录制的参数AVRecorderConfig更换为
let aVRecorderConfig: media.AVRecorderConfig = {
videoSourceType: media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
profile: aVRecorderProfile,
url: "fd://" + file.fd, // 获取文件的fd,且创建的文件要有读写权限
rotation: 90 // 90°为默认竖屏显示角度,如果由于设备原因或应用期望以其他方式显示等原因,请根据实际情况调整该参数
};
再尝试更改“预览流与录像输出流的分辨率的宽(videoFrameWidth)高(videoFrameHeight)比保持一致”,看下录制的视频是否能正常播放.
HarmonyOS鸿蒙Next中录制的视频无法在相册及文件夹内播放,可能是由于以下原因之一:视频编码格式不支持、文件损坏、权限问题或系统缓存异常。检查视频文件格式是否为系统支持的格式(如MP4、AVI等),若文件损坏,尝试使用第三方工具修复。确保应用具有访问存储的权限,并尝试清除系统缓存或重启设备。若问题仍存在,可能是系统或应用的兼容性问题。
在HarmonyOS鸿蒙Next中,如果录制的视频无法在相册及文件夹内播放,可能是以下原因:
- 文件损坏:录制过程中可能中断或存储错误导致文件损坏。
- 格式不兼容:确保视频格式与系统支持的格式一致,如MP4、AVI等。
- 权限问题:检查应用是否具备读取和播放视频的权限。
- 存储路径问题:视频文件可能未正确保存到默认路径。
建议尝试以下解决方案:
- 重启设备,重新录制视频。
- 使用第三方播放器尝试播放。
- 检查系统更新,确保系统支持当前视频格式。
- 如果问题持续,建议备份数据后恢复出厂设置或联系华为技术支持。

