繁体   English   中英

无法在Android中使用QuickBlox WebRtc接收和接受视频通话

[英]Unable to receive and accept Video Calls using QuickBlox WebRtc in Android

我正在尝试使用Android中的QuickBlox实现WebRtc 在学习完本教程之后,我完成了以下编码。 我面临以下问题。

  1. 我认为我的通话是从用户A转到用户B。

  2. 我没有收到来电通知(可能是因为根本没有来电)。

  3. 当我单击接受按钮时,出现以下错误。

E / AndroidRuntime(11413):致命例外:Thread-37793 E / AndroidRuntime(11413):进程:com.example.testqb,PID:11413 E / AndroidRuntime(11413):java.lang.NullPointerException:尝试调用虚拟方法'在空对象引用E / AndroidRuntime(11413)上将com.quickblox.videochat.model.listeners.OnQBVideoChatListener.runOnVideoChatStateChangeUI(com.quickblox.videochat.model.objects.CallState,com.quickblox.videochat.model.objects.VideoChatConfig)无效):在com.quickblox.videochat.core.objects.XMPPConnectionClient $ CallingRunnable.sendNotAnsweredCallback(XMPPConnectionClient.java:173)E / AndroidRuntime(11413):在com.quickblox.videochat.core.objects.XMPPConnectionClient $ CallingRunnable.run(X .java:158)E / AndroidRuntime(11413):位于java.lang.Thread.run(Thread.java:818)

我的完整代码如下:

我在电话上登录A使用login1按钮, B使用login2按钮。 我的完整代码如下。

   public class MainActivity extends ActionBarActivity implements OnClickListener,
    QBRTCClientSessionCallbacks, QBRTCClientConnectionCallbacks,
    QBRTCClientVideoTracksCallbacks {
Button sign_up, btn_login, btn_call, btn_recieve, btn_login2;
QBChatService chatService;
final QBUser user1 = new QBUser("temp151", "123456789");
final QBUser user2 = new QBUser("temp152", "123456789");

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    QBSettings.getInstance().fastConfigInit("xxxx", "xxxxxxxx-",
            "xxxxxxx");
    sign_up = (Button) findViewById(R.id.sign_up);
    btn_login = (Button) findViewById(R.id.btn_login);
    btn_call = (Button) findViewById(R.id.btn_call);
    btn_recieve = (Button) findViewById(R.id.btn_recieve);
    btn_login2 = (Button) findViewById(R.id.btn_login2);
    sign_up.setOnClickListener(MainActivity.this);
    btn_login.setOnClickListener(MainActivity.this);
    btn_call.setOnClickListener(MainActivity.this);
    btn_recieve.setOnClickListener(MainActivity.this);
    btn_login2.setOnClickListener(MainActivity.this);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.sign_up:
        QBAuth.createSession(new QBEntityCallback<QBSession>() {

            @Override
            public void onError(List<String> arg0) {
                // TODO Auto-generated method stub
                Log.i("error", "" + arg0);
            }

            @Override
            public void onSuccess() {
                // TODO Auto-generated method stub

                user1.setFullName("temp151");
                user1.setPhone("123456789");

                QBUsers.signUp(user1, new QBEntityCallbackImpl<QBUser>() {
                    @Override
                    public void onSuccess(QBUser user, Bundle args) {

                    }

                    @Override
                    public void onError(List<String> errors) {

                    }
                });

            }

            @Override
            public void onSuccess(final QBSession session, Bundle arg1) {
                // TODO Auto-generated method stub
                final QBUser user1 = new QBUser("temp151", "123456789");

                user1.setFullName("temp151");
                user1.setPhone("123456789");

                QBUsers.signUp(user1, new QBEntityCallbackImpl<QBUser>() {
                    @Override
                    public void onSuccess(QBUser user, Bundle args) {
                        user1.setId(session.getUserId());
                        if (!QBChatService.isInitialized()) {
                            QBChatService.init(MainActivity.this);
                            chatService = QBChatService.getInstance();
                        }
                    }

                    @Override
                    public void onError(List<String> errors) {

                    }
                });
            }
        });

        break;
    case R.id.btn_login:
        create_session();
        break;
    case R.id.btn_call:
        QBRTCTypes.QBConferenceType qbConferenceType = QBConferenceType.QB_CONFERENCE_TYPE_VIDEO;
        List<Integer> opponents = new ArrayList<Integer>();
        opponents.add(4319012); // QBUser ID

        Map<String, String> userInfo = new HashMap<>();
        userInfo.put("user", "temp152");

        // Init session
        QBRTCSession session = QBRTCClient.getInstance()
                .createNewSessionWithOpponents(opponents, qbConferenceType);

        // Start call
        session.startCall(userInfo);

        break;
    case R.id.btn_recieve:

        // VideoChatConfig videoChatConfig =
        // QBVideoChatController.getInstance().callFriend(user2,
        // CallType.VIDEO_AUDIO, null);
        QBVideoChatController.getInstance().callFriend(user1,
                CallType.VIDEO_AUDIO, null);
        break;
    case R.id.btn_login2:

        QBAuth.createSession(user2, new QBEntityCallback<QBSession>() {

            @Override
            public void onError(List<String> arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onSuccess() {
                // TODO Auto-generated method stub

            }

            @Override
            public void onSuccess(QBSession arg0, Bundle arg1) {
                // TODO Auto-generated method stub
                user2.setId(arg0.getUserId());
                if (!QBChatService.isInitialized()) {
                    QBChatService.init(MainActivity.this);
                    chatService = QBChatService.getInstance();
                }
                chatService.login(user2,
                        new QBEntityCallbackImpl<QBUser>() {

                            @Override
                            public void onSuccess() {
                                // success
                                Log.i("Login Successful", "Logged In");

                                create_SignallingManager();
                            }

                            @Override
                            public void onError(List errors) {
                                // error
                                Log.i("errors", "" + errors.toString());
                            }
                        });
            }
        });

        break;
    default:
        break;
    }

}

public void create_SignallingManager() {
    // TODO Auto-generated method stub

    QBChatService
            .getInstance()
            .getVideoChatWebRTCSignalingManager()
            .addSignalingManagerListener(
                    new QBVideoChatSignalingManagerListener() {
                        @Override
                        public void signalingCreated(
                                QBSignaling qbSignaling,
                                boolean createdLocally) {
                            if (!createdLocally) {
                                QBRTCClient.getInstance().addSignaling(
                                        (QBWebRTCSignaling) qbSignaling);
                            }
                        }
                    });

    QBRTCClient.getInstance().addSessionCallbacksListener(this);
    QBRTCClient.getInstance().addConnectionCallbacksListener(this);
    QBRTCClient.getInstance().addVideoTrackCallbacksListener(this);

    QBRTCClient.getInstance().prepareToProcessCalls(this);
    SessionCallback loginlistener = new SessionCallback() {

        @Override
        public void sessionCreated(InputMethodSession arg0) {
            // TODO Auto-generated method stub
            try {
                QBVideoChatController.getInstance()
                        .initQBVideoChatMessageListener();
            } catch (XMPPException e) {
                e.printStackTrace();
            }

        }

    };
}

public void create_session() {
    QBAuth.createSession(user1, new QBEntityCallback<QBSession>() {

        @Override
        public void onError(List<String> arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onSuccess() {
            // TODO Auto-generated method stub

        }

        @Override
        public void onSuccess(QBSession arg0, Bundle arg1) {
            // TODO Auto-generated method stub
            user1.setId(arg0.getUserId());
            if (!QBChatService.isInitialized()) {
                QBChatService.init(MainActivity.this);
                chatService = QBChatService.getInstance();
            }
            chatService.login(user1, new QBEntityCallbackImpl<QBUser>() {

                @Override
                public void onSuccess() {
                    // success
                    Log.i("Login Successful", "Logged In");
                    create_SignallingManager();

                }

                @Override
                public void onError(List errors) {
                    // error
                    Log.i("errors", "" + errors.toString());
                }
            });
        }
    });
}

@Override
public void onCallRejectByUser(QBRTCSession arg0, Integer arg1,
        Map<String, String> arg2) {
    // TODO Auto-generated method stub

}

@Override
public void onReceiveHangUpFromUser(QBRTCSession arg0, Integer arg1) {
    // TODO Auto-generated method stub

}

@Override
public void onReceiveNewSession(QBRTCSession arg0) {
    // TODO Auto-generated method stub
    Map<String, String> userInfo = new HashMap<String, String>();
    userInfo.put("user", "temp152");

    // Accept incoming call
    arg0.acceptCall(userInfo);
}

@Override
public void onSessionClosed(QBRTCSession arg0) {
    // TODO Auto-generated method stub

}

@Override
public void onSessionStartClose(QBRTCSession arg0) {
    // TODO Auto-generated method stub

}

@Override
public void onUserNotAnswer(QBRTCSession arg0, Integer arg1) {
    // TODO Auto-generated method stub

}

@Override
public void onConnectedToUser(QBRTCSession arg0, Integer arg1) {
    // TODO Auto-generated method stub
    Log.i("connected to second user", "connected");
}

@Override
public void onConnectionClosedForUser(QBRTCSession arg0, Integer arg1) {
    // TODO Auto-generated method stub

}

@Override
public void onConnectionFailedWithUser(QBRTCSession arg0, Integer arg1) {
    // TODO Auto-generated method stub

}

@Override
public void onDisconnectedFromUser(QBRTCSession arg0, Integer arg1) {
    // TODO Auto-generated method stub

}

@Override
public void onDisconnectedTimeoutFromUser(QBRTCSession arg0, Integer arg1) {
    // TODO Auto-generated method stub

}

@Override
public void onError(QBRTCSession arg0, QBRTCException arg1) {
    // TODO Auto-generated method stub
    Log.i("Error", "" + arg1.toString());

}

@Override
public void onStartConnectToUser(QBRTCSession arg0, Integer arg1) {
    // TODO Auto-generated method stub
    Log.i("Connection", "connecting to user");

}

@Override
public void onLocalVideoTrackReceive(QBRTCSession arg0, QBRTCVideoTrack arg1) {
    // TODO Auto-generated method stub
    QBGLVideoView localVideoVidew = (QBGLVideoView) findViewById(R.id.localVideoView);
    VideoRenderer localRenderer = new VideoRenderer(new VideoCallBacks(
            localVideoVidew, QBGLVideoView.Endpoint.LOCAL));
    arg1.addRenderer(localRenderer);
    localVideoVidew.setVideoTrack(arg1, QBGLVideoView.Endpoint.LOCAL);
}

@Override
public void onRemoteVideoTrackReceive(QBRTCSession arg0,
        QBRTCVideoTrack remoteVideoTrack, Integer arg2) {
    // TODO Auto-generated method stub
    QBGLVideoView remoteVideoView = (QBGLVideoView) findViewById(R.id.remoteVideoView);
    VideoRenderer remoteRenderer = new VideoRenderer(new VideoCallBacks(
            remoteVideoView, QBGLVideoView.Endpoint.REMOTE));
    remoteVideoTrack.addRenderer(remoteRenderer);
    remoteVideoView.setVideoTrack(remoteVideoTrack,
            QBGLVideoView.Endpoint.REMOTE);

}

private VideoChatConfig videoChatConfig;
private OnQBVideoChatListener qbVideoChatListener = new OnQBVideoChatListener() {

    @Override
    public void onVideoChatStateChange(CallState arg0, VideoChatConfig arg1) {
        // TODO Auto-generated method stub
        videoChatConfig = arg1;
        switch (arg0) {
        case ACCEPT:
            // show call dialog
            Toast.makeText(MainActivity.this, "accept", 1000).show();
            break;
        case ON_ACCEPT_BY_USER:
            // your call was accepted

            QBVideoChatController.getInstance().onAcceptFriendCall(
                    videoChatConfig, null);

            break;
        case ON_REJECTED_BY_USER:
            // your call was rejected
            break;
        case ON_DID_NOT_ANSWERED:
            // opponent did not answer your call
            Toast.makeText(MainActivity.this, "not answer", 1000).show();
            break;

        case ON_CANCELED_CALL:
            videoChatConfig = null;
            Toast.makeText(MainActivity.this, "cancelled", 1000).show();
            break;
        // call was canceled

        case ON_CALL_START:
            // call started
            Toast.makeText(MainActivity.this, "call started", 1000).show();
            break;

        case ON_CALL_END:
            Toast.makeText(MainActivity.this, "end", 1000).show();

            // call finished
            break;
        }
    }
};

}

Tiny,您使用的是哪个版本的Android SDK? Android WebRTC SDK的新版本将于8月27日至28日发布,该版本应已修复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM