chore(android): migrate DataSourceUtil to Kotlin (#3984)
* Rename .java to .kt * chore(android): migrate DataSourceUtil to Kotlin * fix: type issue in DataSourceUtil * fix: lint error * chore: refactor DataSourceUtil with object & @JvmStatic * fix: lint error
This commit is contained in:
parent
452e42f1dd
commit
b25e43ee79
@ -1,96 +0,0 @@
|
|||||||
package com.brentvatne.exoplayer;
|
|
||||||
|
|
||||||
import android.net.Uri;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.media3.common.util.Util;
|
|
||||||
import androidx.media3.datasource.AssetDataSource;
|
|
||||||
import androidx.media3.datasource.DataSource;
|
|
||||||
import androidx.media3.datasource.DataSpec;
|
|
||||||
import androidx.media3.datasource.DefaultDataSource;
|
|
||||||
import androidx.media3.datasource.HttpDataSource;
|
|
||||||
import androidx.media3.datasource.okhttp.OkHttpDataSource;
|
|
||||||
import androidx.media3.exoplayer.upstream.DefaultBandwidthMeter;
|
|
||||||
|
|
||||||
import com.facebook.react.bridge.ReactContext;
|
|
||||||
import com.facebook.react.modules.network.CookieJarContainer;
|
|
||||||
import com.facebook.react.modules.network.ForwardingCookieHandler;
|
|
||||||
import com.facebook.react.modules.network.OkHttpClientProvider;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import okhttp3.Call;
|
|
||||||
import okhttp3.JavaNetCookieJar;
|
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
|
|
||||||
public class DataSourceUtil {
|
|
||||||
|
|
||||||
private DataSourceUtil() {
|
|
||||||
}
|
|
||||||
|
|
||||||
private static DataSource.Factory defaultDataSourceFactory = null;
|
|
||||||
private static HttpDataSource.Factory defaultHttpDataSourceFactory = null;
|
|
||||||
private static String userAgent = null;
|
|
||||||
|
|
||||||
public static void setUserAgent(String userAgent) {
|
|
||||||
DataSourceUtil.userAgent = userAgent;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getUserAgent(ReactContext context) {
|
|
||||||
if (userAgent == null) {
|
|
||||||
userAgent = Util.getUserAgent(context, context.getPackageName());
|
|
||||||
}
|
|
||||||
return userAgent;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static DataSource.Factory getDefaultDataSourceFactory(ReactContext context, DefaultBandwidthMeter bandwidthMeter, Map<String, String> requestHeaders) {
|
|
||||||
if (defaultDataSourceFactory == null || (requestHeaders != null && !requestHeaders.isEmpty())) {
|
|
||||||
defaultDataSourceFactory = buildDataSourceFactory(context, bandwidthMeter, requestHeaders);
|
|
||||||
}
|
|
||||||
return defaultDataSourceFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HttpDataSource.Factory getDefaultHttpDataSourceFactory(ReactContext context, DefaultBandwidthMeter bandwidthMeter, Map<String, String> requestHeaders) {
|
|
||||||
if (defaultHttpDataSourceFactory == null || (requestHeaders != null && !requestHeaders.isEmpty())) {
|
|
||||||
defaultHttpDataSourceFactory = buildHttpDataSourceFactory(context, bandwidthMeter, requestHeaders);
|
|
||||||
}
|
|
||||||
return defaultHttpDataSourceFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static DataSource.Factory buildDataSourceFactory(ReactContext context, DefaultBandwidthMeter bandwidthMeter, Map<String, String> requestHeaders) {
|
|
||||||
return new DefaultDataSource.Factory(context, buildHttpDataSourceFactory(context, bandwidthMeter, requestHeaders));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static HttpDataSource.Factory buildHttpDataSourceFactory(ReactContext context, DefaultBandwidthMeter bandwidthMeter, Map<String, String> requestHeaders) {
|
|
||||||
OkHttpClient client = OkHttpClientProvider.getOkHttpClient();
|
|
||||||
CookieJarContainer container = (CookieJarContainer) client.cookieJar();
|
|
||||||
ForwardingCookieHandler handler = new ForwardingCookieHandler(context);
|
|
||||||
container.setCookieJar(new JavaNetCookieJar(handler));
|
|
||||||
OkHttpDataSource.Factory okHttpDataSourceFactory = new OkHttpDataSource.Factory((Call.Factory) client)
|
|
||||||
.setTransferListener(bandwidthMeter);
|
|
||||||
|
|
||||||
if (requestHeaders != null) {
|
|
||||||
okHttpDataSourceFactory.setDefaultRequestProperties(requestHeaders);
|
|
||||||
if (!requestHeaders.containsKey("User-Agent")) {
|
|
||||||
okHttpDataSourceFactory.setUserAgent(getUserAgent(context));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
okHttpDataSourceFactory.setUserAgent(getUserAgent(context));
|
|
||||||
}
|
|
||||||
|
|
||||||
return okHttpDataSourceFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static DataSource.Factory buildAssetDataSourceFactory(ReactContext context, Uri srcUri) throws AssetDataSource.AssetDataSourceException {
|
|
||||||
DataSpec dataSpec = new DataSpec(srcUri);
|
|
||||||
final AssetDataSource rawResourceDataSource = new AssetDataSource(context);
|
|
||||||
rawResourceDataSource.open(dataSpec);
|
|
||||||
return new DataSource.Factory() {
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public DataSource createDataSource() {
|
|
||||||
return rawResourceDataSource;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,88 @@
|
|||||||
|
package com.brentvatne.exoplayer
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import androidx.media3.common.util.Util
|
||||||
|
import androidx.media3.datasource.AssetDataSource
|
||||||
|
import androidx.media3.datasource.DataSource
|
||||||
|
import androidx.media3.datasource.DataSpec
|
||||||
|
import androidx.media3.datasource.DefaultDataSource
|
||||||
|
import androidx.media3.datasource.HttpDataSource
|
||||||
|
import androidx.media3.datasource.okhttp.OkHttpDataSource
|
||||||
|
import androidx.media3.exoplayer.upstream.DefaultBandwidthMeter
|
||||||
|
import com.facebook.react.bridge.ReactContext
|
||||||
|
import com.facebook.react.modules.network.CookieJarContainer
|
||||||
|
import com.facebook.react.modules.network.ForwardingCookieHandler
|
||||||
|
import com.facebook.react.modules.network.OkHttpClientProvider
|
||||||
|
import okhttp3.Call
|
||||||
|
import okhttp3.JavaNetCookieJar
|
||||||
|
|
||||||
|
object DataSourceUtil {
|
||||||
|
private var defaultDataSourceFactory: DataSource.Factory? = null
|
||||||
|
private var defaultHttpDataSourceFactory: HttpDataSource.Factory? = null
|
||||||
|
private var userAgent: String? = null
|
||||||
|
|
||||||
|
private fun getUserAgent(context: ReactContext): String {
|
||||||
|
if (userAgent == null) {
|
||||||
|
userAgent = Util.getUserAgent(context, context.packageName)
|
||||||
|
}
|
||||||
|
return userAgent as String
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun getDefaultDataSourceFactory(context: ReactContext, bandwidthMeter: DefaultBandwidthMeter?, requestHeaders: Map<String, String>?): DataSource.Factory {
|
||||||
|
if (defaultDataSourceFactory == null || !requestHeaders.isNullOrEmpty()) {
|
||||||
|
defaultDataSourceFactory = buildDataSourceFactory(context, bandwidthMeter, requestHeaders)
|
||||||
|
}
|
||||||
|
return defaultDataSourceFactory as DataSource.Factory
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun getDefaultHttpDataSourceFactory(
|
||||||
|
context: ReactContext,
|
||||||
|
bandwidthMeter: DefaultBandwidthMeter?,
|
||||||
|
requestHeaders: Map<String, String>?
|
||||||
|
): HttpDataSource.Factory {
|
||||||
|
if (defaultHttpDataSourceFactory == null || !requestHeaders.isNullOrEmpty()) {
|
||||||
|
defaultHttpDataSourceFactory = buildHttpDataSourceFactory(context, bandwidthMeter, requestHeaders)
|
||||||
|
}
|
||||||
|
return defaultHttpDataSourceFactory as HttpDataSource.Factory
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun buildDataSourceFactory(
|
||||||
|
context: ReactContext,
|
||||||
|
bandwidthMeter: DefaultBandwidthMeter?,
|
||||||
|
requestHeaders: Map<String, String>?
|
||||||
|
): DataSource.Factory = DefaultDataSource.Factory(context, buildHttpDataSourceFactory(context, bandwidthMeter, requestHeaders))
|
||||||
|
|
||||||
|
private fun buildHttpDataSourceFactory(
|
||||||
|
context: ReactContext,
|
||||||
|
bandwidthMeter: DefaultBandwidthMeter?,
|
||||||
|
requestHeaders: Map<String, String>?
|
||||||
|
): HttpDataSource.Factory {
|
||||||
|
val client = OkHttpClientProvider.getOkHttpClient()
|
||||||
|
val container = client.cookieJar as CookieJarContainer
|
||||||
|
val handler = ForwardingCookieHandler(context)
|
||||||
|
container.setCookieJar(JavaNetCookieJar(handler))
|
||||||
|
val okHttpDataSourceFactory = OkHttpDataSource.Factory(client as Call.Factory)
|
||||||
|
.setTransferListener(bandwidthMeter)
|
||||||
|
|
||||||
|
if (requestHeaders != null) {
|
||||||
|
okHttpDataSourceFactory.setDefaultRequestProperties(requestHeaders)
|
||||||
|
if (!requestHeaders.containsKey("User-Agent")) {
|
||||||
|
okHttpDataSourceFactory.setUserAgent(getUserAgent(context))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
okHttpDataSourceFactory.setUserAgent(getUserAgent(context))
|
||||||
|
}
|
||||||
|
|
||||||
|
return okHttpDataSourceFactory
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun buildAssetDataSourceFactory(context: ReactContext?, srcUri: Uri?): DataSource.Factory {
|
||||||
|
val dataSpec = DataSpec(srcUri!!)
|
||||||
|
val rawResourceDataSource = AssetDataSource(context!!)
|
||||||
|
rawResourceDataSource.open(dataSpec)
|
||||||
|
return DataSource.Factory { rawResourceDataSource }
|
||||||
|
}
|
||||||
|
}
|
@ -7,7 +7,6 @@ import static androidx.media3.common.C.CONTENT_TYPE_RTSP;
|
|||||||
import static androidx.media3.common.C.CONTENT_TYPE_SS;
|
import static androidx.media3.common.C.CONTENT_TYPE_SS;
|
||||||
import static androidx.media3.common.C.TIME_END_OF_SOURCE;
|
import static androidx.media3.common.C.TIME_END_OF_SOURCE;
|
||||||
|
|
||||||
import static com.brentvatne.exoplayer.DataSourceUtil.buildAssetDataSourceFactory;
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
@ -1060,7 +1059,7 @@ public class ReactExoplayerView extends FrameLayout implements
|
|||||||
case CONTENT_TYPE_OTHER:
|
case CONTENT_TYPE_OTHER:
|
||||||
if ("asset".equals(uri.getScheme())) {
|
if ("asset".equals(uri.getScheme())) {
|
||||||
try {
|
try {
|
||||||
DataSource.Factory assetDataSourceFactory = buildAssetDataSourceFactory(themedReactContext, uri);
|
DataSource.Factory assetDataSourceFactory = DataSourceUtil.buildAssetDataSourceFactory(themedReactContext, uri);
|
||||||
mediaSourceFactory = new ProgressiveMediaSource.Factory(assetDataSourceFactory);
|
mediaSourceFactory = new ProgressiveMediaSource.Factory(assetDataSourceFactory);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new IllegalStateException("cannot open input file" + uri);
|
throw new IllegalStateException("cannot open input file" + uri);
|
||||||
|
Loading…
Reference in New Issue
Block a user