1.引用net.ossrs.yasea包
2.activity
public class PreviewActivity extends Activity implements RtmpHandler.RtmpListener,
SrsRecordHandler.SrsRecordListener, SrsEncodeHandler.SrsEncodeListener {
@BindView(R.id.iv_guanbi1)
ImageView ivGuanbi;
@BindView(R.id.iv_zhaopian)
ImageView ivZhaopian;
@BindView(R.id.tv_zhibobiaoti)
EditText tvZhibobiaoti;
@BindView(R.id.act_login_btn_login)
Button actLoginBtnLogin;
@BindView(R.id.tv_daojishi)
TextView tvDaojishi;
@BindView(R.id.rl_zhuanbei)
RelativeLayout rlzhunbei;
@BindView(R.id.kaishi_zhibo)
RelativeLayout kaishizhibo;
@BindView(R.id.civ_touxiang)
CircleImageView civTouxiang;
@BindView(R.id.tv_name)
TextView tvName;
@BindView(R.id.tv_guankan_renshu)
TextView tvGuankanRenshu;
@BindView(R.id.tv_guanzhu)
TextView tvGuanzhu;
@BindView(R.id.tv_zaixin_renshu)
TextView tvZaixinRenshu;
@BindView(R.id.zhibo_hlist_touxiang)
HorizontalListView hlistTouxiang;
@BindView(R.id.glsurfaceview_camera_1)
SrsCameraView mCameraView;
@BindView(R.id.pause)
Button pause;
@BindView(R.id.publish)
Button publish;
@BindView(R.id.record)
Button record;
@BindView(R.id.swEnc)
Button swEnc;
@BindView(R.id.url)
EditText url;
@BindView(R.id.swCam)
ImageView swCam;
@BindView(R.id.iv_guanbi_zhibo)
ImageView ivGuanbiZhibo;
@BindView(R.id.svgaImage)
SVGAImageView svgaImage;
private int time = 10;
private Timer timer;
private Timer timer1;
private int time1=3;
Unbinder unbinder1;
View view;
private boolean autoReconnect = true;
private boolean error;
private static String OOS_ACCESS_KEY;
private static String OOS_ACCESS_ID;
private static String OOS_ENDPOINT;
private static String BUCKET_NAME;
public static final int TAKE_PHOTO = 1;
public static final int CHOOSE_PHOTO = 2;
public static final int NAME = 3;
private static final int REQUEST_CODE = 10;
private String lujing;
private static final String TAG = "Yasea";
public final static int RC_CAMERA = 100;
private SharedPreferences sp;
private SrsPublisher mPublisher;
private String rtmpUrl;
private String recPath = Environment.getExternalStorageDirectory().getPath() + "/test.mp4";
private int mWidth = 1280;
private int mHeight = 720;
private boolean isPermissionGranted = false;
private String tupian, fangjianhao, fangjianmingchneg;
private ArrayList<String> keylist = new ArrayList<String>();
private ArrayList<String> viuelist = new ArrayList<String>();
private static final int CAMERA_PERMISSION_REQUEST_CODE = 100;
private PicAdapter adapter1;
private List<GuanZhuRenshuModel.DataBean.OnLinePeopleListBean> guankanlist = new ArrayList<>();
private Button btn_baocun;
private List<String> photoList;
private String xingbie;
private Uri imageUri;
private String mytoken;
private File finalFile;
String imageStr = "";
private String userId;
private Uri image;
private String gkrs, gzrs, uuid;
private String nicheng,type;
private TextView mTvStart;
private TextView mTvEnd;
private TextView mTvTime;
private int dianji;
private int recLen = 3;
private ServiceConnection mServiceConnection;
private static final int EXTERNAL_STORAGE_REQ_WRITE_EXTERNAL_STORAGE_CODE = 101;
private int yichang;
private NetWorkStateReceiver netWorkStateReceiver;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
// tvDaojishi.setText(time + "");
time--;
if (time <= 0) {
guankanrenshu();
guanzhushu();
}
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.activity_preview);
ButterKnife.bind(this);
SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
mytoken = sPreferences.getString("token", "");
uuid = sPreferences.getString("userid", "");
type=sPreferences.getString("type","");
if (type.equals("0")){
Intent intent=new Intent(PreviewActivity.this,ShiMing1Activity.class);
startActivity(intent);
finish();
}
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
huoqufangjian2();
// requestPermission();
initListView();
sp = getSharedPreferences("Yasea", MODE_PRIVATE);
rtmpUrl = sp.getString("rtmpUrl", rtmpUrl);
// initialize url.
// final EditText efu = (EditText) findViewById(R.id.url);
// efu.setText(rtmpUrl);
// initialize url.
final EditText efu = (EditText) findViewById(R.id.url);
// efu.setText(rtmpUrl);
pause.setEnabled(false);
mCameraView = (SrsCameraView) findViewById(R.id.glsurfaceview_camera_1);
mPublisher = new SrsPublisher(mCameraView);
个人资料();
NetworkManager.getInstance().registerObserver(this);
EventBus.getDefault().register(this);
JPushInterface.setDebugMode(true);//正式版的时候设置false,关闭调试
JPushInterface.init(PreviewActivity.this);
SVGAParser.Companion.shareParser().init(this);
netWorkStateReceiver = new NetWorkStateReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
detectNetWork();
}
};
}
protected void detectNetWork() {
if (!isConnected(this)) {
}
}
private void requestPermission() {
//1. 检查是否已经有该权限
if (Build.VERSION.SDK_INT >= 23 && (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)
!= PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED)) {
//2. 权限没有开启,请求权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE}, RC_CAMERA);
} else {
//权限已经开启,做相应事情
isPermissionGranted = true;
}
}
//3. 接收申请成功或者失败回调
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == RC_CAMERA) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//权限被用户同意,做相应的事情
isPermissionGranted = true;
} else {
//权限被用户拒绝,做相应的事情
finish();
}
}
}
private void init() {
mPublisher.setEncodeHandler(new SrsEncodeHandler(this));
mPublisher.setRtmpHandler(new RtmpHandler(this));
mPublisher.setRecordHandler(new SrsRecordHandler(this));
mPublisher.setPreviewResolution(mWidth, mHeight);
mPublisher.setOutputResolution(mHeight, mWidth); // 这里要和preview反过来
mPublisher.setVideoHDMode();
mPublisher.startCamera();
mCameraView.setCameraCallbacksHandler(new SrsCameraView.CameraCallbacksHandler() {
@Override
public void onCameraParameters(Camera.Parameters params) {
//params.setFocusMode("custom-focus");
//params.setWhiteBalance("custom-balance");
//etc...
}
});
}
@Override
protected void onStart() {
super.onStart();
requestPermission();
}
@Override
protected void onResume() {
super.onResume();
final Button btn = (Button) findViewById(R.id.publish);
btn.setEnabled(true);
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
Message msg = Message.obtain();
msg.what = 1;
handler.sendMessage(msg);
}
}, 0, 10000);
guankanrenshu();
guanzhushu();
mPublisher.resumeRecord();
registerReceiver(netWorkStateReceiver, new IntentFilter(
ConnectivityManager.CONNECTIVITY_ACTION));
}
@Override
protected void onPause() {
super.onPause();
mPublisher.pauseRecord();
try {
unregisterReceiver(netWorkStateReceiver);
} catch (Exception e) {
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (dianji==1) {
mPublisher.stopPublish();
mPublisher.stopRecord();
EventBus.getDefault().unregister(this);//反注册EventBus
NetworkManager.getInstance().unRegisterObserver(this);
}
// unregisterReceiver(netWorkStateReceiver);
}
public boolean isConnected(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
return (info != null && info.isConnected());
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mPublisher.stopEncode();
mPublisher.stopRecord();
record.setText("record");
mPublisher.setScreenOrientation(newConfig.orientation);
if (publish.getText().toString().contentEquals("stop")) {
mPublisher.startEncode();
}
mPublisher.startCamera();
}
private static String getRandomAlphaString(int length) {
String base = "abcdefghijklmnopqrstuvwxyz";
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}
private void handleException(Exception e) {
error = true;
try {
// Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
mPublisher.stopPublish();
mPublisher.stopRecord();
publish.setText("publish");
record.setText("record");
swEnc.setEnabled(true);
} catch (Exception e1) {
//
}
}
// Implementation of SrsRtmpListener.
@Override
public void onRtmpConnecting(String msg) {
Log.i(TAG, msg);
if (msg.equals(" Broken pipe")) {
}
}
@Override
public void onRtmpConnected(String msg) {
Log.i(TAG, msg);
if (msg.equals(" Broken pipe")) {
}
}
@Override
public void onRtmpVideoStreaming() {
}
@Override
public void onRtmpAudioStreaming() {
}
@Override
public void onRtmpStopped() {
Log.i(TAG, "Stopped");
}
@Override
public void onRtmpDisconnected() {
Log.i(TAG, "Disconnected");
}
@Override
public void onRtmpVideoFpsChanged(double fps) {
Log.i(TAG, String.format("Output Fps: %f", fps));
}
@Override
public void onRtmpVideoBitrateChanged(double bitrate) {
int rate = (int) bitrate;
if (rate / 1000 > 0) {
Log.i(TAG, String.format("Video bitrate: %f kbps", bitrate / 1000));
} else {
Log.i(TAG, String.format("Video bitrate: %d bps", rate));
}
}
@Override
public void onRtmpAudioBitrateChanged(double bitrate) {
int rate = (int) bitrate;
if (rate / 1000 > 0) {
Log.i(TAG, String.format("Audio bitrate: %f kbps", bitrate / 1000));
} else {
Log.i(TAG, String.format("Audio bitrate: %d bps", rate));
}
}
@Override
public void onRtmpSocketException(SocketException e) {
handleException(e);
}
@Override
public void onRtmpIOException(IOException e) {
handleException(e);
}
@Override
public void onRtmpIllegalArgumentException(IllegalArgumentException e) {
handleException(e);
}
@Override
public void onRtmpIllegalStateException(IllegalStateException e) {
handleException(e);
}
// Implementation of SrsRecordHandler.
@Override
public void onRecordPause() {
Log.i(TAG, "Record paused");
}
@Override
public void onRecordResume() {
Log.i(TAG, "Record resumed");
}
@Override
public void onRecordStarted(String msg) {
Log.i(TAG, "Recording file: " + msg);
}
@Override
public void onRecordFinished(String msg) {
Log.i(TAG, "MP4 file saved: " + msg);
}
@Override
public void onRecordIOException(IOException e) {
handleException(e);
}
@Override
public void onRecordIllegalArgumentException(IllegalArgumentException e) {
handleException(e);
}
// Implementation of SrsEncodeHandler.
@Override
public void onNetworkWeak() {
Log.i(TAG, "Network weak");
}
@Override
public void onNetworkResume() {
Log.i(TAG, "Network resume");
}
@Override
public void onEncodeIllegalArgumentException(IllegalArgumentException e) {
handleException(e);
}
public void guanbizhibo() {
SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
mytoken = sPreferences.getString("token", "");
OkGo.<String>post(HttpUtils.url + "/tel/live/closeRoom").headers("authorization", mytoken).execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
GuanbiZhiboModel userModel = new GuanbiZhiboModel();
userModel = new Gson().fromJson(response.body(), GuanbiZhiboModel.class);
if (userModel.getCode() == 1) {
Intent intent = new Intent(PreviewActivity.this, EndOfLiveBroadcast_2Activity.class);
intent.putExtra("jine", userModel.getData().getCoin() + "");
intent.putExtra("shijian", userModel.getData().getTime() + "");
intent.putExtra("renshu", userModel.getData().getPeopleCount() + "");
startActivity(intent);
finish();
} else if (userModel.getCode() == 401) {
SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
SharedPreferences.Editor edit = sPreferences.edit();
edit.putString("userid", "");
edit.putString("token", "");
edit.putString("name", "");
edit.commit();
finish();
ToastUtils.showToast("请重新登录");
startActivity(new Intent(PreviewActivity.this, LoginActivity.class));
} else {
ToastUtils.showToast(userModel.getMsg());
}
}
});
}
private void initListView() {
photoList = new ArrayList<>();
photoList.add("拍照");
photoList.add("从相册中选择");
}
private void gengxin() {
/**
* 验证码
*/
SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
mytoken = sPreferences.getString("token", "");
HashMap<String, String> hash = new HashMap<>();
hash.put("roomName", tvZhibobiaoti.getText().toString());
// finalFile.getAbsolutePath()
hash.put("roomPicUrl", lujing);
String str = new String();
str = new Gson().toJson(hash);
OkGo.<String>post(HttpUtils.url + "/tel/live/putRoomMsg").upJson(str).headers("authorization", mytoken).execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
User bank = new User();
bank = new Gson().fromJson(response.body(), User.class);
if (bank.getCode() == 1) {
TuiJianModel shouYeXiaoXiModel = new TuiJianModel();
shouYeXiaoXiModel = new Gson().fromJson(response.body().toString(), TuiJianModel.class);
if (shouYeXiaoXiModel.getCode() == 1) {
start_zhibo();
}
} else if (bank.getCode() == 401) {
SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
SharedPreferences.Editor edit = sPreferences.edit();
edit.putString("userid", "");
edit.putString("token", "");
edit.putString("name", "");
edit.commit();
finish();
ToastUtils.showToast("请重新登录");
startActivity(new Intent(PreviewActivity.this, LoginActivity.class));
} else {
Toast.makeText(PreviewActivity.this, bank.getMsg(), Toast.LENGTH_SHORT).show();
}
}
});
}
private void jieshu() {
mPublisher.stopPublish();
mPublisher.stopRecord();
}
private void kaishi() {
mPublisher.startPublish(rtmpUrl);
mPublisher.startCamera();
if (swEnc.getText().toString().contentEquals("soft encoder")) {
} else {
}
publish.setText("暂停");
swEnc.setEnabled(false);
publish.setEnabled(true);
}
@OnClick({R.id.iv_guanbi1, R.id.act_login_btn_login, R.id.iv_zhaopian, R.id.pause, R.id.publish, R.id.record, R.id.swEnc, R.id.iv_guanbi_zhibo, R.id.swCam})
public void onViewClicked(View view) {
SharedPreferences.Editor editor = sp.edit();
editor.putString("rtmpUrl", rtmpUrl);
editor.apply();
switch (view.getId()) {
case R.id.iv_guanbi1:
finish();
break;
case R.id.iv_zhaopian:
View photoView = View.inflate(PreviewActivity.this, R.layout.item_listview_dialog, null);//填充ListView布局
ListView listView = (ListView) photoView.findViewById(R.id.lv_item_listview_dialog);//初始化ListView控件
listView.setAdapter(new DialogListViewAdapter(PreviewActivity.this, photoList));//ListView设置适配器
final AlertDialog dialog = new AlertDialog.Builder(PreviewActivity.this)
.setView(photoView)//在这里把写好的这个listview的布局加载dialog中
.create();
dialog.show();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//响应listview中的item的点击事件
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
TextView tv = (TextView) arg1.findViewById(R.id.tv_item_listview_dialog_text);//取得每条item中的textview控件
String aiche = tv.getText().toString();
if ("拍照".equals(aiche)) {
File outputImage = new File(getExternalCacheDir(),
System.currentTimeMillis() + "output_image.jpg");
try {
if (outputImage.exists()) {
outputImage.delete();
}
outputImage.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
if (Build.VERSION.SDK_INT >= 23) {
imageUri = FileProvider.getUriForFile(PreviewActivity.this,
"com.qlyy.cloudanimal.fileprovider", outputImage);
} else {
//调用相机
imageUri = Uri.fromFile(outputImage);
}
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, TAKE_PHOTO);
} else if ("从相册中选择".equals(aiche)) {
Intent intent = new Intent("android.intent.action.GET_CONTENT");
intent.setType("image/*");
startActivityForResult(intent, CHOOSE_PHOTO);
}
dialog.dismiss();
}
});
break;
case R.id.act_login_btn_login:
if (tvZhibobiaoti.getText().toString().equals("请输入直播标题") || tvZhibobiaoti.getText().toString() == "" || tvZhibobiaoti.getText().toString() == null || tvZhibobiaoti.getText().toString().length() < 1) {
Toast.makeText(PreviewActivity.this, "请输入直播标题", Toast.LENGTH_SHORT).show();
return;
}
dianji = 1;
if (!Check.isFastClick()) {
Toast.makeText(PreviewActivity.this,"请勿频繁点击",Toast.LENGTH_SHORT).show();
return;
}
gengxin();
break;
case R.id.pause:
if (pause.getText().toString().equals("Pause")) {
mPublisher.pausePublish();
pause.setText("resume");
} else {
mPublisher.resumePublish();
pause.setText("Pause");
}
break;
case R.id.publish:
if (publish.getText().toString().equals("开始")) {
kaishi();
publish.setText("暂停");
} else if (publish.getText().toString().equals("暂停")) {
jieshu();
publish.setText("开始");
}
break;
case R.id.record:
if (record.getText().toString().contentEquals("record")) {
if (mPublisher.startRecord(recPath)) {
record.setText("pause");
}
} else if (record.getText().toString().contentEquals("pause")) {
mPublisher.pauseRecord();
record.setText("resume");
} else if (record.getText().toString().contentEquals("resume")) {
mPublisher.resumeRecord();
record.setText("pause");
}
break;
case R.id.swEnc:
if (swEnc.getText().toString().contentEquals("soft encoder")) {
mPublisher.switchToSoftEncoder();
swEnc.setText("hard encoder");
} else if (swEnc.getText().toString().contentEquals("hard encoder")) {
mPublisher.switchToHardEncoder();
swEnc.setText("soft encoder");
}
break;
case R.id.iv_guanbi_zhibo:
AlertDialog alertDialog = new AlertDialog.Builder(PreviewActivity.this)
.setTitle("提示")
.setMessage("小朋友正在赶来的路上 确认要退出吗?")
.setPositiveButton("继续退出", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO: 2018/4/16 positive
if (dianji == 1) {
mPublisher.stopPublish();
mPublisher.stopRecord();
guanbizhibo();
} else {
finish();
}
}
})
.setNegativeButton("再等等", new DialogInterface
.OnClickListener
() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO: 2018/4/16 negative
}
})
.create();
alertDialog.show();
alertDialog.getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(Color.GRAY);
alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).setTextColor(Color.RED);
break;
case R.id.swCam:
mPublisher.switchCameraFace((mPublisher.getCameraId() + 1) % Camera.getNumberOfCameras());
break;
}
}
private void guanzhushu() {
SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
mytoken = sPreferences.getString("token", "");
uuid = sPreferences.getString("userid", "");
OkGo.<String>get(HttpUtils.url + "/tel/userInfo/anchorCount" + "?anchorId=" + uuid).headers("authorization", mytoken).execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
ZhuboGuanzhu bank = new ZhuboGuanzhu();
bank = new Gson().fromJson(response.body(), ZhuboGuanzhu.class);
if (bank.getCode() == 1) {
Log.w("guanzhu", response.body());
if (bank.getData().getIsFollow() == 0) {
Default.geshu = "0";
} else {
Default.geshu = "1";
}
tvGuankanRenshu.setText(bank.getData().getFansCount() + "");
} else if (bank.getCode() == 401) {
SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
SharedPreferences.Editor edit = sPreferences.edit();
edit.putString("userid", "");
edit.putString("token", "");
edit.putString("name", "");
edit.commit();
finish();
ToastUtils.showToast("请重新登录");
startActivity(new Intent(PreviewActivity.this, LoginActivity.class));
} else {
Toast.makeText(PreviewActivity.this, bank.getMsg(), Toast.LENGTH_SHORT).show();
}
}
});
}
private void start_zhibo() {
SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
mytoken = sPreferences.getString("token", "");
HashMap<String, String> hash = new HashMap<>();
hash.put("registrationId", JPushInterface.getRegistrationID(PreviewActivity.this));
String str = new String();
str = new Gson().toJson(hash);
OkGo.<String>post(HttpUtils.url + "/tel/live/startRoom").headers("authorization", mytoken).upJson(str).execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
GuanZhuRenshuModel bank = new GuanZhuRenshuModel();
bank = new Gson().fromJson(response.body(), GuanZhuRenshuModel.class);
if (bank.getCode() == 1) {
init();
countDownTimer.start();
}
}
@Override
public void onError(Response<String> response) {
super.onError(response);
ToastUtils.showToast("网络不给力,获取数据失败");
}
});
}
private CountDownTimer countDownTimer = new CountDownTimer(3000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
String value = String.valueOf((int) (millisUntilFinished / 1000));
tvDaojishi.setText(value);
}
@Override
public void onFinish() {
tvDaojishi.setVisibility(View.GONE);
tvDaojishi.setVisibility(View.GONE);
mPublisher.startPublish(rtmpUrl);
publish.setText("暂停");
mPublisher.startCamera();
rlzhunbei.setVisibility(View.GONE);
kaishizhibo.setVisibility(View.VISIBLE);
if (swEnc.getText().toString().contentEquals("soft encoder")) {
} else {
}
swEnc.setEnabled(false);
pause.setEnabled(true);
}
};
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_CODE:
if (requestCode == Activity.RESULT_OK) {
try {
ScreenUtil.setUpData(resultCode, data);
ScreenUtil.getScreenRecordFilePath();
finalFile = new File(ScreenUtil.getScreenRecordFilePath());
} catch (Exception e) {
e.printStackTrace();
}
} else {
Toast.makeText(PreviewActivity.this, "拒绝录屏", Toast.LENGTH_SHORT).show();
}
break;
case TAKE_PHOTO:
if (resultCode == RESULT_OK) {
beginCrop(imageUri);
}
break;
case CHOOSE_PHOTO:
if (resultCode == RESULT_OK) {
if (Build.VERSION.SDK_INT >= 19) {
handleImageOnKatKit(data);
} else {
handleImageBeforKatKit(data);
}
}
break;
case NAME:
if (resultCode == RESULT_OK) {
String name = data.getStringExtra("name");
}
break;
case Crop.REQUEST_PICK:
if (resultCode == RESULT_OK) {
beginCrop(data.getData());
}
break;
case Crop.REQUEST_CROP:
handleCrop(resultCode, data);
break;
}
}
// 将裁剪回来的数据进行处理
private void handleCrop(int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
ivZhaopian.setImageURI(null);
Uri uri = Crop.getOutput(data);
try {
finalFile = new File(ImageUtils.saveBitmap(PreviewActivity.this, uri.getPath()));
image = Uri.fromFile(finalFile);
Picasso.with(PreviewActivity.this).load(image).into(ivZhaopian);
shangchuan();
Log.i("image", "finalFile=" + finalFile.getAbsolutePath());
} catch (Exception e) {
e.printStackTrace();
}
} else if (resultCode == Crop.RESULT_ERROR) {
}
}
private void shangchuan() {
SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
mytoken = sPreferences.getString("token", "");
OkGo.<String>post(HttpUtils.url + "/tel/file/upload").headers("authorization", mytoken).params("file", finalFile).isMultipart(true).execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
Map mapTypes = JSON.parseObject(response.body());
for (Object obj : mapTypes.keySet()) {
if (obj.equals("data")) {
System.out.println("key为:" + obj + "值为:" + mapTypes.get(obj));
Map mapTypes1 = JSON.parseObject(String.valueOf(mapTypes.get(obj)));
for (Object obj1 : mapTypes1.keySet()) {
System.out.println("key为:" + obj1 + "值为:" + mapTypes1.get(obj1));
lujing = mapTypes1.get(obj1).toString();
}
}
}
}
@Override
public void onError(Response<String> response) {
super.onError(response);
ToastUtils.showToast("网络不给力,获取数据失败");
}
});
//
}
// 开始裁剪
private void beginCrop(Uri uri) {
Uri destination = Uri.fromFile(new File(getCacheDir(), "cropped.jpg"));
// start() 方法根据其的需求选择不同的重载方法
Crop.of(uri, destination).withMaxSize(200,200).start(this);
}
private void handleImageBeforKatKit(Intent data) {
Uri uri = data.getData();
String imagePath = getImagePath(uri, null);
disPlayImage(imagePath);
}
@TargetApi(19)
private void handleImageOnKatKit(Intent data) {
String imagePath = null;
Uri uri = data.getData();
if (DocumentsContract.isDocumentUri(PreviewActivity.this, uri)) {
// 如果是Document类型的uri,则通过Document Id处理
String docId = DocumentsContract.getDocumentId(uri);
if ("com.android.providers.media.documents".equals(uri.getAuthority())) {
String id = docId.split(":")[1];
String selection = MediaStore.Images.Media._ID + "=" + id;
imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection);
} else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) {
Uri contentUri = ContentUris.withAppendedId(Uri.parse(
"content://downloads/public/_downloads"), Long.valueOf(docId));
imagePath = getImagePath(contentUri, null);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())) {
//如果是content类型的uri,则使用普通方式处理
imagePath = getImagePath(uri, null);
} else if ("file".equalsIgnoreCase(uri.getScheme())) {
//如果是file类型的uri,则直接获取图片路径即可
imagePath = uri.getPath();
}
disPlayImage(imagePath);
}
private void disPlayImage(String imagePath) {
if (imagePath != null) {
Uri uri = Uri.fromFile(new File(imagePath));
beginCrop(uri);
} else {
Toast.makeText(PreviewActivity.this, "图片选取失败", Toast.LENGTH_SHORT).show();
}
}
private String getImagePath(Uri uri, String selection) {
String path = null;
//通过uri和selection来获取图片的真是路径
Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
}
cursor.close();
}
return path;
}
private void 个人资料() {
SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
mytoken = sPreferences.getString("token", "");
OkGo.<String>get(HttpUtils.url + "/tel/userInfo/getUserInfo").headers("authorization", mytoken).execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
Log.e("login", response.body());
Map mapTypes = JSON.parseObject(response.body());
for (Object obj : mapTypes.keySet()) {
if (obj.equals("data")) {
System.out.println("key为:" + obj + "值为:" + mapTypes.get(obj));
Map mapTypes1 = JSON.parseObject(String.valueOf(mapTypes.get(obj)));
for (Object obj1 : mapTypes1.keySet()) {
System.out.println("key为:" + obj1 + "值为:" + mapTypes1.get(obj1));
keylist.add(obj1.toString());
viuelist.add(mapTypes1.get(obj1).toString());
}
for (int i = 0; i < keylist.size(); i++) {
if (keylist.get(i).equals("nickName")) {
nicheng = viuelist.get(i);
} else if (keylist.get(i).equals("headPic")) {
tupian = viuelist.get(i);
}
}
if (tupian == null || tupian == "") {
} else{
Picasso.with(PreviewActivity.this).load(tupian)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.networkPolicy(NetworkPolicy.NO_CACHE)
.error(R.mipmap.cehua_touxiang)
.into(civTouxiang);
}
if (nicheng.equals("") || nicheng == null) {
tvName.setText("请输入直播标题");
} else {
tvName.setText(nicheng);
}
}
}
}
@Override
public void onError(Response<String> response) {
super.onError(response);
ToastUtils.showToast("网络不给力,获取数据失败");
}
});
}
private void huoqufangjian2() {
SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
mytoken = sPreferences.getString("token", "");
OkGo.<String>get(HttpUtils.url + "/tel/live/getRoom" + "?type=ANDROID").headers("authorization", mytoken).execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
if (response.body().contains("\"data\":null")) {
Toast.makeText(PreviewActivity.this, "该用户无直播权限", Toast.LENGTH_SHORT).show();
} else {
Map mapTypes = JSON.parseObject(response.body());
for (Object obj : mapTypes.keySet()) {
if (obj.equals("data")) {
System.out.println("key为:" + obj + "值为:" + mapTypes.get(obj));
Map mapTypes1 = JSON.parseObject(String.valueOf(mapTypes.get(obj)));
for (Object obj1 : mapTypes1.keySet()) {
System.out.println("key为:" + obj1 + "值为:" + mapTypes1.get(obj1));
keylist.add(obj1.toString());
viuelist.add(mapTypes1.get(obj1).toString());
}
for (int i = 0; i < keylist.size(); i++) {
if (keylist.get(i).equals("roomPicUrl")) {
tupian = viuelist.get(i);
} else if (keylist.get(i).equals("roomNo")) {
fangjianhao = viuelist.get(i);
} else if (keylist.get(i).equals("onPublishUrl")) {
rtmpUrl = viuelist.get(i);
} else if (keylist.get(i).equals("roomName")) {
fangjianmingchneg = viuelist.get(i);
}
}
if (tupian != null || tupian != "") {
Picasso
.with(PreviewActivity.this)
.load(tupian)
.placeholder(PreviewActivity.this.getResources().getDrawable(R.mipmap.zhanwei))//图片加载中显示
.into(ivZhaopian);
}else {
Picasso
.with(PreviewActivity.this)
.load("111111")
.placeholder(PreviewActivity.this.getResources().getDrawable(R.mipmap.zhanwei))//图片加载中显示
.into(ivZhaopian);
}
Log.w("tuiliudizhi", rtmpUrl);
tvZhibobiaoti.setText(fangjianmingchneg);
tvName.setText(nicheng);
}
}
}
}
@Override
public void onError(Response<String> response) {
super.onError(response);
ToastUtils.showToast("网络连接失败");
}
});
}
//退出前询问
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
AlertDialog alertDialog = new AlertDialog.Builder(PreviewActivity.this)
.setTitle("提示")
.setMessage("小朋友正在赶来的路上 确认要退出吗?")
.setPositiveButton("继续退出", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO: 2018/4/16 positive
if (dianji == 1) {
mPublisher.stopPublish();
mPublisher.stopRecord();
guanbizhibo();
} else {
finish();
}
}
})
.setNegativeButton("再等等", new DialogInterface
.OnClickListener
() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO: 2018/4/16 negative
}
})
.create();
alertDialog.show();
alertDialog.getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(Color.GRAY);
alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).setTextColor(Color.RED);
return true;
}
return super.onKeyDown(keyCode, event);
}
private void guankanrenshu() {
/**
* 观看人数,关注人数
*/
SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
mytoken = sPreferences.getString("token", "");
uuid = sPreferences.getString("userid", "");
HashMap<String, String> hash = new HashMap<>();
hash.put("anchorId", uuid);
hash.put("roomNo", fangjianhao);
String str = new String();
str = new Gson().toJson(hash);
OkGo.<String>get(HttpUtils.url + "/tel/live/getRoomOnlineMsg" + "?anchorId=" + uuid + "&roomNo=" + fangjianhao).headers("authorization", mytoken).execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
GuanZhuRenshuModel bank = new GuanZhuRenshuModel();
bank = new Gson().fromJson(response.body(), GuanZhuRenshuModel.class);
if (bank.getCode() == 1) {
Log.w("22222", response.body());
tvZaixinRenshu.setText(bank.getData().getPeopleCount() + "");
guankanlist = bank.getData().getOnLinePeopleList();
adapter1 = new PicAdapter(PreviewActivity.this, R.layout.item_pic, guankanlist);
hlistTouxiang.setAdapter(adapter1);
} else if (bank.getCode() == 401) {
SharedPreferences sPreferences = getSharedPreferences("Login", MODE_PRIVATE);
SharedPreferences.Editor edit = sPreferences.edit();
edit.putString("userid", "");
edit.putString("token", "");
edit.putString("name", "");
edit.commit();
finish();
ToastUtils.showToast("请重新登录");
startActivity(new Intent(PreviewActivity.this, LoginActivity.class));
} else {
Toast.makeText(PreviewActivity.this, bank.getMsg(), Toast.LENGTH_SHORT).show();
}
}
});
}
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void onEvent2(TwoEvent event) {
svgaImage.setVisibility(View.VISIBLE);
String msg = event.getMsg();
try {
SVGAParser.Companion.shareParser().decodeFromURL(new URL(msg), new SVGAParser.ParseCompletion() {
@Override
public void onComplete(@NotNull SVGAVideoEntity videoItem) {
SVGADrawable drawable = new SVGADrawable(videoItem);
svgaImage.setImageDrawable(drawable);
svgaImage.startAnimation();
}
@Override
public void onError() {
}
});
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
@NetWork(netType = NetType.AUTO)
public void network(NetType netType) {
if(autoReconnect && error && NetworkUtils.isAvailable() ){
mPublisher.stopCamera();
publish();
error = false;
}
}
private void publish(){
mPublisher.startPublish(rtmpUrl);
mPublisher.startCamera();
}
}
本文介绍了在安卓平台上进行直播推流的实现过程,包括引入SRS客户端库net.ossrs.yasea,并详细讲解了如何在Activity中配置和使用推流功能。

8870

被折叠的 条评论
为什么被折叠?



