package com.laifeng.sopcastdemo; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.widget.ImageButton; import android.widget.Toast; import com.laifeng.sopcastdemo.ui.MultiToggleImageButton; import com.laifeng.sopcastsdk.camera.CameraListener; import com.laifeng.sopcastsdk.configuration.AudioConfiguration; import com.laifeng.sopcastsdk.entity.Watermark; import com.laifeng.sopcastsdk.entity.WatermarkPosition; import com.laifeng.sopcastsdk.stream.packer.flv.FlvPacker; import com.laifeng.sopcastsdk.stream.sender.local.LocalSender; import com.laifeng.sopcastsdk.ui.CameraLivingView; import com.laifeng.sopcastsdk.utils.SopCastLog; import com.laifeng.sopcastsdk.video.effect.GrayEffect; import com.laifeng.sopcastsdk.video.effect.NullEffect; public class PortraitActivity extends Activity { private CameraLivingView mLFLiveView; private MultiToggleImageButton mMicBtn; private MultiToggleImageButton mFlashBtn; private MultiToggleImageButton mFaceBtn; private MultiToggleImageButton mBeautyBtn; private MultiToggleImageButton mFocusBtn; private GestureDetector mGestureDetector; private GrayEffect mGrayEffect; private NullEffect mNullEffect; private ImageButton mRecordBtn; private boolean isGray; private boolean isRecording; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_portrait); initEffects(); initViews(); initListeners(); initLiveView(); } private void initEffects() { mGrayEffect = new GrayEffect(this); mNullEffect = new NullEffect(this); } private void initViews() { mLFLiveView = (CameraLivingView) findViewById(R.id.liveView); mMicBtn = (MultiToggleImageButton) findViewById(R.id.record_mic_button); mFlashBtn = (MultiToggleImageButton) findViewById(R.id.camera_flash_button); mFaceBtn = (MultiToggleImageButton) findViewById(R.id.camera_switch_button); mBeautyBtn = (MultiToggleImageButton) findViewById(R.id.camera_render_button); mFocusBtn = (MultiToggleImageButton) findViewById(R.id.camera_focus_button); mRecordBtn = (ImageButton) findViewById(R.id.btnRecord); } private void initListeners() { mMicBtn.setOnStateChangeListener(new MultiToggleImageButton.OnStateChangeListener() { @Override public void stateChanged(View view, int state) { mLFLiveView.mute(true); } }); mFlashBtn.setOnStateChangeListener(new MultiToggleImageButton.OnStateChangeListener() { @Override public void stateChanged(View view, int state) { mLFLiveView.switchTorch(); } }); mFaceBtn.setOnStateChangeListener(new MultiToggleImageButton.OnStateChangeListener() { @Override public void stateChanged(View view, int state) { mLFLiveView.switchCamera(); } }); mBeautyBtn.setOnStateChangeListener(new MultiToggleImageButton.OnStateChangeListener() { @Override public void stateChanged(View view, int state) { if(isGray) { mLFLiveView.setEffect(mNullEffect); isGray = false; } else { mLFLiveView.setEffect(mGrayEffect); isGray = true; } } }); mFocusBtn.setOnStateChangeListener(new MultiToggleImageButton.OnStateChangeListener() { @Override public void stateChanged(View view, int state) { mLFLiveView.switchFocusMode(); } }); mRecordBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(isRecording) { mRecordBtn.setBackgroundResource(R.mipmap.ic_record_start); mLFLiveView.stop(); isRecording = false; } else { mRecordBtn.setBackgroundResource(R.mipmap.ic_record_stop); mLFLiveView.start(); isRecording = true; } } }); } private void initLiveView() { SopCastLog.isOpen(true); mLFLiveView.init(); //设置预览监听 mLFLiveView.setCameraOpenListener(new CameraListener() { @Override public void onOpenSuccess() { Toast.makeText(PortraitActivity.this, "摄像头开启成功", Toast.LENGTH_LONG).show(); } @Override public void onOpenFail(int error) { Toast.makeText(PortraitActivity.this, "摄像头开启失败", Toast.LENGTH_LONG).show(); } @Override public void onCameraChange() { Toast.makeText(PortraitActivity.this, "摄像头切换", Toast.LENGTH_LONG).show(); } }); //设置水印 Bitmap watermarkImg = BitmapFactory.decodeResource(getResources(), R.mipmap.watermark); Watermark watermark = new Watermark(watermarkImg, 50, 25, WatermarkPosition.WATERMARK_ORIENTATION_BOTTOM_RIGHT, 8, 8); mLFLiveView.setWatermark(watermark); //初始化flv打包器 FlvPacker packer = new FlvPacker(); packer.initAudioParams(AudioConfiguration.DEFAULT_FREQUENCY, 16, false); packer.initVideoParams(360, 640, 24); mLFLiveView.setPacker(packer); //设置发送器 mLFLiveView.setSender(new LocalSender()); //设置手势识别 mGestureDetector = new GestureDetector(this, new GestureListener()); mLFLiveView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { mGestureDetector.onTouchEvent(event); return false; } }); } public class GestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (e1.getX() - e2.getX() > 100 && Math.abs(velocityX) > 200) { // Fling left Toast.makeText(PortraitActivity.this, "Fling Left", Toast.LENGTH_SHORT).show(); } else if (e2.getX() - e1.getX() > 100 && Math.abs(velocityX) > 200) { // Fling right Toast.makeText(PortraitActivity.this, "Fling Right", Toast.LENGTH_SHORT).show(); } return super.onFling(e1, e2, velocityX, velocityY); } } @Override protected void onStop() { super.onStop(); mLFLiveView.pause(); } @Override protected void onStart() { super.onStart(); mLFLiveView.resume(); } @Override protected void onDestroy() { super.onDestroy(); mLFLiveView.stop(); mLFLiveView.release(); } }