0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙ArkTS媒体组件:Video

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-07-16 09:35 次阅读

Video

用于播放视频文件并控制其播放状态的组件。

说明:

该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

权限列表

使用网络视频时,需要申请权限ohos.permission.INTERNET。具体申请方式请参考[权限申请声明]。

子组件

不支持子组件。

接口

Video(value: {src?: string | Resource, currentProgressRate?: number | string | PlaybackSpeed, previewUri?: string | PixelMap | Resource, controller?: VideoController})

参数

参数名参数类型必填参数描述
srcstring[Resource]
currentProgressRatenumberstringPlaybackSpeed8+
previewUristringPixelMap[Resource]
controller[VideoController]设置视频控制器,可以控制视频的播放状态。

PlaybackSpeed8+枚举说明

名称描述
Speed_Forward_0_75_X0.75倍速播放。
Speed_Forward_1_00_X1倍速播放。
Speed_Forward_1_25_X1.25倍速播放。
Speed_Forward_1_75_X1.75倍速播放。
Speed_Forward_2_00_X2倍速播放。

属性

除支持[通用属性]外,还支持以下属性:

名称参数类型描述
mutedboolean是否静音。 默认值:false
autoPlayboolean是否自动播放。 默认值:false
controlsboolean控制视频播放的控制栏是否显示。 默认值:true
objectFit[ImageFit]设置视频显示模式。 默认值:Cover
loopboolean是否单个视频循环播放。 默认值:false

事件

除支持[通用事件]外,还支持以下事件:

名称功能描述
onStart(event:() => void)播放时触发该事件。
onPause(event:() => void)暂停时触发该事件。
onFinish(event:() => void)播放结束时触发该事件。
onError(event:() => void)播放失败时触发该事件。
onPrepared(callback:(event?: { duration: number }) => void)视频准备完成时触发该事件。 duration:当前视频的时长,单位为秒(s)。
onSeeking(callback:(event?: { time: number }) => void)操作进度条过程时上报时间信息。 time:当前视频播放的进度,单位为s。
onSeeked(callback:(event?: { time: number }) => void)操作进度条完成后,上报播放时间信息。 time:当前视频播放的进度,单位为s。
onUpdate(callback:(event?: { time: number }) => void)播放进度变化时触发该事件。 time:当前视频播放的进度,单位为s。
onFullscreenChange(callback:(event?: { fullscreen: boolean }) => void)在全屏播放与非全屏播放状态之间切换时触发该事件。 fullscreen:返回值为true表示进入全屏播放状态,为false则表示非全屏播放。

VideoController

一个VideoController对象可以控制一个或多个video,可用视频播放实例请参考[@ohos.multimedia.media])。

导入对象

let controller: VideoController = new VideoController()

start

start(): void

开始播放。

pause

pause(): void

暂停播放,显示当前帧,再次播放时从当前位置继续播放。

stop

stop(): void

停止播放,显示当前帧,再次播放时从头开始播放。

setCurrentTime

setCurrentTime(value: number)

指定视频播放的进度位置。

参数:

参数名参数类型必填参数描述
valuenumber视频播放进度位置,单位为s。

requestFullscreen

requestFullscreen(value: boolean)

请求全屏播放。

参数:

参数名参数类型必填参数描述
valueboolean是否全屏(填充满应用窗口)播放。

exitFullscreen

exitFullscreen()

退出全屏播放。

setCurrentTime8+

setCurrentTime(value: number, seekMode: SeekMode)

指定视频播放的进度位置,并指定跳转模式。

参数:

参数名参数类型必填参数描述
valuenumber视频播放进度位置,单位为s。
seekModeSeekMode跳转模式。

SeekMode8+枚举说明

名称 开发前请熟悉鸿蒙开发指导文档:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]描述
PreviousKeyframe跳转到前一个最近的关键帧。
NextKeyframe跳转到后一个最近的关键帧。
ClosestKeyframe跳转到最近的关键帧。
Accurate精准跳转,不论是否为关键帧。

示例

// xxx.ets
@Entry
@Component
struct VideoCreateComponent {
  @State videoSrc: Resource = $rawfile('video1.mp4')
  @State previewUri: Resource = $r('app.media.poster1')
  @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X
  @State isAutoPlay: boolean = false
  @State showControls: boolean = true
  controller: VideoController = new VideoController()

  build() {
    Column() {
      Video({
        src: this.videoSrc,
        previewUri: this.previewUri,
        currentProgressRate: this.curRate,
        controller: this.controller
      })
        .width('100%')
        .height(600)
        .autoPlay(this.isAutoPlay)
        .controls(this.showControls)
        .onStart(() = > {
          console.info('onStart')
        })
        .onPause(() = > {
          console.info('onPause')
        })
        .onFinish(() = > {
          console.info('onFinish')
        })
        .onError(() = > {
          console.info('onError')
        })
        .onPrepared((e?: DurationObject) = > {
          if (e != undefined) {
            console.info('onPrepared is ' + e.duration)
          }
        })
        .onSeeking((e?: TimeObject) = > {
          if (e != undefined) {
            console.info('onSeeking is ' + e.time)
          }
        })
        .onSeeked((e?: TimeObject) = > {
          if (e != undefined) {
            console.info('onSeeked is ' + e.time)
          }
        })
        .onUpdate((e?: TimeObject) = > {
          if (e != undefined) {
            console.info('onUpdate is ' + e.time)
          }
        })

      Row() {
        Button('src').onClick(() = > {
          this.videoSrc = $rawfile('video2.mp4') // 切换视频源
        }).margin(5)
        Button('previewUri').onClick(() = > {
          this.previewUri = $r('app.media.poster2') // 切换视频预览海报
        }).margin(5)
        Button('controls').onClick(() = > {
          this.showControls = !this.showControls // 切换是否显示视频控制栏
        }).margin(5)
      }

      Row() {
        Button('start').onClick(() = > {
          this.controller.start() // 开始播放
        }).margin(5)
        Button('pause').onClick(() = > {
          this.controller.pause() // 暂停播放
        }).margin(5)
        Button('stop').onClick(() = > {
          this.controller.stop() // 结束播放
        }).margin(5)
        Button('setTime').onClick(() = > {
          this.controller.setCurrentTime(10, SeekMode.Accurate) // 精准跳转到视频的10s位置
        }).margin(5)
      }

      Row() {
        Button('rate 0.75').onClick(() = > {
          this.curRate = PlaybackSpeed.Speed_Forward_0_75_X // 0.75倍速播放
        }).margin(5)
        Button('rate 1').onClick(() = > {
          this.curRate = PlaybackSpeed.Speed_Forward_1_00_X // 原倍速播放
        }).margin(5)
        Button('rate 2').onClick(() = > {
          this.curRate = PlaybackSpeed.Speed_Forward_2_00_X // 2倍速播放
        }).margin(5)
      }
    }
  }
}

interface DurationObject {
  duration: number;
}

interface TimeObject {
  time: number;
}

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 组件
    +关注

    关注

    1

    文章

    504

    浏览量

    17799
  • 鸿蒙
    +关注

    关注

    57

    文章

    2306

    浏览量

    42730
收藏 人收藏

    评论

    相关推荐

    鸿蒙ArkUI开发-Video组件的使用

    以视频功能为例,在应用开发过程中,我们需要通过ArkUI提供的Video组件为应用增加基础的视频播放功能。借助Video组件,我们可以实现视频的播放功能并控制其播放状态。常见的视频播放
    的头像 发表于 01-23 16:59 1236次阅读
    <b class='flag-5'>鸿蒙</b>ArkUI开发-<b class='flag-5'>Video</b><b class='flag-5'>组件</b>的使用

    【飞腾派4G版免费试用】Stage鸿蒙应用基础

    推荐stage,当然,你要是大量开发轻应用,还是fa吧。 二、基本功能风格和功耗测试 这里功耗测试是基于一个小的鸿蒙应用及多媒体使用。 预览器可以很好地查看应用。但是不幸的是不包含多媒体应用。
    发表于 12-24 08:52

    鸿蒙开发基础-Web组件之cookie操作

    }) ... } ... 本文章主要是对鸿蒙开发当中ArkTS语言的基础应用实战,Web组件里的cookie操作。更多的鸿蒙应用开发技术,可以前往我的主页学习更多,下面是一张
    发表于 01-14 21:31

    2024款鸿蒙OS 最新HarmonyOS Next_HarmonyOS4.0系列教程分享

    鸿蒙的出现,标志着中国科技的崛起。HarmonyOS就是我们说的华为鸿蒙系统,截止到2023年8月4日已有超过7亿台设备搭载了鸿蒙OS系统。据多家媒体报道,2024年国内有21所985
    发表于 02-28 10:29

    HarmonyOS应用开发实战-媒体组件video

    video。视频播放组件。说明:需要在config.json配置,“configChanges”: [“orientation”]除支持通用属性外,还支持如下属性:除支持通用样式外,还支持如下样式
    发表于 11-15 10:26

    ArkTS-HarmonyOS应用开发video体验分享

    Api:8语言:ArkTs需要权限:使用网络视频时,需要申请权限ohos.permission.INTERNET。具体申请方式请参考权限申请声明。组件video参考:https
    发表于 11-22 14:45

    鸿蒙开发之ArkTS基础知识

    一、ArkTS简介 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript(简称TS)的基础上,匹配了鸿蒙的ArkUI框架,扩展了声明式UI、状态管理等相应的能力,让开发者以
    的头像 发表于 01-24 16:44 2110次阅读
    <b class='flag-5'>鸿蒙</b>开发之<b class='flag-5'>ArkTS</b>基础知识

    鸿蒙实战开发ArkTS运用:【ai聊天框】

    用一个ArkTS编写的HarmonyOS原生聊天UI框架,提供了开箱即用的聊天对话组件
    的头像 发表于 03-08 15:38 855次阅读
    <b class='flag-5'>鸿蒙</b>实战开发<b class='flag-5'>ArkTS</b>运用:【ai聊天框】

    鸿蒙ArkTS声明式组件:XComponent

    可用于EGL/OpenGLES和媒体数据写入,并显示在XComponent组件
    的头像 发表于 07-05 09:56 577次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>ArkTS</b>声明式<b class='flag-5'>组件</b>:XComponent

    鸿蒙ArkTS容器组件:Stack

    堆叠容器,子组件按照顺序依次入栈,后一个子组件覆盖前一个子组件
    的头像 发表于 07-15 18:23 801次阅读

    鸿蒙ArkTS媒体组件:Ellipse

    椭圆绘制组件
    的头像 发表于 07-16 15:20 257次阅读

    鸿蒙ArkTS媒体组件:Line

    直线绘制组件
    的头像 发表于 07-17 10:25 371次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>媒体</b><b class='flag-5'>组件</b>:Line

    鸿蒙ArkTS媒体组件:Polyline

    折线绘制组件
    的头像 发表于 07-17 09:43 235次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>媒体</b><b class='flag-5'>组件</b>:Polyline

    鸿蒙ArkTS媒体组件:Polygon

    多边形绘制组件
    的头像 发表于 07-17 15:05 287次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>媒体</b><b class='flag-5'>组件</b>:Polygon

    鸿蒙ArkTS媒体组件:Path

    路径绘制组件,根据绘制路径生成封闭的自定义形状。
    的头像 发表于 07-18 10:24 331次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>媒体</b><b class='flag-5'>组件</b>:Path