首页 文章

在Angular via typescript中的类型'Blob'错误消息中,getTracks不存在

提问于
浏览
0

我是一名使用带有angular6的webrtc的新手 . 当我研究WebRTC API并构建一个简单的页面来显示/停止本地测试中的网络摄像头流 . 我在开发中收到错误消息 . 有我的开发环境:

Angular 6.1.0
Angular-cli 6.1.2
Typescript 2.9.2

我构建“停止”按钮来执行函数stopBtn() . 但是typescript编译器会在构建应用程序时抛出错误消息:

error TS2339: Property 'getTracks' does not exist on type 'MediaStream | Blob | MediaSource'. Property 'getTracks' does not exist on type 'Blob'.

stopBtn()函数代码:

private video: HTMLVideoElement;
.......
ngOnInit() {
  this.video = <HTMLVideoElement>this.el.nativeElement.querySelector('#video');
}
........
getDevice() {.....}
getStream() {.....}
gotStream() {.....}
.......
stopBtn() {
  if (this.video.srcObject) {
    this.video.srcObject.getTracks().forEach( stream => stream.stop());
    this.video.srcObject = null;
  }
}

html简单代码:

<video id="video" autoplay></video>
<button id="stopbtn" type="button" (click)="stopBtn()">Stop</button>

此页面可以正确显示流 .
我通过stackoverflow或谷歌搜索了这个错误消息的许多关键字 . 但是没有得到任何好的答案 . 所以希望有人能为我解决它 . 谢谢 .

1 回答

  • 0

    TypeScript认为 this.video.srcObject 可以是 MediaStreamBlobMediaSource ,只有 MediaStream 具有 getTracks 方法,因此TypeScript警告您 this.video.srcObject 可能没有 getTracks 方法 . 如果你知道 this.video.srcObject 实际上是 MediaStream ,那么使用类型断言:

    (<MediaStream>this.video.srcObject).getTracks().forEach( stream => stream.stop());
    

相关问题