X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fai%2Fsuanzi%2Frtmpclient%2FMainActivity.java;h=bf53ce4d272ad52b479d60b3863b104de2d8a20a;hb=ce8b8afd68fceafd48e43e3d1ef909d74c78240a;hp=14b8d5eafa83c7ae75e18af877d2247b1da13242;hpb=410441c06aa4257d7d9dcb1b581abb4017c67c50;p=rtmpclient.git diff --git a/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java b/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java index 14b8d5e..bf53ce4 100644 --- a/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java +++ b/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java @@ -1,43 +1,19 @@ package ai.suanzi.rtmpclient; -import android.app.Activity; -import android.app.PendingIntent; -import android.content.BroadcastReceiver; import android.content.IntentFilter; -import android.graphics.ImageFormat; -import android.graphics.SurfaceTexture; -import android.hardware.usb.UsbDevice; -import android.hardware.usb.UsbManager; -import android.os.Environment; import android.support.design.widget.TextInputEditText; -import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; -import android.text.TextUtils; import android.util.Log; import android.view.SurfaceHolder; -import android.hardware.Camera; import android.view.SurfaceView; import android.view.View; import android.widget.Button; import android.widget.Toast; import android.content.Context; -import android.content.pm.PackageManager; -import android.os.AsyncTask; import java.io.File; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.io.IOException; -import java.util.concurrent.Executor; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import android.content.Intent; -import java.io.OutputStream; -import android.hardware.usb.UsbManager; -import android.hardware.usb.UsbDeviceConnection; - import de.mindpipe.android.logging.log4j.LogConfigurator; import org.apache.log4j.Level; import org.apache.log4j.Logger; @@ -50,42 +26,29 @@ import ai.suanzi.rtmpclient.MyService.LocalBinder; import android.os.IBinder; import android.net.ConnectivityManager; -//"rtmp://gpussh.suanzi.ai:1935/myapp/suanzi_ac83f34ead90_cameraid"; +//"rtmp://gpussh.suanzi.ai:1935/myapp/suanzi_ac83f34ead90"; -public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, Camera.PreviewCallback, MyService.MyServiceEventListener{ +public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, MyService.MyServiceEventListener{ private static final String TAG = "MainActivity"; - //private Ffmpeg ffmpeg; - //private Camera mCamera ; - //private StreamTask mStreamTask; - private SurfaceHolder mHolder; - private SurfaceView mSufaceView; - //private UVCCamera uvcCamera; - //ExecutorService mExecutor = Executors.newSingleThreadExecutor(); - //Intent it = new Intent(getApplicationContext(), MyService.class); - //Intent intent = new Intent(); - - //private UsbManager usbManager; - //private UsbDevice usbCamera; - private Logger gLogger; + private SurfaceHolder mHolder; + private SurfaceView mSufaceView; private Button mBtnStart; private TextInputEditText mTextServer; private TextInputEditText mTextUser; private TextInputEditText mTextCamera; private String mMacAddr = ""; - //private CameraView mCameraView; - private String mRtmpUrl; private NetworkMonitor networkMonitor; private UsbMonitor mUsbMonitor; + private ServiceHealthMonitor mServiceHealthMonitor; + private static final int INTERVAL = 3 * 60; // seconds - boolean mBounded; + boolean mBounded = false; MyService mServer; Intent mIntent; - // private ServiceReceiver mServiceReceiver; - private void configLog(){ try { final LogConfigurator logConfigurator = new LogConfigurator(); @@ -135,7 +98,6 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal if(mUsbMonitor.hasUsbCamera()){ doBindService(); } - } }, this); @@ -165,6 +127,17 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal IntentFilter filter = new IntentFilter(); filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(networkMonitor, filter); + + mServiceHealthMonitor = new ServiceHealthMonitor(new ServiceHealthMonitor.Callback() { + @Override + public void onNotHealthy() { + gLogger.error("onNotHealthy, in " + INTERVAL + " seconds, the publishing may stopped or have error "); + doUnbindService(); + doBindService(); + //restartApplication(); + } + }); + mServiceHealthMonitor.setInterval(INTERVAL); // 5 minutes } @@ -188,19 +161,23 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal if(mServer.setRtmpUrl(UserInfo.getConfig().toUrl(mMacAddr))){ mServer.startPreview(mHolder); } + + } }; private void doBindService(){ + gLogger.debug("doBindService"); if(!mBounded && canStartService()) { - gLogger.debug("doBindService"); + gLogger.debug("Start service --------->"); bindService(mIntent, mConnection, BIND_AUTO_CREATE); } } private void doUnbindService() { + gLogger.debug("doUnbindService"); if(mBounded){ - gLogger.debug("doUnbindService"); + gLogger.debug("Stop service <---------"); unbindService(mConnection); mBounded = false; } @@ -218,7 +195,7 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal gLogger.error("Current network is available"); doBindService(); } else { - gLogger.error("Current network is NOT available"); + gLogger.error("Current network NOT available or no USB Camera connected"); } mBtnStart.setText("start"); @@ -228,8 +205,14 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal gLogger.error("----------> onClick"); saveConfig(); doUnbindService(); + doBindService(); } }); + + if(!mServiceHealthMonitor.isAlive()) { + gLogger.debug("mServiceHealthMonitor start, interval " + INTERVAL); + mServiceHealthMonitor.start(); + } } @Override @@ -259,7 +242,9 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal @Override protected void onDestroy(){ super.onDestroy(); + mUsbMonitor.unregisterReceiver(); unregisterReceiver(networkMonitor); + unbindService(mConnection); gLogger.debug("onDestroy --------->"); } @@ -269,6 +254,15 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal gLogger.debug("onRestart ---------->"); } + @Override + public void onBackPressed() { + gLogger.error("onBackPressed --------->"); + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_HOME); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } + // SurfaceHolder.Callback implementation @Override public void surfaceCreated(final SurfaceHolder holder){ @@ -288,13 +282,6 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal public void surfaceDestroyed(SurfaceHolder holder){ gLogger.debug("surfaceDestroyed"); } - @Override - public void onPreviewFrame(final byte[] data, Camera camera){ - gLogger.error("onPreviewFrame"); - - } - - private String getMacAddr() { WifiManager manager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiInfo info = manager.getConnectionInfo(); @@ -323,7 +310,6 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal } private boolean canStartService(){ - //gLogger.debug("canStartService - Camera: " + mUsbMonitor.hasUsbCamera() + ". Network: " + NetworkMonitor.isNetworkAvailable()); return mUsbMonitor.hasUsbCamera() && NetworkMonitor.isNetworkAvailable(this); } @@ -331,91 +317,26 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal @Override public void onCameraError(String msg){ gLogger.error("onCameraEvent " + msg); + if(mUsbMonitor.hasUsbCamera()){ + //mServer.reopenCamera(); + } } @Override public void onEncoderError(String msg){ - gLogger.error("onEncoderEvent: " + msg); + gLogger.error("onEncoderError: " + msg); + doUnbindService(); + doBindService(); } @Override - public void onIsPreviewing(String msg){ - gLogger.error("onIsPreviewing: " + msg); + public void onPublishing(String msg){ + mServiceHealthMonitor.record(); } - -// class ServiceReceiver extends BroadcastReceiver{ -// @Override -// public void onReceive(Context context, Intent intent) { -// String value = intent.getStringExtra("extra_data"); -// gLogger.error("ServiceReceiver onReceive - " + value); -// } -// } - -// private void changePermission(){ -// try { -// Log.e(TAG, "change permission"); -// //Process sh = Runtime.getRuntime().exec(new String[]{"su", "-c", "chmod 666 /dev/video0"}); -// -// Process sh = Runtime.getRuntime().exec("/system/xbin/su", null,null); -// //Process sh = Runtime.getRuntime().exec("su", null,null); -// -// OutputStream os = sh.getOutputStream(); -// os.write(("/system/bin/chmod 666 /dev/video0").getBytes("ASCII")); -// //os.write(("/system/bin/echo 'wowo' >> /data/local/test").getBytes("ASCII")); -// os.flush(); -// os.close(); -// sh.waitFor(); -// -// -// }catch (Exception e){ -// e.printStackTrace(); -// } -// } -// -// private boolean checkCameraHardware(Context context) { -// return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); -// } -// -// private static Camera getCameraInstance(){ -// Camera c = null; -// try { -// Log.e(TAG, "Open Camera"); -// c = Camera.open(1); -// } catch (Exception e){ -// e.printStackTrace(); -// } -// return c; -// } -// -// private void configCamera(Camera camera){ -// Camera.Parameters paras = camera.getParameters(); -// gLogger.error("Supported Picture Sizes:"); -// for (Camera.Size cc : paras.getSupportedPictureSizes()){ -// gLogger.error(cc.width + "x" + cc.height); -// } -// gLogger.error("Supported Preview fps range:"); -// for(int[] i : paras.getSupportedPreviewFpsRange()){ -// gLogger.error("[" + i[0] + "," + i[1] + "]"); -// } -// gLogger.error("Set parameters"); -// camera.setParameters(paras); -// camera.setDisplayOrientation(0); -// gLogger.error("Preview Format: " + paras.getPreviewFormat() + ". Size: " + paras.getPreviewSize().width + "x" + paras.getPreviewSize().height); -// gLogger.error("Picture Format: " + paras.getPictureFormat() + ". Size: " + paras.getPictureSize().width + "x" + paras.getPictureSize().height); -// -// try { -// camera.setPreviewDisplay(mHolder); -// } catch (IOException e){ -// e.printStackTrace(); -// } -// //camera.setPreviewCallback(this); -// } -// -// private void switchToBackground(){ -// Intent i = new Intent(); -// i.setAction(Intent.ACTION_MAIN); -// i.addCategory(Intent.CATEGORY_HOME); -// this.startActivity(i); -// } + private void restartApplication() { + final Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName()); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + } }