Skip to content

Commit

Permalink
增加ExoMediaSourceInterceptListener
Browse files Browse the repository at this point in the history
readme
  • Loading branch information
CarGuoSmall committed Aug 22, 2018
1 parent 4f71030 commit 0224c42
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 17 deletions.
45 changes: 34 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,20 +127,43 @@ compile 'com.shuyu:gsyVideoPlayer-ex_so:5.0.2'

## 五、近期版本

### 6.0.0-beta (2018-xx-xx)
* 升级 ExoPlayer 到 2.8.4。
* 修复代理缓存时头部信息不存在问题。
* 调整代码结构,移除 GSYVideoType 中的内核切换,直接通过 PlayerFactory 装载。
* 调整代码结构,ExoPlayer可单独依赖,通过 PlayerFactory 装载,更方便自定义PlayerManager。

```
//PlayerFactory.setPlayManager(new Exo2PlayerManager());//EXO模式
//PlayerFactory.setPlayManager(new SystemPlayerManager());//系统模式
//PlayerFactory.setPlayManager(new IjkPlayerManager());//ijk模式
```

### 5.0.2(2018-08-01)
* Fix跟随屏幕旋转存在的问题。
* 修改对于Audio冲突时候的处理,子类可以复写方法自行另外处理.
* fix #1300
* 默认暂停图片修改为false

* 调整代码结构,CacheFactory 更方便自定义,默认 ProxyCacheManager。

### 5.0.1(2018-07-01)
* Update ListGSYVideoPlayer
* ijkPlayer的ex_so增加avi支持
* update ExoPlayer to 2.8.2
* ExoPlayer模式的问题修复
```
//CacheFactory.setCacheManager(new ExoPlayerCacheManager());//exo缓存模式,支持m3u8,只支持exo
//CacheFactory.setCacheManager(new ProxyCacheManager());//代理缓存模式,支持所有模式,不支持m3u8等
```

* 增加 ExoMediaSourceInterceptListener,方便 Exo 模式下使用自定义的 MediaSource。

```
ExoSourceManager.setExoMediaSourceInterceptListener(new ExoMediaSourceInterceptListener() {
/**
* @param dataSource 链接
* @param preview 是否带上header,默认有header自动设置为true
* @param cacheEnable 是否需要缓存
* @param isLooping 是否循环
* @param cacheDir 自定义缓存目录
* @return 返回不为空时,使用返回的自定义mediaSource
*/
@Override
public MediaSource getMediaSource(String dataSource, boolean preview, boolean cacheEnable, boolean isLooping, File cacheDir) {
return null;
}
});
```


### 更多版本请查阅:[版本更新说明](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/UPDATE_VERSION.md)
Expand Down
13 changes: 13 additions & 0 deletions app/src/main/java/com/example/gsyvideoplayer/GSYApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import android.support.multidex.MultiDexApplication;

import com.google.android.exoplayer2.source.MediaSource;
import com.shuyu.gsyvideoplayer.GSYVideoManager;
import com.shuyu.gsyvideoplayer.cache.CacheFactory;
import com.shuyu.gsyvideoplayer.cache.ProxyCacheManager;
Expand All @@ -11,10 +12,14 @@
import com.shuyu.gsyvideoplayer.utils.GSYVideoType;

import tv.danmaku.ijk.media.exo2.Exo2PlayerManager;
import tv.danmaku.ijk.media.exo2.ExoMediaSourceInterceptListener;
import tv.danmaku.ijk.media.exo2.ExoPlayerCacheManager;
import tv.danmaku.ijk.media.exo2.ExoSourceManager;

import com.squareup.leakcanary.LeakCanary;

import java.io.File;

/**
* Created by shuyu on 2016/11/11.
*/
Expand Down Expand Up @@ -50,5 +55,13 @@ public void onCreate() {

//IjkPlayerManager.setLogLevel(IjkMediaPlayer.IJK_LOG_SILENT);


/*ExoSourceManager.setExoMediaSourceInterceptListener(new ExoMediaSourceInterceptListener() {
@Override
public MediaSource getMediaSource(String dataSource, boolean preview, boolean cacheEnable, boolean isLooping, File cacheDir) {
return null;
}
});*/

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package tv.danmaku.ijk.media.exo2;

import com.google.android.exoplayer2.source.MediaSource;

import java.io.File;

/**
* 设置 ExoPlayer 的 MediaSource 创建拦截
* Created by guoshuyu
* Date: 2018-08-22
*/
public interface ExoMediaSourceInterceptListener {
/**
* @param dataSource 链接
* @param preview 是否带上header,默认有header自动设置为true
* @param cacheEnable 是否需要缓存
* @param isLooping 是否循环
* @param cacheDir 自定义缓存目录
* @return 返回不为空时,使用返回的自定义mediaSource
*/
MediaSource getMediaSource(String dataSource, boolean preview, boolean cacheEnable, boolean isLooping, File cacheDir);
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,16 @@ public class ExoSourceManager {

public static final int TYPE_RTMP = 4;

protected static Cache mCache;

protected Context mAppContext;
private static Cache mCache;

protected Map<String, String> mMapHeadData;
private Context mAppContext;

protected String mDataSource;
private Map<String, String> mMapHeadData;

private String mDataSource;

private static ExoMediaSourceInterceptListener sExoMediaSourceInterceptListener;

private boolean isCached = false;

Expand All @@ -64,11 +67,24 @@ private ExoSourceManager(Context context, Map<String, String> mapHeadData) {
mMapHeadData = mapHeadData;
}

/**
* @param dataSource 链接
* @param preview 是否带上header,默认有header自动设置为true
* @param cacheEnable 是否需要缓存
* @param isLooping 是否循环
* @param cacheDir 自定义缓存目录
*/
public MediaSource getMediaSource(String dataSource, boolean preview, boolean cacheEnable, boolean isLooping, File cacheDir) {
MediaSource mediaSource = null;
if (sExoMediaSourceInterceptListener != null) {
mediaSource = sExoMediaSourceInterceptListener.getMediaSource(dataSource, preview, cacheEnable, isLooping, cacheDir);
}
if (mediaSource != null) {
return mediaSource;
}
mDataSource = dataSource;
Uri contentUri = Uri.parse(dataSource);
int contentType = inferContentType(dataSource);
MediaSource mediaSource;
switch (contentType) {
case C.TYPE_SS:
mediaSource = new SsMediaSource.Factory(
Expand Down Expand Up @@ -103,6 +119,23 @@ public MediaSource getMediaSource(String dataSource, boolean preview, boolean ca
return mediaSource;
}


/**
* 设置ExoPlayer 的 MediaSource 创建拦截
*/
public static void setExoMediaSourceInterceptListener(ExoMediaSourceInterceptListener exoMediaSourceInterceptListener) {
sExoMediaSourceInterceptListener = exoMediaSourceInterceptListener;
}

public static void resetExoMediaSourceInterceptListener() {
sExoMediaSourceInterceptListener = null;
}

public static ExoMediaSourceInterceptListener getExoMediaSourceInterceptListener() {
return sExoMediaSourceInterceptListener;
}


@C.ContentType
public static int inferContentType(String fileName) {
fileName = Util.toLowerInvariant(fileName);
Expand Down Expand Up @@ -184,7 +217,6 @@ public boolean hadCached() {
return isCached;
}


/**
* 获取SourceFactory,是否带Cache
*/
Expand Down

0 comments on commit 0224c42

Please sign in to comment.