Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有WebRTC和Socket.IO作用域问题的AngularJS_Angularjs_Socket.io_Angularjs Scope_Webrtc_Apply - Fatal编程技术网

带有WebRTC和Socket.IO作用域问题的AngularJS

带有WebRTC和Socket.IO作用域问题的AngularJS,angularjs,socket.io,angularjs-scope,webrtc,apply,Angularjs,Socket.io,Angularjs Scope,Webrtc,Apply,我目前正在使用AngularJS、WebRTC和Socket.IO开发视频会议电话应用程序。我偶然发现了一个问题,不知道如何解决它 基本上,我有一个房间列表,它由一个ngRepeat循环通过,然后包含一个指令。html如下所示: My rooms: <div class="room" ng-repeat="room in userRooms"> <div class="title">{{room.roomId}}</div> <div c

我目前正在使用AngularJS、WebRTC和Socket.IO开发视频会议电话应用程序。我偶然发现了一个问题,不知道如何解决它

基本上,我有一个房间列表,它由一个ngRepeat循环通过,然后包含一个指令。html如下所示:

My rooms:
<div class="room" ng-repeat="room in userRooms">
    <div class="title">{{room.roomId}}</div>
    <div class="content">
        <conference-call></conference-call>
    </div>
</div>
对于远程视频URL,执行以下代码:

function handleRemoteStreamAdded(event) {
    scope.remoteStream = event.stream;
    scope.peerVideoURL = $sce.trustAsResourceUrl(URL.createObjectURL(event.stream));
    scope.$apply();
};
在以后的阶段中,这将被类似于
peerVideos.append(stream)
的内容所取代。但这不是问题所在。因为问题是:

pc.onaddstream
(当 客户机连接),其中
pc=new-rtpeerconnection(pc\u-config,
pc_约束)从未被调用

我认为这是因为: 每当有人加入会议室时,服务器就会发出一个调用,该调用在客户端产生一个
$scope.$apply()
调用(AngularJS更新和刷新scope并重新呈现页面的方法)。这样可以确保客户端在其所在的房间中看到远程客户端。但是,由于这个
$scope.$apply()
调用,整个会议室指令被刷新并重新初始化。这导致了一个问题,即永远不会调用
pc.onaddstream
,因为没有人添加到对等连接,因为对等连接被重新初始化,或者至少我认为会发生这种情况

你们有没有人有过类似的问题?我应该如何处理这个问题呢?

$scope.$apply()
更新dom,不会影响js值,但是除非您显示
pc=new…
pc.onaddstream
的代码,否则我无法告诉您多少。。。
function handleUserMedia(stream) {          
    scope.localStream = stream;
    scope.localVideoURL = $sce.trustAsResourceUrl(URL.createObjectURL(stream));
    scope.$apply();
};
function handleRemoteStreamAdded(event) {
    scope.remoteStream = event.stream;
    scope.peerVideoURL = $sce.trustAsResourceUrl(URL.createObjectURL(event.stream));
    scope.$apply();
};