webapi - MediaRecorder API 块作为独立视频
问题描述
我正在尝试构建简单的应用程序,该应用程序将使用浏览器将视频从相机流式传输到远程服务器。对于从浏览器访问相机,我发现了一个很棒的WebRTC API: getUserMedia
.
现在要将其流式传输到服务器 IIUC,最好的方法是使用一些WebRTC_API
用于传输,然后使用一些服务器端库来处理它。
但是,起初我采用了一种不同的方法:我MediaRecorder
根据来自相机的流来使用用户。然后我将时间片设置为MediaRecorder.start()
几百毫秒,例如 200。我在 wrtMediaRecorder
中有一些与我观察到的不同步的假设:
我观察到奇怪的行为(与我的假设有关MediaRecorder
):
- 如果只有 1 个块上传到服务器 -> 它打开就好了。
- 如果有多个块 - >它们都没有正确加载,它们会给出错误:
Could not determine type of stream
. 但是,如果我用来ffmpeg
连接所有块 - 生成的文件就可以了。如果我在客户端连接blobs
from ,也会发生同样的情况MediaRecorder.ondataavailable
。
因此问题:
这些块理论上可以是独立的视频文件吗?或者这不是MediaRecorder
设计的目的?如果不是 - 那么为什么我们甚至可以选择timeslice
在其start()
方法中提供参数?
奖金问题
如果我们设置的timeslice
相对较小,例如 10 毫秒 -> 发送到的大量数据 blobMediaRecorder.ondataavailable
的大小为 0。我们可以在哪里找到一些关于timeslice
我们可以使用的最小值的保证/规范,以便数据 blob 是有意义的?
在文档中有以下内容:
如果时间片不是未定义的,那么一旦收集了最小时间片毫秒的数据,或者 UA 施加的某个最小时间片,以较大者为准,开始将数据收集到新的 Blob blob 中,并使用 DOM 将任务排队操作任务源,它使用 blob 在记录器上触发名为 dataavailable 的 blob 事件。
所以,我的猜测是它与某些大小为 0 的数据块有关。“UA强加的一些最小时间片”是什么意思?
附言
如果需要,很乐意提供代码。但问题不在于某些特定代码。这是为了了解背后的假设MediaRecorder API
以及它们存在的原因。
解决方案
该timeslice
参数不允许创建独立的媒体块;相反,它提供了定期保存数据(例如在文件系统上,或上传到服务器)的机会,而不是在内存中保存潜在的大型媒体内容。
推荐阅读
- linux - 如何更新 Argo CLI?
- javascript - e.preventDefault() 在 100% 的情况下不起作用
- pyspark - 如何在 json 文件可能具有不同数据大小的 spark 中正确读取 dynamodb json 数据(dynamodb 从 s3 导出的数据)
- python-3.x - 使用 k-means 和 Word2Vec 预测新数据点的集群
- c++ - 未找到入口点 - VS2019 OpenCV C++
- r - 连接两个动作按钮,在闪亮的仪表板中显示相同的 tabItem
- python - 使用 OpenCV 计算基本矩阵 - 我做错了什么
- scala - Apache Spark - Delta Lake 结构化流:空批次:0 导致空指针异常
- javascript - 为什么传递给 javascript 的 Drupal 数据对于不同会话中的所有用户仍然相同?
- php - 使用 firebase 和 php 反应原生后台通知