為了模擬實現Android MediaPlayer的實現,需要先了解下MediaPlayer的簡單使用方法, 這里只列舉其中一種使用方式, 以這個為模板利用ffmpeg實現對應的同名接口和調用方法.
MediaPlayer狀態
首先還是貼一下Android MediaPlayer 的狀態轉換圖.因為所有接口的設計和調用方法會以這個狀態轉換圖為依據, 理解狀態圖也能更好地理解播放器
mediaplayer_state_diagram.gif
其實理解Android MediaPlayer最直接的方法是看google的官方文檔
https://developer.android.google.cn/reference/android/media/MediaPlayer
因為已經有大量的文章轉載和翻譯,所以這里暫時不做介紹和翻譯,可能會在后續實現接口的過程中引用和參考里面的內容
MediaPlayer簡單實現
如何實現一個demo網上有很多的資料,這里不再詳細說明,只是畫一下demo的簡單實現步驟, 后面的Android FFmpeg專題結構會用這個流程來實現播放器對應的接口。
MediaPlayerDemo.png
demo地址
https://github.com/yizhongliu/blog/tree/main/code/MediaPlayerDemo
其中1和2 步驟可以調換,需要實現以下的接口
public MediaPlayer()
public void setDisplay(SurfaceHolder sh)
public void setDataSource(String path)
throws IOException, IllegalArgumentException, SecurityException, IllegalStateException
public native void prepareAsync() throws IllegalStateException;
public void start() throws IllegalStateException
public interface OnPreparedListener
public void setOnPreparedListener(OnPreparedListener listener)
public interface OnErrorListener
public void setOnErrorListener(OnErrorListener listener)
public interface OnCompletionListener
public void setOnCompletionListener(OnCompletionListener listener)
后面會先根據以上的函數和調用流程,先搭建一個player框架以及對MediaPlayer以上接口流程進行詳細分析