精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenHarmony視頻播放器

ArkUI詳解 ? 來源:鴻蒙實驗室 ? 作者:鴻蒙實驗室 ? 2022-08-16 15:06 ? 次閱讀

OpenHarmony視頻播放器

作者“堅果,華為云享專家,InfoQ簽約作者,潤和軟件KOL專家,電子發燒友鴻蒙MVP,51CTO博客專家博主,阿里云博客專家,開源項目gin-vue-admin成員之一

由于視頻資源在項目中使用較為頻繁,于是有了這個教程,本教程在最后也是實現了一個簡單的播放器。

效果預覽

Video

由于使用本地視頻文件會影響App的包大小,所以通常我們的視頻文件來源于網絡地址,需要在config或者module.json對應的"abilities"中添加網絡使用權限ohos.permission.INTERNET。我是為了測試方便用的本地視頻,大家別嫌棄。

"abilities":[

{

"permissions": ["ohos.permission.INTERNET"],

}

]

在使用的時候一個VideoController對象可以控制一個或多個video。

//一個VideoController對象可以控制一個或多個video。

controller: VideoController = new VideoController();

接口

declare interface VideoOptions {

src?: string | Resource;

?

currentProgressRate?: number | string | PlaybackSpeed;

previewUri?: string | PixelMap | Resource;

?

controller?: VideoController;

}

其中僅src( 視頻播放源的路徑 )這個參數是必填的。

支持本地視頻路徑和網絡路徑。

支持在resources下面的video或rawfile文件夾里放置媒體資源。

支持dataability://的路徑前綴,用于訪問通過Data Ability提供的視頻路徑

currentProgressRate:number 視頻播放倍速,支持0.75,1.0,1.25,1.75,2.0。

previewUri:string 預覽圖片的路徑,可以作為視頻未播放時的封面。

controller:VideoController 控制器。一個VideoController對象可以控制一個或多個video。如果需要通過代碼控制視頻的播放、暫停等,可以給Video組件設置這個參數,然后通過控制器的如下接口控制視頻播放狀態:

這兒我需要將PlaybackSpeed和VideoController單獨拎出來做一個解釋。

PlaybackSpeed類型接口說明

Speed_Forward_0_75_X 0.75倍速播放。
Speed_Forward_1_00_X 1倍速播放。
Speed_Forward_1_25_X 1.25倍速播放。
Speed_Forward_1_75_X 1.75倍速播放。
Speed_Forward_2_00_X 2倍速播放。
名稱 描述

declare

enum

PlaybackSpeed

{

?

Speed_Forward_0_75_X

,

?

Speed_Forward_1_00_X

,

?

Speed_Forward_1_25_X

,

?

?

Speed_Forward_1_75_X

,

?

Speed_Forward_2_00_X

,

}

VideoController

一個VideoController對象可以控制一個或多個video。

start() : void 開始播放。

pause() : void 暫停播放。

stop() : void 停止播放。

setCurrentTime(value: number, seekMode: SeekMode)指定視頻播放的進度位置,并指定跳轉模式。value是進度,seekMode是跳轉模式

requestFullscreen() : boolean() 請求全屏播放,true是橫屏,false豎屏。

exitFullscreen() : void 退出全屏。

在這兒,我同樣需要將setCurrentTime單獨拎出

setCurrentTime8+

setCurrentTime(value: number, seekMode: SeekMode)

指定視頻播放的進度位置,并指定跳轉模式。

參數

SeekMode8+類型接口說明

?

declare enum SeekMode {

?

PreviousKeyframe,

?

?

NextKeyframe,

?

?

ClosestKeyframe,

?

Accurate,

}

?

Video屬性

muted(是否靜音)、autoPlay(自動播放)、controls(控制欄)、objectFit(顯示模式)、loop(是否循環播放)。其中,objectFit參數設置值為ImageFit.Cover則鋪滿整個容器。

詳細介紹

.muted(boolean) 默認值false 是否靜音。

.autoPlay(boolean) 默認值false 是否自動播放。

.controls(boolean) 默認值true 控制視頻播放的控制欄是否顯示。

.loop(boolean) 是否單個視頻循環播放。

.objectFit(ImageFit) 默認值Cover 設置視頻顯示模式。ImageFit有如下枚舉值可選

ImageFit枚舉說明

名稱 描述
Cover 保持寬高比進行縮小或者放大,使得圖片兩邊都大于或等于顯示邊界。
Contain 保持寬高比進行縮小或者放大,使得圖片完全顯示在顯示邊界內。
Fill 不保持寬高比進行放大縮小,使得圖片填充滿顯示邊界。
None 保持原有尺寸顯示。通常配合objectRepeat屬性一起使用。
ScaleDown 保持寬高比顯示,圖片縮小或者保持不變。

事件

onStart() => void 播放時觸發該事件。

onPause() => void 暫停時觸發該事件。

onFinish() => void 播放結束時觸發該事件。

onError() => void 播放失敗時觸發該事件。

onFullscreenChange(event?: { fullscreen: boolean }) => void) 視頻進入和退出全屏時觸發該事件。

onPrepared(event?: { duration: number }) => void 視頻準備完成時觸發該事件,通過duration可以獲取視頻時長,單位為秒(s)。

onSeeking(event?: { time: number }) => void 操作進度條過程時上報時間信息,單位為s。

onSeeked(event?: { time: number }) => void 操作進度條完成后,上報播放時間信息,單位為s。

onUpdate(event?: { time: number }) => void 播放進度變化時觸發該事件,單位為s,更新時間間隔為250ms。

表格

名稱 功能描述
onStart() => void 播放時觸發該事件。
onPause() => void 暫停時觸發該事件。
onFinish() => void 播放結束時觸發該事件。
onError() => void 播放失敗時觸發該事件。
onPrepared(event?: { duration: number }) => void 視頻準備完成時觸發該事件,通過duration可以獲取視頻時長,單位為秒(s)。
onSeeking(event?: { time: number }) => void 操作進度條過程時上報時間信息,單位為s。
onSeeked(event?: { time: number }) => void 操作進度條完成后,上報播放時間信息,單位為s。
onUpdate(event?: { time: number }) => void 播放進度變化時觸發該事件,單位為s,更新時間間隔為250ms。

完整示例

@

Entry

@

Component

struct

Index

{

@

State

message

:

string

=

'視頻預覽'

@

State

previewUris

:

Resource

=

$r

(

'app.media.openharmony'

);

//預覽封面

controller

:

VideoController

=

new

VideoController

();

@

State

currentProgressRate

:

number

=

1

@

State

muted

:

boolean

=

false

@

State

autoPlay

:

boolean

=

true

@

State

controls

:

boolean

=

true

@

State

startStatus

:

boolean

=

true

@

State

loop

:

boolean

=

true

?

aboutToAppear

() {

this

.

controller

.

requestFullscreen

(

true

)

this

.

controller

.

start

()

}

?

build

() {

?

Column

() {

Text

(

this

.

message

)

.

fontSize

(

50

)

.

fontWeight

(

FontWeight

.

Bold

)

Video

({

src

:

$r

(

'app.media.video'

),

previewUri

:

this

.

previewUris

,

// 視頻封面

currentProgressRate

:

this

.

currentProgressRate

,

// 視頻播放倍速

controller

:

this

.

controller

,

?

})

.

muted

(

this

.

muted

)

// 是否靜音

.

autoPlay

(

this

.

autoPlay

)

// 是否自動播放

.

controls

(

this

.

controls

)

// 控制視頻播放的控制欄是否顯示

.

objectFit

(

ImageFit

.

Contain

)

// 視頻顯示模式

.

loop

(

this

.

loop

)

// 是否單個視頻循環播放

.

height

(

"60%"

)

.

onStart

(()

=>

{

// 播放時觸發該事件

console

.

info

(

'onStart'

);

})

.

onPause

(()

=>

{

// 暫停時觸發該事件

console

.

info

(

'onPause'

);

})

.

onFinish

(()

=>

{

console

.

info

(

'onFinish'

);

?

})

.

onError

(()

=>

{

// 播放失敗時觸發該事件

console

.

error

(

'onError'

);

})

.

onFullscreenChange

((

e

)

=>

{

console

.

info

(

'視頻進入和退出全屏時觸發該事件:'

+

e

.

fullscreen

)

})

.

onPrepared

((

e

)

=>

{

console

.

info

(

'視頻準備完成時觸發該事件:'

+

e

.

duration

)

})

.

onSeeking

((

e

)

=>

{

console

.

info

(

'操作進度條過程時上報時間信息:'

+

e

.

time

)

})

.

onSeeked

((

e

)

=>

{

console

.

info

(

'操作進度條完成后,上報播放時間信息:'

+

e

.

time

)

})

.

onUpdate

((

e

)

=>

{

console

.

info

(

'播放進度變化時觸發該事件:'

+

e

.

time

)

})

Row

({}) {

Flex

({

wrap

:

FlexWrap

.

Wrap

,

justifyContent

:

FlexAlign

.

SpaceAround

,

alignItems

:

ItemAlign

.

Center

}) {

Button

(

"播放"

)

.

onClick

(()

=>

{

this

.

controller

.

start

()

}).

margin

(

8

)

Button

(

"暫停"

)

.

onClick

(()

=>

{

this

.

controller

.

pause

()

})

Button

(

"循環播放"

)

.

onClick

(()

=>

{

this

.

loop

=!

this

.

loop

})

Button

(

"2倍速"

)

.

onClick

(()

=>

{

this

.

currentProgressRate

=

2

})

Button

(

"靜音"

)

.

onClick

(()

=>

{

this

.

muted

=!

this

.

muted

})

?

Button

(

"停止"

)

.

onClick

(()

=>

{

this

.

controller

.

stop

()

})

?

Button

(

"全屏播放"

)

.

onClick

(()

=>

{

this

.

controller

.

requestFullscreen

(

true

)

})

Button

(

"退出全屏"

)

.

onClick

(()

=>

{

this

.

controller

.

exitFullscreen

()

}).

margin

(

8

)

?

Button

(

"控制欄是否顯示"

)

.

onClick

(()

=>

{

this

.

controls

=

!

this

.

controls

}).

margin

(

8

)

?

Button

(

"指定視頻播放的進度"

)

.

onClick

(()

=>

{

this

.

controller

.

setCurrentTime

(

9

)

})

}

}

}

.

width

(

'100%'

).

height

(

'100%'

)

}

}

參考文檔

video

flex

名稱 描述
PreviousKeyframe 跳轉到前一個最近的關鍵幀。
NextKeyframe 跳轉到后一個最近的關鍵幀。
ClosestKeyframe 跳轉到最近的關鍵幀。
Accurate 精準跳轉,不論是否為關鍵幀。
參數名 參數類型 必填 默認值 參數描述
value number - 視頻播放進度位置。
seekMode SeekMode - 跳轉模式。
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Video
    +關注

    關注

    0

    文章

    195

    瀏覽量

    45160
  • 視頻播放器
    +關注

    關注

    0

    文章

    33

    瀏覽量

    11848
  • OpenHarmony
    +關注

    關注

    25

    文章

    3665

    瀏覽量

    16161
收藏 人收藏

    評論

    相關推薦

    如何基于 OpenHarmony 制作一個簡單視頻播放器?

    OpenHarmony視頻播放器作者“堅果,華為云享專家,InfoQ簽約作者,潤和軟件KOL專家,電子發燒友鴻蒙MVP,阿里云博客專家,開源項目gin-vue-admin成員之一由于視頻
    發表于 08-16 18:02

    #DAYU200#OpenHarmony 視頻播放器

    0.75,1.0,1.25,1.75,2.0。previewUri:string 預覽圖片的路徑,可以作為視頻播放時的封面。controller:VideoController 控制。一個
    發表于 09-15 17:25

    在DAYU200上實現OpenHarmony視頻播放器

    內容簡介本文介紹了如何使用ArkUI框架提供的video組件,實現一個具有簡易播放器。通過VideoController控制來控制倍速、全屏、進度調節等功能。由于使用本地視頻文件會影響App的包
    發表于 10-14 12:12

    網頁視頻播放器代碼

    網頁視頻播放器代碼
    發表于 01-10 11:23 ?102次下載
    網頁<b class='flag-5'>視頻</b><b class='flag-5'>播放器</b>代碼

    flv視頻播放器代碼

    flv視頻播放器代碼 FlV視頻播放器代碼 代碼如下這里只是介紹幾個例子,現在把代碼公布一下,大家可以參考著做,也可以把你喜歡的視頻連接
    發表于 01-10 12:36 ?2054次閱讀

    基于FPGA NiosII的MPEG-4視頻播放器

    基于FPGA NiosII的MPEG-4視頻播放器介紹Altera FPGA SOPC平臺上MPEG-4視頻播放器的實現。以NiosII用戶自定義指令方式實現IQ、IDCT
    發表于 10-09 14:46 ?1624次閱讀
    基于FPGA NiosII的MPEG-4<b class='flag-5'>視頻</b><b class='flag-5'>播放器</b>

    MP4播放器視頻播放格式有哪些?

    MP4播放器視頻播放格式有哪些?        
    發表于 12-21 15:51 ?2.4w次閱讀

    LXE播放器

    lxe視頻播放器軟件是免費軟件,可以完全免費使用、可以自由傳播,exe視頻播放器用于播放屏幕錄像專家錄制的LXE和EXE格式的錄像文件,安裝
    發表于 11-23 16:14 ?0次下載

    關于VR電影視頻播放器 盤點12款VR播放器

    VR電影和視頻那個播放器好,哪些播放器更為實用,由于視頻資源格式多樣,在一個播放器播放不了的
    發表于 06-27 15:50 ?12.6w次閱讀

    基于開源項目fenster組件適配移植的視頻播放器教程

    .簡易視頻播放器功能 支持暫停和播放,播放進度顯示,快進和快退功能
    發表于 04-02 14:57 ?2次下載

    在DAYU200上實現OpenHarmony視頻播放器

    何使用ArkUI框架提供的video組件,實現一個具有簡易播放器。通過VideoController控制來控制倍速、全屏、進度調節等功能。 由于使用本地視頻文件會影響App的包大小,所以通常我們
    的頭像 發表于 10-27 10:19 ?978次閱讀

    【大咖分享】OpenHarmony元能力子系統分享

    開發板免費體驗 國產龍芯 LoongArch 平臺已初步支持OpenHarmony操作系統 在DAYU200上實現OpenHarmony視頻播放器
    的頭像 發表于 10-24 12:20 ?782次閱讀

    HarmonyOS開發案例:【視頻播放器

    基于video、swiper和slider組件,實現簡單的視頻播放器,可支持海報輪播、視頻播放等功能。
    的頭像 發表于 04-22 21:06 ?424次閱讀
    HarmonyOS開發案例:【<b class='flag-5'>視頻</b><b class='flag-5'>播放器</b>】

    HarmonyOS開發案例:【視頻播放器

    使用ArkTS語言實現視頻播放器,主要包括主界面和視頻播放界面,
    的頭像 發表于 04-23 17:25 ?637次閱讀
    HarmonyOS開發案例:【<b class='flag-5'>視頻</b><b class='flag-5'>播放器</b>】

    HarmonyOS開發案例:【視頻播放器

    使用ArkTS語言實現視頻播放器,主要包括主頁面和視頻播放頁面
    的頭像 發表于 04-24 14:52 ?795次閱讀
    HarmonyOS開發案例:【<b class='flag-5'>視頻</b><b class='flag-5'>播放器</b>】