javascript - 从 navigator.mediaDevices.getUserMedia() 获取字节流?
问题描述
我知道如何检索例如。来自网络摄像头源的视频流:
const constraints = { video: true };
navigator.mediaDevices
.getUserMedia(constraints)
.then(mediaStream => {
// ** But how to get the a stream of bytes from here??? **
});
我找不到任何有关如何从 mediaStream 对象中检索字节流的适当文档。
这该怎么做?因为,假设我想将字节流式传输到服务器。
解决方案
媒体流录制 API
通过进一步研究 MDN 和与音频和视频相关的 HTML 5 API,我发现了MediaStream Recording API。
因此,要获取字节流(或一些可用的块),我们可以这样做:
const constraints = { video: true };
navigator.mediaDevices
.getUserMedia(constraints)
.then(mediaStream => {
// use MediaStream Recording API
const recorder = new MediaRecorder(stream);
// fires every one second and passes an BlobEvent
recorder.ondataavailable = event => {
// get the Blob from the event
const blob = event.data;
// and send that blob to the server...
};
// make data available event fire every one second
recorder.start(1000);
});
浏览器支持:
MediaStream Recording API 仍处于工作草案状态(2018 年 3 月)。目前仅在 Chrome 和 Firefox 中原生支持。
Polyfill: streamproc/MediaStreamRecorder
进一步阅读: 录制到音频文件
推荐阅读
- r - 从逗号分隔的字符向量创建路径链 tibble
- r - 使用非常大的数据集分析 R 中两点之间的空间数据
- python - 查找列表中的值是否大于其下方的项目
- c# - 如果添加了触发器,则不应用按钮默认样式
- python - PySpark 部分匹配列到字典值
- javascript - 如何使用 Jquery 从 html 中获取 id?
- linq - 使用 ef 核心中的 OR 条件基于所有可选参数的动态查询
- swift - 我有多个部分,每个单元格都有一个按钮,如果用户单击按钮,如何知道 indexpath.row 和 indexpath.section
- c++ - 如何使用 ExternalProject_Add 静态链接到 NATS C 库
- flutter - 在小部件对话框外插入小部件 - Flutter