🚀一、Video
影片元件是用於應用程式中嵌入影片的一種方法。它可以讓使用者在網站上觀看影片並與其進行互動。通常,影片元件將一個影片檔案嵌入應用程式中,並提供一組控制元件,這些控制元件允許使用者播放、暫停、跳過、音量調整和全屏等。透過使用影片元件,開發者可以更容易地將影片嵌入應用程式,使其更易於管理和控制。
🔎1.建立影片元件
語法說明:
Video(value: {src?: string | Resource, currentProgressRate?: number | string | PlaybackSpeed, previewUri?: string | PixelMap | Resource, controller?: VideoController})
其中,src指定影片播放源的路徑,載入方式請參考載入影片資源,currentProgressRate用於設定影片播放倍速,previewUri指定影片未播放時的預覽圖片路徑,controller設定影片控制器,用於自定義控制影片。
@Component
@Entry
export struct VideoPlayer{
private controller:VideoController;
private videosrc: string= 'https://video-js.51miz.com/preview/video/00/00/17/91/V-179173-F2183031.mp4' // 使用時請替換為實際影片載入網址
build(){
Column() {
Video({
src: this.videosrc,
controller: this.controller
})
}
}
}
🔎2.載入影片資源
🦋2.1 載入本地影片
@Component
@Entry
export struct VideoPlayer{
private controller:VideoController;
private innerResource: Resource = $rawfile('1.mp4');
build() {
Column() {
Video({
src: this.innerResource,
controller: this.controller
})
}
}
}
@Component
@Entry
export struct VideoPlayer{
private controller:VideoController;
private videosrc: string= 'dataability://device_id/com.domainname.dataability.videodata/video/10'
build() {
Column() {
Video({
src: this.videosrc,
controller: this.controller
})
}
}
}
提供的影片路徑帶有dataability://字首,使用時確保對應影片資源存在即可
🦋2.2 載入沙箱路徑影片
支援file:///data/storage路徑字首的字串,用於讀取應用沙箱路徑內的資源。需要保證應用沙箱目錄路徑下的檔案存在並且有可讀許可權。
@Component
export struct VideoPlayer {
private controller: VideoController;
private videosrc: string = 'file:///data/storage/el2/base/haps/entry/files/show.mp4'
build() {
Column() {
Video({
src: this.videosrc,
controller: this.controller
})
}
}
}
🦋2.3 載入網路影片
需要申請許可權ohos.permission.INTERNET
@Component
@Entry
export struct VideoPlayer{
private controller:VideoController;
private videosrc: string= 'https://video-js.51miz.com/preview/video/00/00/17/91/V-179173-F2183031.mp4' // 使用時請替換為實際影片載入網址
build(){
Column() {
Video({
src: this.videosrc,
controller: this.controller
})
}
}
}
🔎3.新增屬性
Video元件屬性主要用於設定影片的播放形式。例如設定影片播放是否靜音、播放時是否顯示控制條等。
@Component
@Entry
export struct VideoPlayer{
private controller:VideoController;
private innerResource: Resource = $rawfile('1.mp4');
build() {
Column() {
Video({
src: this.innerResource,
controller: this.controller
}) .muted(true) //設定是否靜音
.controls(true) //設定是否顯示預設控制條
.autoPlay(true) //設定是否自動播放
.loop(true) //設定是否迴圈播放
.objectFit(ImageFit.Auto) //設定影片適配模式
}
}
}
🔎4.事件呼叫
Video元件回撥事件主要為播放開始、暫停結束、播放失敗、影片準備和操作進度條等事件,除此之外,Video元件也支援通用事件的呼叫,如點選、觸控等事件的呼叫。
@Component
@Entry
export struct VideoPlayer{
private controller:VideoController;
private innerResource: Resource = $rawfile('1.mp4');
build() {
Column() {
Video({
src: this.innerResource,
controller: this.controller
}) .onUpdate((event) => { //更新事件回撥
console.info("Video update.");
})
.onPrepared((event) => { //準備事件回撥
console.info("Video prepared.");
})
.onError(() => { //失敗事件回撥
console.info("Video error.");
})
}
}
}
🔎5.Video控制器使用
🦋5.1 預設影片控制器
預設的控制器支援影片的開始、暫停、進度調整、全屏顯示四項基本功能。
@Component
@Entry
export struct VideoPlayer{
private videoSrc: Resource = $rawfile('1.mp4');
@State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X
build() {
Row() {
Column() {
Video({
src: this.videoSrc,
currentProgressRate: this.curRate
})
}
.width('100%')
}
.height('100%')
}
}
🦋5.2 自定義影片控制器
使用自定義的控制器,先將預設控制器關閉掉,之後可以使用button以及slider等元件進行自定義的控制與顯示,適合自定義較強的場景下使用。
@Component
@Entry
export struct VideoPlayer{
private videoSrc: Resource = $rawfile('1.mp4');
@State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X
@State isAutoPlay: boolean = false
@State showControls: boolean = true
@State sliderStartTime: string = '';
@State currentTime: number = 0;
@State durationTime: number = 0;
@State durationStringTime: string ='';
controller: VideoController = new VideoController()
build() {
Row() {
Column() {
Video({
src: this.videoSrc,
currentProgressRate: this.curRate,
controller: this.controller
}).controls(false).autoPlay(true)
.onPrepared((event)=>{
this.durationTime = event.duration
})
.onUpdate((event)=>{
this.currentTime =event.time
})
Row() {
Text(JSON.stringify(this.currentTime) + 's')
Slider({
value: this.currentTime,
min: 0,
max: this.durationTime
})
.onChange((value: number, mode: SliderChangeMode) => {
this.controller.setCurrentTime(value);
}).width("90%")
Text(JSON.stringify(this.durationTime) + 's')
}
.opacity(0.8)
.width("100%")
}
.width('100%')
}
.height('40%')
}
}
🚀寫在最後
- 如果你覺得這篇內容對你還蠻有幫助,我想邀請你幫我三個小忙:
- 點贊,轉發,有你們的 『點贊和評論』,才是我創造的動力。
- 關注小編,同時可以期待後續文章ing🚀,不定期分享原創知識。
- 更多鴻蒙最新技術知識點,請關注作者部落格:https://t.doruo.cn/14DjR1rEY