1. 程式人生 > >好用的視訊播放sdk ijkplayer 二次封裝的ijkplay

好用的視訊播放sdk ijkplayer 二次封裝的ijkplay

 

本文章為博主在借鑑了一名前輩的文章後為了自己以後能夠快速的回憶所寫小計如有看不懂的地方還請諒解,畢竟只是為了自己更好的回憶  如有何不懂或者異常出現請瀏覽原文章,原文章中對於異常都有一 一解答。

在此標註前輩文章地址 :https://github.com/jjdxmashl/jjdxm_ijkplayer    

 

依賴本專案類庫

該專案是基於ijkplayer專案進行的視訊UI的二次封裝,需匯入依賴

compile 'com.dou361.ijkplayer:jjdxm-ijkplayer:1.0.6' 

 

 

多種解析度流切換的案例,例如播放器的標清、高清、超清、720P等。

1.簡單的播放器實現

rootView = getLayoutInflater().from(this).inflate(R.layout.simple_player_view_player, null);
setContentView(rootView);
String url = "http://9890.vod.myqcloud.com/9890_9c1fa3e2aea011e59fc841df10c92278.f20.mp4";
player = new PlayerView(this,rootView)
        .setTitle("什麼")
        .setScaleType(PlayStateParams.fitparent)
        .hideMenu(true)
        .forbidTouch(false)
        .showThumbnail(new OnShowThumbnailListener() {
            @Override
            public void onShowThumbnail(ImageView ivThumbnail) {
                Glide.with(mContext)
                        .load("http://pic2.nipic.com/20090413/406638_125424003_2.jpg")
                        .placeholder(R.color.cl_default)
                        .error(R.color.cl_error)
                        .into(ivThumbnail);
            }
        })
        .setPlaySource(url)
        .startPlay();

2.多種不同的解析度流的播放器實現

在佈局中使用simple_player_view_player.xml佈局

<include
    layout="@layout/simple_player_view_player"
    android:layout_width="match_parent"
    android:layout_height="180dp"/>

程式碼中建立一個播放器物件

/**播放資源*/
ist<VideoijkBean> list = new ArrayList<VideoijkBean>();
String url1 = "http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4";
String url2 = "http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f30.mp4";
VideoijkBean m1 = new VideoijkBean();
m1.setStream("標清");
m1.setUrl(url1);
VideoijkBean m2 = new VideoijkBean();
m2.setStream("高清");
m2.setUrl(url2);
list.add(m1);
list.add(m2);
/**播放器*/
rootView = getLayoutInflater().from(this).inflate(你的佈局, null);
setContentView(rootView);
player = new PlayerView(this,rootView)
            .setTitle("什麼")
            .setScaleType(PlayStateParams.fitparent)
            .hideMenu(true)
            .forbidTouch(false)
            .showThumbnail(new OnShowThumbnailListener() {
                @Override
                public void onShowThumbnail(ImageView ivThumbnail) {
					/**載入前顯示的縮圖*/
                    Glide.with(mContext)
                            .load("http://pic2.nipic.com/20090413/406638_125424003_2.jpg")
                            .placeholder(R.color.cl_default)
                            .error(R.color.cl_error)
                            .into(ivThumbnail);
                }
            })
            .setPlaySource(list)
            .startPlay();

配置生命週期方法,為了讓播放器同步Activity生命週期,建議以下方法都去配置,註釋的程式碼,主要作用是播放時螢幕常亮和暫停其它媒體的播放。

 @Override
protected void onPause() {
    super.onPause();
    if (player != null) {
        player.onPause();
    }
    /**demo的內容,恢復系統其它媒體的狀態*/
    //MediaUtils.muteAudioFocus(mContext, true);
}

@Override
protected void onResume() {
    super.onResume();
    if (player != null) {
        player.onResume();
    }
    /**demo的內容,暫停系統其它媒體的狀態*/
    MediaUtils.muteAudioFocus(mContext, false);
    /**demo的內容,啟用裝置常亮狀態*/
    //if (wakeLock != null) {
    //    wakeLock.acquire();
    //}
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (player != null) {
        player.onDestroy();
    }
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (player != null) {
        player.onConfigurationChanged(newConfig);
    }
}

@Override
public void onBackPressed() {
    if (player != null && player.onBackPressed()) {
        return;
    }
    super.onBackPressed();
    /**demo的內容,恢復裝置亮度狀態*/
    //if (wakeLock != null) {
    //    wakeLock.release();
    //}
}