X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fai%2Fsuanzi%2Frtmpclient%2FMyService.java;h=0e99b888a82bb14c624c331c29585391af8aaa9f;hb=d1a43ff97228c10a4eaef604bd40eb8be3fcf8f6;hp=2d49e9c6b19b47872a2b273d618397a7c3357198;hpb=679195d4e27980faf7fd4ef577301b005ab054f1;p=rtmpclient.git diff --git a/app/src/main/java/ai/suanzi/rtmpclient/MyService.java b/app/src/main/java/ai/suanzi/rtmpclient/MyService.java index 2d49e9c..0e99b88 100644 --- a/app/src/main/java/ai/suanzi/rtmpclient/MyService.java +++ b/app/src/main/java/ai/suanzi/rtmpclient/MyService.java @@ -25,8 +25,7 @@ public class MyService extends Service implements Camera.PreviewCallback, Camer private long frameCount = 0; // Preferred picture Size of the camera; - private int width = 0; - private int height = 0; + private Camera.Size mPreferredSize; private MyServiceEventListener mListener; @@ -42,7 +41,7 @@ public class MyService extends Service implements Camera.PreviewCallback, Camer public Camera getCameraInstance() { if (mCamera == null) { - CameraHandlerThread mThread = new CameraHandlerThread("camera thread"); + CameraHandlerThread mThread = new CameraHandlerThread("ThreadCamera"); synchronized (mThread) { mThread.openCamera(); } @@ -71,7 +70,8 @@ public class MyService extends Service implements Camera.PreviewCallback, Camer } if(frontId != -1) camerId = frontId; else if(backId != -1) camerId = backId; - mCamera = Camera.open(camerId); + gLogger.debug("openCameraOriginal - camera id " + camerId); + mCamera = Camera.open(1); } catch (Exception e) { gLogger.error("openCameraOriginal - camera is not available. error: " + e.getMessage()); if(mListener != null) mListener.onCameraError("openCamera - error: " + e.getMessage()); @@ -90,6 +90,7 @@ public class MyService extends Service implements Camera.PreviewCallback, Camer synchronized void notifyCameraOpened() { notify(); + gLogger.debug("notifyCameraOpened"); } void openCamera() { @@ -148,8 +149,15 @@ public class MyService extends Service implements Camera.PreviewCallback, Camer gLogger.error( "onDestroy --------->"); Toast.makeText(this, "MyService Stopped", Toast.LENGTH_LONG).show(); if(mCamera != null){ - mCamera.stopPreview(); - mCamera.release(); + try { + mCamera.stopPreview(); + mCamera.setPreviewCallback(null); + mCamera.release(); + mCamera = null; + } catch (Exception e){ + gLogger.error("onDestroy - error " + e.getMessage()); + e.printStackTrace(); + } } } @@ -186,7 +194,12 @@ public class MyService extends Service implements Camera.PreviewCallback, Camer public void startPreview (SurfaceHolder holder){ gLogger.debug("startPreview"); + if(mCamera == null){ + gLogger.error("startPreview - error: camera is null"); + return; + } try { + mCamera.setPreviewCallback(this); mCamera.setPreviewDisplay(holder); mCamera.startPreview(); } catch (Exception e){ @@ -197,22 +210,29 @@ public class MyService extends Service implements Camera.PreviewCallback, Camer } public void reopenCamera() { + gLogger.debug("reopenCamera"); if(mCamera != null){ mCamera.stopPreview(); mCamera.release(); + mCamera = null; } openCameraOriginal(); } public boolean setRtmpUrl (String url){ - //this.rtmpUrl = url; - if(mCamera == null) return false; - gLogger.error("setRtmpUrl - size: " + width + "x" + height + ". url: " + url); - int ret = FfmpegHelper.initEncoder(width, height, url); + if(mCamera == null) { + gLogger.error("setRtmpUrl mCamera is null"); + return false; + } else if (mPreferredSize == null) { + gLogger.error("setRtmpUrl mPreferredSize is null"); + return false; + } + gLogger.error("setRtmpUrl - size: " + mPreferredSize.width + "x" + mPreferredSize.height + ". url: " + url); + int ret = FfmpegHelper.initEncoder(mPreferredSize.width, mPreferredSize.height, url); if(ret != 0){ gLogger.error("setRtmpUrl, initEncoder error"); } - return ret == 0 ? true : false; + return ret == 0; } private void configCamera(Camera camera){ @@ -235,8 +255,7 @@ public class MyService extends Service implements Camera.PreviewCallback, Camer for(int[] i : paras.getSupportedPreviewFpsRange()){ gLogger.error("[" + i[0] + "," + i[1] + "]"); } - width = preferredSize.width; - height = preferredSize.height; + mPreferredSize = preferredSize; paras.setPictureSize(preferredSize.width, preferredSize.height); // use 640x480 preferred camera.setParameters(paras); camera.setDisplayOrientation(0); @@ -245,6 +264,10 @@ public class MyService extends Service implements Camera.PreviewCallback, Camer camera.setPreviewCallback(this); } + public Camera.Size getBestPictureSize(){ + return mPreferredSize; + } + // Camaer.onError callback @Override public void onError(int error, Camera camera){