带有WebRTC和Socket.IO作用域问题的AngularJS
我目前正在使用AngularJS、WebRTC和Socket.IO开发视频会议电话应用程序。我偶然发现了一个问题,不知道如何解决它 基本上,我有一个房间列表,它由一个ngRepeat循环通过,然后包含一个指令。html如下所示:带有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
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();
};