X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fai%2Fsuanzi%2Frtmpclient%2FMainActivity.java;fp=app%2Fsrc%2Fmain%2Fjava%2Fai%2Fsuanzi%2Frtmpclient%2FMainActivity.java;h=14b8d5eafa83c7ae75e18af877d2247b1da13242;hb=410441c06aa4257d7d9dcb1b581abb4017c67c50;hp=320e2bb0e4ae96dabf28c1895abadf8c0ba3ce67;hpb=9773f3da1389f4e52fecfc79686fe2c94b08d6bc;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 320e2bb..14b8d5e 100644 --- a/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java +++ b/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java @@ -10,6 +10,7 @@ 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; @@ -51,9 +52,9 @@ import android.net.ConnectivityManager; //"rtmp://gpussh.suanzi.ai:1935/myapp/suanzi_ac83f34ead90_cameraid"; -public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, Camera.PreviewCallback{ +public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, Camera.PreviewCallback, MyService.MyServiceEventListener{ - private static final String TAG = "PENG"; + private static final String TAG = "MainActivity"; //private Ffmpeg ffmpeg; //private Camera mCamera ; //private StreamTask mStreamTask; @@ -62,7 +63,7 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal //private UVCCamera uvcCamera; //ExecutorService mExecutor = Executors.newSingleThreadExecutor(); //Intent it = new Intent(getApplicationContext(), MyService.class); - Intent intent = new Intent(); + //Intent intent = new Intent(); //private UsbManager usbManager; //private UsbDevice usbCamera; @@ -77,11 +78,14 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal //private CameraView mCameraView; private String mRtmpUrl; private NetworkMonitor networkMonitor; + private UsbMonitor mUsbMonitor; boolean mBounded; MyService mServer; Intent mIntent; + // private ServiceReceiver mServiceReceiver; + private void configLog(){ try { final LogConfigurator logConfigurator = new LogConfigurator(); @@ -112,8 +116,55 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal mSufaceView = findViewById(R.id.surfaceView); mHolder = mSufaceView.getHolder(); mHolder.addCallback(this); - //intent.setPackage(this.getPackageName()); // init service - //intent.setAction("ai.suanzi.rtmpclient.service"); + + mIntent = new Intent(this, MyService.class); + mUsbMonitor = new UsbMonitor(new UsbMonitor.UsbListener() { + @Override + public void onCameraConnected() { + gLogger.error("onCameraConnected, current Usb Camera count: " + mUsbMonitor.getUsbCameraCount()); + doUnbindService(); + if(mUsbMonitor.hasUsbCamera()){ + doBindService(); + } + } + + @Override + public void onCameraDisconnected() { + gLogger.error("onCameraDisconnected, current camera count: " + mUsbMonitor.getUsbCameraCount()); + doUnbindService(); + if(mUsbMonitor.hasUsbCamera()){ + doBindService(); + } + + } + }, this); + + networkMonitor = new NetworkMonitor(new NetworkMonitor.NetworkListener() { + @Override + public void onWifiConnected() { + gLogger.error("onWifiConnected"); + doBindService(); + } + + @Override + public void onWifiDisconnected() { + gLogger.error("onWifiDisconnected"); + doUnbindService(); + } + + @Override + public void onWifiEnabled() { + gLogger.error("onWifiEnabled"); + } + + @Override + public void onWifiDisabled() { + gLogger.error("onWifiDisabled"); + } + }); + IntentFilter filter = new IntentFilter(); + filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); + registerReceiver(networkMonitor, filter); } @@ -133,14 +184,15 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal mBounded = true; LocalBinder mLocalBinder = (LocalBinder)service; mServer = mLocalBinder.getServiceInstance(); - if(mServer.setRtmpUrl(UserInfo.getConfig().toUrl())){ + mServer.setServiceEventListener(MainActivity.this); + if(mServer.setRtmpUrl(UserInfo.getConfig().toUrl(mMacAddr))){ mServer.startPreview(mHolder); } } }; private void doBindService(){ - if(!mBounded) { + if(!mBounded && canStartService()) { gLogger.debug("doBindService"); bindService(mIntent, mConnection, BIND_AUTO_CREATE); } @@ -162,9 +214,7 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal init(); loadConfig(); - //startService(intent); - mIntent = new Intent(this, MyService.class); - if(NetworkMonitor.isNetworkAvailable(this)){ + if(NetworkMonitor.isNetworkAvailable(this) && mUsbMonitor.hasUsbCamera()){ gLogger.error("Current network is available"); doBindService(); } else { @@ -178,38 +228,8 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal gLogger.error("----------> onClick"); saveConfig(); doUnbindService(); - } }); - - if ( networkMonitor == null) { - networkMonitor = new NetworkMonitor(new NetworkMonitor.NetworkListener() { - @Override - public void onWifiConnected() { - gLogger.error("onWifiConnected"); - doBindService(); - } - - @Override - public void onWifiDisconnected() { - gLogger.error("onWifiDisconnected"); - doUnbindService(); - } - - @Override - public void onWifiEnabled() { - gLogger.error("onWifiEnabled"); - } - - @Override - public void onWifiDisabled() { - gLogger.error("onWifiDisabled"); - } - }); - } - IntentFilter filter = new IntentFilter(); - filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); - registerReceiver(networkMonitor, filter); } @Override @@ -288,7 +308,7 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal mTextUser.setText(info.user); mTextCamera.setText(info.cameraId); //mMacAddr = info.macAddr.equals("") ? this.mMacAddr : info.macAddr; - gLogger.error("loadConfig - url is :" + info.toUrl()); + gLogger.error("loadConfig - url is :" + info.toUrl(mMacAddr)); } private void saveConfig() { @@ -299,73 +319,103 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal } else { Toast.makeText(getApplicationContext(), "Error: config saved", Toast.LENGTH_LONG).show(); } - gLogger.error("saveConfig - url: " + info.toUrl()); + gLogger.error("saveConfig - url: " + info.toUrl(mMacAddr)); } - 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 canStartService(){ + //gLogger.debug("canStartService - Camera: " + mUsbMonitor.hasUsbCamera() + ". Network: " + NetworkMonitor.isNetworkAvailable()); + return mUsbMonitor.hasUsbCamera() && NetworkMonitor.isNetworkAvailable(this); } - private boolean checkCameraHardware(Context context) { - return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); + // MyServiceEventListener + @Override + public void onCameraError(String msg){ + gLogger.error("onCameraEvent " + msg); } - private static Camera getCameraInstance(){ - Camera c = null; - try { - Log.e(TAG, "Open Camera"); - c = Camera.open(1); - } catch (Exception e){ - e.printStackTrace(); - } - return c; + @Override + public void onEncoderError(String msg){ + gLogger.error("onEncoderEvent: " + msg); } - 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); + @Override + public void onIsPreviewing(String msg){ + gLogger.error("onIsPreviewing: " + msg); } - private void switchToBackground(){ - Intent i = new Intent(); - i.setAction(Intent.ACTION_MAIN); - i.addCategory(Intent.CATEGORY_HOME); - this.startActivity(i); - } + +// 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); +// } }