id 为 X 的 QBWebRTC 目前很忙? QB.webrtc.onRemoteStreamListener 没有触发。 Quickblox Javascript SDK + 角度 + WebRT

Posted

技术标签:

【中文标题】id 为 X 的 QBWebRTC 目前很忙? QB.webrtc.onRemoteStreamListener 没有触发。 Quickblox Javascript SDK + 角度 + WebRTC【英文标题】:QBWebRTC with id X is busy at the moment? QB.webrtc.onRemoteStreamListener is not firing. Quickblox Javascript SDK + angular + WebRTC 【发布时间】:2017-03-16 14:42:19 【问题描述】:

我已按照文档进行了 3 次以上,但我无法接听电话。代码如下:

$scope.occupants = [6184, 6186];
$scope.session = QB.webrtc.createNewSession($scope.occupants, QB.webrtc.CallType.VIDEO);
$scope.localMediaParams = 
    audio: true,
    video: true,
    options: 
        muted: true,
        mirror: true
    ,
    elemId: 'localVideoEl',
    optional: 
        minWidth: 240,
        maxWidth: 320,
        minHeight: 160,
        maxHeight: 240
    
;

$scope.startCall = function() 
    if (angular.equals($scope.recipients, )) 
        alert('Please choose a person to call');
    else 
        if (angular.equals($scope.session, )) 
            console.log('session hasn\'t been started');
            $scope.session.stop();
            $scope.session = ;
            return false;
        else 
            $scope.session.getUserMedia($scope.localMediaParams, function(err, stream) 
                if (err)
                    console.log(err);
                else
                    console.log(stream);
                    $scope.session.call(, function(error) 
                        console.log(error);
                    );
                
            );
        
    
;
$scope.answerCall = function() 
    $scope.session.getUserMedia($scope.localMediaParams, function(err, stream) 
        if (err)
            console.log(err);
            $scope.session.stop();
        else
            console.log(stream);
            $scope.session.accept();
        
    );
;
QB.webrtc.onRemoteStreamListener = function(session, userID, remoteStream) 
    // attach the remote stream to DOM element
    console.log('onRemoteStreamListener');
    console.log($scope.session);
    $scope.session.attachMediaStream('remoteVideoEl', remoteStream);
;

我有两个 ID 分别为 6184 和 6186 的用户。我从用户 6186 发起呼叫,控制台显示:

[QBWebRTC]: RTCPeerConnection init. userID: 6186, sessionID: 7e7ea17c-a207-4af0-82e1-744fbcce830e, type: offer
telemed.js:432 null
quickblox.min.js:86149 [QBWebRTC]: getAndSetLocalSessionDescription success
quickblox.min.js:86149 [QBWebRTC]: _startDialingTimer, dialingTimeInterval: 5000
quickblox.min.js:86149 [QBWebRTC]: _dialingCallback, answerTimeInterval: 0
quickblox.min.js:86149 [QBWebRTC]: getAndSetLocalSessionDescription success
quickblox.min.js:86149 [QBWebRTC]: _startDialingTimer, dialingTimeInterval: 5000
quickblox.min.js:86149 [QBWebRTC]: _dialingCallback, answerTimeInterval: 0
quickblox.min.js:86149 [QBWebRTC]: onCall. UserID:6186. SessionID: 7e7ea17c-a207-4af0-82e1-744fbcce830e
quickblox.min.js:86149 [QBWebRTC]: onReject. UserID:6184. SessionID: 7e7ea17c-a207-4af0-82e1-744fbcce830e
quickblox.min.js:86149 [QBWebRTC]: _clearDialingTimer
quickblox.min.js:86149 [QBWebRTC]: All peer connections closed: false
quickblox.min.js:86149 [QBWebRTC]: onIceConnectionStateCallback: closed
quickblox.min.js:86149 [QBWebRTC]: _dialingCallback, answerTimeInterval: 5000
quickblox.min.js:86149 [QBWebRTC]: onCall. UserID:6186. SessionID: 7e7ea17c-a207-4af0-82e1-744fbcce830e
quickblox.min.js:86149 [QBWebRTC]: Stop, extension: 
quickblox.min.js:86149 [QBWebRTC]: _close
quickblox.min.js:86149 [QBWebRTC]: _clearDialingTimer
quickblox.min.js:86149 [QBWebRTC]: onIceConnectionStateCallback: closed

现在在 anwering 一侧,我看到正在生成一个呼叫,但随后它说发起呼叫者正忙:

[QBWebRTC]: onCall. UserID:6186. SessionID: 7e7ea17c-a207-4af0-82e1-744fbcce830e
quickblox.min.js:86149 [QBWebRTC]: User with id 6186 is busy at the moment.
quickblox.min.js:86149 [QBWebRTC]: onStop. UserID:6186. SessionID: 7e7ea17c-a207-4af0-82e1-744fbcce830e

谁能告诉我这里发生了什么以及为什么 QB.webrtc.onRemoteStreamListener 没有在应答端触发?

还有一件事:

在我打完电话后,我收到了这个我也不明白的错误,因为它的英语也很糟糕:

[QBWebRTC]: onStop. UserID:6186. SessionID: 7e7ea17c-a207-4af0-82e1-744fbcce830e
quickblox.min.js:86161 [QBWebRTC]: Ignore 'onStop', there is no information about session 7e7ea17c-a207-4af0-82e1-744fbcce830e by some reason.

【问题讨论】:

【参考方案1】:

我正在从用户 6186 和控制台发起呼叫

您不必在 occupants 中列出您当前用户的 id:

所以而不是

$scope.occupants = [6184, 6186];

你应该使用

$scope.occupants = [6184];

【讨论】:

【参考方案2】:

我无法接听电话的原因是我没有附加来自 QB.webrtc.onCallListener 侦听器的流。

QB.webrtc.onCallListener = function(session, extension) 
            $scope.session = session;
            console.log('User '+session.currentUserID+' is calling');
        ;

文档未能解释用户需要在 occupants 数组中的哪些内容,以及一旦流到达该侦听器,您应该如何处理该流。从角度来看,如果您没有将 QB.webrtc.onCallListener 流附加到会话或 $scope.session 对象,您应该得到一个 $scope.session 或会话未定义。此外,正如 Igor 指出的那样,您不应该在 occupants 数组中包含您的用户 ID。

【讨论】:

以上是关于id 为 X 的 QBWebRTC 目前很忙? QB.webrtc.onRemoteStreamListener 没有触发。 Quickblox Javascript SDK + 角度 + WebRT的主要内容,如果未能解决你的问题,请参考以下文章

在Django Q对象中查找最新日期

matlab 中的 CUDA 错误(所有支持 CUDA 的设备都很忙)

poj2763(lca / RMQ + 线段树)

poj1417(种类并查集+dp)

Xcode 13:构建挂起并显示“iPhone 很忙:让 Apple Watch 为开发做好准备”

bzoj 4972 小Q的方格纸