首先是引入exoplayer2庫
...
implementation 'com.google.android.exoplayer:exoplayer-core:2.6.0'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.6.0'
...
目前官方庫中自帶了兩種Exoplayer實(shí)現(xiàn), 分別是SimpleExoPlayer和ExoPlayerImpl.
實(shí)際上在SimpleExoPlayer內(nèi)部, 其播放功能是委托給ExoPlayerImpl實(shí)現(xiàn)的.
private final ExoPlayer player;
// Build the player and associated objects.
player = createExoPlayerImpl(renderers, trackSelector, loadControl);
....
protected ExoPlayer createExoPlayerImpl(Renderer[] renderers, TrackSelector trackSelector,
LoadControl loadControl) {
return new ExoPlayerImpl(renderers, trackSelector, loadControl);
}
問題: SimpleExoPlayer與ExoPlayerImpl有什么區(qū)別? 在功能上有什么不同 ? 實(shí)際使用時(shí)應(yīng)該怎么選擇?
-- 如果沒有特殊需求, SimpleExoPlayer就能滿足基本功能了, 不需要自定義
ExoPlayer的創(chuàng)建是通過工廠類ExoPlayerFactory來實(shí)現(xiàn)的. 里面重載了各種參數(shù)的創(chuàng)建方法, 下面是最簡(jiǎn)單的一個(gè):
/**
* Creates a {@link SimpleExoPlayer} instance.
*
* @param context A {@link Context}.
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
*/
public static SimpleExoPlayer newSimpleInstance(Context context, TrackSelector trackSelector) {
return newSimpleInstance(new DefaultRenderersFactory(context), trackSelector);
}
/**
* Creates an {@link ExoPlayer} instance.
*
* @param renderers The {@link Renderer}s that will be used by the instance.
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
*/
public static ExoPlayer newInstance(Renderer[] renderers, TrackSelector trackSelector) {
return newInstance(renderers, trackSelector, new DefaultLoadControl());
}