提交 b51bebc7 编写于 作者: G guoshuyu

fix #2436 增加 exo 的 http timeout

上级 18576d6c
......@@ -254,7 +254,7 @@ public class DetailPlayer extends AppCompatActivity {
private String getUrl() {
//String url = "android.resource://" + getPackageName() + "/" + R.raw.test1;
//String url = "android.resource://" + getPackageName() + "/" + R.raw.test;
//注意,用ijk模式播放raw视频,这个必须打开
//GSYVideoManager.instance().enableRawPlay(getApplicationContext());
......
......@@ -17,6 +17,7 @@ import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
import com.google.android.exoplayer2.source.ExtractorMediaSource;
import com.google.android.exoplayer2.source.LoopingMediaSource;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
import com.google.android.exoplayer2.source.dash.DashMediaSource;
import com.google.android.exoplayer2.source.dash.DefaultDashChunkSource;
import com.google.android.exoplayer2.source.hls.HlsMediaSource;
......@@ -58,7 +59,14 @@ public class ExoSourceManager {
/**
* 忽律Https证书校验
*/
private static boolean mSkipSSLChain = false;
private static boolean sSkipSSLChain = false;
private static int sHttpReadTimeout = -1;
private static int sHttpConnectTimeout = -1;
private static boolean s = false;
private Context mAppContext;
......@@ -99,7 +107,7 @@ public class ExoSourceManager {
int contentType = inferContentType(dataSource, overrideExtension);
if("android.resource".equals(contentUri.getScheme())) {
if ("android.resource".equals(contentUri.getScheme())) {
DataSpec dataSpec = new DataSpec(contentUri);
final RawResourceDataSource rawResourceDataSource = new RawResourceDataSource(mAppContext);
try {
......@@ -113,9 +121,9 @@ public class ExoSourceManager {
return rawResourceDataSource;
}
};
ExtractorMediaSource extractorMediaSource = new ExtractorMediaSource(rawResourceDataSource.getUri(),
factory, new DefaultExtractorsFactory(), null, null);
return extractorMediaSource;
return new ProgressiveMediaSource.Factory(
factory).createMediaSource(contentUri);
}
switch (contentType) {
......@@ -135,14 +143,14 @@ public class ExoSourceManager {
break;
case TYPE_RTMP:
RtmpDataSourceFactory rtmpDataSourceFactory = new RtmpDataSourceFactory(null);
mediaSource = new ExtractorMediaSource.Factory(rtmpDataSourceFactory)
.setExtractorsFactory(new DefaultExtractorsFactory())
mediaSource = new ProgressiveMediaSource.Factory(rtmpDataSourceFactory,
new DefaultExtractorsFactory())
.createMediaSource(contentUri);
break;
case C.TYPE_OTHER:
default:
mediaSource = new ExtractorMediaSource.Factory(getDataSourceFactoryCache(mAppContext, cacheEnable, preview, cacheDir))
.setExtractorsFactory(new DefaultExtractorsFactory())
mediaSource = new ProgressiveMediaSource.Factory(getDataSourceFactoryCache(mAppContext, cacheEnable,
preview, cacheDir), new DefaultExtractorsFactory())
.createMediaSource(contentUri);
break;
}
......@@ -251,7 +259,7 @@ public class ExoSourceManager {
public static boolean isSkipSSLChain() {
return mSkipSSLChain;
return sSkipSSLChain;
}
/**
......@@ -260,7 +268,30 @@ public class ExoSourceManager {
* @param skipSSLChain true时是hulve
*/
public static void setSkipSSLChain(boolean skipSSLChain) {
mSkipSSLChain = skipSSLChain;
sSkipSSLChain = skipSSLChain;
}
public static int getHttpReadTimeout() {
return sHttpReadTimeout;
}
/**
* 如果设置小于 0 就使用默认 8000 MILLIS
*/
public static void setHttpReadTimeout(int httpReadTimeout) {
ExoSourceManager.sHttpReadTimeout = httpReadTimeout;
}
public static int getHttpConnectTimeout() {
return sHttpConnectTimeout;
}
/**
* 如果设置小于 0 就使用默认 8000 MILLIS
*/
public static void setHttpConnectTimeout(int httpConnectTimeout) {
ExoSourceManager.sHttpConnectTimeout = httpConnectTimeout;
}
/**
......@@ -286,14 +317,23 @@ public class ExoSourceManager {
}
private DataSource.Factory getHttpDataSourceFactory(Context context, boolean preview) {
int connectTimeout = GSYExoHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS;
int readTimeout = GSYExoHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS;
if (sHttpConnectTimeout > 0) {
connectTimeout = sHttpConnectTimeout;
}
if (sHttpReadTimeout > 0) {
readTimeout = sHttpReadTimeout;
}
boolean allowCrossProtocolRedirects = false;
if (mMapHeadData != null && mMapHeadData.size() > 0) {
allowCrossProtocolRedirects = "true".equals(mMapHeadData.get("allowCrossProtocolRedirects"));
}
if (mSkipSSLChain) {
if (sSkipSSLChain) {
GSYExoHttpDataSourceFactory dataSourceFactory = new GSYExoHttpDataSourceFactory(Util.getUserAgent(context,
TAG), preview ? null : new DefaultBandwidthMeter(), GSYExoHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
GSYExoHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS, allowCrossProtocolRedirects);
TAG), preview ? null : new DefaultBandwidthMeter.Builder(mAppContext).build(),
connectTimeout,
readTimeout, allowCrossProtocolRedirects);
if (mMapHeadData != null && mMapHeadData.size() > 0) {
for (Map.Entry<String, String> header : mMapHeadData.entrySet()) {
dataSourceFactory.getDefaultRequestProperties().set(header.getKey(), header.getValue());
......@@ -302,8 +342,9 @@ public class ExoSourceManager {
return dataSourceFactory;
}
DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory(Util.getUserAgent(context,
TAG), preview ? null : new DefaultBandwidthMeter(), GSYExoHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
GSYExoHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS, allowCrossProtocolRedirects);
TAG), preview ? null : new DefaultBandwidthMeter.Builder(mAppContext).build(),
connectTimeout,
readTimeout, allowCrossProtocolRedirects);
if (mMapHeadData != null && mMapHeadData.size() > 0) {
for (Map.Entry<String, String> header : mMapHeadData.entrySet()) {
dataSourceFactory.getDefaultRequestProperties().set(header.getKey(), header.getValue());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册