HarmonyOS 鸿蒙Next 自定义视频控制器
HarmonyOS 鸿蒙Next 自定义视频控制器
Slider({
value: this.currentTime,
min: 0,
max: this.duration,
onChange: (value: number, mode: SliderChangeMode) => {
this.currentTime = value;
this.controller.setCurrentTime(value, SeekMode.Accurate);
}
})
在自定义视频控制中,这个方法为何是报错的?
onChange: (value: number, mode: SliderChangeMode) => {
this.currentTime = value;
this.controller.setCurrentTime(value, SeekMode.Accurate);
}
更多关于HarmonyOS 鸿蒙Next 自定义视频控制器的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我这么写是可以做到视频控制的
/*
基于video组件,实现视频播放功能,主要用于控制视频的状态,具体功能包括
* 播放、暂停、停止、跳转、设置进度等
*
*/
[@Entry](/user/Entry)
[@Component](/user/Component)
struct VideoCreateComponent {
[@State](/user/State) duration: number =0 //当前视频的时长,单位为秒。
[@State](/user/State) currentTime: number =0//当前视频播放的进度,单位为秒。
// 调用接口来创建video组件加载本地视频,src指定视频播放源的路径,设置视频封面
[@State](/user/State) videoSrc: Resource = $rawfile('video1.mp4')
[@State](/user/State) previewUri: Resource = $r('app.media.startIcon')
[@State](/user/State) curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X //是设置倍速播放
[@State](/user/State) isAutoPlay: boolean = false
[@State](/user/State) showControls: boolean = true
// controller接口设置视频控制器,用于自定义控制视频,开始,暂停,结束,精准跳转
controller: VideoController = new VideoController()
build() {
Column() {
//添加属性和事件调用,主要为播放开始、暂停结束、播放失败、视频准备和操作进度条等事件
Video({
src: this.videoSrc,
previewUri: this.previewUri,
currentProgressRate: this.curRate,
controller: this.controller
}).width('100%').height(600)
.autoPlay(this.isAutoPlay)
.controls(this.showControls)
.onStart(() => {
console.info('onStart')
})
.onPause(() => {
console.info('onPause')
})
.onFinish(() => {
console.info('onFinish')
})
.onError(() => {
console.info('onError')
})
.onPrepared((e) => {
this.duration = e.duration;
console.info('onPrepared is ' + e.duration)
})
.onSeeking((e) => {
console.info('onSeeking is ' + e.time)
})
.onSeeked((e) => {
console.info('onSeeked is ' + e.time)
})
.onUpdate((e) => {
this.currentTime = e.time;
console.info('onUpdate is ' + e.time)
})
Row() {
Button(<span class="hljs-string">'start'</span>).onClick(() => {
<span class="hljs-keyword">this</span>.controller.start() <span class="hljs-comment">// 开始播放</span>
}).margin(<span class="hljs-number">5</span>)
Button(<span class="hljs-string">'pause'</span>).onClick(() => {
<span class="hljs-keyword">this</span>.controller.pause() <span class="hljs-comment">// 暂停播放</span>
}).margin(<span class="hljs-number">5</span>)
Button(<span class="hljs-string">'stop'</span>).onClick(() => {
<span class="hljs-keyword">this</span>.controller.stop() <span class="hljs-comment">// 结束播放</span>
}).margin(<span class="hljs-number">5</span>)
Button(<span class="hljs-string">'setTime'</span>).onClick(() => {
<span class="hljs-keyword">this</span>.controller.setCurrentTime(<span class="hljs-number">10</span>, SeekMode.Accurate) <span class="hljs-comment">// 精准跳转到视频的10s位置</span>
}).margin(<span class="hljs-number">5</span>)
}
Row() {
Button(<span class="hljs-string">'rate 0.75'</span>).onClick(() => {
<span class="hljs-keyword">this</span>.curRate = PlaybackSpeed.Speed_Forward_0_75_X <span class="hljs-comment">// 0.75倍速播放</span>
}).margin(<span class="hljs-number">5</span>)
Button(<span class="hljs-string">'rate 1'</span>).onClick(() => {
<span class="hljs-keyword">this</span>.curRate = PlaybackSpeed.Speed_Forward_1_00_X <span class="hljs-comment">// 原倍速播放</span>
}).margin(<span class="hljs-number">5</span>)
Button(<span class="hljs-string">'rate 2'</span>).onClick(() => {
<span class="hljs-keyword">this</span>.curRate = PlaybackSpeed.Speed_Forward_2_00_X <span class="hljs-comment">// 2倍速播放</span>
}).margin(<span class="hljs-number">5</span>)
}
Slider({
value: <span class="hljs-keyword">this</span>.currentTime,
min: <span class="hljs-number">0</span>,
max: <span class="hljs-keyword">this</span>.duration,
})
.onChange((value: number, mode: SliderChangeMode) => {
<span class="hljs-keyword">this</span>.controller.start() <span class="hljs-comment">// 开始播放</span>
<span class="hljs-keyword">this</span>.currentTime = value;
<span class="hljs-keyword">this</span>.controller.setCurrentTime(value, SeekMode.Accurate);
})
}
}}
更多关于HarmonyOS 鸿蒙Next 自定义视频控制器的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
对于HarmonyOS鸿蒙Next自定义视频控制器的问题,以下是一些专业解答:
在HarmonyOS鸿蒙Next系统中,自定义视频控制器涉及对媒体播放控件的深入操作和UI定制。要实现这一点,首先需要了解鸿蒙系统提供的媒体播放组件及其API接口。通过这些接口,开发者可以获取视频播放的当前状态(如播放、暂停、进度等),并据此更新自定义控制面板的UI。
接下来,设计并实现一个符合应用风格的UI界面,包括布局设计、控件选择和事件处理。在布局设计中,要确保控件的位置、大小和交互方式都符合用户体验的最佳实践。在事件处理方面,为自定义控制面板的控件(如播放/暂停按钮、进度条等)添加相应的事件监听器,以便在用户交互时能够正确地调用媒体播放API来更新视频播放状态。
此外,还需考虑在不同设备和屏幕尺寸下的适配问题,确保自定义控制面板在各种环境下都能良好地显示和交互。同时,如果自定义视频控制器需要支持遥控器操作,则需确保系统支持遥控器事件监听,并通过API监听遥控器事件,如方向键、播放/暂停键等,然后将这些事件与相应的处理函数绑定。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html