X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;ds=sidebyside;f=app%2Fsrc%2Fmain%2Fjava%2Fai%2Fsuanzi%2Frtmpclient%2FMainActivity.java;h=6531b9f4ad090e909e1a0f593c43e86478d9384c;hb=f8fb13b9804d9b4b6fb227fbd07b80de9b092b55;hp=7e54153e177b7230481edad0b639597a2e9dda2d;hpb=061580c83656bf358b01a6b78fd22ae9bd497728;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 7e54153..6531b9f 100644 --- a/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java +++ b/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java @@ -12,6 +12,7 @@ import android.os.Environment; import android.support.design.widget.TextInputEditText; 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; @@ -41,15 +42,23 @@ import org.apache.log4j.Level; import org.apache.log4j.Logger; import android.net.wifi.WifiManager; import android.net.wifi.WifiInfo; +import android.content.ServiceConnection; +import android.content.ComponentName; + +import ai.suanzi.rtmpclient.MyService.LocalBinder; +import android.os.IBinder; + +//"rtmp://gpussh.suanzi.ai:1935/myapp/suanzi_ac83f34ead90_cameraid"; public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, Camera.PreviewCallback{ private static final String TAG = "PENG"; - private Ffmpeg ffmpeg;// = Ffmpeg.getInstance(); - private Camera mCamera ;//= getCameraInstance(); + private Ffmpeg ffmpeg; + private Camera mCamera ; private StreamTask mStreamTask; private SurfaceHolder mHolder; - private UVCCamera uvcCamera; + private SurfaceView mSufaceView; + //private UVCCamera uvcCamera; ExecutorService mExecutor = Executors.newSingleThreadExecutor(); //Intent it = new Intent(getApplicationContext(), MyService.class); Intent intent = new Intent(); @@ -64,11 +73,11 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal private TextInputEditText mTextUser; private TextInputEditText mTextCamera; private String mMacAddr = ""; + private CameraView mCameraView; private void configLog(){ try { final LogConfigurator logConfigurator = new LogConfigurator(); - //logConfigurator.setFileName(Environment.getExternalStorageDirectory() + File.separator + "myc" + File.separator + "log" + File.separator + "test.log"); String fname = getExternalFilesDir(null) + File.separator + "log.txt"; logConfigurator.setFileName(fname); Log.e(TAG, "Log file is located at: " + fname); @@ -82,188 +91,126 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal } } - - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); + private void init(){ configLog(); + gLogger.debug("#######################################"); UserInfo.setConfigPath(getExternalFilesDir(null) + File.separator + "config"); this.mMacAddr = getMacAddr(); - gLogger.debug("#######################################"); ffmpeg = Ffmpeg.getInstance(); - - gLogger.debug(" this ia argument " + 3 + "fjeiofjei"); - - uvcCamera = new UVCCamera(); + //uvcCamera = new UVCCamera(); mBtnStart = findViewById(R.id.button); mTextServer = findViewById(R.id.textServer); mTextUser = findViewById(R.id.textUser); mTextCamera = findViewById(R.id.textCamera); - loadConfig(); - - final SurfaceView surfaceView = findViewById(R.id.surfaceView); - mHolder = surfaceView.getHolder(); - mHolder.addCallback(this); - + // init service intent.setPackage(this.getPackageName()); intent.setAction("ai.suanzi.rtmpclient.service"); + // init surface view + mSufaceView = findViewById(R.id.surfaceView); + mHolder = mSufaceView.getHolder(); + mHolder.addCallback(this); + // camera + //mCamera = getCameraInstance(); + //configCamera(mCamera); - final String macAddr = getMacAddr(); - final Context context = getApplicationContext(); - mBtnStart.setOnClickListener(new View.OnClickListener(){ - @Override - public void onClick(View view){ - Log.e(TAG, "onclick2"); - String url = mTextServer.getText().toString() + "/" + mTextUser.getText().toString() + "_" + macAddr + "_" + mTextCamera.getText().toString(); - gLogger.error("Url " + url); - intent.putExtra("url", url); - startService(intent); - saveConfig(); - } - }); - - /*btn2.post(new Runnable(){ - @Override - public void run() { - btn2.performClick(); - - } - }); - - switchToBackground();*/ - - - usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); - - HashMap deviceList = usbManager.getDeviceList(); - Log.e(TAG, "device list size : " + deviceList.size()); - Iterator deviceIterator = deviceList.values().iterator(); - PendingIntent mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); - - IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_DETACHED); - registerReceiver(mUsbReceiver, filter); - filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_ATTACHED); - registerReceiver(mUsbReceiver, filter); - filter = new IntentFilter(ACTION_USB_PERMISSION); - registerReceiver(mUsbReceiver, filter); - - while(deviceIterator.hasNext()){ - UsbDevice device = deviceIterator.next(); - Log.e(TAG, device.toString()); - Log.e(TAG, device.getDeviceName() + " manufacture name: " + device.getManufacturerName() + " " + device.getSerialNumber() + " " + device.getDeviceId()); + } - if (device.getVendorId() == 6257){ - usbManager.requestPermission(device, mPermissionIntent); - usbCamera = device; - } + boolean mBounded; + MyService mServer; + ServiceConnection mConnection = new ServiceConnection() { + @Override + public void onServiceDisconnected(ComponentName name) { + Toast.makeText(MainActivity.this, "Service is disconnected", 1000).show(); + gLogger.error("onServiceDisconnected"); - //Log.e(TAG, device.) - //device.getInterface() + mBounded = false; + mServer = null; } + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + Toast.makeText(MainActivity.this, "Service is connected", 1000).show(); + gLogger.error("onServiceConnected"); + mBounded = true; + LocalBinder mLocalBinder = (LocalBinder)service; + mServer = mLocalBinder.getServiceInstance(); + mServer.onChange(mHolder); + } + }; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + init(); + //mCameraView = new CameraView(this); + //intent.putExtra("url", "xxxxxxxxxxxxxxxxxx"); + //intent.putExtra("view", mCameraView); + //startService(intent); + Intent mIntent = new Intent(this, MyService.class); + bindService(mIntent, mConnection, BIND_AUTO_CREATE); - } - - //SurfaceTexture st = new SurfaceTexture(0); - - private static final String ACTION_USB_PERMISSION = - "com.android.example.USB_PERMISSION"; - private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { - - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (ACTION_USB_PERMISSION.equals(action)) { - synchronized (this) { - UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); - - if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, true)) { - if(device != null){ - Log.e(TAG, "extra permission granted"); - //call method to set up device communication - - - new Thread(new Runnable() { - @Override - public void run() { - Log.e("device","MyThread3");//bhw - UsbDeviceConnection connection = usbManager.openDevice(usbCamera); - int fd = connection.getFileDescriptor();//获取文件描述符 - //ffmpeg.test(fd); - int ret = uvcCamera.open(); - Log.e(TAG, "uvcCamera open return code:" + ret); - - Log.e("device","MyThread3 "+fd); - } - }).start(); - - } - } - else { - Log.e(TAG, "permission denied for device. " + device); - } - } - } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)){ - UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); - if (device != null){ - Log.e(TAG, "==== device out"); - } - } else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) { - Log.e(TAG, "==== device in ====="); - } - } - }; + mBtnStart.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View view){ + String url = mTextServer.getText().toString() + "/" + mTextUser.getText().toString() + "_" + mMacAddr + "_" + mTextCamera.getText().toString(); + gLogger.error("----------> onClick, Url is: " + url); + intent.putExtra("url", url); + startService(intent); + saveConfig(); + } + }); + } @Override protected void onPause(){ super.onPause(); - Log.e(TAG, "OnPause"); + gLogger.debug("OnPause"); } @Override protected void onResume() { super.onResume(); - Log.e(TAG, "OnResume"); + gLogger.debug("OnResume"); } @Override protected void onStop() { super.onStop(); - Log.e(TAG,"onStop"); + gLogger.debug("onStop"); } @Override protected void onStart(){ super.onStart(); - Log.e(TAG,"onStart"); + gLogger.debug("onStart"); } @Override protected void onDestroy(){ super.onDestroy(); - Log.e(TAG,"onDestroy"); + gLogger.debug("onDestroy"); } @Override protected void onRestart(){ super.onStart(); - Log.e(TAG,"onRestart"); + gLogger.debug("onRestart"); } + // class StreamTask AsyncTask private class StreamTask extends AsyncTask{ private byte[] data; @@ -283,57 +230,54 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal } } + + + // SurfaceHolder.Callback implementation @Override public void surfaceCreated(final SurfaceHolder holder){ - Log.e(TAG,"SurfacedCreated"); - /*try { - mCamera.setPreviewDisplay(holder); - mCamera.startPreview(); - } catch (IOException e) { - Log.d(TAG, "Error setting camera preview: " + e.getMessage()); - }*/ + gLogger.error("SurfacedCreated"); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int widht, int height){ - Log.e(TAG, "surfaceChanged"); - //if(mCamera==null) return; - //Camera.Parameters parameters=mCamera.getParameters(); - //parameters.setPreviewSize(640,480); - //parameters.setPictureSize(640,480); - //mCamera.setParameters(parameters); - - //try{ - //Thread.sleep(10000); - /*Log.e(TAG, "xxxxxxxxxxxxxx"); - mExecutor.execute(new Runnable() { - @Override - public void run() { - mCamera.startPreview(); - final Button btn = findViewById(R.id.button); - Camera.Parameters params = mCamera.getParameters(); - ffmpeg.init(params.getPictureSize().width, params.getPictureSize().height); - } - });*/ - - //btn.performClick(); - //} catch (InterruptedException e){ - // e.printStackTrace(); - //} - + gLogger.error("surfaceChanged"); + mHolder = holder; + if (mServer != null) { + mServer.onChange(holder); + } - //Camera.Parameters params = mCamera.getParameters(); - //ffmpeg.init(params.getPictureSize().width, params.getPictureSize().height); - /*Thread t = new Thread(new Runnable() { + /* final SurfaceHolder hh = holder; + Thread tr = new Thread(new Runnable() { @Override public void run() { - ffmpeg.play(mHolder.getSurface(),"/storage/emulated/0/Movies/output.flv"); + try { + Thread.sleep(3000); + } catch (Exception e){ + e.printStackTrace(); + } + if (mServer != null) { + gLogger.error("onChange"); + mServer.onChange(hh); + }else { + gLogger.error("service XXXXXXXXXXXXXXX"); + } } - });*/ + }); + tr.run();*/ + + /* + try { + mCamera.setPreviewDisplay(holder); + mCamera.startPreview(); + } catch (Exception e){ + gLogger.error("Error starting camera previewe: " + e.getMessage()); + Toast.makeText(this, "Camera Error: " + e.getMessage(), Toast.LENGTH_LONG).show(); + } + */ } @Override @@ -341,12 +285,9 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal Log.e(TAG, "surfaceDestroyed"); } - private long encodeCount = 0; - private long count = 0; - private long previewTime; - // Camera.PreviewCallback @Override public void onPreviewFrame(final byte[] data, Camera camera){ + gLogger.error("onPreviewFrame"); /*if (null != mStreamTask){ switch (mStreamTask.getStatus()){ case RUNNING: @@ -359,21 +300,21 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal } } mStreamTask = new StreamTask(data); - mStreamTask.execute((Void)null);*/ - - - /*long endTime = System.currentTimeMillis(); - mExecutor.execute(new Runnable() { - @Override - public void run() { - long encodeTime = System.currentTimeMillis(); - ffmpeg.process(data); - Log.e(TAG, "编码第:" + (encodeCount++) + "帧,耗时:" + (System.currentTimeMillis() - encodeTime)); - } - }); - Log.e(TAG, "采集第:" + (++count) + "帧,距上一帧间隔时间:" - + (endTime - previewTime) + " " + Thread.currentThread().getName()); - previewTime = endTime;*/ + mStreamTask.execute((Void)null); +*/ + +// ong endTime = System.currentTimeMillis(); +// mExecutor.execute(new Runnable() { +// @Override +// public void run() { +// //long encodeTime = System.currentTimeMillis(); +// ffmpeg.process(data); + //Log.e(TAG, "编码第:" + (encodeCount++) + "帧,耗时:" + (System.currentTimeMillis() - encodeTime)); +// } +// }); + //Log.e(TAG, "采集第:" + (++count) + "帧,距上一帧间隔时间:" +// + (endTime - previewTime) + " " + Thread.currentThread().getName()); +// previewTime = endTime;*/ } @@ -386,33 +327,35 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal Camera c = null; try { Log.e(TAG, "Open Camera"); - c = Camera.open(0); - Camera.Parameters params = c.getParameters(); - Log.e(TAG, "Camera parameters: " + params.getPreviewSize().width + "x" + params.getPreviewSize().height); - Log.e(TAG, "Preview format (17 is NV21): " + params.getPreviewFormat() + ". Picture format(256 is JPEG): " + params.getPictureFormat()); - List fps = params.getSupportedPreviewFpsRange(); - for(int[] i : fps){ - Log.e(TAG, "### fps range : [" + i[0] + "," + i[1] + "]\n"); - } - - - - Camera.Parameters parameters = c.getParameters(); + c = Camera.open(1); + } catch (Exception e){ + e.printStackTrace(); + } + return c; + } - List sizes = parameters.getSupportedPictureSizes(); - for (Camera.Size cc : sizes){ - Log.e(TAG, "=== width: " + cc.width + ". height:" + cc.height); - } - Camera.Size cs = sizes.get(3); - //params.setPreviewSize(cs.width, cs.height); - params.setPictureSize(cs.width, cs.height); - //params.setPictureFormat(ImageFormat.NV21); - c.setParameters(params); + 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); } - catch (Exception e){ + 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(); } - return c; + //camera.setPreviewCallback(this); } private void switchToBackground(){ @@ -430,19 +373,42 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal private void loadConfig() { UserInfo info = UserInfo.getConfig(); - mTextServer.setText(info.server); - mTextUser.setText(info.user); - mTextCamera.setText(info.cameraId); - mMacAddr = info.macAddr; - gLogger.error("loadConfig " + info.toString()); + mTextServer.setText(info.server.equals("") ? "rtmp://gpussh.suanzi.ai:1935/myapp" : info.server); + mTextUser.setText(info.user.equals("") ? "suanzi" : info.user ); + mTextCamera.setText(info.cameraId.equals("") ? "001" : info.cameraId); + mMacAddr = info.macAddr.equals("") ? this.mMacAddr : info.macAddr; + gLogger.debug("loadConfig " + info.toString()); } private void saveConfig() { UserInfo info = UserInfo.getConfig(); info.update(mTextServer.getText().toString(), mTextUser.getText().toString(), mMacAddr, mTextCamera.getText().toString()); if(info.saveConfig()) { - gLogger.error("saveConfig: " + info.toString()); - Toast.makeText(getApplicationContext(), "Wring config succeed ", Toast.LENGTH_LONG).show(); + Toast.makeText(getApplicationContext(), "Config saved", Toast.LENGTH_LONG).show(); + } else { + Toast.makeText(getApplicationContext(), "Error: config saved", Toast.LENGTH_LONG).show(); + } + gLogger.error("saveConfig: " + info.toString()); + } + + 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(); } } }