Video播放file://media/Photo/路径下视频资源

​描述:我通过photoAccessHelper获取相册的图片和视频uri(Read_ImageVideo和Write_ImageVideo权限已授权),图片我能够通过Image组件加载;但是不同通过Video播放视频(且有滋滋滋的声音传出),且Video组件没有回掉onError;

测试路径:file://media/Photo/73/VID_1716262981_055/VID_20240521_114210.mp4

1.我是否还需要授权其他权限。

2.是否是Video不支持此路径,若不支持是否还有其他方式可以播放。

3.或者我的使用错误。​

Video({ 
  src: this.testUrl, 
  controller: this.controller, 
  previewUri: $r('app.media.ic_banner_placeholder') 
}) 
  .muted(false) //是否静音 
  .autoPlay(true) 
  .loop(true) 
  .controls(false) //是否显示默认控制条 
  .width(CommonConstants.FULL_SIZE) 
  .height(250) 
  .onError(()=>{ 
    promptAction.showToast({message: 'play error'}) 
  })
HarmonyOS
2024-11-13 11:45:37
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

video组件只能播放沙箱Resources里的文件,这边把选择的文件copy到沙箱路径中试试。可以参照以下demo可以播放:

import photoAccessHelper from '@ohos.file.photoAccessHelper'; 
import fs from '@ohos.file.fs'; 
import { BusinessError } from '@ohos.base'; 
import common from '@ohos.app.ability.common'; 
import { picker } from '@kit.CoreFileKit'; 
 
@Entry 
@Component 
struct Index { 
  private controller: VideoController | undefined; 
  @State videoSrc: string = '' 
  private context = getContext(this) as common.UIAbilityContext; 
  build() { 
    Column({ space: 30 }) { 
      Button('选择视频') 
        .width(200) 
        .height(30) 
        .onClick(() => { 
          this.PickerVideo() 
        }) 
      Video({ 
        src: this.videoSrc, 
        controller: this.controller 
      }) 
        .width('100%') 
        .height(300) 
    } 
    .width('100%') 
    .height('100%') 
  } 
  PickerVideo() { 
    const photoSelectOptions = new picker.PhotoSelectOptions(); 
    const photoViewPicker = new picker.PhotoViewPicker(); 
    photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.VIDEO_TYPE; // 过滤选择媒体文件类型为IMAGE 
    photoSelectOptions.maxSelectNumber = 1; // 选择媒体文件的最大数目 
    photoViewPicker.select(photoSelectOptions).then((photoSelectResult: photoAccessHelper.PhotoSelectResult) => { 
      const fileUri = photoSelectResult.photoUris[0] 
      console.info('photoViewPicker.select to file succeed and uris are:' + fileUri); 
      this.getFileInfo(fileUri) 
    }).catch((err: BusinessError) => { 
      console.error(Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}); 
    }) 
  } 
  async getFileInfo(filePathString: string) { 
    let resFile = fs.openSync(filePathString, fs.OpenMode.READ_ONLY) 
    const dateStr = (new Date().getTime()).toString() 
    // 临时文件目录 
    let newPath = this.context.filesDir + /${dateStr + resFile.name}; 
    // 转化路径 
    fs.copyFileSync(resFile.fd, newPath); 
    // 新的路径 
    let realUri = 'file://' + newPath; 
    this.videoSrc = realUri 
    console.log(this.videoSrc) 
  } 
}
分享
微博
QQ
微信
回复
2024-11-13 15:05:18
相关问题
HarmonyOS Media kit支持常见云视频播放
399浏览 • 1回复 待解决
video player播放在线视频失败
10043浏览 • 1回复 待解决
如何获取profile路径资源文件?
1802浏览 • 1回复 待解决