当前位置:   article > 正文

鸿蒙开发(HarmonyOS)- video组件使用 + video组件自定义_鸿蒙video

鸿蒙video

目录

1.video组件的基础使用

1.1 播放在线的视频

1.2 播放本地的视频

 1.2.1 引入video参数所用的数据

视频路径  (文档里面写的超级模糊 注意地址)

图片路径

1.2.2 使用刚刚引入的数据

2.自定义video组件播放控制器

2.1 子组件

2.2 父组件


Video组件文档icon-default.png?t=N7T8https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-media-components-video-0000001333641101

1.video组件的基础使用

1.1 播放在线的视频

注意:播放在线的视频的时候,需要在module,json5中添加网络访问权限

实现代码

踩坑:在预览器中运行视频没效果,需要在模拟器中运行代码,才能看到视频的效果

预览器中运行效果

模拟器中的效果

1.2 播放本地的视频

video的参数:(剩余的属性请大家去文档查看)  video文档

 1.2.1 引入video参数所用的数据

  1. 视频路径  (文档里面写的超级模糊 注意地址

  2. 图片路径

1.2.2 使用刚刚引入的数据

模拟器中的效果

2.自定义video组件播放控制器

这里需要把自定义的播放栏写成一个组件,作为父组件的子组件

2.1 子组件

  1. /*
  2. * 自定义播放栏的实现
  3. *
  4. * 自定义播放栏组件
  5. * */
  6. @Component
  7. export struct VideoSlider{
  8. private controller: VideoController;
  9. //视频是否在播放
  10. @Consume isPlay:boolean;//默认值是false
  11. //显示视频时长
  12. @Consume durationTime:number; // 数字类型的视频时长总时间
  13. @Consume durationStringTime:string;//数字类型的视频时长总时间
  14. //当前视频进度时间
  15. @Consume currentTime:number;
  16. @Consume currentStringTime:string;
  17. //控制滑动条拖动与当前时间一致并开始播放
  18. sliderOnchange(value: number, mode: SliderChangeMode) {
  19. this.currentTime = Number.parseInt(value.toString());
  20. this.controller.setCurrentTime(Number.parseInt(value.toString()), SeekMode.Accurate);
  21. }
  22. build(){
  23. Row({space:12}){
  24. // Text(this.num.toString())
  25. //1.播放图标
  26. Image(this.isPlay ? $r("app.media.pause") : $r("app.media.start")) //播放暂停按钮
  27. .onClick(() =>{
  28. if(!this.isPlay){
  29. this.controller.start();
  30. this.isPlay = true
  31. } else {
  32. this.controller.pause();
  33. this.isPlay = false
  34. }
  35. })
  36. .width(20)
  37. .height(20)
  38. //2.显示当前播放时间
  39. Text(this.currentStringTime)
  40. .fontColor('#ff0099ff')
  41. //3.播放进度条
  42. Slider({
  43. value:this.currentTime,
  44. min:0,
  45. max:this.durationTime,
  46. step:1,
  47. })
  48. .width('55%')
  49. .trackColor(Color.Orange)//设置滑轨的背景颜色
  50. .blockColor(Color.Red)//滑块的颜色
  51. .selectedColor('#ff0099ff')//滑轨的已滑动部分颜色
  52. .showSteps(true)
  53. //控制播放进度
  54. .onChange((value: number, mode: SliderChangeMode) => {
  55. this.sliderOnchange(value, mode);
  56. })
  57. //4.视频的总时间
  58. Text(this.durationStringTime)
  59. }
  60. .backgroundColor('#ff7d6e80')
  61. .width('100%')
  62. .height('6%')
  63. }
  64. }

2.2 父组件

  1. /*
  2. * 注意:预览器测试看不了视频,视频只能在模拟器上正常测试预览
  3. * 视频 video组件的使用
  4. * */
  5. //导入自定义播放控制栏
  6. import { VideoSlider } from './VideoSlider'
  7. //导入弹窗模块
  8. import promptAction from '@ohos.promptAction'
  9. @Entry
  10. @Component
  11. struct viedoPage{
  12. @State videoSrc: Resource = $rawfile('video.mp4')//视频路径 在entry/src/main/resource/rawfile下
  13. @State playSpeed:PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_75_X //播放速度
  14. @State previewUri: Resource = $r('app.media.previewUriVideoo') //视频未播放时的预览图片路径,默认不显示图片。
  15. //定义一个controller对象,用于自定义播放控制栏
  16. private controller = new VideoController();
  17. @Provide isPlay:boolean = false;//默认值是false
  18. //显示视频总时长
  19. @Provide durationTime:number = 0;
  20. @Provide durationStringTime:string = '00:00'
  21. //当前视频进度时间
  22. @Provide currentTime:number = 0;
  23. @Provide currentStringTime:string = '00:00'
  24. //视频准备完成时触发该事件
  25. prepared(event){
  26. this.durationTime = event.duration;//获取视频时长 单位/s
  27. let second:number = event.duration % 60;
  28. let min:number = parseInt((event.duration / 60).toString()) ;
  29. let head = min < 10 ? `${0}${min}` :min;
  30. let end = second < 10 ? `${0}${second}` : second;
  31. this.durationStringTime = `${head}:${end}`;//分/秒 显示
  32. }
  33. //获取当前播放进度时间
  34. changeSliderTime(value){
  35. let second:number = value % 60;
  36. let min:number = parseInt((value / 60).toString()) ;
  37. let head = min < 10 ? `${0}${min}` :min;
  38. let end = second < 10 ? `${0}${second}` : second;
  39. let nowTime = `${head}:${end}`;
  40. return nowTime;
  41. }
  42. build(){
  43. Column(){
  44. //自定义播放栏
  45. Video({
  46. src:this.videoSrc,
  47. previewUri:this.previewUri,
  48. currentProgressRate:this.playSpeed,
  49. controller:this.controller
  50. }).height('94%')
  51. .width('100%')
  52. //控制视频播放的控制栏不显示
  53. .controls(false)
  54. //视频准备完成时触发该事件
  55. .onPrepared((event) =>{
  56. //调用对象
  57. this.prepared(event)
  58. })
  59. //获取当前播放进度时间
  60. .onUpdate((event:any) =>{
  61. this.currentTime = event?.time;
  62. this.currentStringTime = this.changeSliderTime(this.currentTime)
  63. })
  64. //播放结束时触发该事件
  65. .onFinish(() =>{
  66. //切换播放图标
  67. this.isPlay = false;
  68. promptAction.showToast({
  69. message:'播放完成',
  70. duration:2000
  71. })
  72. })
  73. //播放失败触发该事件
  74. .onError(() =>{
  75. //显示文本提示框
  76. promptAction.showToast({
  77. message:'播放失败',
  78. duration:2000
  79. })
  80. })
  81. //调用自定义播放栏组件
  82. VideoSlider({controller:this.controller})
  83. }
  84. }
  85. }

实现效果

有看不懂的地方,私信,留言都可以

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/580367
推荐阅读
相关标签
  

闽ICP备14008679号