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

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

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

3天內不再提示

基于ArkTS語言的OpenHarmony APP應用開發(fā):多媒體管理2

福州市凌睿智捷電子有限公司 ? 2024-09-21 08:06 ? 次閱讀

1、程序介紹

本示例展示了視頻組件的基本功能,以及如何控制播放狀態(tài)的相關能力。包括視頻組件化,全屏化,窗口化,上下輪播視頻等。

本實例使用Video組件,具體如下:

進入首頁點擊播放按鍵。

點擊視頻播放按鈕,視頻開始播放。再次點擊視頻進入視頻全屏頁。

首頁下滑500vp后,視頻小窗口化。

4.點擊直播按鈕進入直播頁,上下滑動視頻。

本案例已在OpenHarmony凌蒙派-RK3568開發(fā)板驗證通過

API版本:9

2、知識準備

2.1、Video

用于播放視頻文件并控制其播放狀態(tài)的組件。

使用網絡視頻時,需要申請權限ohos.permission.INTERNET。

詳細請參考:官方文檔

2.1.1、接口

Video(value:{src?:string|Resource,currentProgressRate?:number|string|PlaybackSpeed,previewUri?:string|PixelMap|Resource,controller?:VideoController})

參數(shù)定義如下所示:

參數(shù)名參數(shù)類型必填參數(shù)描述
srcstring | Resource視頻播放源的路徑,支持本地視頻路徑和網絡路徑。支持在resources下面的video或rawfile文件夾里放置媒體資源。視頻支持的格式是:mp4、mkv、webm、ts。
currentProgressRatenumber | string | PlaybackSpeed視頻播放倍速。number取值僅支持:0.75,1.0,1.25,1.75,2.0
previewUristring | PixelMap | Resource視頻未播放時的預覽圖片路徑
controllerVideoController設置視頻控制器

其中,PlaybackSpeed定義如下所示:

名稱描述
Speed_Forward_0_75_X0.75倍速播放
Speed_Forward_1_00_X1倍速播放
Speed_Forward_1_25_X1.25倍速播放
Speed_Forward_1_75_X1.75倍速播放
Speed_Forward_2_00_X2倍速播放

2.1.2、屬性

除支持通用屬性外,還支持以下屬性:

名稱參數(shù)類型描述
mutedboolean是否靜音。默認值:false
autoPlayboolean是否自動播放。默認值:false
controlsboolean控制視頻播放的控制欄是否顯示。默認值:true
objectFitImageFit設置視頻顯示模式。默認值:Cover
loopboolean是否單個視頻循環(huán)播放。默認值:false

2.1.3、事件

除支持通用事件外,還支持以下事件:

名稱功能描述
onStart(event:() => void)播放時觸發(fā)該事件
onPause(event:() => void)暫停時觸發(fā)該事件
onFinish(event:() => void)播放結束時觸發(fā)該事件
onError(event:() => void)播放失敗時觸發(fā)該事件
onPrepared(callback:(event?: { duration: number }) => void)視頻準備完成時觸發(fā)該事件,通過duration可以獲取視頻時長,單位為秒(s)
onSeeking(callback:(event?: { time: number }) => void)操作進度條過程時上報時間信息,單位為s
onSeeked(callback:(event?: { time: number }) => void)操作進度條完成后,上報播放時間信息,單位為s
onUpdate(callback:(event?: { time: number }) => void)播放進度變化時觸發(fā)該事件,單位為s,更新時間間隔為250ms
onFullscreenChange(callback:(event?: { fullscreen: boolean }) => void)在全屏播放與非全屏播放狀態(tài)之間切換時觸發(fā)該事件,返回值為true表示進入全屏播放狀態(tài),為false則表示非全屏播放

2.1.4、VideoController

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

(1)導入對象

controller: VideoController = new VideoController()

(2)start

start(): void

開始播放。

(3)pause

pause(): void

暫停播放,顯示當前幀,再次播放時從當前位置繼續(xù)播放。

(4)stop

stop(): void

停止播放,顯示當前幀,再次播放時從頭開始播放。

2.1.5、exitFullscreen

exitFullscreen()

退出全屏播放。

2.1.6、setCurrentTime

setCurrentTime(value: number)

指定視頻播放的進度位置。

其中,參數(shù)定義如下:

參數(shù)名參數(shù)類型必填參數(shù)描述
valuenumber視頻播放進度位置,單位為s

3、程序解析

本案例展示了視頻組件的基本功能,以及如何控制播放狀態(tài)的相關能力。包括視頻組件化,全屏化,窗口化,上下輪播視頻等。

本案例主要分為以下幾個部分:

(1)MainPage.ets,負責主頁面,通過調用其它自定義控件播放視頻;

(2)VideoPage.ets:負責上方輪播圖視頻播放和控制;

(3)SmallVideo.ets:負責小窗口視頻播放和控制;

(4)LivePage.ets:負責顯示直播頁面;

(5)FullPage.ets:全屏顯示視頻播放頁面;

3.1、申請權限

申請網絡視頻權限,在entry/src/main/module.json5文件中添加如下內容:

"requestPermissions": [ { "name": "ohos.permission.INTERNET" }]

3.2、MainPage.ets

在entry/src/main/ets/pages/Index.ets文件中調用MainPage自定義組件。

import { MainPage } from "@ohos/video-component"
@Entry@Componentstruct Index { @State message: string = 'Hello World'
build() { Column() { MainPage() } .width('100%') .height('100%') }}

在VideoComponent/src/main/ets/components/pages/MainPage.ets文件中,首先設置媒體查詢的查詢條件。

listenerIsPhone = mediaQuery.matchMediaSync('(orientation:landscape)');

其次,對監(jiān)聽句柄進行事件綁定。

async aboutToAppear() { this.portraitFunc = this.onPortrait.bind(this) // 綁定 this.listenerIsPhone.on('change', this.portraitFunc)}

再次,通過調用VideoPage顯示輪播圖視頻播放。

Swiper() { // 視頻界面,調用自定義的VideoPage.ets VideoPage({ isStart: $openFirst }) // 模擬Swiper數(shù)據 LazyForEach(new MyDataSource(this.arrSwiper), (item) => { Text(item.toString()) .width('100%') .aspectRatio(1.12) .backgroundColor(0xAFEEEE) .textAlign(TextAlign.Center) .fontSize(20) }, item => item)}

再次,調用SmallVideo顯示小視頻播放。

Column() { SmallVideo({ isHidden: $isHidden, isCancel: $isCancel })}.width('100%').alignItems(HorizontalAlign.End)

最后,顯示直播視頻按鍵。

Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { Image($r('app.media.broadcast')) .objectFit(ImageFit.Contain) .width('24') .height('24') .margin({ top: 10 }) Text($r("app.string.in_live")) .fontSize(10) .fontColor('#000000') .margin({ top: 5 })}.width(58).height(58).backgroundColor('#FFFFFF').border({ color: 'rgba(0,0,0,0.2)' }).borderRadius(16).borderWidth(1.3).key('directVideo').onClick(() => { router.push({ url: 'pages/LivePage' })}).position({ x: '86%', y: '20%' })}.width('100%').height('100%').backgroundColor(0xDCDCDC)

注意:當Flex觸發(fā)鼠標按下事件,則通過router.push()跳轉到LivePage.ets頁面。

3.3、VideoPage.ets

首先,定義播放視頻的資源以及視頻播放控制器

@State videoSrc: Resource = $rawfile('video_4.mp4') // 視頻播放文件detailVideoController:VideoController=newVideoController() //設置視頻播放的控制器,比如控制視頻開始,暫停等

其次,調用Video組件,并將視頻資源和視頻控制器代入。

Video({ src: this.videoSrc, // 設置視頻文件地址 controller: this.detailVideoController, // 設置視頻播放的控制器,比如控制視頻開始,暫停等})

最后,通過video組件的.onClick()響應事件,控制視頻播放。

.onClick(() => { // 單擊按鈕事件 if (this.isPlayClick) { // 判斷play按鈕是否用過,沒有用過,進入這層 if (this.firstClick) { // 第一次點擊視頻開始播放,再次點擊進入全屏 this.detailVideoController.start() // Video開始播放 this.isHidden = !this.isHidden this.isStart = true this.firstClick = !this.firstClick } else { // 頁面跳轉 router.push({ url: 'pages/FullPage', params: { videoSrc: this.videoSrc, videoTime: this.updateTime } }) } } else { // 頁面跳轉 router.push({ url: 'pages/FullPage', params: { videoSrc: this.videoSrc, videoTime: this.updateTime } }) }})

其中,關于播放時間顯示(即變量updateTime)需要特別注意。在此不贅述。

3.4、SmallVideo.ets

SmallVideo自定義組件則負責小窗口視頻播放,通過調用Video播放視頻文件。

首先,定義視頻資源和視頻控制器。

@State smallVideoSrc: Resource = $rawfile('video_4.mp4') // 視頻數(shù)據源文件smallVideoController:VideoController=newVideoController() //設置視頻控制器

其次,將視頻資源和視頻控制器放入Video控件。

Video({ src: this.smallVideoSrc, // 視頻播放源的路徑,支持本地視頻路徑和網絡路徑 controller: this.smallVideoController // 設置視頻控制器}) .controls(false) .autoPlay(true) // 設置自動播放 .muted(true) // 設置靜音 .onFinish(() => { // 播放結束時觸發(fā)該事件 this.isHidden = false })

注意:.onFinish()事件是在視頻播放完畢后觸發(fā)。

3.5、LivePage.ets

LivePage.ets負責顯示直播頁面。

首先,定義一個媒體查詢的監(jiān)聽句柄。

listenerIsPhone = mediaQuery.matchMediaSync('(orientation:landscape)');

其次,在aboutToAppear()中將視頻播放綁定,并通過http連接請求,獲取網絡視頻信息。

async aboutToAppear() { this.portraitFunc = this.onPortrait.bind(this) // bind current js instance this.listenerIsPhone.on('change', this.portraitFunc)
try { let a = await Live() // http連接請求 this.mData = JSON.parse(a.result.toString()) this.liveInfoList = this.mData.data } catch (error) { console.log('http resquest is fail:' + error) }}

最后,在build()中顯示網絡視頻直播。

ForEach(this.liveInfoList, (item, index) => { Stack() { if (this.active == index) { Video({ src: item.uri }) .autoPlay(true) .loop(false) .controls(false) .objectFit(ImageFit.Contain) .width('100%') .height('100%') } ...... } ......}

3.6、FullPage.ets

FullPage.ets負責全屏顯示視頻播放頁面。

首先,定義一個媒體查詢的監(jiān)聽句柄和視頻控制器。

listenerIsPhone = mediaQuery.matchMediaSync('(orientation:landscape)')fullVideoController:VideoController=newVideoController()

其次,在aboutToAppear()中綁定當前用例。

aboutToAppear() { this.fullParams = router.getParams() this.fullSrc = this.fullParams['videoSrc'] this.playTime = this.fullParams['videoTime']
this.portraitFunc = this.onPortrait.bind(this) // bind current js instance this.listenerIsPhone.on('change', this.portraitFunc)}

最后,調用Video組件控制視頻播放。

Video({ src: this.fullSrc, controller: this.fullVideoController}) .width('100%') .height('100%') .autoPlay(true) .loop(true) .controls(false) .objectFit(ImageFit.Contain) .onPause(() => { this.isHidden = true }) .onFullscreenChange((e) => { this.isHidden = false }) .onStart(() => { this.isHidden = false }) .onPrepared((e) => { this.fullVideoController.setCurrentTime(this.playTime) this.maxValue = e.duration }) .onUpdate((e) => { this.nowValue = e.time }) .onClick(() => { this.fullVideoController.pause(); })

4、項目編譯

4.1、打開項目

打開DevEco Studio,再打開自定義通知項目。

4.2、編譯程序

點擊菜單欄上的“Build” -> "Rebuild Project"。如果出現(xiàn)無法編譯,則注意查看Event Log界面。如下所示:

4b33bf88-77ad-11ef-bb4b-92fbcf53809c.png

點擊Run 'npm install',讓DevEco Studio安裝相關依賴包。

重新點擊菜單欄上的“Build” -> "Rebuild Project"。出現(xiàn)如下錯誤:

4b46d69a-77ad-11ef-bb4b-92fbcf53809c.png

點擊上圖紅色框部分,安裝相關服務。

重新點擊菜單欄上的“Build” -> "Rebuild Project",編譯成功。

4b5cea52-77ad-11ef-bb4b-92fbcf53809c.png

4.3、安裝程序

點擊“entry”按鈕,將項目程序安裝到設備端。如下圖所示:

4b688286-77ad-11ef-bb4b-92fbcf53809c.png

如果出現(xiàn)下述報錯,表示無法安裝。如圖所示:

4b7fcae0-77ad-11ef-bb4b-92fbcf53809c.png

點擊上圖紅色框的藍色字體,彈出"Project Structure"對話框,點擊"Apply",再點擊"OK"。如圖所示:

4b988210-77ad-11ef-bb4b-92fbcf53809c.png

重新點擊“entry”按鈕,將項目程序安裝到設備端。

4bb8516c-77ad-11ef-bb4b-92fbcf53809c.png

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

    關注

    0

    文章

    495

    瀏覽量

    36946
  • APP
    APP
    +關注

    關注

    33

    文章

    1569

    瀏覽量

    72385
  • OpenHarmony
    +關注

    關注

    25

    文章

    3665

    瀏覽量

    16162
收藏 人收藏

    評論

    相關推薦

    基于ArkTS語言OpenHarmony APP應用開發(fā):HelloOpenharmony

    1、程序簡介 該程序是基于OpenHarmony標準系統(tǒng)編寫的UI應用類:HelloOpenHarmony。 本案例是基于API 9接口開發(fā)。 本案例已在OpenHarmony凌蒙派-
    發(fā)表于 09-14 12:47

    基于ArkTS語言OpenHarmony APP應用開發(fā)多媒體管理

    1、程序介紹 本示例展示了視頻組件的基本功能,以及如何控制播放狀態(tài)的相關能力,包括視頻切換、封面切換、播放、暫停等。 本案例已在OpenHarmony凌蒙派-RK3568開發(fā)板驗證通過,具體代碼可
    發(fā)表于 09-19 15:50

    基于ArkTS語言OpenHarmony APP應用開發(fā)多媒體管理2

    播放按鈕,視頻開始播放。再次點擊視頻進入視頻全屏頁。 首頁下滑500vp后,視頻小窗口化。 4.點擊直播按鈕進入直播頁,上下滑動視頻。 本案例已在OpenHarmony凌蒙派-RK3568開發(fā)板驗證
    發(fā)表于 09-20 13:47

    基于WEB的多媒體素材管理庫的開發(fā)與應用

    計算機專業(yè)畢業(yè)設計題目大全一、ASP類計算機專業(yè)畢業(yè)設計題目1.網絡留言薄2.客戶管理系統(tǒng)3.多媒體積件管理庫的開發(fā)與應用4.基于WEB的
    發(fā)表于 07-19 09:30

    直播預告丨OpenHarmony標準系統(tǒng)多媒體子系統(tǒng)之音頻解讀

    今晚19點,OpenHarmony開源開發(fā)者成長計劃知識賦能第五期“掌握OpenHarmony多媒體的框架原理”的第四節(jié)直播課,即將開播!深開鴻資深技術專家苑春鴿老師,將在
    發(fā)表于 05-12 11:31

    直播預告丨OpenHarmony標準系統(tǒng)多媒體子系統(tǒng)之視頻解讀

    5月19日(周四)晚上19點,OpenHarmony開源開發(fā)者成長計劃知識賦能第五期“掌握OpenHarmony多媒體的框架原理”的第五節(jié)直播課,即將開播!深開鴻資深技術專家胡浩老師,
    發(fā)表于 05-18 10:16

    HarmonyOS/OpenHarmony應用開發(fā)-ArkTS的聲明式開發(fā)范式

    軌跡。狀態(tài)與數(shù)據管理狀態(tài)數(shù)據管理作為基于ArkTS的聲明式開發(fā)范式的特色,通過功能不同的裝飾器給開發(fā)者提供了清晰的頁面更新渲染流程和管道。狀
    發(fā)表于 01-17 15:09

    HarmonyOS/OpenHarmony應用開發(fā)-Stage模型ArkTS語言AbilityStage

    進行初始化時回調。context接口示例:*附件:HarmonyOSOpenHarmony應用開發(fā)-stage模型ArkTS語言AbilityStage.docx
    發(fā)表于 04-07 15:16

    HarmonyOS/OpenHarmony應用開發(fā)-Stage模型ArkTS語言擴展能力基類

    \'@ohos.app.ability.ExtensionAbility\'; 接口示例: *附件:HarmonyOSOpenHarmony應用開發(fā)-stage模型ArkTS
    發(fā)表于 04-26 10:00

    HarmonyOS/OpenHarmony應用開發(fā)-ArkTS語言基本語法說明

    的封裝和復用UI描述。 @Extend/@Style:擴展內置組件和封裝屬性樣式,更靈活地組合內置組件。 stateStyles:多態(tài)樣式,可以依據組件的內部狀態(tài)的不同,設置不同樣式。*附件:HarmonyOSOpenHarmony應用開發(fā)-
    發(fā)表于 06-01 10:25

    HarmonyOS優(yōu)選主力應用開發(fā)語言-ArkTS概述

    ArkTS是HarmonyOS優(yōu)選的主力應用開發(fā)語言ArkTS圍繞應用開發(fā)在TypeScript(簡稱TS)生態(tài)基礎上做了進一步擴展,繼承
    發(fā)表于 06-09 10:52

    OpenHarmony ArkTS工程目錄結構(Stage模型)

    一、應用工程結構 圖片來源:OpenHarmony官網 AppScope > app.json5:應用的全局配置信息。 entry:OpenHarmony工程模塊,編譯構建生成一個
    發(fā)表于 09-18 15:23

    OpenHarmony 應用開發(fā)SDK、API 與基礎工具

    。C API 也包含在鴻蒙SDK 中,方便開發(fā)者使用 C 或者 C++語言實現(xiàn)應用相應功能。 C API 只覆蓋了部分鴻蒙基礎底層能力,如 libc,圖形庫,窗口系統(tǒng),多媒體,壓縮庫等,并沒有完全提供
    發(fā)表于 09-19 15:45

    全數(shù)字多媒體語言實驗室的應用與管理

    全數(shù)字多媒體語言實驗室已成為高校外語教學實踐的重要基地,如何科學有效地管理與維護,使之能更好地服務于教學,是各高校面臨的重要問題。首先介紹了本校全數(shù)字多媒體
    發(fā)表于 02-29 11:56 ?14次下載
    全數(shù)字<b class='flag-5'>多媒體</b><b class='flag-5'>語言</b>實驗室的應用與<b class='flag-5'>管理</b>

    基于ArkTS語言OpenHarmony APP應用開發(fā):HelloOpenharmony

    1、程序簡介該程序是基于OpenHarmony標準系統(tǒng)編寫的UI應用類:HelloOpenHarmony。本案例是基于API9接口開發(fā)。本案例已在OpenHarmony凌蒙派-RK35
    的頭像 發(fā)表于 09-15 08:09 ?317次閱讀
    基于<b class='flag-5'>ArkTS</b><b class='flag-5'>語言</b>的<b class='flag-5'>OpenHarmony</b> <b class='flag-5'>APP</b>應用<b class='flag-5'>開發(fā)</b>:Hello<b class='flag-5'>Openharmony</b>