播放器 FijkPlayer 文件 20190812 雨夜更新。
原文在 fijkplayer.befovy.com/docs/zh/fij…
下次更新文件是 FijkView 裁剪和填充模式。
播放器 ijkplayer 記憶體在不同的狀態。通過 API 呼叫實現狀態的條狀。
下圖繪製了播放器中所有的狀態,以及主要的涉及狀態跳轉的 API 呼叫。
狀態轉換圖
圖中實線箭頭連線的狀態變化通過 API 呼叫完成,
虛線箭頭連線的狀態變化是通過 播放器內部執行完特定任務或者發生錯誤 而自動發生的狀態變化。
狀態釋義
|----|----|
狀態名 |
播放器表現 |
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
API名稱 |
目標狀態 |
setDataSource() |
initialized |
reset() |
idle |
release() |
end |
API名稱 |
目標狀態 |
prepareAsync() |
asyncPreparing |
reset() |
idle |
release() |
end |
API名稱 |
目標狀態 |
處理完成 |
prepared |
出現錯誤 |
error |
reset() |
idle |
release() |
end |
API名稱 |
目標狀態 |
seekTo() |
prepared |
start() |
started |
reset() |
idle |
release() |
end |
API名稱 |
目標狀態 |
seekTo() |
started |
start() |
started |
pause() |
paused |
stop() |
stopped |
播放完成 |
completed |
出現錯誤 |
error |
reset() |
idle |
release() |
end |
API名稱 |
目標狀態 |
seekTo() |
paused |
start() |
started |
pause() |
paused |
stop() |
stopped |
reset() |
idle |
release() |
end |
API名稱 |
目標狀態 |
seekTo() |
paused |
start() |
started (從頭開始) |
pause() |
paused |
stop() |
stopped |
reset() |
idle |
release() |
end |
API名稱 |
目標狀態 |
stop() |
stopped |
prepareAsync() |
asyncPreparing |
reset() |
idle |
release() |
end |
API名稱 |
目標狀態 |
reset() |
idle |
release() |
end |