package com.laifeng.sopcastdemo;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.laifeng.sopcastsdk.configuration.AudioConfiguration;
import com.laifeng.sopcastsdk.configuration.VideoConfiguration;
import com.laifeng.sopcastsdk.stream.packer.rtmp.RtmpPacker;
import com.laifeng.sopcastsdk.screen.ScreenRecordActivity;
import com.laifeng.sopcastsdk.stream.sender.rtmp.RtmpSender;
import com.laifeng.sopcastsdk.utils.SopCastLog;
import static com.laifeng.sopcastsdk.constant.SopCastConstant.TAG;
public class ScreenActivity extends ScreenRecordActivity {
private Button mStartBtn;
private Button mStopBtn;
private RtmpSender mRtmpSender;
private ProgressBar mProgressConnecting;
private VideoConfiguration mVideoConfiguration;
private int mCurrentBps;
private Dialog mUploadDialog;
private EditText mAddressET;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen);
initViews();
initSender();
initRtmpAddressDialog();
}
private void initViews() {
mStartBtn = (Button) findViewById(R.id.startRecord);
mStopBtn = (Button) findViewById(R.id.stopRecord);
mProgressConnecting = (ProgressBar) findViewById(R.id.progressConnecting);
mStartBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mUploadDialog.show();
}
});
mStopBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mProgressConnecting.setVisibility(View.GONE);
Toast.makeText(ScreenActivity.this, "stop living", Toast.LENGTH_SHORT).show();
stopRecording();
}
});
}
private void initRtmpAddressDialog() {
LayoutInflater inflater = getLayoutInflater();
View playView = inflater.inflate(R.layout.address_dialog,(ViewGroup) findViewById(R.id.dialog));
mAddressET = (EditText) playView.findViewById(R.id.address);
Button okBtn = (Button) playView.findViewById(R.id.ok);
Button cancelBtn = (Button) playView.findViewById(R.id.cancel);
AlertDialog.Builder uploadBuilder = new AlertDialog.Builder(this);
uploadBuilder.setTitle("Upload Address");
uploadBuilder.setView(playView);
mUploadDialog = uploadBuilder.create();
okBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String uploadUrl = mAddressET.getText().toString();
if(TextUtils.isEmpty(uploadUrl)) {
Toast.makeText(ScreenActivity.this, "Upload address is empty!", Toast.LENGTH_SHORT).show();
} else {
mRtmpSender.setAddress(uploadUrl);
requestRecording();
}
mUploadDialog.dismiss();
}
});
cancelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mUploadDialog.dismiss();
}
});
}
private void initSender() {
mRtmpSender = new RtmpSender();
mRtmpSender.setVideoParams(640, 360);
mRtmpSender.setAudioParams(AudioConfiguration.DEFAULT_FREQUENCY, 16, false);
mRtmpSender.setSenderListener(mSenderListener);
}
@Override
protected void requestRecordSuccess() {
super.requestRecordSuccess();
initRecorder();
connectServer();
}
private void initRecorder() {
RtmpPacker packer = new RtmpPacker();
packer.initAudioParams(AudioConfiguration.DEFAULT_FREQUENCY, 16, false);
mVideoConfiguration = new VideoConfiguration.Builder().setSize(640, 360).build();
setVideoConfiguration(mVideoConfiguration);
setRecordPacker(packer);
setRecordSender(mRtmpSender);
}
private void connectServer() {
mProgressConnecting.setVisibility(View.VISIBLE);
Toast.makeText(ScreenActivity.this, "start to connect server", Toast.LENGTH_SHORT).show();
mRtmpSender.connect();
}
private RtmpSender.OnSenderListener mSenderListener = new RtmpSender.OnSenderListener() {
@Override
public void onConnecting() {
}
@Override
public void onConnected() {
mProgressConnecting.setVisibility(View.GONE);
Toast.makeText(ScreenActivity.this, "start to upload data", Toast.LENGTH_SHORT).show();
startRecording();
mCurrentBps = mVideoConfiguration.maxBps;
}
@Override
public void onDisConnected() {
mProgressConnecting.setVisibility(View.GONE);
Toast.makeText(ScreenActivity.this, "Disconnect", Toast.LENGTH_SHORT).show();
stopRecording();
}
@Override
public void onPublishFail() {
mProgressConnecting.setVisibility(View.GONE);
Toast.makeText(ScreenActivity.this, "Fail to publish the stream", Toast.LENGTH_SHORT).show();
}
@Override
public void onNetGood() {
if (mCurrentBps + 50 <= mVideoConfiguration.maxBps){
SopCastLog.d(TAG, "BPS_CHANGE good up 50");
int bps = mCurrentBps + 50;
boolean result = setRecordBps(bps);
if(result) {
mCurrentBps = bps;
}
} else {
SopCastLog.d(TAG, "BPS_CHANGE good good good");
}
SopCastLog.d(TAG, "Current Bps: " + mCurrentBps);
}
@Override
public void onNetBad() {
if (mCurrentBps - 100 >= mVideoConfiguration.minBps){
SopCastLog.d(TAG, "BPS_CHANGE bad down 100");
int bps = mCurrentBps - 100;
boolean result = setRecordBps(bps);
if(result) {
mCurrentBps = bps;
}
} else {
SopCastLog.d(TAG, "BPS_CHANGE bad down 100");
}
SopCastLog.d(TAG, "Current Bps: " + mCurrentBps);
}
};
}