Support proxy - part 1

pull/21/head
FongMi 4 years ago
parent 3d4140d6d9
commit 8c69744222
  1. 2
      app/src/main/java/com/fongmi/bear/player/ExoUtil.java
  2. 58
      app/src/main/java/com/fongmi/bear/server/Nano.java
  3. 52
      app/src/main/java/com/fongmi/bear/server/Server.java
  4. 5
      app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java
  5. 8
      app/src/main/java/com/fongmi/bear/utils/Utils.java

@ -27,7 +27,7 @@ public class ExoUtil {
DataSource.Factory factory = getFactory(headers, url);
MediaItem mediaItem = new MediaItem.Builder().setUri(videoUri).build();
int type = Util.inferContentType(videoUri);
if (type == C.CONTENT_TYPE_HLS || url.contains(".php") || url.contains(".m3u8")) {
if (type == C.CONTENT_TYPE_HLS || url.contains(".php") || url.contains("m3u8")) {
return new HlsMediaSource.Factory(factory).createMediaSource(mediaItem);
} else if (type == C.CONTENT_TYPE_DASH) {
return new DashMediaSource.Factory(factory).createMediaSource(mediaItem);

@ -0,0 +1,58 @@
package com.fongmi.bear.server;
import com.fongmi.bear.ApiConfig;
import java.io.InputStream;
import java.util.Map;
import fi.iki.elonen.NanoHTTPD;
public class Nano extends NanoHTTPD {
private Listener mListener;
public Nano() {
super(9978);
}
@Override
public Response serve(IHTTPSession session) {
if (session.getUri().isEmpty()) return super.serve(session);
String url = session.getUri().trim();
if (url.indexOf('?') >= 0) url = url.substring(0, url.indexOf('?'));
if (session.getMethod() == Method.GET) {
if (url.equals("/proxy")) {
Map<String, String> params = session.getParms();
if (params.containsKey("do")) {
Object[] rs = ApiConfig.get().proxyLocal(params);
try {
int code = (int) rs[0];
String mime = (String) rs[1];
InputStream stream = rs[2] != null ? (InputStream) rs[2] : null;
return NanoHTTPD.newChunkedResponse(Response.Status.lookup(code), mime, stream);
} catch (Exception e) {
return NanoHTTPD.newFixedLengthResponse(NanoHTTPD.Response.Status.INTERNAL_ERROR, NanoHTTPD.MIME_PLAINTEXT, "500");
}
}
}
}
return super.serve(session);
}
public Listener getListener() {
return mListener;
}
public void setListener(Listener listener) {
this.mListener = listener;
}
public interface Listener {
void onTextReceived(String text);
void onApiReceived(String url);
void onPushReceived(String url);
}
}

@ -1,12 +1,54 @@
package com.fongmi.bear.server;
import fi.iki.elonen.NanoHTTPD;
import com.fongmi.bear.utils.Utils;
public class Server extends NanoHTTPD {
public class Server implements Nano.Listener {
public static int port = 9978;
private Nano mNano;
private static class Loader {
static volatile Server INSTANCE = new Server();
}
public static Server get() {
return Loader.INSTANCE;
}
public String getAddress(boolean local) {
return "http://" + (local ? "127.0.0.1" : Utils.getIP()) + ":" + mNano.getListeningPort() + "/";
}
public void start() {
if (mNano != null) return;
try {
mNano = new Nano();
mNano.setListener(this);
mNano.start();
} catch (Exception e) {
mNano.stop();
mNano = null;
}
}
public void stop() {
if (mNano != null) {
mNano.stop();
mNano = null;
}
}
@Override
public void onTextReceived(String text) {
}
@Override
public void onApiReceived(String url) {
}
@Override
public void onPushReceived(String url) {
public Server() {
super(port);
}
}

@ -22,6 +22,7 @@ import com.fongmi.bear.bean.Vod;
import com.fongmi.bear.databinding.ActivityHomeBinding;
import com.fongmi.bear.model.SiteViewModel;
import com.fongmi.bear.player.Players;
import com.fongmi.bear.server.Server;
import com.fongmi.bear.ui.custom.CustomRowPresenter;
import com.fongmi.bear.ui.custom.CustomSelector;
import com.fongmi.bear.ui.presenter.FuncPresenter;
@ -55,6 +56,7 @@ public class HomeActivity extends BaseActivity implements VodPresenter.OnClickLi
@Override
protected void initView() {
Clock.start(mBinding.time);
Server.get().start();
Players.get().init();
setRecyclerView();
setViewModel();
@ -160,8 +162,9 @@ public class HomeActivity extends BaseActivity implements VodPresenter.OnClickLi
@Override
protected void onDestroy() {
Players.get().release();
ApiConfig.get().clear();
Players.get().release();
Server.get().stop();
super.onDestroy();
Clock.destroy();
}

@ -2,9 +2,12 @@ package com.fongmi.bear.utils;
import android.app.Activity;
import android.app.PictureInPictureParams;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.provider.Settings;
import android.text.format.Formatter;
import android.util.Rational;
import android.view.View;
@ -37,6 +40,11 @@ public class Utils {
activity.getWindow().getDecorView().setSystemUiVisibility(flags);
}
public static String getIP() {
WifiManager manager = (WifiManager) App.get().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
return Formatter.formatIpAddress(manager.getConnectionInfo().getIpAddress());
}
public static String getUUID() {
return Settings.Secure.getString(App.get().getContentResolver(), Settings.Secure.ANDROID_ID);
}

Loading…
Cancel
Save