本示例介绍了如何截取视频的一段内容制作gif图片。该场景多出现在长视频类应用。使用FFmpeg命令对视频进行截取gif图。
使用说明:
if (this.url.startsWith(getContext().filesDir)) {
this.srcFilePath = this.url;
let file = await fs.open(this.url);
this.avPlayer.url = `fd://${file.fd}`;
} else {
let that = this;
class MyCacheListener implements CacheListener {
onCacheAvailable(cacheFilePath: string, url: string, percentsAvailable: number): void {
AppStorage.setOrCreate('currentCachePercent', percentsAvailable);
if (!that.srcFilePath) {
// 记录缓存文件的本地路径
that.srcFilePath = cacheFilePath;
}
}
}
GlobalProxyServer?.getInstance()?.getServer()?.registerCacheListener(new MyCacheListener(), this.url);
let proxyUrl: string | undefined =
await GlobalProxyServer?.getInstance()?.getServer()?.getProxyUrl(this.url);
if (proxyUrl.startsWith(getContext().cacheDir)) {
this.srcFilePath = proxyUrl;
const file = fs.openSync(this.srcFilePath, fs.OpenMode.READ_ONLY);
proxyUrl = `fd://${file.fd}`;
}
this.avPlayer.url = proxyUrl;
}
MP4Parser.getFrameAtTimeRang(startTimeUs, endTimeUs, MP4Parser.OPTION_CLOSEST, frameCallBack);
let touchXNew:number = this.clearUndefined(event?.offsetX);
let deltaX:number = touchXNew - this.touchXOld;
if (this.touchType == TouchType.TouchLeftThumb) {
this.leftThumbUpdate(deltaX);
this.onRangeValueChanged();
} else if (this.touchType == TouchType.TouchRightThumb) {
this.rightThumbUpdate(deltaX);
this.onRangeValueChanged();
} else if (this.touchType == TouchType.TouchMiddleThumb) {
if ((deltaX < 0 && this.leftThumbRect[0] > 0)
|| (deltaX > 0 && this.rightThumbRect[2] < this.componentMaxWidth)) {
this.leftThumbUpdate(deltaX);
this.rightThumbUpdate(deltaX);
this.onRangeValueChanged();
}
}
this.touchXOld = this.clearUndefined(event?.offsetX);
欢迎大家关注公众号<程序猿百晓生>,可以了解到一下知识点。
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案)
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......
MP4Parser.ffmpegCmd("ffmpeg -i " + srcFilePath + " -ss " + startTime + " -t " + duration + " " + dst, callBack);
不涉及
videocreategif // har
|---components
| |---CustomLoadingDialog.ets // 自定义等待弹窗
| |---GifCreateView.ets // gif生成页面
| |---RangeSeekBarView.ets // 时间轴选中框
| |---SelectGifTimeFrameView.ets // 选取生成gif时间片段页面
| |---VideoThumbListView.ets // 时间轴小图展示
|---model
| |---BannerInfo.ets // banner信息
| |---GlobalProxyServer.ets // 边缓存边播放服务器管理
| |---VideoInfo.ets // 视频信息
|---util
| |---Logger.ets // 日志打印工具
| |---TimeTools.ets // 时长数据转换工具
|---view
| |---VideoCreateGif.ets // 视频项展示页面
| |---VideoPlayPage.ets // 视频播放页面
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。