Merge "HLS seeking: call readAt() on new thread"

This commit is contained in:
Dichen Zhang
2019-02-15 21:47:26 +00:00
committed by Gerrit Code Review

View File

@@ -16,6 +16,8 @@
package android.media; package android.media;
import static android.media.MediaPlayer.MEDIA_ERROR_UNSUPPORTED;
import android.annotation.UnsupportedAppUsage; import android.annotation.UnsupportedAppUsage;
import android.net.NetworkUtils; import android.net.NetworkUtils;
import android.os.IBinder; import android.os.IBinder;
@@ -23,21 +25,19 @@ import android.os.StrictMode;
import android.util.Log; import android.util.Log;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.InputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.net.CookieHandler; import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.Proxy;
import java.net.URL;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.NoRouteToHostException; import java.net.NoRouteToHostException;
import java.net.ProtocolException; import java.net.ProtocolException;
import java.net.Proxy;
import java.net.URL;
import java.net.UnknownServiceException; import java.net.UnknownServiceException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import static android.media.MediaPlayer.MEDIA_ERROR_UNSUPPORTED;
/** @hide */ /** @hide */
public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {
@@ -67,6 +67,7 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {
// from com.squareup.okhttp.internal.http // from com.squareup.okhttp.internal.http
private final static int HTTP_TEMP_REDIRECT = 307; private final static int HTTP_TEMP_REDIRECT = 307;
private final static int MAX_REDIRECTS = 20; private final static int MAX_REDIRECTS = 20;
private AtomicBoolean mIsConnected = new AtomicBoolean(false);
@UnsupportedAppUsage @UnsupportedAppUsage
public MediaHTTPConnection() { public MediaHTTPConnection() {
@@ -90,6 +91,7 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {
mAllowCrossDomainRedirect = true; mAllowCrossDomainRedirect = true;
mURL = new URL(uri); mURL = new URL(uri);
mHeaders = convertHeaderStringToMap(headers); mHeaders = convertHeaderStringToMap(headers);
mIsConnected.set(true);
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
return null; return null;
} }
@@ -140,7 +142,14 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {
@Override @Override
@UnsupportedAppUsage @UnsupportedAppUsage
public void disconnect() { public void disconnect() {
teardownConnection(); if (mIsConnected.getAndSet(false)) {
(new Thread() {
@Override
public void run() {
teardownConnection();
}
}).start();
}
mHeaders = null; mHeaders = null;
mURL = null; mURL = null;
} }
@@ -325,7 +334,14 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {
@Override @Override
@UnsupportedAppUsage @UnsupportedAppUsage
public int readAt(long offset, int size) { public int readAt(long offset, int size) {
return native_readAt(offset, size); if (!mIsConnected.get()) {
return -1;
}
int result = native_readAt(offset, size);
if (!mIsConnected.get()) {
return -1;
}
return result;
} }
private int readAt(long offset, byte[] data, int size) { private int readAt(long offset, byte[] data, int size) {