经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » 鸿蒙 » 查看文章
鸿蒙HarmonyOS实战-ArkUI组件(Video)
来源:cnblogs  作者:蜀道山QAQ  时间:2024/4/10 15:18:13  对本文有异议

??一、Video

视频组件是用于应用程序中嵌入视频的一种方法。它可以让用户在网站上观看视频并与其进行交互。通常,视频组件将一个视频文件嵌入应用程序中,并提供一组控件,这些控件允许用户播放、暂停、跳过、音量调整和全屏等。通过使用视频组件,开发者可以更容易地将视频嵌入应用程序,使其更易于管理和控制。

??1.创建视频组件

语法说明:

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

其中,src指定视频播放源的路径,加载方式请参考加载视频资源,currentProgressRate用于设置视频播放倍速,previewUri指定视频未播放时的预览图片路径,controller设置视频控制器,用于自定义控制视频。

  1. @Component
  2. @Entry
  3. export struct VideoPlayer{
  4. private controller:VideoController;
  5. private videosrc: string= 'https://video-js.51miz.com/preview/video/00/00/17/91/V-179173-F2183031.mp4' // 使用时请替换为实际视频加载网址
  6. build(){
  7. Column() {
  8. Video({
  9. src: this.videosrc,
  10. controller: this.controller
  11. })
  12. }
  13. }
  14. }

image

??2.加载视频资源

??2.1 加载本地视频

  1. @Component
  2. @Entry
  3. export struct VideoPlayer{
  4. private controller:VideoController;
  5. private innerResource: Resource = $rawfile('1.mp4');
  6. build() {
  7. Column() {
  8. Video({
  9. src: this.innerResource,
  10. controller: this.controller
  11. })
  12. }
  13. }
  14. }

image

  1. @Component
  2. @Entry
  3. export struct VideoPlayer{
  4. private controller:VideoController;
  5. private videosrc: string= 'dataability://device_id/com.domainname.dataability.videodata/video/10'
  6. build() {
  7. Column() {
  8. Video({
  9. src: this.videosrc,
  10. controller: this.controller
  11. })
  12. }
  13. }
  14. }

image

提供的视频路径带有dataability://前缀,使用时确保对应视频资源存在即可

??2.2 加载沙箱路径视频

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

  1. @Component
  2. export struct VideoPlayer {
  3. private controller: VideoController;
  4. private videosrc: string = 'file:///data/storage/el2/base/haps/entry/files/show.mp4'
  5. build() {
  6. Column() {
  7. Video({
  8. src: this.videosrc,
  9. controller: this.controller
  10. })
  11. }
  12. }
  13. }

??2.3 加载网络视频

需要申请权限ohos.permission.INTERNET

  1. @Component
  2. @Entry
  3. export struct VideoPlayer{
  4. private controller:VideoController;
  5. private videosrc: string= 'https://video-js.51miz.com/preview/video/00/00/17/91/V-179173-F2183031.mp4' // 使用时请替换为实际视频加载网址
  6. build(){
  7. Column() {
  8. Video({
  9. src: this.videosrc,
  10. controller: this.controller
  11. })
  12. }
  13. }
  14. }

image

??3.添加属性

Video组件属性主要用于设置视频的播放形式。例如设置视频播放是否静音、播放时是否显示控制条等。

  1. @Component
  2. @Entry
  3. export struct VideoPlayer{
  4. private controller:VideoController;
  5. private innerResource: Resource = $rawfile('1.mp4');
  6. build() {
  7. Column() {
  8. Video({
  9. src: this.innerResource,
  10. controller: this.controller
  11. }) .muted(true) //设置是否静音
  12. .controls(true) //设置是否显示默认控制条
  13. .autoPlay(true) //设置是否自动播放
  14. .loop(true) //设置是否循环播放
  15. .objectFit(ImageFit.Auto) //设置视频适配模式
  16. }
  17. }
  18. }

image

??4.事件调用

Video组件回调事件主要为播放开始、暂停结束、播放失败、视频准备和操作进度条等事件,除此之外,Video组件也支持通用事件的调用,如点击、触摸等事件的调用。

  1. @Component
  2. @Entry
  3. export struct VideoPlayer{
  4. private controller:VideoController;
  5. private innerResource: Resource = $rawfile('1.mp4');
  6. build() {
  7. Column() {
  8. Video({
  9. src: this.innerResource,
  10. controller: this.controller
  11. }) .onUpdate((event) => { //更新事件回调
  12. console.info("Video update.");
  13. })
  14. .onPrepared((event) => { //准备事件回调
  15. console.info("Video prepared.");
  16. })
  17. .onError(() => { //失败事件回调
  18. console.info("Video error.");
  19. })
  20. }
  21. }
  22. }

image

??5.Video控制器使用

??5.1 默认视频控制器

默认的控制器支持视频的开始、暂停、进度调整、全屏显示四项基本功能。

  1. @Component
  2. @Entry
  3. export struct VideoPlayer{
  4. private videoSrc: Resource = $rawfile('1.mp4');
  5. @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X
  6. build() {
  7. Row() {
  8. Column() {
  9. Video({
  10. src: this.videoSrc,
  11. currentProgressRate: this.curRate
  12. })
  13. }
  14. .width('100%')
  15. }
  16. .height('100%')
  17. }
  18. }

image

??5.2 自定义视频控制器

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

  1. @Component
  2. @Entry
  3. export struct VideoPlayer{
  4. private videoSrc: Resource = $rawfile('1.mp4');
  5. @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X
  6. @State isAutoPlay: boolean = false
  7. @State showControls: boolean = true
  8. @State sliderStartTime: string = '';
  9. @State currentTime: number = 0;
  10. @State durationTime: number = 0;
  11. @State durationStringTime: string ='';
  12. controller: VideoController = new VideoController()
  13. build() {
  14. Row() {
  15. Column() {
  16. Video({
  17. src: this.videoSrc,
  18. currentProgressRate: this.curRate,
  19. controller: this.controller
  20. }).controls(false).autoPlay(true)
  21. .onPrepared((event)=>{
  22. this.durationTime = event.duration
  23. })
  24. .onUpdate((event)=>{
  25. this.currentTime =event.time
  26. })
  27. Row() {
  28. Text(JSON.stringify(this.currentTime) + 's')
  29. Slider({
  30. value: this.currentTime,
  31. min: 0,
  32. max: this.durationTime
  33. })
  34. .onChange((value: number, mode: SliderChangeMode) => {
  35. this.controller.setCurrentTime(value);
  36. }).width("90%")
  37. Text(JSON.stringify(this.durationTime) + 's')
  38. }
  39. .opacity(0.8)
  40. .width("100%")
  41. }
  42. .width('100%')
  43. }
  44. .height('40%')
  45. }
  46. }

image

??写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing??,不定期分享原创知识。
  • 更多鸿蒙最新技术知识点,请关注作者博客:https://t.doruo.cn/14DjR1rEY

image

原文链接:https://www.cnblogs.com/shudaoshan/p/18124110

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号