简介
GSYVideoPlayer是一个视频播放器库,支持切换内核播放器(IJKPlayer、avplayer),并且支持了多种能力。
效果展示:
下载安装
ohpm install @ohos/gsyvideoplayer
OpenHarmony ohpm
环境配置等更多内容,请参考如何安装 OpenHarmony ohpm 包
使用说明
规格说明
目前支持音视频规格:
由于本库播放音视频能力底层是avplayer或者ijkplayer去播放视频,所以支持的音视频规格跟随这两个库音视频规格。
使用标准播放器
- 设置内核播放器
可以在视频播放之前选择使用avplayer或者ijkplayer去播放视频。
import { GlobalContext } from '@ohos/gsyvideoplayer'
aboutToAppear() {
GlobalContext.getContext().setObject("playType", PlayerType.SYSTEM_AVPLAYER);
}
- 构建StandardGSYVideoModel对象:
videoModel: StandardGSYVideoModel = new StandardGSYVideoModel();
aboutToAppear() {
// 设置播放的url,设置播放不缓存
this.videoModel.setUrl(this.videoUrl, false);
this.videoModel.setTitle("这是测试视频的标题");
this.videoModel.setBackClickListener(this.backClickListener);
this.videoModel.setFullClickListener(this.fullClickListener);
this.videoModel.setCoverImage($r('app.media.app_icon'));
}
- 界面build()中使用StandardGSYVideoPlayer组件,传入StandardGSYVideoModel对象
build() {
Row() {
Column() {
StandardGSYVideoPlayer({
videoModel: this.videoModel
}).height(this.screenHeight)
}.width('100%')
}
}
- 在@Entry标签的界面生命周期需要控制播放器的播放状态
aboutToDisappear() {
let player = GlobalContext.getContext().getObject("currentPlayer") as BaseVideoPlayer;
if (player) {
player.stop();
}
}
onPageShow() {
let player = GlobalContext.getContext().getObject("currentPlayer") as BaseVideoPlayer;
if (player) {
player.resumePlay();
}
}
onPageHide() {
let player = GlobalContext.getContext().getObject("currentPlayer") as BaseVideoPlayer;
if (player) {
player.pause();
}
}
视频截图能力
Button("点击截图").onClick(() => {
let player = GlobalContext.getContext().getObject("currentPlayer") as BaseVideoPlayer;
if (player) {
let path = getContext(this).cacheDir + "/test.jpeg";
player.saveFrame(path, {
shotResult(code: number) {
promptAction.showToast({
message: code == 0 ? "截图操作成功" : "截图操作失败"
});
}
})
}
})
视频生成gif能力
Button("startGif").onClick(() => {
let player = GlobalContext.getContext().getObject("currentPlayer") as BaseVideoPlayer;
if (player) {
let path = getContext(this).cacheDir + "/tempGif";
player.startGif(path);
promptAction.showToast({
message: "开始gif截图"
});
}
})
Button("stopGif").onClick(() => {
let player = GlobalContext.getContext().getObject("currentPlayer") as BaseVideoPlayer;
if (player) {
this.dialogController.open();
let path = getContext(this).cacheDir + "/gifTest.gif";
let that = this;
player.stopGif(path, {
gifResult(code: number) {
that.dialogController.close();
promptAction.showToast({
message: code == 0 ? "gif截图成功" : "gif截图失败"
});
}
})
}
})
边播边缓存能力
可以在构建StandardGSYVideoModel对象时,控制是否需要边播边缓存。
videoModel: StandardGSYVideoModel = new StandardGSYVideoModel();
aboutToAppear() {
// 设置播放的url,设置播放不缓存
this.videoModel.setUrl(this.videoUrl, false);
}
视频全屏能力
可以在构建StandardGSYVideoModel对象时,设置全屏回调接口,全屏逻辑由用户控制。
fullClickListener: () => void = () => {
}
videoModel: StandardGSYVideoModel = new StandardGSYVideoModel();
aboutToAppear() {
// 设置播放的url,设置播放不缓存
this.videoModel.setUrl(this.videoUrl, false);
this.videoModel.setFullClickListener(this.fullClickListener);
}
接口说明
StandardGSYVideoModel
方法名 | 入参 | 接口描述 |
setUrl(videoUrl: string, cacheWithPlay?: boolean) | videoUrl: string, cacheWithPlay?: boolean | 设置播放url,设置是否边播边缓存 |
setTitle(title: string) | title: string | 设置视频全屏时的标题 |
setBackClickListener(backClickListener: () => void) | backClickListener: () => void | 设置点击播放器返回按钮的回调接口 |
setFullClickListener(fullClickListener: () => void) | fullClickListener: () => void | 设置点击播放器全屏按钮的回调接口 |
setCoverImage(coverImage:Resource) | coverImage:Resource | 设置封面接口 |
IVideoPlayer
方法名 | 入参 | 接口描述 |
play(); | 无 | 视频开始播放 |
resumePlay() | 无 | 视频恢复播放 |
pause() | 无 | 视频暂停播放 |
stop() | 无 | 视频停止播放 |
saveFrame(fileSavePath: string, gsyVideoShotSaveListener: GSYVideoShotSaveListener) | fileSavePath: string, gsyVideoShotSaveListener: GSYVideoShotSaveListener | 视频截图 |
startGif(tmpPicPath?: string) | tmpPicPath?: string | 视频开始gif |
stopGif(saveGifPath: string, gsyVideoGifSaveListener: GSYVideoGifSaveListener) | 无 | 视频结束gif,并生成gif |
约束与限制
在下述版本验证通过:
DevEco Studio: 4.0 (4.0.3.513), SDK: API10 (4.0.10.10)
目录结构
|---- GSYVideoPlayer
| |---- entry # 示例代码文件夹
|---- pages
|---- BiliDanmukuParser.ets # 弹幕解析类
|---- DanmakuData.ets # 弹幕数据
|---- DanmakuVideoDemo.ets # 弹幕demo
|---- DanmakuVideoPlayer.ets # 弹幕播放器
|---- Index.ets # 首页
|---- PlayNetWithCacheDemo.ets # 边播放边缓存demo
|---- PlayNetWithNoCacheDemo.ets # 边播放不缓存demo
|---- PlayWithCacheDemo.ets # 播放缓存入口
|---- SimpleDemo.ets # 简单播放测试demo
|---- SimpleList.ets # 简单视频列表demo
| |---- library # GSYVideoPlayer核心代码
|---- listener # 接口回调类
|---- GSYVideoGifSaveListener.ets # stopGif接口回调类
|---- GSYVideoShotSaveListener.ets # 截图接口回调类
|---- mainpage # 核心实现
|---- AvPlayerControl.ets # avplayer逻辑控制类
|---- AvVideoPlayer.ets # avplayer播放器
|---- BaseVideoPlayer.ets # 播放器控制基类
|---- CommonConstants.ets # 常量类
|---- GlobalContext.ts # 全局配置类
|---- IjkPlayerControl.ets # ijkplayer逻辑控制类
|---- IjkVideoPlayer.ets # ijkplayer播放器
|---- StandardForListGSYVideoPlayer.ets # 为list页面使用的播放器
|---- StandardGSYVideoModel.ets # 标准播放器
|---- StandardGSYVideoPlayer.ets # 播放器数据配置类
|---- utils # 工具类
|---- OrientationUtil.ets # 屏幕方向控制类
|---- LogUtils.ets # log工具类
| |---- README.md # 安装使用方法
经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?
为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。
《鸿蒙 (Harmony OS)开发学习手册》(共计892页)
如何快速入门?
1.基本概念
2.构建第一个ArkTS应用
3.……
1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……
基于ArkTS 开发
1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……
OpenHarmony 开发环境搭建
《OpenHarmony源码解析》
- 搭建开发环境
- Windows 开发环境的搭建
- Ubuntu 开发环境搭建
- Linux 与 Windows 之间的文件共享
- ……
- 系统架构分析
- 构建子系统
- 启动流程
- 子系统
- 分布式任务调度子系统
- 分布式通信子系统
- 驱动子系统
- ……
OpenHarmony 设备开发学习手册