0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

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

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

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

OpenAtom OpenHarmony ? 來源:未知 ? 2022-10-27 10:19 ? 次閱讀

點(diǎn)擊藍(lán)字 ╳ 關(guān)注我們

開源項(xiàng)目 OpenHarmony是每個(gè)人的 OpenHarmony 3aaac3b6-4af8-11ed-a3b6-dac502259ad0.png

徐建國

潤和軟件生態(tài)技術(shù)專家

以下內(nèi)容來自嘉賓分享,不代表開放原子開源基金會(huì)觀點(diǎn)

內(nèi)容簡介

本文介紹了如何使用ArkUI框架提供的video組件,實(shí)現(xiàn)一個(gè)具有簡易播放器。通過VideoController控制器來控制倍速、全屏、進(jìn)度調(diào)節(jié)等功能。

由于使用本地視頻文件會(huì)影響App的包大小,所以通常我們的視頻文件來源于網(wǎng)絡(luò)地址,記得需要在config或者module.json對應(yīng)的"abilities"中添加網(wǎng)絡(luò)使用權(quán)限ohos.permission.INTERNET。

效果展示

添加權(quán)限(網(wǎng)絡(luò)地址需要)
"abilities":[
{
"permissions":["ohos.permission.INTERNET"],
}
]
使用一個(gè)VideoController對象可以控制一個(gè)或多個(gè)video。
//一個(gè)VideoController對象可以控制一個(gè)或多個(gè)video。
controller:VideoController=newVideoController();
接口
declareinterfaceVideoOptions{
src?:string|Resource;
currentProgressRate?:number|string|PlaybackSpeed;
previewUri?:string|PixelMap|Resource;
controller?:VideoController;
}

3d38ab3e-4af8-11ed-a3b6-dac502259ad0.png

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

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

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

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

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

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

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

PlaybackSpeed類型接口說明

declareinterfaceVideoOptions{
src?:string|Resource;
currentProgressRate?:number|string|PlaybackSpeed;
previewUri?:string|PixelMap|Resource;
controller?:VideoController;
}

VideoController

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

★start() : void開始播放。

★pause() : void暫停播放。

★stop() : void停止播放。

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

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

★exitFullscreen() : void退出全屏。

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

setCurrentTime8+

setCurrentTime(value: number, seekMode: SeekMode)

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

★參數(shù)

★SeekMode8+類型接口說明

declareinterfaceVideoOptions{
src?:string|Resource;
currentProgressRate?:number|string|PlaybackSpeed;
previewUri?:string|PixelMap|Resource;
controller?:VideoController;
}

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枚舉說明

事件:

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ā)該事件,通過duration可以獲取視頻時(shí)長,單位為秒(s)。

onSeeking(event?: { time: number }) => void操作進(jìn)度條過程時(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)度條過程時(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%')  
  }  
}

總結(jié)

本文介紹了如何使用ArkUI框架提供的video組件,實(shí)現(xiàn)一個(gè)具有視頻播放、倍速控制、進(jìn)度調(diào)節(jié)的播放器。通過VideoController控制器來控制倍速、全屏、進(jìn)度調(diào)節(jié)等功能。當(dāng)然,除了文中分享的視頻播放器樣例,開發(fā)者還可以通過拓展其他相關(guān)屬性和方法,實(shí)現(xiàn)更多好玩的樣例。


原文標(biāo)題:在DAYU200上實(shí)現(xiàn)OpenHarmony視頻播放器

文章出處:【微信公眾號:OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3722

    瀏覽量

    16317

原文標(biāo)題:在DAYU200上實(shí)現(xiàn)OpenHarmony視頻播放器

文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    怎么DAYU200安裝應(yīng)用?

    怎么DAYU200安裝應(yīng)用
    發(fā)表于 02-07 16:07

    如何實(shí)現(xiàn)DAYU200開發(fā)板使能Panfrost驅(qū)動(dòng)并且支持OpenHarmony

    如何實(shí)現(xiàn)DAYU200開發(fā)板使能Panfrost驅(qū)動(dòng)并且支持OpenHarmony呢?
    發(fā)表于 03-02 10:26

    基于潤和DAYU200開發(fā)套件的OpenHarmony分布式音樂播放器

    192.168.1.111 netmask 255.255.255.0打開音樂,點(diǎn)擊左下角流轉(zhuǎn)按鈕,列表中會(huì)出現(xiàn)遠(yuǎn)端設(shè)備的id,選擇遠(yuǎn)端設(shè)備id即可實(shí)現(xiàn)跨設(shè)備遷移播放DAYU200開發(fā)板這里放幾張
    發(fā)表于 03-14 09:07

    OpenHarmony 3.1 Release初體驗(yàn) 潤和DAYU200開發(fā)套件

    /docs/tree/master/HiHope_DAYU200按如下配置:3 視頻效果:視頻鏈接:https://www.bilibili.com/video/BV1RP4y1N7JY/ 4 圖片效果:燒錄成功后開機(jī),效果圖如
    發(fā)表于 03-31 18:10

    潤和DAYU200領(lǐng)跑OpenHarmony富設(shè)備產(chǎn)業(yè)化!

    應(yīng)用Demo,歡迎蒞臨體驗(yàn)。【相關(guān)資料&文章】主線代碼倉地址:點(diǎn)擊文末“閱讀原文”查看詳情分布式音樂播放器樣例:【樣例】基于潤和DAYU200開發(fā)套件的OpenHarmony分布式音樂
    發(fā)表于 04-21 20:06

    求一種基于DAYU200開發(fā)套件的分布式音樂播放器設(shè)計(jì)方案

    播放器,實(shí)現(xiàn)了基本的音樂播放、暫停、一曲、下一曲功能,并使用分布式能力完成了音樂播放狀態(tài)的跨設(shè)備遷移。音樂
    發(fā)表于 09-08 17:22

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

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

    【潤和軟件DAYU200開發(fā)板體驗(yàn)】移植speexdsp到OpenHarmony標(biāo)準(zhǔn)系統(tǒng)功能演示

    視頻已經(jīng)同步上傳至硬聲app,賬號名稱離北況歸移植speexdsp到OpenHarmony標(biāo)準(zhǔn)系統(tǒng)系列文章:【潤和軟件DAYU200開發(fā)板體驗(yàn)】移植speexdsp到OpenHarmony
    發(fā)表于 11-06 22:35

    潤開鴻DAYU200DAYU210聯(lián)袂通過OpenHarmony 3.2 Release版本兼容性測評

    百業(yè)的生態(tài)使命。 2023開放原子全球開源峰會(huì)OpenHarmony分論壇OpenHarmony 3.2 Release先行示范儀式,潤開鴻受邀參與儀式的官方展示環(huán)節(jié),分享了
    發(fā)表于 09-22 11:11

    OpenHarmony Dev-Board-SIG專場:DAYU200開源計(jì)劃—代碼Master需要的材料

    OpenHarmony Dev-Board-SIG專場:DAYU200開源計(jì)劃—代碼Master需要的材料
    的頭像 發(fā)表于 12-28 14:14 ?1556次閱讀
    <b class='flag-5'>OpenHarmony</b> Dev-Board-SIG專場:<b class='flag-5'>DAYU200</b>開源計(jì)劃—代碼<b class='flag-5'>上</b>Master需要的材料

    DAYU200開發(fā)套件OpenHarmony分布式音樂播放器

    NVR、工業(yè)網(wǎng)關(guān)等多網(wǎng)口產(chǎn)品需求。 目前DAYU200已經(jīng)面向行業(yè)和開發(fā)者全面供貨。 ? DAYU200亮點(diǎn) ? ? 樣例:基于
    發(fā)表于 03-17 09:24 ?4225次閱讀
    <b class='flag-5'>DAYU200</b>開發(fā)套件<b class='flag-5'>OpenHarmony</b>分布式音樂<b class='flag-5'>播放器</b>

    DAYU200開發(fā)版升級openHarmony3.1 release版本

    今天收到了來自潤和的DAYU200的開發(fā)板,我們開機(jī)之后,查看關(guān)于手機(jī),這一欄,發(fā)現(xiàn)openharmony的版本是3.1的beta版,于是我們先做個(gè)升級,然后進(jìn)行更多的體驗(yàn),
    的頭像 發(fā)表于 04-16 09:37 ?2064次閱讀
    <b class='flag-5'>DAYU200</b>開發(fā)版升級<b class='flag-5'>openHarmony</b>3.1 release版本

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

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

    喜大普奔!DAYU200能打電話了—OpenHarmony 3.1新特性!

    OpenHarmony3.1Release已于3月31號發(fā)布,目前DAYU200是首款支持OpenHarmony3.1Release版本的開發(fā)套件。DAYU200現(xiàn)已面向行業(yè)和開發(fā)者全
    的頭像 發(fā)表于 04-22 11:43 ?1125次閱讀
    喜大普奔!<b class='flag-5'>DAYU200</b>能打電話了—<b class='flag-5'>OpenHarmony</b> 3.1新特性!

    潤和軟件DAYU200OpenHarmony賦能之旅

    2021年,潤和軟件推出了OpenHarmony高性能設(shè)備平臺大禹系列,其中DAYU200作為首款支持OpenHarmony富設(shè)備的開發(fā)板,是廣大開發(fā)者探索OpenHarmony開發(fā)的
    的頭像 發(fā)表于 11-18 09:49 ?1526次閱讀
    潤和軟件<b class='flag-5'>DAYU200</b>的<b class='flag-5'>OpenHarmony</b>賦能之旅