在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenHarmony視頻播放器

ArkUI詳解 ? 來(lái)源:鴻蒙實(shí)驗(yàn)室 ? 作者:鴻蒙實(shí)驗(yàn)室 ? 2022-08-16 15:06 ? 次閱讀

OpenHarmony視頻播放器

作者“堅(jiān)果,華為云享專家,InfoQ簽約作者,潤(rùn)和軟件KOL專家,電子發(fā)燒友鴻蒙MVP,51CTO博客專家博主,阿里云博客專家,開(kāi)源項(xiàng)目gin-vue-admin成員之一

由于視頻資源在項(xiàng)目中使用較為頻繁,于是有了這個(gè)教程,本教程在最后也是實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的播放器。

效果預(yù)覽

Video

由于使用本地視頻文件會(huì)影響App的包大小,所以通常我們的視頻文件來(lái)源于網(wǎng)絡(luò)地址,需要在config或者module.json對(duì)應(yīng)的"abilities"中添加網(wǎng)絡(luò)使用權(quán)限ohos.permission.INTERNET。我是為了測(cè)試方便用的本地視頻,大家別嫌棄。

"abilities":[

{

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

}

]

在使用的時(shí)候一個(gè)VideoController對(duì)象可以控制一個(gè)或多個(gè)video。

//一個(gè)VideoController對(duì)象可以控制一個(gè)或多個(gè)video。

controller: VideoController = new VideoController();

接口

declare interface VideoOptions {

src?: string | Resource;

?

currentProgressRate?: number | string | PlaybackSpeed;

previewUri?: string | PixelMap | Resource;

?

controller?: VideoController;

}

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

支持本地視頻路徑和網(wǎng)絡(luò)路徑。

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

支持dataability://的路徑前綴,用于訪問(wèn)通過(guò)Data Ability提供的視頻路徑

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

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

controller:VideoController 控制器。一個(gè)VideoController對(duì)象可以控制一個(gè)或多個(gè)video。如果需要通過(guò)代碼控制視頻的播放、暫停等,可以給Video組件設(shè)置這個(gè)參數(shù),然后通過(guò)控制器的如下接口控制視頻播放狀態(tài):

這兒我需要將PlaybackSpeed和VideoController單獨(dú)拎出來(lái)做一個(gè)解釋。

PlaybackSpeed類型接口說(shuō)明

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

一個(gè)VideoController對(duì)象可以控制一個(gè)或多個(gè)video。

start() : void 開(kāi)始播放。

pause() : void 暫停播放。

stop() : void 停止播放。

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

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

exitFullscreen() : void 退出全屏。

在這兒,我同樣需要將setCurrentTime單獨(dú)拎出

setCurrentTime8+

setCurrentTime(value: number, seekMode: SeekMode)

指定視頻播放的進(jìn)度位置,并指定跳轉(zhuǎn)模式。

參數(shù)

SeekMode8+類型接口說(shuō)明

?

declare enum SeekMode {

?

PreviousKeyframe,

?

?

NextKeyframe,

?

?

ClosestKeyframe,

?

Accurate,

}

?

Video屬性

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

詳細(xì)介紹

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

.autoPlay(boolean) 默認(rèn)值false 是否自動(dòng)播放。

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

.loop(boolean) 是否單個(gè)視頻循環(huán)播放。

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

ImageFit枚舉說(shuō)明

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

事件

onStart() => void 播放時(shí)觸發(fā)該事件。

onPause() => void 暫停時(shí)觸發(fā)該事件。

onFinish() => void 播放結(jié)束時(shí)觸發(fā)該事件。

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

onFullscreenChange(event?: { fullscreen: boolean }) => void) 視頻進(jìn)入和退出全屏?xí)r觸發(fā)該事件。

onPrepared(event?: { duration: number }) => void 視頻準(zhǔn)備完成時(shí)觸發(fā)該事件,通過(guò)duration可以獲取視頻時(shí)長(zhǎng),單位為秒(s)。

onSeeking(event?: { time: number }) => void 操作進(jìn)度條過(guò)程時(shí)上報(bào)時(shí)間信息,單位為s。

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

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

表格

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

完整示例

@

Entry

@

Component

struct

Index

{

@

State

message

:

string

=

'視頻預(yù)覽'

@

State

previewUris

:

Resource

=

$r

(

'app.media.openharmony'

);

//預(yù)覽封面

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

)

// 是否自動(dòng)播放

.

controls

(

this

.

controls

)

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

.

objectFit

(

ImageFit

.

Contain

)

// 視頻顯示模式

.

loop

(

this

.

loop

)

// 是否單個(gè)視頻循環(huán)播放

.

height

(

"60%"

)

.

onStart

(()

=>

{

// 播放時(shí)觸發(fā)該事件

console

.

info

(

'onStart'

);

})

.

onPause

(()

=>

{

// 暫停時(shí)觸發(fā)該事件

console

.

info

(

'onPause'

);

})

.

onFinish

(()

=>

{

console

.

info

(

'onFinish'

);

?

})

.

onError

(()

=>

{

// 播放失敗時(shí)觸發(fā)該事件

console

.

error

(

'onError'

);

})

.

onFullscreenChange

((

e

)

=>

{

console

.

info

(

'視頻進(jìn)入和退出全屏?xí)r觸發(fā)該事件:'

+

e

.

fullscreen

)

})

.

onPrepared

((

e

)

=>

{

console

.

info

(

'視頻準(zhǔn)備完成時(shí)觸發(fā)該事件:'

+

e

.

duration

)

})

.

onSeeking

((

e

)

=>

{

console

.

info

(

'操作進(jìn)度條過(guò)程時(shí)上報(bào)時(shí)間信息:'

+

e

.

time

)

})

.

onSeeked

((

e

)

=>

{

console

.

info

(

'操作進(jìn)度條完成后,上報(bào)播放時(shí)間信息:'

+

e

.

time

)

})

.

onUpdate

((

e

)

=>

{

console

.

info

(

'播放進(jìn)度變化時(shí)觸發(fā)該事件:'

+

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

(

"循環(huán)播放"

)

.

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

(

"指定視頻播放的進(jìn)度"

)

.

onClick

(()

=>

{

this

.

controller

.

setCurrentTime

(

9

)

})

}

}

}

.

width

(

'100%'

).

height

(

'100%'

)

}

}

參考文檔

video

flex

名稱 描述
PreviousKeyframe 跳轉(zhuǎn)到前一個(gè)最近的關(guān)鍵幀。
NextKeyframe 跳轉(zhuǎn)到后一個(gè)最近的關(guān)鍵幀。
ClosestKeyframe 跳轉(zhuǎn)到最近的關(guān)鍵幀。
Accurate 精準(zhǔn)跳轉(zhuǎn),不論是否為關(guān)鍵幀。
參數(shù)名 參數(shù)類型 必填 默認(rèn)值 參數(shù)描述
value number - 視頻播放進(jìn)度位置。
seekMode SeekMode - 跳轉(zhuǎn)模式。
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Video
    +關(guān)注

    關(guān)注

    0

    文章

    196

    瀏覽量

    45522
  • 視頻播放器
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    11958
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3786

    瀏覽量

    17358
收藏 0人收藏

    評(píng)論

    相關(guān)推薦

    如何基于 OpenHarmony 制作一個(gè)簡(jiǎn)單視頻播放器?

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

    #DAYU200#OpenHarmony 視頻播放器

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

    在DAYU200上實(shí)現(xiàn)OpenHarmony視頻播放器

    內(nèi)容簡(jiǎn)介本文介紹了如何使用ArkUI框架提供的video組件,實(shí)現(xiàn)一個(gè)具有簡(jiǎn)易播放器。通過(guò)VideoController控制來(lái)控制倍速、全屏、進(jìn)度調(diào)節(jié)等功能。由于使用本地視頻文件會(huì)影響App的包
    發(fā)表于 10-14 12:12

    網(wǎng)頁(yè)視頻播放器代碼

    網(wǎng)頁(yè)視頻播放器代碼
    發(fā)表于 01-10 11:23 ?102次下載
    網(wǎng)頁(yè)<b class='flag-5'>視頻</b><b class='flag-5'>播放器</b>代碼

    flv視頻播放器代碼

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

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

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

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

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

    LXE播放器

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

    關(guān)于VR電影視頻播放器 盤點(diǎn)12款VR播放器

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

    基于開(kāi)源項(xiàng)目fenster組件適配移植的視頻播放器教程

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

    在DAYU200上實(shí)現(xiàn)OpenHarmony視頻播放器

    何使用ArkUI框架提供的video組件,實(shí)現(xiàn)一個(gè)具有簡(jiǎn)易播放器。通過(guò)VideoController控制來(lái)控制倍速、全屏、進(jìn)度調(diào)節(jié)等功能。 由于使用本地視頻文件會(huì)影響App的包大小,所以通常我們
    的頭像 發(fā)表于 10-27 10:19 ?1129次閱讀

    【大咖分享】OpenHarmony元能力子系統(tǒng)分享

    開(kāi)發(fā)板免費(fèi)體驗(yàn) 國(guó)產(chǎn)龍芯 LoongArch 平臺(tái)已初步支持OpenHarmony操作系統(tǒng) 在DAYU200上實(shí)現(xiàn)OpenHarmony視頻播放器
    的頭像 發(fā)表于 10-24 12:20 ?956次閱讀

    HarmonyOS開(kāi)發(fā)案例:【視頻播放器

    基于video、swiper和slider組件,實(shí)現(xiàn)簡(jiǎn)單的視頻播放器,可支持海報(bào)輪播、視頻播放等功能。
    的頭像 發(fā)表于 04-22 21:06 ?700次閱讀
    HarmonyOS開(kāi)發(fā)案例:【<b class='flag-5'>視頻</b><b class='flag-5'>播放器</b>】

    HarmonyOS開(kāi)發(fā)案例:【視頻播放器

    使用ArkTS語(yǔ)言實(shí)現(xiàn)視頻播放器,主要包括主界面和視頻播放界面,
    的頭像 發(fā)表于 04-23 17:25 ?908次閱讀
    HarmonyOS開(kāi)發(fā)案例:【<b class='flag-5'>視頻</b><b class='flag-5'>播放器</b>】

    HarmonyOS開(kāi)發(fā)案例:【視頻播放器

    使用ArkTS語(yǔ)言實(shí)現(xiàn)視頻播放器,主要包括主頁(yè)面和視頻播放頁(yè)面
    的頭像 發(fā)表于 04-24 14:52 ?1097次閱讀
    HarmonyOS開(kāi)發(fā)案例:【<b class='flag-5'>視頻</b><b class='flag-5'>播放器</b>】
    主站蜘蛛池模板: 黄色免费在线视频 | 国产美女在线精品免费观看 | 欧美亚洲网站 | 午夜88 | 真实一级一级一片免费视频 | 国产精品青草久久久久福利99 | 色在线免费观看 | 花怜write. as | 美女露出扒开尿口让男人桶 | 一区二区高清在线观看 | 天天天综合 | 人人爱天天做夜夜爽毛片 | 天堂网www中文天堂在线 | 色在线播放 | h视频免费在线 | 国产精品久久久福利 | 成人综合婷婷国产精品久久免费 | 天天爽天天狼久久久综合 | 国产精品一级香蕉一区 | 欧美小网站 | 国产内地激情精品毛片在线一 | 亚洲日本一区二区三区在线不卡 | 日本一区二区三区四区视频 | 毛片免费网 | 天天搞天天干 | 天堂在线视频精品 | 日本精品视频一视频高清 | 日一日操一操 | 成人黄色在线 | 国产欧美乱码在线看 | 人人叉人人 | 加勒比在线免费视频 | 国产精品黄网站免费观看 | 俺去啦五月 | 国产精品天天操 | 免费网站黄色 | 免费看欧美理论片在线 | 色爱区综合激情五月综合激情 | 欧美日本一区二区三区道 | 农村妇女色又黄一级毛片卡 | 天天摸夜班摸天天碰 |

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品