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

4 回复

如果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中,如果录制的视频无法在相册及文件夹内播放,可能是以下原因:

  1. 文件损坏:录制过程中可能中断或存储错误导致文件损坏。
  2. 格式不兼容:确保视频格式与系统支持的格式一致,如MP4、AVI等。
  3. 权限问题:检查应用是否具备读取和播放视频的权限。
  4. 存储路径问题:视频文件可能未正确保存到默认路径。

建议尝试以下解决方案:

  • 重启设备,重新录制视频。
  • 使用第三方播放器尝试播放。
  • 检查系统更新,确保系统支持当前视频格式。
  • 如果问题持续,建议备份数据后恢复出厂设置或联系华为技术支持。
回到顶部