Settle API

Signed-off-by: Leo Ma <begeekmyfriend@gmail.com>
camera2
Leo Ma 8 years ago
parent 2cfb8336ab
commit a36039093a

@ -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<String> supportedFocusModes = params.getSupportedFocusModes();

@ -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) {

Loading…
Cancel
Save