问题标签 [mediastream]

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 投票
2 回答
817 浏览

audio-recording - AudioBuffer 的“getChannelData()”等效于 MediaStream(或 MediaStreamAudioSourceNode)?

我在 mp3 文件上使用AudioContext's decodeAudioData,这给了我一个AudioBuffer. 有了这个音频缓冲区,我继续使用getChannelData().

现在我想使用相同的代码来绘制 a 的音频数据的波形MediaStream,这意味着我需要相同类型的输入/数据。我知道 aMediaStream包含实时信息,但必须有一种方法可以从MediaStreamas访问每个新数据

包含 PCM 数据的 Float32Array

这就是AudioBuffer' 的getChannelData回报。

我试图MediaStream用 a包装MediaStreamAudioSourceNode并将其输入 aAnalyserNode以使用getFloatFrequencyData()(返回 a Float32Array),但我可以看出数据与我从中获得的数据不同getChannelData()。也许它不是“PCM”数据?如何获取“PCM”数据?

希望这很清楚。谢谢您的帮助!

0 投票
1 回答
28 浏览

webrtc - MediaStreamTrack - 设置源 --W3C 文档遗漏参考

在阅读文档时,我得到一个提示,可以从本地媒体(视频/音频)文件添加源并使用 PeerConnection 流式传输。

但是句子: 注意这个文档只描述了麦克风和摄像头类型源的使用,其他源类型的使用在其他文档中描述。

那么,有人有这些文件吗?

0 投票
1 回答
763 浏览

getusermedia - MediaStream 引用未删除/为什么我的网络摄像头一直很忙?

背景/问题

使用navigator.mediaDevices.getUserMedia(constraints)我可以获得各种设备的 MediaStream 对象,其中包括网络摄像头和麦克风,允许您对通过的数据做任何您想做的事情。

如果没有可用于给定约束(视频、音频等)的流,则该方法getUserMedia返回一个Promise解析媒体流的方法,如果我确实获得了流对象但不保存对 MediaStream 的任何引用 - 我明白垃圾收集器应将其删除。

我观察到的是流没有被删除-例如,如果我为网络摄像头获取流,即使我没有对流的引用,它也会一直很忙。

问题

  1. 如果我不保存对 MediaStream 对象的引用,它会存储在哪里?
  2. 为什么垃圾收集器不删除它?
  3. 为什么我的网络摄像头一直很忙?
0 投票
1 回答
2643 浏览

canvas - CanvasCaptureMediaStream / MediaRecorder 帧同步

使用CanvasCaptureMediaStream和 MediaRecorder 时,有没有办法在每一帧上获取一个事件?

我需要的是没有什么不同requestAnimationFrame(),但我需要 CanvasCaptureMediaStream(和/或 MediaRecorder)而不是窗口。MediaRecorder 可能以与窗口不同的帧速率运行(可能以不规则的可分速率运行,例如 25 FPS 与 60 FPS),因此我想以其帧速率而不是窗口的帧速率更新画布。

0 投票
0 回答
1154 浏览

javascript - 几个缓冲区后无法附加媒体源缓冲区

我正在开发一个 Web 应用程序,其中应用程序下载加密的数据块。然后我必须解密并播放视频。但我不能让用户等待所有解密。因此我正在使用媒体流 API。这是工作。但是在解密最后一个块后我收到了这个错误。

“未捕获的 DOMException:无法在 'MediaSource' 上执行 'addSourceBuffer':此 MediaSource 已达到其可以处理的 SourceBuffer 对象的限制。不能添加其他 SourceBuffer 对象。(...)”

0 投票
1 回答
109 浏览

webrtc - 如何测试两个 MediaStream 的相等性?

我想知道是否有办法确定两个MediaStreams是否相等

“平等”是什么意思?

我想确定两个流是否使用相同的硬件源(使用相同的麦克风和摄像头)。获取streamB完全相同的约束streamA意味着它们是相等的。

这是我迄今为止尝试过的:

  1. 通过 MediaStream 进行比较,id例如:根据规范,streamA.id == streamB.id 这会消失:

创建 MediaStream 对象时,用户代理必须生成标识符字符串,并且必须将对象的 id 属性初始化为该字符串。一个好的做法是使用 UUID [rfc4122],它的规范形式为 36 个字符。为避免指纹识别,实现在生成 UUID 时应使用 RFC 4122 的 4.4 或 4.5 节中的形式。

  1. 比较MediaStreamTracksid的's - 同样的故事,每个轨道生成一个 UUID。

  2. labels比较在当前 Chrome 中包含硬件名称/标识符的曲目。然而,这与我正在寻找的非常接近(强调我的):

用户代理可以标记音频和视频源(例如,“内部麦克风”或“外部 USB 网络摄像头”)。label 属性必须返回对象对应源的标签(如果有)。如果相应的源有或没有标签,则属性必须改为返回空字符串

我可以采取不同的方法吗?我应该永远不会遇到比较两个媒体流的情况吗?你会说我可以信任这个label属性吗?

谢谢你的时间。

0 投票
1 回答
920 浏览

javascript - js+html5 getUserMedia 与麦克风冲突(android)(手机认为电话处于活动状态)

已编辑 - 在帖子底部更新

我正在使用phonegap为android构建一个基于web的应用程序,我遇到了这个问题,在初始化getusermedia之后,当我使用音量调低/调高按钮时,音量控制是用于通话而不是扬声器,即使我没有' t开始新的录音...此外,我注意到手机实际上在应用程序运行时认为它在通话中,例如:我启动我的应用程序,然后我打开whatsapp并尝试录制消息正在发送的语音消息取消。

我知道下一段是问题(我评论了它,没有问题)

设备准备好后调用此函数

我还在下面添加了开始录制和停止录制功能

startRecording 在 touchstart 上录制按钮时开始 stopRecording 当 touchend on record 按钮时调用 谢谢你的帮助

更新

冲突与麦克风有关,因为流始终是实时的,而不仅仅是在录制时。现在它工作正常,但仍然需要在通话时禁用录音按钮,否则它会发生冲突并可能导致应用程序崩溃或将麦克风与所有设备断开连接,甚至可能断开连接。

0 投票
0 回答
520 浏览

android - android webrtc本地流中没有录制音频?

我在 android 活动中遇到一个错误,请帮助解决它。我已经为 webrtc android 使用了 libjingle 库。

错误是:-

状态 -38
WebRtcAudioRecord:AudioRecord.startRecording 失败 StartRecording
失败!
WebRtcAudioRecord:InitRecording() 在没有 StopRecording() 的情况下调用了两次
InitRecording 失败!

第一次完美工作,但是当我从视频通话活动回到家庭活动并再次进入视频活动时,就会出错。

在这种情况下,视频完美运行,但音频无法录制。

我已经从远程流中获取了音频和视频,但本地流只获取视频并发送给 ice 候选者,但没有记录音频。

如何解决?请帮帮我。

谢谢你。

0 投票
1 回答
2639 浏览

javascript - 从画布和视频元素创建 MediaStream

我正在创建一个 MediaStream 对象并使用 captureStream() 函数从画布向其添加视频轨道。这工作正常。

但是,我正在尝试将音频添加为与视频元素分开的轨道。我似乎找不到从 html 视频元素中获取 AudioTrack 对象的方法。

目前 Chrome 不支持 HTMLMediaElement.audioTracks。根据 mozilla 开发者网站,我应该能够使用 HTMLMediaElement.captureStream() 返回一个 MediaStream 对象,我应该能够从中检索单独的曲目,但我只是得到“captureStream 不是函数”错误。

也许我遗漏了一些非常明显的东西,但我将不胜感激任何帮助。

以下是我当前的代码:

0 投票
1 回答
2245 浏览

javascript - 你能在不播放的情况下获得 webrtc 音频流的音量吗?

我有一堆在 angularjs 视图中表示的 webrtc 流,我想可视化哪些流超过了某个音量阈值,然后我可以一次收听那些流。这可能吗?我发现的所有内容似乎都要求您将流附加到您的音频上下文以计算音量。这会播放流。你能在不播放流的情况下计算音量吗?我一直在使用 hark.js 进行音量阈值检测。

我的流来自第 3 部分 rtc 库,但最终我有一堆 webrtc 流,并且想一次收听一个流,同时可视化哪些流在制造噪音。大多数这样的例子似乎在广播公司方面都有这种逻辑。

hark 代码几乎执行以下操作:

-开始

-环形

- 我也从icelink、3rd 方webrtc 库、对象中获取流。视图中的视频集合是从一堆像这样的流中创建的

我正在尝试覆盖一些视觉指示器以显示不同视频流的声级而不播放它们