package com.laifeng.sopcastsdk.controller.video; import android.os.Build; import com.laifeng.sopcastsdk.configuration.VideoConfiguration; import com.laifeng.sopcastsdk.constant.SopCastConstant; import com.laifeng.sopcastsdk.controller.video.IVideoController; import com.laifeng.sopcastsdk.utils.SopCastLog; import com.laifeng.sopcastsdk.video.MyRecorder; import com.laifeng.sopcastsdk.video.MyRenderer; import com.laifeng.sopcastsdk.video.OnVideoEncodeListener; /** * @Title: CameraVideoController * @Package com.laifeng.sopcastsdk.controller.video * @Description: * @Author Jim * @Date 16/9/14 * @Time 下午12:54 * @Version */ public class CameraVideoController implements IVideoController { private MyRecorder mRecorder; private MyRenderer mRenderer; private VideoConfiguration mVideoConfiguration = VideoConfiguration.createDefault(); private OnVideoEncodeListener mListener; public CameraVideoController(MyRenderer renderer) { mRenderer = renderer; mRenderer.setVideoConfiguration(mVideoConfiguration); } public void setVideoConfiguration(VideoConfiguration configuration) { mVideoConfiguration = configuration; mRenderer.setVideoConfiguration(mVideoConfiguration); } public void setVideoEncoderListener(OnVideoEncodeListener listener) { mListener = listener; } public void start() { if(mListener == null) { return; } SopCastLog.d(SopCastConstant.TAG, "Start video recording"); mRecorder = new MyRecorder(mVideoConfiguration); mRecorder.setVideoEncodeListener(mListener); mRecorder.prepareEncoder(); mRenderer.setRecorder(mRecorder); } public void stop() { SopCastLog.d(SopCastConstant.TAG, "Stop video recording"); mRenderer.setRecorder(null); if(mRecorder != null) { mRecorder.setVideoEncodeListener(null); mRecorder.stop(); mRecorder = null; } } public void pause() { SopCastLog.d(SopCastConstant.TAG, "Pause video recording"); if(mRecorder != null) { mRecorder.setPause(true); } } public void resume() { SopCastLog.d(SopCastConstant.TAG, "Resume video recording"); if(mRecorder != null) { mRecorder.setPause(false); } } public boolean setVideoBps(int bps) { //重新设置硬编bps,在低于19的版本需要重启编码器 boolean result = false; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { //由于重启硬编编码器效果不好,此次不做处理 SopCastLog.d(SopCastConstant.TAG, "Bps need change, but MediaCodec do not support."); }else { if (mRecorder != null) { SopCastLog.d(SopCastConstant.TAG, "Bps change, current bps: " + bps); mRecorder.setRecorderBps(bps); result = true; } } return result; } }