HarmonyOS 鸿蒙Next Video 加载网络视频如何获取网络视频的第一帧作为预览图
HarmonyOS 鸿蒙Next Video 加载网络视频如何获取网络视频的第一帧作为预览图
Video 加载网络视频如何获取网络视频的第一帧作为预览图 以下是代码实例:
import { UrlData } from ‘…/baen/UrlData’
import { media } from ‘@kit.MediaKit’;
import fs from ‘@ohos.file.fs’;
import { loginComponentManager } from ‘@kit.AccountKit’;
@Entry
@Component
struct Page6 {
@State urlArray: Array<UrlData> =
[new UrlData(“https://www.jiuyeyun.wang/api/jobslink-obs/front/huaWeiObs/obtain/base64/dGVzdC9qb2JzbGluay10ZW5hbnQvY29tcGFueS93ZWJzaXRlL2Jhbm5lci8xNzUwMzQwODIxNzY2Mzg1NjY1L2ExNDhiMDFlMThhY2I1MThjZWU5MThjMzFkYzRmZTA1.png”,
“IMAGE”),
new UrlData(“https://www.jiuyeyun.wang/api/jobslink-obs/front/huaWeiObs/obtain/base64/dGVzdC9qb2JzbGluay10ZW5hbnQvY29tcGFueS93ZWJzaXRlL2Jhbm5lci8xNzUwMzQwODIxNzY2Mzg1NjY1Lzk3MDkwMjY3ODIwYWFhYWEzZDA5NDdjNDIwZWViMzc3.mp4”,
“VIDEO”),
new UrlData(“https://www.jiuyeyun.wang/api/jobslink-obs/front/huaWeiObs/obtain/base64/dGVzdC9qb2JzbGluay10ZW5hbnQvY29tcGFueS93ZWJzaXRlL2Jhbm5lci8xNzUwMzQwODIxNzY2Mzg1NjY1L2ExNDhiMDFlMThhY2I1MThjZWU5MThjMzFkYzRmZTA1.png”,
“IMAGE”)] // 设置视频控制器,可以控制视频的播放状态
controller: VideoController = new VideoController()
@State pixelMap: PixelMap | undefined = undefined
private url: string =
“https://www.jiuyeyun.wang/api/jobslink-obs/front/huaWeiObs/obtain/base64/dGVzdC9qb2JzbGluay10ZW5hbnQvY29tcGFueS93ZWJzaXRlL2Jhbm5lci8xNzUwMzQwODIxNzY2Mzg1NjY1Lzk3MDkwMjY3ODIwYWFhYWEzZDA5NDdjNDIwZWViMzc3.mp4”
aboutToAppear(): void {
this.getVideoThumbnail(this.url)
}
async getVideoThumbnail(videoPath: string) {
}
build() {
Column() {
Swiper() {
ForEach(this.urlArray, (item: UrlData) => {
if (item.type == “IMAGE”) {
Image(item.url).width(“100%”).height(150)
} else {
Video({
src: item.url, //视频的数据源
currentProgressRate: 1.0, //视频播放倍速
previewUri: “”, //视频未播放时预览图片的路径,默认不显示
controller: this.controller//设置视频控制器可以控制视频的播放状态
})
.width(“100%”)
.height(150)
.muted(false)//是否设置静音
.autoPlay(false)//是否自动播放
.controls(true)//设置控制视频播放的控制栏是否显示
.objectFit(ImageFit.Cover)//设置视频显示模式
.loop(false) //设置是否单个视频循环播放
}
})
} //设置是否自动播放
.autoPlay(true) //设置使用自动播放时播放的时间间隔。
.interval(3000) //设置是否开启循环
.loop(true) //设置禁用组件导航点交互功能。设置为true时表示导航点可交互。
.indicatorInteractive(true) //设置子组件切换的动画时长
.duration(1000) //设置子组件与子组件之间间隙。不支持设置百分比
.itemSpace(0)
.indicator(false) //隐藏底部指示器
.onChange((index: number) => { //如果循环的是图片则把视频重置
if (this.urlArray[index].type == “IMAGE”) { //video组件重置AVPlayer。显示当前帧,再次播放时从头开始播放。
this.controller.stop()
this.controller.reset()
}
})
}.width(“100%”)
}
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
更多关于HarmonyOS 鸿蒙Next Video 加载网络视频如何获取网络视频的第一帧作为预览图的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next Video 加载网络视频如何获取网络视频的第一帧作为预览图的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙系统中,为Next Video组件加载网络视频并获取其第一帧作为预览图,通常涉及以下几个步骤:
-
网络视频加载:首先,确保你的应用有权限访问网络,并使用合适的网络请求库(如OkHttp)下载视频流。将视频流地址提供给Next Video组件进行加载。
-
视频解码:获取到视频流后,需要使用视频解码库(如FFmpeg)对视频进行解码,以便提取帧数据。FFmpeg是一个强大的多媒体处理库,支持多种视频格式和编解码器。
-
提取第一帧:在解码过程中,可以提取出视频的第一帧数据。这通常涉及到将解码后的帧数据转换为图像格式(如Bitmap),以便在UI上显示。
-
显示预览图:将提取出的第一帧图像设置为某个Image组件的源,即可在界面上显示视频预览图。
请注意,这个过程可能涉及到复杂的编解码操作和图像处理,确保你的应用有足够的性能和资源来处理这些任务。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。