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 53b34ac..0505712 100644 --- a/app/src/main/java/net/ossrs/yasea/demo/MainActivity.java +++ b/app/src/main/java/net/ossrs/yasea/demo/MainActivity.java @@ -37,6 +37,7 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL private Button btnSwitchCamera; private Button btnRecord; private Button btnSwitchEncoder; + private Button btnPause; private SharedPreferences sp; private String rtmpUrl = "rtmp://ossrs.net/" + getRandomAlphaString(3) + '/' + getRandomAlphaDigitString(5); @@ -66,6 +67,8 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL btnSwitchCamera = (Button) findViewById(R.id.swCam); btnRecord = (Button) findViewById(R.id.record); btnSwitchEncoder = (Button) findViewById(R.id.swEnc); + btnPause = (Button) findViewById(R.id.pause); + btnPause.setEnabled(false); mPublisher = new SrsPublisher((SrsCameraView) findViewById(R.id.glsurfaceview_camera)); mPublisher.setEncodeHandler(new SrsEncodeHandler(this)); @@ -95,12 +98,26 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL } btnPublish.setText("stop"); btnSwitchEncoder.setEnabled(false); + btnPause.setEnabled(true); } else if (btnPublish.getText().toString().contentEquals("stop")) { mPublisher.stopPublish(); mPublisher.stopRecord(); btnPublish.setText("publish"); btnRecord.setText("record"); btnSwitchEncoder.setEnabled(true); + btnPause.setEnabled(false); + } + } + }); + btnPause.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if(btnPause.getText().toString().equals("Pause")){ + mPublisher.pausePublish(); + btnPause.setText("resume"); + }else{ + mPublisher.resumePublish(); + btnPause.setText("Pause"); } } }); diff --git a/library/src/main/java/net/ossrs/yasea/SrsEncoder.java b/library/src/main/java/net/ossrs/yasea/SrsEncoder.java index 0703dd2..f9b5511 100644 --- a/library/src/main/java/net/ossrs/yasea/SrsEncoder.java +++ b/library/src/main/java/net/ossrs/yasea/SrsEncoder.java @@ -54,6 +54,7 @@ public class SrsEncoder { private boolean canSoftEncode = false; private long mPresentTimeUs; + private long mPausetime; private int mVideoColorFormat; @@ -170,6 +171,14 @@ public class SrsEncoder { return true; } + public void pause(){ + mPausetime = System.nanoTime() / 1000; + } + public void resume(){ + long resumeTime = (System.nanoTime() / 1000) - mPausetime; + mPresentTimeUs = mPresentTimeUs + resumeTime; + mPausetime = 0; + } public void stop() { if (useSoftEncoder) { closeSoftEncoder(); diff --git a/library/src/main/java/net/ossrs/yasea/SrsPublisher.java b/library/src/main/java/net/ossrs/yasea/SrsPublisher.java index 08daaca..8324440 100644 --- a/library/src/main/java/net/ossrs/yasea/SrsPublisher.java +++ b/library/src/main/java/net/ossrs/yasea/SrsPublisher.java @@ -159,6 +159,15 @@ public class SrsPublisher { stopCamera(); mEncoder.stop(); } + public void pauseEncode(){ + stopAudio(); + mCameraView.disableEncoding(); + mCameraView.stopTorch(); + } + private void resumeEncode() { + startAudio(); + mCameraView.enableEncoding(); + } public void startPublish(String rtmpUrl) { if (mFlvMuxer != null) { @@ -167,6 +176,12 @@ public class SrsPublisher { startEncode(); } } + public void resumePublish(){ + if(mFlvMuxer != null) { + mEncoder.resume(); + resumeEncode(); + } + } public void stopPublish() { if (mFlvMuxer != null) { @@ -175,6 +190,12 @@ public class SrsPublisher { } } + public void pausePublish(){ + if (mFlvMuxer != null) { + mEncoder.pause(); + pauseEncode(); + } + } public boolean startRecord(String recPath) { return mMp4Muxer != null && mMp4Muxer.record(new File(recPath)); }