Safari 录制的 Angular 8 中的视频加速问题

Posted

技术标签:

【中文标题】Safari 录制的 Angular 8 中的视频加速问题【英文标题】:safari recorded video speed up issue in angular 8 【发布时间】:2021-11-16 14:25:48 【问题描述】:

我已经在我的 Angular 项目中实现了 WebRTC 来录制视频。保存后我们可以将其发送到附件。这在 Windows 操作系统中正常工作,但在 mac safari 中,视频加速,30 秒视频仅变为 3 秒。这只发生在 safari 中。

这里开始视频。

  mediaDevices.getUserMedia( video: true, audio: true )
  .then(webcamStream => 
    this.webcamStream = webcamStream;
  )

MediaRecorder 代码:

this.recorder = new MediaRecorder(this.webcamStream, mimeType: 'video/mp4');
this.recorder.onstart = () => 
    this.zone.run(() => 
      this.behaviorService.isRecording(true); 
    );
this.recorder.onstop = this.onRecorderStopped;
this.recorder.ondataavailable = (event) => 
    this.zone.run(() =>  
      this.data = [...this.data, event.data]; 
  ); 
this.recorder.start();

当视频停止时,它会保存在 video/webm;codecs=h264 这个 mimeType 中。 我也试过 video/mp4 但它也不起作用

我可以得到任何适用于这两种操作系统的解决方案吗?

【问题讨论】:

您的 ondataavailable() 处理程序应该执行 this.data.push(event.data) 而不是您所拥有的。而且,当你去保存数据时,你如何处理数据。请edit您的问题。当您在评论中发布代码时,它很难阅读。 【参考方案1】:

Safari 因.getUserMedia() 和 MediaRecorder 类而臭名昭著。

我可以得到在这两种操作系统中都可以使用的任何解决方案吗?

还没有。纠缠苹果。同时在 MacOS 上使用 Chrome:它可以工作。

可能有一些技巧可以推荐以使其变得更好。但是您没有向我们展示您的 MediaRecorder 代码:这是压缩流的地方。

【讨论】:

在 MediaRecorder 中,我使用了以下代码,this.recorder = new MediaRecorder(this.webcamStream, mimeType: 'video/mp4'); this.recorder.onstart = () => this.zone.run(() => this.behaviorService.isRecording(true); ); this.recorder.onstop = this.onRecorderStopped; this.recorder.ondataavailable = (event) => this.zone.run(() => this.data = [...this.data, event.data]; ); this.recorder.start();

以上是关于Safari 录制的 Angular 8 中的视频加速问题的主要内容,如果未能解决你的问题,请参考以下文章

HTML5 录制中等质量的视频以供 Safari 播放

如何在 iOS 和 macOS 上的 Safari 中使用网络摄像头录制视频?

2021 年适用于包括 safari 在内的所有浏览器的 pwa javascript 视频录制应用程序

如何在 iOS Safari 上使用 Daily.co 录制麦克风同时进行视频通话

找不到变量:Safari 中的 MediaRecorder

Angular.js 移动浏览器应用程序在 iOS 8 Safari 上冻结