鸿蒙界面开发——组件(3):视频组件video

视频组件video

Video(value: VideoOptions)

VideoOptions对象说明:
src string | Resource 否 视频的数据源,支持本地视频和网络视频。

Resource格式可以跨包/跨模块访问资源文件,常用于访问本地视频。

  • 支持rawfile文件下的资源,即通过$rawfile引用视频文件。

string格式可用于加载网络视频和本地视频,常用于加载网络视频。

  • 支持网络视频地址。
  • 支持file://路径前缀的字符串,即应用沙箱URI:file:///。用于读取应用沙箱路径内的资源。需要保证目录包路径下的文件有可读权限。

说明:
视频支持的格式是:mp4、mkv、TS。
元服务API: 从API version 11开始,该接口支持在元服务中使用。

currentProgressRate number | string | PlaybackSpeed8+ 否
视频播放倍速。
说明:
number取值仅支持:0.75,1.0,1.25,1.75,2.0。
默认值:1.0 | PlaybackSpeed.Speed_Forward_1_00_X
元服务API: 从API version 11开始,该接口支持在元服务中使用。

previewUri string | PixelMap | Resource 否
视频未播放时的预览图片路径,默认不显示图片。
元服务API: 从API version 11开始,该接口支持在元服务中使用。

controller VideoController 否
设置视频控制器,可以控制视频的播放状态。
元服务API: 从API version 11开始,该接口支持在元服务中使用。

imageAIOptions ImageAIOptions 否
设置图像AI分析选项,可配置分析类型或绑定一个分析控制器。
元服务API: 从API version 12开始,该接口支持在元服务中使用。

加载视频资源

Video组件支持加载本地视频和网络视频。

加载本地视频

  1. 本地视频。
    加载本地视频时,首先在本地rawfile目录指定对应的文件。再使用资源访问符$rawfile()引用视频资源。
src: $rawfile('videoTest.mp4');
  1. Data Ability提供的视频路径带有dataability://前缀,使用时确保对应视频资源存在即可。
private videoSrc: string = 'dataability://device_id/com.domainname.dataability.videodata/video/10'
Video({
   src: this.videoSrc,
   previewUri: this.previewUris,
   controller: this.controller
 })

加载沙箱路径视频

支持file:///data/storage路径前缀的字符串,用于读取应用沙箱路径内的资源,需要保证应用沙箱目录路径下的文件存在并且有可读权限。

 private videoSrc: string = 'file:///data/storage/el2/base/haps/entry/files/show.mp4'

加载网络视频

加载网络视频时,需要申请权限ohos.permission.INTERNET,具体申请方式请参考声明权限。此时,Video的src属性为网络视频的链接。

属性

  1. muted(value: boolean)设置是否静音。默认值:false
  2. autoPlay(value: boolean) 设置是否自动播放。默认值:false
  3. controls(value: boolean)设置控制视频播放的控制栏是否显示。默认值:true
  4. objectFit(value: ImageFit)设置视频显示模式。默认值:Cover
  5. loop(value: boolean)设置是否单个视频循环播放。默认值:false
  6. enableAnalyzer(enable: boolean)设置组件支持AI分析。
  7. analyzerConfig(config: ImageAnalyzerConfig)设置AI分析识别类型,包括主体识别和文字识别功能,默认全部开启。

事件

  1. onStart(event:() => void)播放时触发该事件。
  2. onPause(event:() => void)暂停时触发该事件。
  3. onFinish(event:() => void)播放结束时触发该事件。
  4. onError(event:() => void)播放失败时触发该事件。
  5. onStop(event:() => void)播放停止时触发该事件(当stop()方法被调用后触发)。
  6. onPrepared(callback:(event: { duration: number }) => void)视频准备完成时触发该事件。
  7. onSeeking(callback:(event: { time: number }) => void)操作进度条过程时上报时间信息。
  8. onSeeked(callback:(event: { time: number }) => void)操作进度条完成后,上报播放时间信息。
  9. onUpdate(callback:(event: { time: number }) => void)播放进度变化时触发该事件。
  10. onFullscreenChange(callback:(event: { fullscreen: boolean }) => void)在全屏播放与非全屏播放状态之间切换时触发该事件。

VideoController

Video控制器主要用于控制视频的状态,包括播放、暂停、停止以及设置进度等
默认的控制器支持视频的开始、暂停、进度调整、全屏显示四项基本功能。

使用自定义的控制器,先将默认控制器关闭掉,之后可以使用button以及slider等组件进行自定义的控制与显示,适合自定义较强的场景下使用。

  controller: VideoController = new VideoController()
  
 Video({
          src: this.videoSrc,
          previewUri: this.previewUri,
          currentProgressRate: this.curRate,
          controller: this.controller
        })
@Entry
@Component
struct VideoGuide1 {
  @State videoSrc: Resource = $rawfile('videoTest.mp4')
  @State previewUri: string = 'common/videoIcon.png'
  @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X
  @State isAutoPlay: boolean = false
  @State showControls: boolean = true
  @State sliderStartTime: string = '';
  @State currentTime: number = 0;
  @State durationTime: number = 0;
  @State durationStringTime: string ='';
  controller: VideoController = new VideoController()

  build() {
    Row() {
      Column() {
        Video({
          src: this.videoSrc,
          previewUri: this.previewUri,
          currentProgressRate: this.curRate,
          controller: this.controller
        }).controls(false).autoPlay(true)
        .onPrepared((event)=>{
          if(event){
            this.durationTime = event.duration
          }
        })
        .onUpdate((event)=>{
          if(event){
            this.currentTime =event.time
          }
        })
        Row() {
          Text(JSON.stringify(this.currentTime) + 's')
          Slider({
            value: this.currentTime,
            min: 0,
            max: this.durationTime
          })
          .onChange((value: number, mode: SliderChangeMode) => {
              this.controller.setCurrentTime(value);
            }).width("90%")
          Text(JSON.stringify(this.durationTime) + 's')
        }
        .opacity(0.8)
        .width("100%")
      }
      .width('100%')
    }
    .height('40%')
  }
}

Video组件已经封装好了视频播放的基础能力,开发者无需进行视频实例的创建,视频信息的设置获取,只需要设置数据源以及基础信息即可播放视频,相对扩展能力较弱。如果开发者想自定义视频播放,可参考媒体系统播放音视频

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weightOneMillion

感谢未来的亿万富翁捧个钱场~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值