HDMediaPlayer
該類包依託於谷歌Mediaplayer二次封裝,一行代碼就可以實現播放的邏輯。
谷歌中國API鏈接: Google官網API
Github地址
https://github.com/yinhaide/HDMediaPlayer
源代碼下載
https://download.csdn.net/download/yinhaide/12010382
特性
-
該類支持播放格式有:音樂(.mp3、.wav、.ogg)、視頻(.mp4、.3gp)
-
支持播放本地音頻、視頻
-
支持播放Assets目錄下的音頻、視頻
-
支持播放網絡網絡流媒體(僅限上述格式)
如何快速集成
導入方式
在工程級別的build.gradle添加
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
在應用級別的build.gradle添加
api 'com.github.yinhaide:HDMediaPlayer:0.0.5'
如何使用
- 一行代碼實現播放Assets目錄下的mp4:
MediaPlayerHelper.getInstance().setSurfaceView(surfaceView).playAsset(context,"test.mp4");
- 一行代碼實現播放Assets目錄下的mp3:
MediaPlayerHelper.getInstance().playAsset(context,"test.mp3");
- 一行代碼實現播放網絡流媒體或者本地全路徑流媒體:
/**
* urlString 可爲網絡流媒體連接,也可以爲本地存儲全路徑鏈接
*/
MediaPlayerHelper.getInstance().setSurfaceView(surfaceView).play(urlString);
- 如果想得到詳細的回調信息:
MediaPlayerHelper.getInstance().setMediaPlayerHelperCallBack(new MediaPlayerHelper.MediaPlayerHelperCallBack() {
@Override
public void onCallBack(MediaPlayerHelper.CallBackState state, MediaPlayerHelper mediaPlayerHelper, Object... args) {
Log.v(TAG,"--"+state.toString());
if(state== MediaPlayerHelper.CallBackState.PROGRESS){
int percent=(int)args[0];
Log.v(TAG,"--progress:"+percent);
}
}
});
- 更多的用法請查看demo:
/** 設置播放進度回調時間間隔 */
MediaPlayerHelper.getInstance().setProgressInterval(msec);
/** 獲得MediaPlayer對象,進行更多的自定義的操作 */
MediaPlayerHelper.getInstance().getMediaPlayer().pause();
MediaPlayerHelper.getInstance().getMediaPlayer().start();
MediaPlayerHelper.getInstance().getMediaPlayer().stop();
注意點
1、播放結束後到下次播放有黑屏現象
在部分配置比較低的電視或者手機設備中,視頻播放完畢到下次播放之間可能存在1s左右的黑屏現象,原因是部分機器軟解嗎能力較弱,需要將數據解碼放在內存當中導致黑屏。解決方案是開啓手機的硬件加速能力,讓硬件協助解碼,消除黑屏現象。
<application
android:hardwareAccelerated="true"
...
</application>
2、部分機型/電視存在黑屏有聲音的現象
在部分機型中,會有播放沒畫面的,原因是因爲SurfaceHolder可能在創建的時候尺寸不對,需要動態賦值。這個操作必須在主線程中進行。
@Override
public void surfaceCreated(SurfaceHolder holder) {
...
if(holder != null && uiHolder.surfaceView != null){
uiHolder.surfaceView.post(() -> holder.setFixedSize(uiHolder.surfaceView.getWidth(),uiHolder.surfaceView.getHeight()));
}
...
}
這個項目會持續更新中…
都看到這裏了,如果覺得寫的可以或者對你有幫助的話,順手給個星星點下Star~
這個控件內部採用一個Fragment框架,如果有興趣的話可以去了解一下
關於我
- Email: [email protected]
- Github: https://github.com/yinhaide
- 簡書: https://www.jianshu.com/u/33c3dd2ceaa3
- CSDN: https://blog.csdn.net/yinhaide