【Harmony OS】【ArkUI】ets开发 简易视频播放器
前言:这一次我们来使用ets的Swiper组件、List组件和Video组件制作一个简易的视频播放器。本篇是以HarmonyOS官网的codelab简易视频播放器(eTS)为基础进行编写。本篇最主要的内容就是一个主界面包括顶部的视频海报轮播,中部的视频播放列表,以及点击海报和播放列表进入到播放界面完成视频播放的功能。师傅领进门,修行在个人,所以本篇只讲大概的组件使用,具体的细节和更详细的属性读者自己在学习中摸索。相信通过这次的学习,你能有所收获。希望能帮助你快速了解Harmony的ETS开发,学会简单的视频播放器制作学习。本篇最后会贴上参考原文链接。
首先讲一下大致的思路,我们要在主界面顶部使用Swiper组件完成视频海报轮播,下方使用List组件完成视频播放的列表,点击海报和播放列表进入视频播放界面使用Video组件制作,其他的属性就由读者自行探索。
1. 构建主界面。
1) 在default文件夹中创建data、image、video文件夹,在data文件夹中创建VideoData.ets文件,用来定义电影轮播图数组swiperVideos和视频列表图片数组horizontalVideos。Image文件夹中添加图片,video文件夹中添加视频,代码中的文件路径替换由读者自行替换。
const localSource: string = "/common/video/video1.mp4";
const webSource: string = "https://ss0.bdstatic.com/-0U0bnSm1A5BphGlnYG/cae-legoup-video-target/93be3d88-9fc2-4fbd-bd14-833bca731ca7.mp4";
export const swiperVideos:any[] = [
{
"image":'/common/image/video_ad0.jpg',
"source":localSource
},
{
"image":'/common/image/video_ad1.jpg',
"source":localSource
},
{
"image":'/common/image/video_ad2.jpg',
"source":localSource
}
]
export const horizontalVideos:any[] = [
{
"image":'/common/image/video_list0.jpg',
"source":webSource
},
{
"image":'/common/image/video_list1.jpg',
"source":webSource
},
{
"image":'/common/image/video_list2.jpg',
"source":webSource
}
]

2) 在index.ets中引入router和swiperVideos、horizontalVideos。
import router from '@system.router';
import {swiperVideos,horizontalVideos} from '../common/data/VideoData.ets'

3) 在index.ets中添加Swiper组件用于显示电影轮播图,使用Navigator实现页面跳转。
@Entry
@Component
struct Index {
build() {
Column() {
Swiper() {
ForEach(swiperVideos, item => {
SwiperItem({ imageSrc: item.image, source: item.source })
}, item => item.image.toString())
}
.autoPlay(true)
.height(180)
.itemSpace(15)
}
.backgroundColor("#EEEEEE")
.padding({ left: 15, top: 15, right: 15, bottom: 15 })
}
}
@Component
struct SwiperItem {
private imageSrc: string
private source: string
build() {
Navigator({ target: 'pages/Play', type: NavigationType.Push }) {
Image(this.imageSrc).objectFit(ImageFit.Cover)
}
.params({ source: this.source })
}
}

4) 添加Flex组件用于显示电影列表上方的文本信息,添加List组件用于显示电影列表,使用router实现页面跳转。
@Entry
@Component
struct Index {
build() {
Column() {
...
Flex({ direction: FlexDirection.Row }) {
Text('Coming soon')
.fontSize(20).fontWeight(FontWeight.Bold).margin({ left: 10 })
Image('/common/image/next.png').height(8).width(16)
}
.margin({ top: 20, bottom: 15 })
List({ space: 15 }) {
ForEach(horizontalVideos, item => {
ListItem() {
HorizontalItem({ imageSrc: item.image, source: item.source })
}
}, item => item.image.toString())
}
// 设置列表横向排列
.listDirection(Axis.Horizontal)
}
.backgroundColor("#EEEEEE")
.padding({ left: 15, top: 15, right: 15, bottom: 15 })
}
}
...
@Component
struct HorizontalItem {
private imageSrc: string
private source: string
build() {
Image(this.imageSrc)
.width('80%')
.height('25%')
.onClick(() => {
router.push({
uri: 'pages/Play',
params: { source: this.source }
})
})
}
}

5) 整个index.ets文件的代码如下:
import router from '@system.router';
import {swiperVideos,horizontalVideos} from '../common/data/VideoData.ets'
@Entry
@Component
struct Index {
build() {
Column() {
//轮播组件
Swiper(){
ForEach(swiperVideos, item => {
SwiperItem({ imageSrc: item.image, source: item.source })
}, item => item.image.toString())
}
.autoPlay(true)
.height(180)
.itemSpace(15)
//文本信息
Flex({direction:FlexDirection.Row}){
Text('Coming soon')
.fontSize(20).fontWeight(FontWeight.Bold).margin({left:10})
Image('/common/image/Record.png').height(8).width(16)
}
.margin({top:20, bottom:15})
List({space:15}){
ForEach(horizontalVideos, item =>{
ListItem(){
HorizontalItem({imageSrc:item.image,source:item.source})
}
},item => item.image.toString())
}
.listDirection(Axis.Horizontal)
}
.backgroundColor("#EEEEEE")
.padding({ left: 15, top: 15, right: 15, bottom: 15 })
}
}
@Component
struct SwiperItem{
private imageSrc:string
private source:string
build(){
Navigator({target:'pages/Play',type:NavigationType.Push}){
Image(this.imageSrc).objectFit(ImageFit.Cover)
}
.params({source:this.source})
}
}
@Component
struct HorizontalItem{
private imageSrc:string
private source:string
build(){
Image(this.imageSrc)
.width('80%')
.height('25%')
.onClick(()=>{
router.push({
uri:'pages/Play',
params:{source:this.source}
})
})
}
}

6) 打开预览器看一下效果:
欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh
【Harmony OS】【ArkUI】ets开发 简易视频播放器的更多相关文章
- C语言基于GTK+Libvlc实现的简易视频播放器
小编心语:现下,各种视频播放软件层出不穷,竞争也越演越烈,不知道大家有木有这个想法,小编有时在想能不能做一款属于自己的视频播放器呢~小编特意去实验楼,整理出了这篇关于如何实现简易视频播放器的博文.简易 ...
- C语言基于GTK+Libvlc实现的简易视频播放器(二)
简易视频播放器-全屏播放 一.课程说明 上一次我们使用gtk+libvlc实现了一个最简单的视频播放器,可以实现点击按钮暂定和停止播放视频,以及同步显 示视频播放进度,但即使作为一个视频播放器,只有这 ...
- Android本地视频播放器开发--简易播放器原型
在以前的基础上,将音视频进行合并,音频播放采用OpenSL ES,视频播放采用OpenGL ES2.0进行显示,这次的版本其中音频和视频是在同一个线程,会造成音频断断续续,后续会采用音频使用SDL,视 ...
- 简易视频播放器2 (基于Qt、opencv)
因项目需要,需要实现一个对以保存的监测视频快速查看功能. 查询网上一些资料,初步简易的实现了一下. 实际效果图: 该程序基于Qt5.4,opencv248,开发环境为win8.1 结构为: video ...
- ios开发 MPMoviePlayerController 视频播放器
项目中用到视频播放功能, 写点视频基础部分 MPMoviePlayerController是通过MediaPlayer.frame引入的,可用于播放在iOS支持的所有格式的视频,用起来很简单!!! M ...
- FFmpeg简易播放器的实现-视频播放
本文为作者原创:https://www.cnblogs.com/leisure_chn/p/10047035.html,转载请注明出处 基于FFmpeg和SDL实现的简易视频播放器,主要分为读取视频文 ...
- FFmpeg简易播放器的实现-音视频播放
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10235926.html 基于FFmpeg和SDL实现的简易视频播放器,主要分为读取视频文 ...
- FFmpeg简易播放器的实现-音视频同步
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10284653.html 基于FFmpeg和SDL实现的简易视频播放器,主要分为读取视频文 ...
- FFmpeg简易播放器的实现-音频播放
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10068490.html 基于FFmpeg和SDL实现的简易视频播放器,主要分为读取视频文 ...
随机推荐
- AntdVue使用
AntdVue使用 配置与安装 #安装 npm install ant-design-vue --save #按需加载 import { Button, Layout, Row, Col, Menu, ...
- CMake进行C/C++开发(linux下)
开发环境配置 安装GCC,GDB sudo apt update # 通过以下命令安装编译器和调试器 sudo apt install build-essential gdb 安装成功确认 # 以下命 ...
- Linux 运行升讯威在线客服系统:同时支持 SQL Server 和 MySQL 的实现方法
前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程. 有很多朋友一直提出希望能够支持 MySQL 数据库,考虑到已经有朋友在用 SQL Server,我在升级的过程中 ...
- Java 将HTML转为XML
本文介绍如何通过Java后端程序代码来展示如何将html转为XML.此功能通过采用Word API- Free Spire.Doc for Java 提供的Document.saveToFile()方 ...
- SAP BDC 用户输入日期转系统日期格式: CONVERT_DATE_TO_EXTERNAL
BDC中,日期输入格式不正确:可调用FM CONVERT_DATE_TO_EXTERNAL DATA:l_bdcfield LIKE bdcdata-fval."BDC field val ...
- SAP 时区转换
DATA:l_tzone TYPE tzonref-tzone. "TIME ZONE DATA:l_timesp TYPE tzonref-tstamps."TIME ...
- 【UR #2】猪猪侠再战括号序列 题解
题目链接 前言 是的没脑子选手只会做签到题. 思路分析 一开始把题目看成反转括号的状态,直接浪费 \(40\ mins\) . 我们考虑把不确定的"正确括号"转换成一个固定的括号序 ...
- HTML知识点概括——一篇文章带你完全掌握HTML
HTML知识点概括 前端三件套分别是HTML3,CSS5,JavaScript 稍微介绍一下W3C标准: 结构化标准语言(HTML) 表现标准语言(CSS) 行为标准(DOM,JavaScript) ...
- Tapdata x 轻流,为用户打造实时接入轻流的数据高速通道
在全行业加速布局数字化的当口,如何善用工具,也是为转型升级添薪助力的关键一步. 那么当轻量的异构数据实时同步工具,遇上轻量的数字化管理工具,将会收获什么样的新体验?此番 Tapdata 与轻流 ...
- dubbo(九):timeout超时机制解析
在网络请求时,总会有各种异常情况出现,我们需要提前处理这种情况.在完善的rpc组件dubbo中,自然是不会少了这一层东西的.我们只需要通过一些简单的配置就可以达到超时限制的作用了. dubbo的设计理 ...