diff --git a/app/src/main/java/net/ossrs/yasea/demo/MainActivity.java b/app/src/main/java/net/ossrs/yasea/demo/MainActivity.java index f71e8c9..7cae54e 100644 --- a/app/src/main/java/net/ossrs/yasea/demo/MainActivity.java +++ b/app/src/main/java/net/ossrs/yasea/demo/MainActivity.java @@ -106,9 +106,7 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL btnSwitchCamera.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (Camera.getNumberOfCameras() > 0) { - mPublisher.switchCameraFace((mPublisher.getCamraId() + 1) % Camera.getNumberOfCameras()); - } + mPublisher.switchCameraFace((mPublisher.getCamraId() + 1) % Camera.getNumberOfCameras()); } }); diff --git a/library/src/main/java/net/ossrs/yasea/SrsEncoder.java b/library/src/main/java/net/ossrs/yasea/SrsEncoder.java index 51797e7..93a1cb0 100644 --- a/library/src/main/java/net/ossrs/yasea/SrsEncoder.java +++ b/library/src/main/java/net/ossrs/yasea/SrsEncoder.java @@ -52,6 +52,7 @@ public class SrsEncoder { private boolean networkWeakTriggered = false; private boolean mCameraFaceFront = true; private boolean useSoftEncoder = false; + private boolean canSoftEncoder = false; private long mPresentTimeUs; @@ -113,8 +114,11 @@ public class SrsEncoder { setEncoderBitrate(vBitrate); setEncoderPreset(x264Preset); - if (useSoftEncoder && !openSoftEncoder()) { - return false; + if (useSoftEncoder) { + canSoftEncode = openSoftEncoder(); + if (!canSoftEncode) { + return false; + } } // aencoder pcm to aac raw stream. @@ -170,6 +174,7 @@ public class SrsEncoder { public void stop() { if (useSoftEncoder) { closeSoftEncoder(); + canSoftEncode = false; } if (aencoder != null) { @@ -195,11 +200,11 @@ public class SrsEncoder { mCameraFaceFront = false; } - public void swithToSoftEncoder() { + public void switchToSoftEncoder() { useSoftEncoder = true; } - public void swithToHardEncoder() { + public void switchToHardEncoder() { useSoftEncoder = false; } @@ -207,6 +212,18 @@ public class SrsEncoder { return useSoftEncoder; } + public boolean canHardEncode() { + return vencoder != null; + } + + public boolean canSoftEncode() { + return canSoftEncode; + } + + public boolean isEnabled() { + return canHardEncode() || canSoftEncode(); + } + public void setPreviewResolution(int width, int height) { vPrevWidth = width; vPrevHeight = height; diff --git a/library/src/main/java/net/ossrs/yasea/SrsPublisher.java b/library/src/main/java/net/ossrs/yasea/SrsPublisher.java index eef5bdc..32bbb59 100644 --- a/library/src/main/java/net/ossrs/yasea/SrsPublisher.java +++ b/library/src/main/java/net/ossrs/yasea/SrsPublisher.java @@ -144,12 +144,12 @@ public class SrsPublisher { } } - public void swithToSoftEncoder() { - mEncoder.swithToSoftEncoder(); + public void switchToSoftEncoder() { + mEncoder.switchToSoftEncoder(); } - public void swithToHardEncoder() { - mEncoder.swithToHardEncoder(); + public void switchToHardEncoder() { + mEncoder.switchToHardEncoder(); } public boolean isSoftEncoder() { @@ -207,14 +207,16 @@ public class SrsPublisher { } public void switchCameraFace(int id) { - mCameraView.setCameraId(id); - mCameraView.stopCamera(); - if (id == 0) { - mEncoder.setCameraBackFace(); - } else { - mEncoder.setCameraFrontFace(); + if (mEncoder.isEnabled()) { + mCameraView.stopCamera(); + mCameraView.setCameraId(id); + if (id == 0) { + mEncoder.setCameraBackFace(); + } else { + mEncoder.setCameraFrontFace(); + } + mCameraView.startCamera(); } - mCameraView.startCamera(); } private void startAudio() {