2016-06-14 84 views
0

使用角度1.x实现基于webrtc的webapp。 webrtc相关功能在服务中抽象出来,控制器监视服务中的变量。在角度应用指令中观看和使用webrtc流

在服务中,当我使用$ rootScope。$ apply()设置流(本地或远程)时,控制器中的watch函数被执行。但是,在同一时间,我在控制台上看到以下错误。

vendor.44edef6c.js:5 TypeError: Illegal invocation 
at P (vendor.44edef6c.js:3) 
at P (vendor.44edef6c.js:3) 
at P (vendor.44edef6c.js:3) 
at o.$digest (vendor.44edef6c.js:6) 
at o.$apply (vendor.44edef6c.js:6) 
at scripts.d348f551.js:6 
at Object.w [as emit] (scripts.d348f551.js:1) 
at scripts.d348f551.js:2 

这只在看到如果我尝试设置视频元素源,而不是当我做一个audion webrtc调用。从服务中传递webrtc流对象并使用时是否有任何问题?下面是html

<video ng-src="{{localStream}}" autoplay muted></video> 

回答

1

似乎有一些问题,如果您尝试观看从控制器的WebRTC流,因为流对象是相当复杂和庞大。因此,请使用URL.createObjectURL()将其转换为URL字符串,然后拨打$apply()。通过这样做,我能够解决这些错误。

另外,@ adrian-ber在服务或控制器中建议使用$sce.trustAsResourceUrl()

核心问题似乎是看流对象。躲开它。

+0

观看流正在导致它以某种方式中断。如果你手动调用$ apply和user src = {{url}}而不是ng-src,它似乎可以工作。 – Vlada

1

我认为这是因为该流URL不是一个可信任的。你必须做这样的事情:

localStream = $sce.trustAsResourceUrl(window.URL.createObjectURL(localStream)); 
+0

我试过了,但没有帮助。这个控制台错误在执行$ rootScope $ apply()时被引发到服务中。 – sthustfo

+0

你试过$ safeApply()而不是$ apply()吗? https://github.com/yearofmoo/AngularJS-Scope.SafeApply –