ijkplayer 播放器狀態解析

befovy發表於2019-08-12

播放器 FijkPlayer 文件 20190812 雨夜更新。
原文在 fijkplayer.befovy.com/docs/zh/fij…
下次更新文件是 FijkView 裁剪和填充模式。

播放器 ijkplayer 記憶體在不同的狀態。通過 API 呼叫實現狀態的條狀。
下圖繪製了播放器中所有的狀態,以及主要的涉及狀態跳轉的 API 呼叫。

狀態轉換圖

圖中實線箭頭連線的狀態變化通過 API 呼叫完成,
虛線箭頭連線的狀態變化是通過 播放器內部執行完特定任務或者發生錯誤 而自動發生的狀態變化。

state_of_ijkplayer

狀態釋義

|----|----|

狀態名 播放器表現
idle 閒置狀態,剛完成構造的 FijkPlayer 處於此狀態。
此狀態下播放器佔用少量記憶體,無額外執行緒啟動。
idle 狀態只能通過 setDataSource 轉換為 initialized 狀態
initialized 初始化完成狀態,和 idle 狀態相比,僅是多了輸入媒體資料來源的資訊。 同樣無額外執行緒開啟。
asyncPreparing 非同步準備狀態,在 initialized 狀態呼叫 prepareAsync 到達此狀態。
這不是一個穩定狀態,此狀態等待特定任務完成後自動轉化為 prepared 狀態。
這一狀態的主要準備工作是 探測媒體檔案型別,開啟媒體檔案,開啟解碼器以及新建解碼執行緒,新建資料 read 執行緒,開啟音訊輸出裝置,新建視訊輸出執行緒等。
prepared asyncPreparing 完成指定任務後自動轉化為此狀態。
此狀態下已經緩衝並解碼了一部分音視訊資料,可以隨時進行播放。
started 媒體(視訊、音訊)正在播放中。
paused 媒體(視訊、音訊)播放暫停。
completed 媒體(視訊、音訊)播放完成。 可重新從頭開始播放。
stopped 播放器各種執行緒佔用資源都已經釋放。 音訊裝置關閉。
end 播放器中所有需要手動釋放的記憶體都釋放完成。
處於此狀態的播放器只能等待垃圾回收進行記憶體釋放。
error 播放器出現錯誤。
  • 可播放狀態:
    prepared、 started、 paused、 completed。
    可播放狀態中可以通過呼叫 start 轉化為 started 狀態,並且進行媒體播放。
  • 穩定狀態:
    idle、 initialized、 prepared、 paused、 completed、 stopped、 end、error。
    穩定狀態只可以通過 API 呼叫轉換為其他的狀態,不會自主發生狀態變化。
  • 非穩定狀態: asyncPreparing、 started。
    非穩定狀態會在一定條件下自動轉變為其他狀態,也可以通過 API 呼叫進行狀態條狀。

完整轉換 API

  • idle
API名稱 目標狀態
setDataSource() initialized
reset() idle
release() end
  • initialized
API名稱 目標狀態
prepareAsync() asyncPreparing
reset() idle
release() end
  • asyncPreparing
API名稱 目標狀態
處理完成 prepared
出現錯誤 error
reset() idle
release() end
  • prepared
API名稱 目標狀態
seekTo() prepared
start() started
reset() idle
release() end
  • started
API名稱 目標狀態
seekTo() started
start() started
pause() paused
stop() stopped
播放完成 completed
出現錯誤 error
reset() idle
release() end
  • paused
API名稱 目標狀態
seekTo() paused
start() started
pause() paused
stop() stopped
reset() idle
release() end
  • completed
API名稱 目標狀態
seekTo() paused
start() started (從頭開始)
pause() paused
stop() stopped
reset() idle
release() end
  • stopped
API名稱 目標狀態
stop() stopped
prepareAsync() asyncPreparing
reset() idle
release() end
  • error
API名稱 目標狀態
reset() idle
release() end
  • end
API名稱 目標狀態
release() end

相關文章