问题标签 [web-mediarecorder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1062 浏览

javascript - 合并和定位两个媒体流

我正在尝试制作类似于
https://recordscreen.io/
的内容 ,它将用户相机定位在屏幕录制上

我现在分别有两个流。 我已经尝试
过定位,但我希望它在单个视频元素中进行记录

这仅显示网络摄像头。我希望能够将网络摄像头放置在屏幕录制的顶部。

0 投票
1 回答
3487 浏览

javascript - 使用 MediaRecorder 以 MP4 格式从网络摄像头录制视频

当我在支持 MP4 和 MediaRecorder(Linux 上的 Firefox)的浏览器中使用 JS MediaRecorder 以 MP4 格式录制网络摄像头时,网络摄像头启动但不记录。

当 MediaRecorder 的 mimeType 设置为时录制已经工作,video/webm但是当我将 mimeType设置为时video/mp4出现问题。

我用以下代码记录:

我希望网络摄像头在支持的浏览器中执行代码时开始录制,但是console.log没有输出,并且在控制台中出现以下错误:

NotSupportedError: Operation is not supported

我知道我的浏览器同时支持 mp4 和 MediaRecorder:

MP4:https: //caniuse.com/#search=mp4 媒体记录器:https ://caniuse.com/#search=mediarecorder

但只有 webm 录音有效。

0 投票
1 回答
753 浏览

google-chrome-extension - webm提取aac时,时长不一致

当我尝试从中提取 aac 时webm,持续时间会不一致。aac少了十分钟。不同webm的视频,差距也不一样。

webm视频由chrome extension chrome.tabCapture.capture生成

代码:

上面的代码会返回一个流,我会使用JS的MediaRecorder方法来处理这个流,最后保存为webm文件。

代码:

如果你不知道上面代码的含义,没关系,我将主要信息解释一下:

  1. 宽度:1920
  2. 高度:1080
  3. 转数:30
  4. 音频位:128000
  5. 视频位:2500000
  6. 哑剧类型:video/webm;codecs=vp9

我尝试了很多方法,如下所示:

但无一例外,都失败了。我被这个问题困扰了4天。

webm文件下载地址:https ://drive.google.com/file/d/1m4fC1hU-tXFPOZayrYCs-yteSTxw_TaW/view?usp=sharing

0 投票
0 回答
151 浏览

php - 如何通过 HTML 表单传递 MediaRecorder 录制的视频

我正在尝试通过 HTML 表单传递 MediaRecorder 文件,但它不起作用。代码如下:

这是记录音频的代码

这是通过表单接收数据的代码PHP

当我提交表单时,变量 $_POST 为空,如何将视频传递给 send_message_form.php 然后将其保存到 htdocs 子文件夹中?

0 投票
1 回答
337 浏览

c++ - 解码 MediaRecorder 产生的 webm 流

我正在尝试使用 ffmpeg API 解码来自浏览器的视频流。流由网络摄像头生成,并使用 MediaRecorder 以 webm 格式记录。我最终需要的是一个用于进一步处理的 opencv cv::Mat 对象向量。

我使用 uWebsocket 库编写了一个 C++ 网络服务器。视频流每秒通过 websocket 从浏览器发送到服务器一次。在服务器上,我将接收到的数据附加到我的自定义缓冲区并使用 ffmpeg API 对其进行解码。

如果我只是将数据保存在磁盘上,然后用媒体播放器播放它,它就可以正常工作。因此,浏览器发送的任何内容都是有效的视频。

我认为我没有正确理解自定义 IO 应该如何处理网络流,因为似乎没有任何工作。

自定义缓冲区:

自定义 IO 的 readAVBuffer 方法

大解码方法,应该返回它可以读取的任何帧

我期望发生的事情是连续提取 cv::Mat 帧,因为我向它提供越来越多的数据。实际发生的是,缓冲区被完全读取后,我看到:

然后即使稍后我增加它的大小,也不会从缓冲区中读取更多字节。

我在这里做的事情非常错误,我不明白是什么。

0 投票
0 回答
796 浏览

javascript - 在 Mac-Chrome 浏览器中录制来自 IOS 的 webrtc 流时,MediaRecorder Web API 无法正常工作

我正在使用 MediaRecorder Web API 来记录来自本地 IOS 应用程序的 webrtc 流。1. MediaRecorder 在录制来自 ios 本机应用程序的 webrtc 流(在 windows chrome 上工作)时不能在 MAC-chrome 浏览器中工作 2. 我能够在 UI 中显示来自 ios 的 webrtc 流,但不能记录相同的流 3 . 我注意到在开始录制流后没有调用 ondataavailable 方法。

我已使用此链接https://webrtc.github.io/samples/src/content/getusermedia/record/在我的应用程序中记录 webrtc 流

注意:此问题仅在更新本机 IOS 应用程序中的 webrtc 框架和 MediaRecorder 如果我们在本机 IOS 应用程序中使用旧的 webrtc 框架,则在 mac-chrome 中按预期工作。

谁能帮我为什么专门 ondataavailable 方法不在 MAC-chrome 中调用

我无法弄清楚这是 mac-chrome 中的 MediaRecorder 问题还是本机 IOS 应用程序中的最新框架问题?

0 投票
2 回答
455 浏览

javascript - 以可以在 Whatsapp 上共享的格式保存 MediaRecorder 输出

我正在开发一个使用MediaRecorder录制视频的网站,我发现我在 Mac 上的 Chrome 支持多种 WEBM 录制格式

喜欢

广告

以及 MKV 格式,如video/x-matroska, video/x-matroska;codecs=h264.

我在事件中添加了一个监听器,dataavailable将数据收集到一个名为 的数组mediaChunks中,在停止媒体记录器后,我可以URL.createObjectURL(new Blob(mediaChunks, { type: ... }))使用多种输出格式进行调用。

最后,为了下载文件,我创建了一个链接元素('a' 标记),并且可以在我将其download字段设置为filename.mkv, filename.webm,时配置文件扩展名filename.mp4

是否有任何记录格式 + 输出格式 + 文件名扩展的配置将创建一个可以在 WhatsApp 上共享和查看的文件?它可以在 iPhone 和 Android 设备上查看吗?

有很多格式和编解码器,但我尝试过的所有方法似乎都不起作用。我必须将我的用户推荐给格式转换网站之一(例如 zamzar.com),或者开始构建繁重的后端。

现在是 2019 年,当然应该有一个简单的方法来解决这个问题......

0 投票
1 回答
22 浏览

safari - 适用于所有浏览器的内联录音机

我需要为一个网络应用程序集成一个内联录音机并经历了以下 -

我为 Chrome、Firefox 和 Safari 测试了上述内容。以上解决方案均不适用于 Safari(版本 12.1.1)。

我知道 Safari 有点晚了,但我也希望polyfill能够工作。

有人可以建议最好的出路吗?

0 投票
1 回答
593 浏览

javascript - 启动/停止 MediaRecorder API 会导致 Chrome 崩溃

我正在实现 MediaRecorder API 作为记录 webm blob 以用作直播中的片段的一种方式。我已经获得了我需要的功能,但在调用时遇到了 Chrome 崩溃的问题,MediaRecorder.stop()并且MediaRecorder.start()定期多次崩溃。

下面是录制代码:

我还研究了性能,发现每次启动/停止都会启动一个新的音频和视频编码器线程。我认为这是主要问题,因为将间隔设置为 10 秒而不是 5 秒会创建更少的编码线程。多个编码线程的建立导致 chrome 滞后,然后在几次通过后最终崩溃。

如何在仍然能够启动/停止 MediaRecorder 的同时防止发生多个编码线程(启动/停止是我发现实现可单独播放的 webm 文件的唯一方法,否则每个后续 blob 都缺少 webm 标头部分)。

0 投票
1 回答
779 浏览

javascript - 使用 MediaRecorder 录制时如何获取录制时间

我正在编写一个简单的网络应用程序,它可以捕获来自麦克风的音频并用一个对象navigator.mediaDevices.getUserMedia记录它。MediaRecorder我或多或少遵循mdn 的示例

我想添加录制时间的实时显示。我目前依赖 .performance.now()这不是很优雅,更是如此,因为我允许用户暂停/恢复MediaRecorder. 有没有办法以某种方式直接从MediaRecorder对象本身获取时间?