From a36039093adb4f30beba920bcf7b7d3dba48c30a Mon Sep 17 00:00:00 2001 From: Leo Ma Date: Wed, 1 Feb 2017 13:29:44 +0800 Subject: [PATCH] Settle API Signed-off-by: Leo Ma --- .../java/net/ossrs/yasea/SrsCameraView.java | 6 +- .../java/net/ossrs/yasea/SrsPublisher.java | 104 ++++++++---------- 2 files changed, 52 insertions(+), 58 deletions(-) diff --git a/library/src/main/java/net/ossrs/yasea/SrsCameraView.java b/library/src/main/java/net/ossrs/yasea/SrsCameraView.java index ede716d..a09479c 100644 --- a/library/src/main/java/net/ossrs/yasea/SrsCameraView.java +++ b/library/src/main/java/net/ossrs/yasea/SrsCameraView.java @@ -218,7 +218,7 @@ public class SrsCameraView extends GLSurfaceView implements GLSurfaceView.Render return mCamId; } - public void enableEncoding() { + private void enableEncoding() { worker = new Thread(new Runnable() { @Override public void run() { @@ -244,7 +244,7 @@ public class SrsCameraView extends GLSurfaceView implements GLSurfaceView.Render mIsEncoding = true; } - public void disableEncoding() { + private void disableEncoding() { mIsEncoding = false; mGLIntBufferCache.clear(); @@ -268,6 +268,8 @@ public class SrsCameraView extends GLSurfaceView implements GLSurfaceView.Render } } + enableEncoding(); + Camera.Parameters params = mCamera.getParameters(); List supportedFocusModes = params.getSupportedFocusModes(); diff --git a/library/src/main/java/net/ossrs/yasea/SrsPublisher.java b/library/src/main/java/net/ossrs/yasea/SrsPublisher.java index bd44f1a..60f0d9b 100644 --- a/library/src/main/java/net/ossrs/yasea/SrsPublisher.java +++ b/library/src/main/java/net/ossrs/yasea/SrsPublisher.java @@ -18,7 +18,6 @@ public class SrsPublisher { private static AcousticEchoCanceler aec; private static AutomaticGainControl agc; private byte[] mPcmBuffer = new byte[4096]; - private boolean aloop = false; private Thread aworker; private SrsCameraView mCameraView; @@ -67,11 +66,7 @@ public class SrsPublisher { mCameraView.stopCamera(); } - public void startEncode() { - if (!mEncoder.start()) { - return; - } - + public void startAudio() { mic = mEncoder.chooseAudioRecord(); if (mic == null) { return; @@ -91,19 +86,62 @@ public class SrsPublisher { } } - mCameraView.enableEncoding(); - aworker = new Thread(new Runnable() { @Override public void run() { android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_AUDIO); - startAudio(); + mic.startRecording(); + while (!Thread.interrupted()) { + int size = mic.read(mPcmBuffer, 0, mPcmBuffer.length); + if (size <= 0) { + break; + } + mEncoder.onGetPcmFrame(mPcmBuffer, size); + } } }); - aloop = true; aworker.start(); } + public void stopAudio() { + if (aworker != null) { + aworker.interrupt(); + try { + aworker.join(); + } catch (InterruptedException e) { + aworker.interrupt(); + } + aworker = null; + } + + if (mic != null) { + mic.setRecordPositionUpdateListener(null); + mic.stop(); + mic.release(); + mic = null; + } + + if (aec != null) { + aec.setEnabled(false); + aec.release(); + aec = null; + } + + if (agc != null) { + agc.setEnabled(false); + agc.release(); + agc = null; + } + } + + public void startEncode() { + if (!mEncoder.start()) { + return; + } + + startAudio(); + } + public void stopEncode() { stopAudio(); stopCamera(); @@ -218,56 +256,10 @@ public class SrsPublisher { } else { mEncoder.setCameraFrontFace(); } - mCameraView.enableEncoding(); mCameraView.startCamera(); } } - private void startAudio() { - if (mic != null) { - mic.startRecording(); - while (aloop && !Thread.interrupted()) { - int size = mic.read(mPcmBuffer, 0, mPcmBuffer.length); - if (size <= 0) { - break; - } - mEncoder.onGetPcmFrame(mPcmBuffer, size); - } - } - } - - private void stopAudio() { - aloop = false; - if (aworker != null) { - aworker.interrupt(); - try { - aworker.join(); - } catch (InterruptedException e) { - aworker.interrupt(); - } - aworker = null; - } - - if (mic != null) { - mic.setRecordPositionUpdateListener(null); - mic.stop(); - mic.release(); - mic = null; - } - - if (aec != null) { - aec.setEnabled(false); - aec.release(); - aec = null; - } - - if (agc != null) { - agc.setEnabled(false); - agc.release(); - agc = null; - } - } - public void setRtmpHandler(RtmpHandler handler) { mFlvMuxer = new SrsFlvMuxer(handler); if (mEncoder != null) {