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

视频组件video

javascript 复制代码
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()引用视频资源。
javascript 复制代码
src: $rawfile('videoTest.mp4');
  1. Data Ability提供的视频路径带有dataability://前缀,使用时确保对应视频资源存在即可。
javascript 复制代码
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路径前缀的字符串,用于读取应用沙箱路径内的资源,需要保证应用沙箱目录路径下的文件存在并且有可读权限。

javascript 复制代码
 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等组件进行自定义的控制与显示,适合自定义较强的场景下使用。

javascript 复制代码
  controller: VideoController = new VideoController()
  
 Video({
          src: this.videoSrc,
          previewUri: this.previewUri,
          currentProgressRate: this.curRate,
          controller: this.controller
        })
javascript 复制代码
@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组件已经封装好了视频播放的基础能力,开发者无需进行视频实例的创建,视频信息的设置获取,只需要设置数据源以及基础信息即可播放视频,相对扩展能力较弱。如果开发者想自定义视频播放,可参考媒体系统播放音视频

相关推荐
阿珊和她的猫1 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
一只栖枝3 小时前
华为 HCIE 大数据认证中 Linux 命令行的运用及价值
大数据·linux·运维·华为·华为认证·hcie·it
加班是不可能的,除非双倍日工资6 小时前
css预编译器实现星空背景图
前端·css·vue3
wyiyiyi6 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
gnip6 小时前
vite和webpack打包结构控制
前端·javascript
excel7 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
阿华的代码王国7 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
一条上岸小咸鱼7 小时前
Kotlin 基本数据类型(三):Booleans、Characters
android·前端·kotlin
Jimmy7 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
zhanshuo7 小时前
在鸿蒙里优雅地处理网络错误:从 Demo 到实战案例
harmonyos