liuzhenxing1118 5 месяцев назад
Родитель
Сommit
3bfbafc1ca

+ 38 - 88
app/src/main/java/com/sikey/skvideo/activity/MainActivity.java

@@ -9,6 +9,7 @@ import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.util.Log;
+import android.view.SurfaceView;
 import android.view.View;
 import android.widget.Button;
 import android.widget.ImageButton;
@@ -24,6 +25,7 @@ import com.juphoon.cloud.JCMediaDeviceVideoCanvas;
 import com.sikey.skvideo.R;
 import com.sikey.skvideo.manager.DataManager;
 import com.sikey.skvideo.manager.DatabaseUtils;
+import com.sikey.skvideo.manager.JuphoonManager;
 import com.sikey.skvideo.manager.MediaPlayerUtils;
 import com.sikey.skvideo.manager.VideoManager;
 import com.sikey.skvideo.model.ContactBean;
@@ -39,12 +41,9 @@ import java.util.TimerTask;
 public class MainActivity extends BaseActivity implements Listener.VideoListener {
     public final String TAG = "losion / skvideo :" + getClass().getSimpleName();
 
-    public VideoManager mVideoManager = new VideoManager();
+    public JuphoonManager mJuphoonManager = new JuphoonManager();
     public MediaPlayerUtils mMediaPlayerUtils = new MediaPlayerUtils();
 
-    private JCMediaDeviceVideoCanvas mLocalCanvas = null;
-    private JCMediaDeviceVideoCanvas mRemoteCanvas = null;
-
     private RelativeLayout mVideoLayout = null;
     private RelativeLayout mLoadingLayout = null;
     private RelativeLayout mInfoLayout = null;
@@ -137,7 +136,7 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
             videoEndStep1();
         });
         answerInBtn.setOnClickListener(v -> {
-            mVideoManager.answer();
+            mJuphoonManager.answer();
         });
         voiceIngBtn.setOnClickListener(v -> {
 
@@ -153,7 +152,7 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
     private void initVideoManager() {
         Log.d(TAG, "initVideoManager: ");
         String userId = DataManager.getWatchTicket(this);
-        mVideoManager.init(this, userId);
+        mJuphoonManager.init(this, userId);
     }
 
     protected void refreshInfo() {
@@ -212,13 +211,12 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
         Log.d(TAG, "onLoginCallback: " + isOK);
         //呼出
         if (isOK && mVideoType == Constant.VIDEO_CALL_OUT) {
-            mVideoManager.call(mTargetId);
+            mJuphoonManager.call(mTargetId);
         }
     }
 
     @Override
-    public void onCallItemAdd(JCCallItem item) {
-        Log.d(TAG, "onCallItemAdd: ");
+    public void onEnterRoom() {
         mLoadingLayout.setVisibility(View.GONE);
         mInfoLayout.setVisibility(View.VISIBLE);
 
@@ -229,95 +227,45 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
     }
 
     @Override
-    public void onCallItemUpdate() {
-        List<JCCallItem> callItems = mVideoManager.mCall.getCallItems();
-        if (callItems.size() <= 0)
-            return;
-        JCCallItem item = mVideoManager.getActiveCall();
-        if (item == null)
-            return;
-
-        int state = item.getState();
-        Log.d(TAG, "updateLayout: " + state);
-        updateLayout_info(item);
-        if (state == JCCall.STATE_INIT || state == JCCall.STATE_PENDING) {
-            updateLayout_pending(item);
-        } else if (state == JCCall.STATE_CONNECTING) {
-            mHintText.setText(R.string.connecting);
-        } else if (state == JCCall.STATE_TALKING) {
-            updateLayout_talking(item);
-        }
-    }
+    public void onPending(SurfaceView view) {
+        startTimeoutTimer();
+        mVideoLayout.addView(view, 0);
+        mVideoLayout.setVisibility(View.VISIBLE);
 
-    private void updateLayout_info(JCCallItem item) {
-        int state = item.getState();
-        if (state == JCCall.STATE_INIT || state == JCCall.STATE_PENDING) {
-            if (item.getDirection() == JCCall.DIRECTION_OUT) {
-                refreshView(1);
-            } else {
-                refreshView( 2);
-            }
+        if (mVideoType == Constant.VIDEO_CALL_OUT) {
+            refreshView(1);
         } else {
-            refreshView(10);
+            refreshView( 2);
         }
     }
 
-    private void updateLayout_pending(JCCallItem item) {
-        boolean isL = mLocalCanvas == null;
-        boolean isU = item.getUploadVideoStreamSelf();
-        Log.d(TAG, "updateLayout_pending: " + " isL:" + isL + " isU:" + isU);
-        if (mLocalCanvas == null && item.getUploadVideoStreamSelf()) {
-            mLocalCanvas = mVideoManager.mMediaDevice.startCameraVideo(JCMediaDevice.RENDER_FULL_SCREEN);
-            startTimeoutTimer();
-            if (mLocalCanvas != null) {
-                Log.d(TAG, "updateLayout_pending: not null");
-                mLocalCanvas.getVideoView().setZOrderMediaOverlay(true);
-                mLocalCanvas.getVideoView().setId(View.generateViewId());
-                mVideoLayout.addView(mLocalCanvas.getVideoView(), 0);
-                mVideoLayout.setVisibility(View.VISIBLE);
-            }
-        }
+    @Override
+    public void onConnecting() {
+        mHintText.setText(R.string.connecting);
     }
 
-    private void updateLayout_talking(JCCallItem item) {
-        Log.d(TAG, "updateLayout_talking: ");
-        if (mLocalCanvas != null) {
-            mVideoLayout.removeView(mLocalCanvas.getVideoView());
-            mLocalCanvas = null;
-        }
-        if (mRemoteCanvas == null && item.getUploadVideoStreamOther()) {
-            stopTimeoutTimer();
-            startTalkingTimer();
-            mMediaPlayerUtils.stopSound();
-            mVideoManager.mMediaDevice.enableSpeaker(true);
-            mRemoteCanvas = mVideoManager.mMediaDevice.startVideo(item.getRenderId(), JCMediaDevice.RENDER_FULL_CONTENT);
-            if (mRemoteCanvas != null) {
-                mRemoteCanvas.getVideoView().setId(View.generateViewId());
-                mVideoLayout.addView(mRemoteCanvas.getVideoView(), 0);
-            }
-        }
-    }
+    @Override
+    public void onTalking(SurfaceView view) {
+        mVideoLayout.removeAllViews();
+        mVideoLayout.addView(view, 0);
 
-    private void removeCanvas() {
-        Log.d(TAG, "removeCanvas: ");
-        if (mLocalCanvas != null) {
-            mVideoLayout.removeView(mLocalCanvas.getVideoView());
-            mVideoManager.mMediaDevice.stopVideo(mLocalCanvas);
-            mLocalCanvas = null;
-        }
-        if (mRemoteCanvas != null) {
-            mVideoLayout.removeView(mRemoteCanvas.getVideoView());
-            mVideoManager.mMediaDevice.stopVideo(mRemoteCanvas);
-            mRemoteCanvas = null;
-        }
+        refreshView(10);
+        stopTimeoutTimer();
+        startTalkingTimer();
+        mMediaPlayerUtils.stopSound();
     }
 
     @Override
-    public void onCallItemRemove() {
-        Log.d(TAG, "onCallItemRemove: ");
+    public void onRemoteExitRoom() {
+        Log.d(TAG, "onRemoteExitRoom: ");
         videoEndStep1();
     }
 
+    @Override
+    public void onFreeResource() {
+        mVideoLayout.removeAllViews();
+    }
+
     /*动态申请权限*/
     private void requestPermission() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@@ -388,7 +336,7 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
 
     private void onTimeoutTimerCallback() {
         showToast(getString(R.string.timeout));
-        mVideoManager.hangup();
+        mJuphoonManager.hangup();
     }
 
     @SuppressLint("DefaultLocale")
@@ -418,11 +366,16 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
     }
 
     private void videoEndStep1() {
+        mJuphoonManager.clear();
+        mJuphoonManager = null;
+
         stopTimeoutTimer();
         stopTalkingTimer();
+
         if (mMediaPlayerUtils != null) {
             mMediaPlayerUtils.stopSound();
         }
+
         refreshView(20);
         new Handler().postDelayed(new Runnable() {
             @Override
@@ -443,9 +396,6 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
     protected void onDestroy() {
         Log.d(TAG, "onDestroy: ");
         super.onDestroy();
-        removeCanvas();
-        mVideoManager.clear();
-        mVideoManager = null;
         mMediaPlayerUtils = null;
     }
 }

+ 306 - 0
app/src/main/java/com/sikey/skvideo/manager/JuphoonManager.java

@@ -0,0 +1,306 @@
+package com.sikey.skvideo.manager;
+
+import android.content.Context;
+import android.os.Handler;
+import android.util.Log;
+import android.view.SurfaceView;
+import android.view.View;
+
+import com.juphoon.cloud.JCCall;
+import com.juphoon.cloud.JCCallCallback;
+import com.juphoon.cloud.JCCallItem;
+import com.juphoon.cloud.JCClient;
+import com.juphoon.cloud.JCClientCallback;
+import com.juphoon.cloud.JCMediaDevice;
+import com.juphoon.cloud.JCMediaDeviceCallback;
+import com.juphoon.cloud.JCMediaDeviceVideoCanvas;
+import com.juphoon.cloud.LoginParam;
+import com.juphoon.cloud.MediaConfig;
+import com.sikey.skvideo.R;
+import com.sikey.skvideo.utils.Constant;
+
+import java.util.List;
+
+public class JuphoonManager extends VideoManager implements JCClientCallback, JCCallCallback, JCMediaDeviceCallback  {
+    private JCClient mClient = null;
+    public JCCall mCall = null;
+    public JCMediaDevice mMediaDevice = null;
+    private JCMediaDeviceVideoCanvas mLocalCanvas = null;
+    private JCMediaDeviceVideoCanvas mRemoteCanvas = null;
+
+    @Override
+    protected void onInit(Context context) {
+        super.onInit(context);
+        boolean isOK = initJuphoon(context);
+        if (isOK) {
+            acitonLogin(mTicket);
+        }
+    }
+
+    // 初始化函数
+    private boolean initJuphoon(Context context) {
+        Log.d(TAG, "initJuphoon: ");
+        mClient = JCClient.create(context, Constant.APP_KEY_JUPHOON, this, null);
+        mMediaDevice = JCMediaDevice.create(mClient,this);
+        mCall = JCCall.create(mClient, mMediaDevice, this);
+        mCall.updateMediaConfig(MediaConfig.generateByMode(MediaConfig.MODE_INTELLIGENT_HARDWARE_SMALL));
+        // 获取初始化状态(用来判断初始化状态)
+        boolean isOK = mClient.getState() == JCClient.STATE_IDLE;
+        Log.d(TAG, "initJuphoon: " + isOK);
+        return isOK;
+    }
+
+    public void acitonLogin(String ticket) {
+        Log.d(TAG, "acitonLogin: " + ticket);
+        LoginParam loginParam = new LoginParam();
+        // 发起登录
+        mClient.login(ticket, "123456", loginParam);
+    }
+
+    @Override
+    public void onLogin(boolean result, int reason) {
+        Log.d(TAG, "acitonLogin callback: " + result + " reason:" + reason);
+        if (result) {// 登录成功
+            if (mVideoListener != null) {
+                mVideoListener.onLoginCallback(true);
+            }
+        } else if (reason == JCClient.REASON_AUTH) {// 账号密码错误
+            if (mVideoListener != null) {
+                mVideoListener.onLoginCallback(false);
+            }
+        } else if (reason != JCClient.REASON_NONE && reason != JCClient.REASON_STATE_CANNOT_LOGIN) {
+            //重新登录
+            new Handler().postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    acitonLogin(mTicket);
+                }
+            }, 2000);
+        }
+    }
+
+    @Override
+    protected void onCall(String callId) {
+        super.onCall(callId);
+        boolean isOK = mCall.call(callId, true , new JCCall.CallParam("extraParam", "ticket"));
+        Log.d(TAG, "onCall: " + callId + " isOK: " + isOK);
+    }
+
+    @Override
+    protected void onAnswer() {
+        super.onAnswer();
+        JCCallItem item = getActiveCall();
+        if (mCall != null && item != null) {
+            boolean isOK = mCall.answer(item, true);
+            Log.d(TAG, "onAnswer: " + isOK);
+        }
+    }
+
+    @Override
+    protected void onHangup() {
+        super.onHangup();
+        JCCallItem item = getActiveCall();
+        if (mCall != null && item != null) {
+            boolean isOK = mCall.term(item, JCCall.REASON_NONE, "");
+            Log.d(TAG, "onHangup: " + isOK);
+        }
+    }
+
+    @Override
+    public void onClientStateChange(int state, int oldState) {
+        Log.d(TAG, "onClientStateChange: " + state);
+        if (state == JCClient.STATE_IDLE) { // 未登录
+            //loginJuphoon(this.mTicket);
+        }
+    }
+
+    @Override
+    public void onCallItemAdd(JCCallItem item) {
+        Log.d(TAG, "onCallItemAdd:" + item.getUserId());
+        if (mCall.getCallItems().size() > 0) {
+            if (mVideoListener != null) {
+                mVideoListener.onEnterRoom();
+            }
+        }
+    }
+
+    @Override
+    public void onCallItemRemove(JCCallItem item, int reason, String description) {
+        Log.d(TAG, "onCallItemRemove" + reason);
+        // 销毁本地视频画面
+        item.stopSelfVideo();
+        // 销毁远端视频画面
+        item.stopOtherVideo();
+        if (mVideoListener != null) {
+            mVideoListener.onRemoteExitRoom();
+        }
+    }
+
+    @Override
+    public void onCallItemUpdate(JCCallItem item, JCCallItem.ChangeParam changeParam) {
+        Log.d(TAG, "onCallItemUpdate");
+        List<JCCallItem> callItems = mCall.getCallItems();
+        if (callItems.size() <= 0)
+            return;
+        JCCallItem activeCall = getActiveCall();
+        if (activeCall == null)
+            return;
+
+        int state = activeCall.getState();
+        Log.d(TAG, "onCallItemUpdate: " + state);
+        if (state == JCCall.STATE_INIT || state == JCCall.STATE_PENDING) {
+            SurfaceView view = updatePending(activeCall);
+            if (mVideoListener != null) {
+                mVideoListener.onPending(view);
+            }
+        } else if (state == JCCall.STATE_CONNECTING) {
+            if (mVideoListener != null) {
+                mVideoListener.onConnecting();
+            }
+        } else if (state == JCCall.STATE_TALKING) {
+            SurfaceView view = updateTalking(activeCall);
+            if (mVideoListener != null) {
+                mVideoListener.onTalking(view);
+            }
+            mLocalCanvas = null;
+        }
+    }
+
+    private SurfaceView updatePending(JCCallItem item) {
+        Log.d(TAG, "updatePending: ");
+        if (mLocalCanvas == null && item.getUploadVideoStreamSelf()) {
+            mLocalCanvas = mMediaDevice.startCameraVideo(JCMediaDevice.RENDER_FULL_SCREEN);
+            if (mLocalCanvas == null)
+                return null;
+            mLocalCanvas.getVideoView().setZOrderMediaOverlay(true);
+            mLocalCanvas.getVideoView().setId(View.generateViewId());
+            return mLocalCanvas.getVideoView();
+        }
+        return null;
+    }
+
+    private SurfaceView updateTalking(JCCallItem item) {
+        Log.d(TAG, "updateTalking: ");
+        if (mRemoteCanvas == null && item.getUploadVideoStreamOther()) {
+            mMediaDevice.enableSpeaker(true);
+            mRemoteCanvas = mMediaDevice.startVideo(item.getRenderId(), JCMediaDevice.RENDER_FULL_CONTENT);
+            if (mRemoteCanvas == null)
+                return null;
+            mRemoteCanvas.getVideoView().setId(View.generateViewId());
+            return mRemoteCanvas.getVideoView();
+        }
+        return null;
+    }
+
+    @Override
+    public void onLogout(int reason) {
+        Log.d(TAG, "onLogout: " + reason);
+    }
+
+    @Override
+    protected void onClear() {
+        super.onClear();
+        removeCanvas();
+        JCMediaDevice.destroy();
+        JCCall.destroy();
+        JCClient.destroy();
+    }
+
+    private void removeCanvas() {
+        Log.d(TAG, "removeCanvas: ");
+        if (mLocalCanvas != null) {
+            mMediaDevice.stopVideo(mLocalCanvas);
+            mLocalCanvas = null;
+        }
+        if (mRemoteCanvas != null) {
+            mMediaDevice.stopVideo(mRemoteCanvas);
+            mRemoteCanvas = null;
+        }
+    }
+
+    public JCCallItem getActiveCall() {
+        if (mCall == null)
+            return null;
+        for (JCCallItem item: mCall.getCallItems()) {
+            if (item.getActive())
+                return item;
+        }
+        return null;
+    }
+
+    @Override
+    public void onOnlineMessageSendResult(int operationId, boolean result) {
+
+    }
+
+    @Override
+    public void onOnlineMessageReceive(String userId, String content) {
+
+    }
+
+    @Override
+    public void onMessageReceive(String type, String content, JCCallItem item) {
+
+    }
+
+    @Override
+    public void onMissedCallItem(JCCallItem item) {
+
+    }
+
+    @Override
+    public void onDtmfReceived(JCCallItem item, int value) {
+
+    }
+
+    @Override
+    public void onEarlyMediaReceived(JCCallItem item) {
+
+    }
+
+    @Override
+    public void onSipRingInfoReceived(JCCallItem item, String callSipType) {
+
+    }
+
+    @Override
+    public void onCameraUpdate() {
+
+    }
+
+    @Override
+    public void onAudioOutputTypeChange(int audioRouteType) {
+
+    }
+
+    @Override
+    public void onRenderReceived(JCMediaDeviceVideoCanvas canvas) {
+
+    }
+
+    @Override
+    public void onRenderStart(JCMediaDeviceVideoCanvas canvas) {
+
+    }
+
+    @Override
+    public void onVideoError(JCMediaDeviceVideoCanvas canvas) {
+
+    }
+
+    @Override
+    public void onAudioError(boolean background) {
+
+    }
+
+    @Override
+    public void onAudioResume() {
+
+    }
+
+    @Override
+    public void onNeedKeyFrame() {
+
+    }
+
+}

+ 15 - 198
app/src/main/java/com/sikey/skvideo/manager/VideoManager.java

@@ -17,224 +17,41 @@ import com.juphoon.cloud.MediaConfig;
 import com.sikey.skvideo.observer.Listener;
 import com.sikey.skvideo.utils.Constant;
 
-public class VideoManager implements JCClientCallback, JCCallCallback, JCMediaDeviceCallback {
+public class VideoManager {
     public final String TAG = "losion / skvideo :" + getClass().getSimpleName();
-    private Listener.VideoListener mVideoListener = null;
-    private JCClient mClient = null;
-    public JCCall mCall = null;
-    public JCMediaDevice mMediaDevice = null;
-    private String mTicket = "";
+    public Listener.VideoListener mVideoListener = null;
+    public String mTicket = "";
+
+    protected void onInit(Context context) {};
+    protected void onCall(String callId) {};
+    protected void onAnswer() {};
+    protected void onHangup() {};
+    protected void onClear() {};
 
     public void init(Context context, String ticket) {
         Log.d(TAG, "init: " + ticket);
         mVideoListener = (Listener.VideoListener)context;
         mTicket = ticket;
-
-        boolean isOK = initJuphoon(context);
-        if (isOK) {
-            loginJuphoon(ticket);
-        }
-    }
-
-    // 初始化函数
-    private boolean initJuphoon(Context context) {
-        Log.d(TAG, "initJuphoon: ");
-        mClient = JCClient.create(context, Constant.APP_KEY_JUPHOON, this, null);
-        mMediaDevice = JCMediaDevice.create(mClient,this);
-        mCall = JCCall.create(mClient, mMediaDevice, this);
-        mCall.updateMediaConfig(MediaConfig.generateByMode(MediaConfig.MODE_INTELLIGENT_HARDWARE_SMALL));
-        // 获取初始化状态(用来判断初始化状态)
-        boolean isOK = mClient.getState() == JCClient.STATE_IDLE;
-        Log.d(TAG, "initJuphoon: " + isOK);
-        return isOK;
-    }
-
-    public void loginJuphoon(String userId) {
-        Log.d(TAG, "loginJuphoon: " + userId);
-        LoginParam loginParam = new LoginParam();
-        // 发起登录
-        mClient.login(userId, "123456", loginParam);
+        onInit(context);
     }
 
     public void call(String callId) {
-        // 发起语音呼叫
-        boolean isOK = mCall.call(callId, true , new JCCall.CallParam("extraParam", "ticket"));
-        Log.d(TAG, "call: " + callId + " isOK: " + isOK);
+        Log.d(TAG, "call: ");
+        onCall(callId);
     }
 
     public void answer() {
         Log.d(TAG, "answer: ");
-        JCCallItem item = getActiveCall();
-        if (mCall != null && item != null) {
-            boolean isOK = mCall.answer(item, true);
-            Log.d(TAG, "answer: " + isOK);
-        }
+        onAnswer();
     }
 
     public void hangup() {
         Log.d(TAG, "hangup: ");
-        JCCallItem item = getActiveCall();
-        if (mCall != null && item != null) {
-            boolean isOK = mCall.term(item, JCCall.REASON_NONE, "");
-            Log.d(TAG, "hangup: " + isOK);
-        }
-    }
-
-    public JCCallItem getActiveCall() {
-        if (mCall == null)
-            return null;
-        for (JCCallItem item: mCall.getCallItems()) {
-            if (item.getActive())
-                return item;
-        }
-        return null;
-    }
-
-    @Override
-    public void onLogin(boolean result, int reason) {
-        Log.d(TAG, "onLogin: " + result + " reason:" + reason);
-        if (result) {// 登录成功
-            if (mVideoListener != null) {
-                mVideoListener.onLoginCallback(true);
-            }
-        } else if (reason == JCClient.REASON_AUTH) {// 账号密码错误
-            if (mVideoListener != null) {
-                mVideoListener.onLoginCallback(false);
-            }
-        } else if (reason != JCClient.REASON_NONE && reason != JCClient.REASON_STATE_CANNOT_LOGIN) {
-            //重新登录
-            new Handler().postDelayed(new Runnable() {
-                @Override
-                public void run() {
-                    loginJuphoon(mTicket);
-                }
-            }, 2000);
-        }
-    }
-
-    @Override
-    public void onLogout(int reason) {
-        Log.d(TAG, "onLogout: " + reason);
-    }
-
-    @Override
-    public void onClientStateChange(int state, int oldState) {
-        Log.d(TAG, "onClientStateChange: " + state);
-        if (state == JCClient.STATE_IDLE) { // 未登录
-            //loginJuphoon(this.mTicket);
-        }
-    }
-
-    @Override
-    public void onOnlineMessageSendResult(int operationId, boolean result) {
-
-    }
-
-    @Override
-    public void onOnlineMessageReceive(String userId, String content) {
-
-    }
-
-    @Override
-    public void onCallItemAdd(JCCallItem item) {
-        Log.d(TAG, "onCallItemAdd:" + item.getUserId());
-        if (mCall.getCallItems().size() > 0) {
-            if (mVideoListener != null) {
-                mVideoListener.onCallItemAdd(item);
-            }
-        }
-    }
-
-    @Override
-    public void onCallItemRemove(JCCallItem item, int reason, String description) {
-        Log.d(TAG, "onCallItemRemove");
-        // 销毁本地视频画面
-        item.stopSelfVideo();
-        // 销毁远端视频画面
-        item.stopOtherVideo();
-
-        if (mVideoListener != null) {
-            mVideoListener.onCallItemRemove();
-        }
-    }
-
-    @Override
-    public void onCallItemUpdate(JCCallItem item, JCCallItem.ChangeParam changeParam) {
-        Log.d(TAG, "onCallItemUpdate");
-        if (mVideoListener != null) {
-            mVideoListener.onCallItemUpdate();
-        }
-    }
-
-    @Override
-    public void onMessageReceive(String type, String content, JCCallItem item) {
-
-    }
-
-    @Override
-    public void onMissedCallItem(JCCallItem item) {
-
-    }
-
-    @Override
-    public void onDtmfReceived(JCCallItem item, int value) {
-
-    }
-
-    @Override
-    public void onEarlyMediaReceived(JCCallItem item) {
-
-    }
-
-    @Override
-    public void onSipRingInfoReceived(JCCallItem item, String callSipType) {
-
-    }
-
-    @Override
-    public void onCameraUpdate() {
-
-    }
-
-    @Override
-    public void onAudioOutputTypeChange(int audioRouteType) {
-
-    }
-
-    @Override
-    public void onRenderReceived(JCMediaDeviceVideoCanvas canvas) {
-
-    }
-
-    @Override
-    public void onRenderStart(JCMediaDeviceVideoCanvas canvas) {
-
-    }
-
-    @Override
-    public void onVideoError(JCMediaDeviceVideoCanvas canvas) {
-
-    }
-
-    @Override
-    public void onAudioError(boolean background) {
-
-    }
-
-    @Override
-    public void onAudioResume() {
-
-    }
-
-    @Override
-    public void onNeedKeyFrame() {
-
+        onHangup();
     }
 
     public void clear() {
         Log.d(TAG, "clear: ");
-        JCMediaDevice.destroy();
-        JCCall.destroy();
-        JCClient.destroy();
+        onClear();
     }
 }

+ 7 - 4
app/src/main/java/com/sikey/skvideo/observer/Listener.java

@@ -1,13 +1,16 @@
 package com.sikey.skvideo.observer;
 
-import com.juphoon.cloud.JCCallItem;
+import android.view.SurfaceView;
 
 public class Listener {
     public interface VideoListener {
         void onLoginCallback(boolean isOK);
-        void onCallItemAdd(JCCallItem item);
-        void onCallItemUpdate();
-        void onCallItemRemove();
+        void onEnterRoom();
+        void onPending(SurfaceView view);
+        void onConnecting();
+        void onTalking(SurfaceView view);
+        void onRemoteExitRoom();
+        void onFreeResource();
     }
 }