代码之家  ›  专栏  ›  技术社区  ›  Emanuela Colta

MediaStreamRecorder不是构造函数

  •  0
  • Emanuela Colta  · 技术社区  · 6 年前

    我是安格拉6的新手,我想用 MediaStreamRecorder . 我在定义 媒体流记录器 因为我一直在犯错误 TypeError: msr__WEBPACK_IMPORTED_MODULE_4__.MediaStreamRecorder is not a constructor . 不确定我应该如何或在哪里声明和定义 媒体流记录器 . 你能帮我做这个吗?

    我已经安装了 msr 模块,我的代码如下所示:

    import { Component,ViewChild, OnInit, Inject } from '@angular/core';
    import { LinksService } from 'demo/_services/links.service';
    import { Http,Response,Headers } from '@angular/http';
    import { MediaStreamRecorder} from 'msr';
    import { RecordRTC } from 'recordrtc';
    
    @Component({
      selector: 'demo-ceva',
      templateUrl: './ceva.component.html',
      styleUrls: ['./ceva.component.css'],
      providers: [
        {
          provide: SpeechRecognitionLang,
          useValue: 'en-US',
        },    
        SpeechRecognitionService,
      ],
    })
    export class CevaComponent { 
      public navigator: any;      
      public MediaStreamRecorder: any;    
      constructor( private http: Http, private service: SpeechRecognitionService, private links: LinksService ) { 
    this.record = () => {       
        var browser = <any>navigator;  
        var obj = { audio: true, video:false };
        browser.getUserMedia = (browser.getUserMedia || browser.webkitGetUserMedia || browser.mozGetUserMedia || browser.msGetUserMedia);     
        browser.mediaDevices.getUserMedia(obj).then(stream => {  
            var source = window.URL.createObjectURL(stream);      
            var config= { ... }  
            var recorder = new MediaStreamRecorder(stream, config);
            recorder.record();
            recorder.stop(function(blob) {     
                var blob = recorder.blob;
                console.log(blob);           
            });
       });
    });
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Emanuela Colta    6 年前

    作为这个问题的答案 post 建议,我的解决办法是 typings.d.ts 添加以下声明的文件:

    declare interface MediaRecorderErrorEvent extends Event {
      name: string;
    }
    
    declare interface MediaRecorderDataAvailableEvent extends Event {
      data : any;
    }
    
    interface MediaRecorderEventMap {
      'dataavailable': MediaRecorderDataAvailableEvent;
      'error': MediaRecorderErrorEvent ;
      'pause': Event;
      'resume': Event;
      'start': Event;
      'stop': Event;
      'warning': MediaRecorderErrorEvent ;
    }
    
    
    declare class MediaRecorder extends EventTarget {
    
      readonly mimeType: string;
      // readonly MimeType: 'audio/wav';
      readonly state: 'inactive' | 'recording' | 'paused';
      readonly stream: MediaStream;
      ignoreMutedMedia: boolean;
      videoBitsPerSecond: number;
      audioBitsPerSecond: number;
    
      ondataavailable: (event : MediaRecorderDataAvailableEvent) => void;
      onerror: (event: MediaRecorderErrorEvent) => void;
      onpause: () => void;
      onresume: () => void;
      onstart: () => void;
      onstop: () => void;
    
      constructor(stream: MediaStream);
    
      start();
    
      stop();
    
      resume();
    
      pause();
    
      isTypeSupported(type: string): boolean;
    
      requestData();
    
    
      addEventListener<K extends keyof MediaRecorderEventMap>(type: K, listener: (this: MediaStream, ev: MediaRecorderEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    
      addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
    
      removeEventListener<K extends keyof MediaRecorderEventMap>(type: K, listener: (this: MediaStream, ev: MediaRecorderEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
    
      removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
    

    在我的组件中,我可以使用 var mediaRecorder = new MediaRecorder(stream); 没有任何其他声明。“谢谢你,@fireglows,感谢你链接到这篇文章,谢谢你,@Tiberiu C.的回答!”!真的很有帮助。

        2
  •  0
  •   cancerbero    5 年前
    npm install -D @types/dom-mediacapture-record