HarmonyOS AVPlayer 音頻播放器

?鴻蒙文檔中心:使用AVPlayer播放視頻(ArkTS)文檔中心https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/video-playback

這張圖描述的是 HarmonyOS AVPlayer 音頻播放器的狀態流轉過程,展示了 AVPlayer 在不同狀態之間的切換條件和關鍵操作。

1. 核心狀態說明

圖中展示了 AVPlayer 的 7 個核心狀態

  1. idle(空閑):初始狀態或調用 reset() 后的狀態。
  2. initialized(初始化):設置播放源(如 fdSrcurl)后的狀態。
  3. prepared(準備完成):調用 prepare() 成功后的狀態。
  4. playing(播放中):調用 play() 后的狀態。
  5. paused(暫停):調用 pause() 后的狀態。
  6. completed(播放完成):音頻自然播放結束后的狀態。
  7. stopped(停止):調用 stop() 后的狀態。

2. 狀態流轉詳細過程

(1) idle → initialized
  • 觸發條件:調用 AVPlayer.create() 創建播放器后,設置播放源(如 fdSrcurl)。

關鍵操作

const avPlayer = await media.createAVPlayer(); // 創建播放器(進入 idle)
avPlayer.fdSrc = { fd, offset, length };      // 設置播放源(進入 initialized)
(2) initialized → prepared
  • 觸發條件:調用 prepare() 方法。

關鍵操作

  • typescript復制下載avPlayer.prepare(); // 準備播放(進入 prepared)
  • 備注:此時播放器已加載音頻元數據(如時長),但還未開始播放。
(3) prepared → playing
  • 觸發條件:調用 play() 方法。

關鍵操作

  • typescript復制下載avPlayer.play(); // 開始播放(進入 playing)
  • 備注:此時音頻開始播放,timeUpdate 回調會持續更新進度。
(4) playing ? paused
  • 雙向切換

playing → paused:調用 pause()

    • typescript復制下載avPlayer.pause(); // 暫停播放(進入 paused)

paused → playing:再次調用 play()

    • typescript復制下載avPlayer.play(); // 恢復播放(回到 playing)
(5) playing → completed
  • 觸發條件:音頻自然播放結束(無需手動調用)。
  • 關鍵行為
    • 播放器自動進入 completed 狀態。
    • 觸發 stateChange 回調,通知應用播放結束。
(6) completed → playing
  • 觸發條件:調用 seek(0) + play()(如代碼中的邏輯)。

關鍵操作

avPlayer.seek(0);    // 跳轉到開頭
avPlayer.play();     // 重新播放(回到 playing)
(7) 任何狀態 → stopped
  • 觸發條件:調用 stop() 方法。

關鍵操作

  • typescript復制下載avPlayer.stop(); // 停止播放(進入 stopped)
  • 備注:停止后需調用 reset()release() 清理資源。
(8) stopped → idle
  • 觸發條件:調用 reset() 方法。

關鍵操作

  • typescript復制下載avPlayer.reset(); // 重置播放器(回到 idle)
  • 備注:此時可以重新設置播放源(fdSrc),開啟新一輪播放。
(9) 終止狀態:released
  • 觸發條件:調用 release() 方法。

關鍵操作

  • typescript復制下載avPlayer.release(); // 釋放播放器資源(不可逆)
  • 備注:釋放后播放器不可再用,需重新創建實例。

3. 關鍵注意事項

  1. 錯誤處理
    • 任何狀態都可能因錯誤跳轉到 error 狀態,需監聽 on('error') 回調。
    • 典型處理方式是調用 reset() 回到 idle 狀態。
  1. 進度控制
    • seek() 只能在 playingpausedcompleted 狀態下調用。
    • 調用 seek() 后會觸發 seekDone 回調。
  1. 資源釋放
    • 頁面退出時(aboutToDisappear)必須調用 release(),避免內存泄漏。
  1. 狀態檢查
    • 調用任何方法前應檢查當前狀態(如 avPlayer.state),避免非法操作。

總結

這張圖清晰地描述了 AVPlayer 的生命周期狀態驅動模型,開發者需要:

  1. 按順序操作(如先 prepare()play())。
  2. 處理邊界情況(如播放完成后的恢復)。
  3. 及時釋放資源(避免內存泄漏)。

通過這張圖,可以更好地理解代碼中 avPlayer 的行為邏輯,確保播放功能穩定可靠。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83689.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83689.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83689.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java面試場景:從音視頻到AI應用的技術探討

面試場景:音視頻與AI應用技術的碰撞 在某互聯網大廠的面試中,面試官王先生與求職者明哥展開了一場關于音視頻技術與AI應用的對話。 第一輪提問:音視頻場景 面試官:明哥,你能談談在音視頻場景中,Spring B…

【深度學習】殘差網絡(ResNet)

如果按照李沐老師書上來,學完 VGG 后還有 NiN 和 GoogLeNet 要學,但是這兩個我之前聽都沒聽過,而且我看到我導師有發過 ResNet 相關的論文,就想跳過它們直接看后面的內容。 現在看來這不算是不踏實,因為李沐老師說如果…

Vue3學習(組合式API——父、子組件間通信詳解)

目錄 一、組合式API下的父組件傳子組件。(自定義屬性) (1)基本思想。 (2)核心注意點。(defineProps) (3)傳遞簡單類型數據。 (4)傳遞對象類型數據。(v-bind"對象類型數據"…

W5500使用ioLibrary庫創建TCP客戶端

1、WIZnet全硬件TCP/IP協議棧 WIZnet全硬件TCP/IP協議棧,支持TCP,UDP,IPv4,ICMP,ARP,IGMP以及PPPoE協議。 以太網:支持BSD和WIZCHIP(W5500/W5300/W5200/W5100/W5100S)的SOCKET APIs驅動程序。 互聯網: DHCP客戶端 DNS客戶端 FTP客…

管理Oracle Data Guard的最佳實踐

Oracle Data Guard的中文名字叫數據衛士,顧名思義,它是生產庫的一道保障。所以管理Data Guard是DBA的一項重要工作之一,管理Data Guard時主要有以下幾個注意點需要引起重視。 備份庫的歸檔日志積壓 一般情況下,生產庫的歸檔日志是…

BootCDN介紹(Bootstrap主導的前端開源項目免費CDN加速服務)

文章目錄 BootCDN前端開源項目CDN加速服務全解析什么是BootCDN技術原理與架構CDN技術基礎BootCDN架構特點1. 全球分布式節點網絡2. 智能DNS解析系統3. 高效緩存管理機制4. 自動同步更新機制5. HTTPS和HTTP/2協議支持 BootCDN的核心優勢速度與穩定性開源免費資源豐富度技術規范遵…

2025 Java 微信小程序根據code獲取openid,二次code獲取手機號【工具類】拿來就用

一、controller調用 /*** 登錄** author jiaketao* since 2024-04-10*/ RestController RequestMapping("/login") public class LoginController {/*** 【小程序】登錄獲取session_key和openid** param code 前端傳code* return*/GetMapping("/getWXSessionKe…

軟件架構風格系列(3):管道 - 過濾器架構

文章目錄 前言一、從生活場景到架構原理,看懂管道 - 過濾器的核心邏輯(一)什么是管道 - 過濾器架構?(二)核心組件拆解 二、架構設計圖:一圖看懂管道 - 過濾器架構全貌三、Java 示例代碼&#xf…

【VIM】vim 常用命令

文章目錄 插入模式光標移動拷貝/粘貼/刪除/撤銷塊操作分屏代碼縮進命令組合使用其他PowerVim 前言:本文內容大部分摘抄自酷殼和博客園 ? – ? CoolShell – 陳皓 ? 博客園 – 易先訊 插入模式 a → 在光標后插入o → 在當前行后插入一個新行O → 在當前行前插…

polarctf-web-[簡單rce]

考點&#xff1a; (1)RCE(eval函數) (2)執行函數(passthru函數) (3)/頂級(根)目錄查看 (4)sort排序查看函數 題目來源&#xff1a;Polarctf-web-[簡單rce] 解題&#xff1a; 代碼審計 <?php/*?PolarD&N CTF?*/highlight_file(__FILE__);function no($txt){ # …

HarmonyOs開發之———使用HTTP訪問網絡資源

謝謝關注&#xff01;&#xff01; 前言&#xff1a;上一篇文章主要介紹HarmonyOs開發之———Video組件的使用:HarmonyOs開發之———Video組件的使用_華為 video標簽查看-CSDN博客 HarmonyOS 網絡開發入門&#xff1a;使用 HTTP 訪問網絡資源 HarmonyOS 作為新一代智能終端…

Vue 圖片預覽功能(含縮略圖)

眾所周知&#xff0c;常見的組件庫如Element、Ant Design&#xff0c;自帶的圖片預覽功能都沒有縮略圖&#xff0c;所以 需要單獨封裝一個圖片預覽的服務。 第三方庫&#xff1a;v-viewer 安裝&#xff1a; npm install v-viewer viewerjs 若使用報錯&#xff0c;可安裝指定…

手寫tomcat:基本功能實現(4)

邏輯架構 HTTP 請求與 Socket&#xff1a; 左側的 “HTTP 請求” 箭頭指向 “socket”&#xff0c;表示客戶端發送的 HTTP 請求通過 socket 傳輸到服務器。Socket 負責接收請求&#xff0c;并提取出其中的 請求路徑&#xff08;如 /first&#xff09;和 請求方法&#xff08;如…

jvm安全點(一)openjdk17 c++源碼垃圾回收安全點信號函數處理線程阻塞

1. 信號處理入口?? ??JVM_HANDLE_XXX_SIGNAL?? 是 JVM 處理信號的統一入口&#xff0c;負責處理 SIGSEGV、SIGBUS 等信號。??javaSignalHandler?? 是實際注冊到操作系統的信號處理函數&#xff0c;直接調用 JVM_HANDLE_XXX_SIGNAL。 ??2. 安全點輪詢頁的識別?? …

微信小程序:封裝表格組件并引用

一、效果 封裝表格組件,在父頁面中展示表格組件并顯示數據 二、表格組件 1、創建頁面 創建一個components文件夾,專門用于存儲組件的文件夾 創建Table表格組件 2、視圖層 (1)表頭數據 這里會從父組件中傳遞表頭數據,這里為columns,后續會講解數據由來 循環表頭數組,…

【FMC216】基于 VITA57.1 的 2 路 TLK2711 發送、2 路 TLK2711 接收 FMC 子卡模塊

產品概述 FMC216 是一款基于 VITA57.1 標準規范的 2 路 TLK2711 接收、2 路 TLK2711 發送 FMC 子卡模塊。該板卡支持 2 路 TLK2711 數據的收發&#xff0c;支持線速率 1.6Gbps&#xff0c;經過 TLK2711 高速串行收發器&#xff0c;可以將 1.6Gbps 的高速串行數據解串為 16 位并…

K8S Gateway API 快速開始、胎教級教程

假設有如下三個節點的 K8S 集群&#xff1a; ?? k8s31master 是控制節點 k8s31node1、k8s31node2 是工作節點 容器運行時是 containerd 一、Gateway 是什么 背景和目的 入口&#xff08;Ingress&#xff09;目前已停止更新。新的功能正在集成至網關 API 中。在 Kubernetes …

時序數據庫IoTDB分布式架構解析與運維指南

一、IoTDB分布式架構概述 分布式系統由一組獨立的計算機組成&#xff0c;通過網絡通信&#xff0c;對外表現為一個統一的整體。IoTDB的原生分布式架構將服務分為兩個核心部分&#xff1a; ?ConfigNode&#xff08;CN&#xff09;?&#xff1a;管理節點&#xff0c;負責管理…

Ubuntu 20.04 LTS 中部署 網頁 + Node.js 應用 + Nginx 跨域配置 的詳細步驟

Ubuntu 20.04 LTS 中部署 網頁 Node.js 應用 Nginx 跨域配置 的詳細步驟 一、準備工作1、連接服務器2、更新系統 二、安裝 Node.js 環境1、安裝 Node.js 官方 PPA&#xff08;用于獲取最新穩定版&#xff09;&#xff1a;2、安裝 Node.js 和 npm&#xff08;LTS 長期支持版本…

3DVR制作的工具或平臺

3DVR&#xff08;三維虛擬現實&#xff09;是利用三維圖像技術和虛擬現實技術&#xff0c;將真實場景進行三維掃描并轉換成計算機可識別的三維模型&#xff0c;使用戶能夠在虛擬空間中自由漫游&#xff0c;體驗身臨其境的感覺。3DVR技術結合了全景拍攝和虛擬現實&#xff0c;提…