在angular app指令中观看和使用webrtc流

时间:2016-06-14 12:57:44

标签: angularjs angularjs-directive webrtc

使用angular 1.x实现基于webrtc的webapp。 webrtc相关功能在服务中抽象,控制器监视服务中的变量。

在服务中,当我使用$ rootScope。$ apply()设置流(本地或远程)时,控制器中的监视功能将被执行。但与此同时,我在控制台上看到以下错误。

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>

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

如果您尝试从控制器观看webrtc流,似乎存在一些问题,因为流对象非常复杂且庞大。因此,请使用URL.createObjectURL()将其转换为网址字符串,然后调用$apply()。通过这样做,我能够解决错误。

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

核心问题似乎是观察流对象。避免它。