2015-07-23 4 views
0

Я пытаюсь реализовать WebRtc с помощью QuickBlox в Android. После учебника я сделал следующую кодировку. Я столкнулся со следующими проблемами.Невозможно принимать и принимать видеозвонки с помощью QuickBlox WebRtc в Android

  1. Я не думаю, так что мой вызов идет от пользователя А к пользователю B.

  2. Я не получал уведомление о входящем вызове (который может быть потому, что вызов не приходит на все).

  3. Когда я нажимаю кнопку «Принять», я получаю следующую ошибку.

Е/AndroidRuntime (11413): неустранимая: резьба-37793 Е/AndroidRuntime (11413): Процесс: com.example.testqb, ПИД: 11413 Е/AndroidRuntime (11413): Java .lang.NullPointerException: попытка вызвать виртуальный метод 'void com.quickblox.videochat.model.listeners.OnQBVideoChatListener.runOnVideoChatStateChangeUI (com.quickblox.videochat.model.objects.CallState, com.quickblox.videochat.model.objects.VideoChatConfig) 'на ссылке нулевого объекта E/AndroidRuntime (11413): at com.quickblox.videochat.core.objects.XMPPConnectionClient $ CallingRunnable.sendNotAnsweredCallback (XMPPConnectionClient.java:173) E/AndroidRunt ime (11413): at com.quickblox.videochat.core.objects.XMPPConnectionClient $ CallingRunnable.run (XMPPConnectionClient.java:158) E/AndroidRuntime (11413): at 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; 
     } 
    } 
}; 

} 

ответ

0

Tiny, какую версию Android SDK вы используете? 27-28 августа будет выпущена новая версия Android WebRTC SDK, которая должна иметь эти исправления.

Смежные вопросы