chR*_*NaN 4 javascript html5 webrtc web-audio-api
我正在尝试通过getUserMedia()WebRTC的PeerConnection 发送由Web Audio API 获取和更改的音频。Web Audio API和WebRTC似乎可以执行此操作,但是我在理解如何执行此操作时遇到了麻烦。在Web Audio API中,该AudioContext对象包含一个方法createMediaStreamSource(),该方法提供了一种连接由getUserMedia()获得的MediaStream的方法。此外,还有一种createMediaStreamDestination()方法似乎可以返回带有流属性的对象。
我从getUserMedia()方法获取音频和视频。我遇到的麻烦是如何将这个流对象(包括音频和视频)传递给那些方法(例如:createMediaStreamSource())?我是否首先需要以某种方式从流(getAudioTracks)中提取音频,并找到一种将其与视频结合起来的方法?还是我按原样通过它而使视频不受影响?音频只能更改一次(在添加到PeerConnection之前)吗?
该createMediaStreamSource()方法将一个MediaStream对象作为其参数,然后AudioMediaStreamTrack将该对象中的第一个用作音频源。这可以与从getUserMedia()方法接收的MediaStream对象一起使用,即使该对象同时包含音频和视频。例如:
var source = context.createMediaStreamSource(localStream);
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,“上下文”是AudioContext对象,而“ localStream”是从getUserMedia()获得的MediaStream对象。该createMediaStreamDestination()方法创建一个目标节点对象,该目标节点对象的“流”属性中具有MediaStream对象。此MediaStream对象仅包含一个AudioMediaStreamTrack(即使源的输入流同时包含音频和视频或大量音轨):从源中的流获得的音轨的更改版本。例如:
var destination = context.createMediaStreamDestination();
Run Code Online (Sandbox Code Playgroud)
现在,在访问新创建的目标变量的stream属性之前,必须通过将所有节点链接在一起来创建音频图。对于此示例,假设我们有一个名为filter的BiquadFilter节点:
source.connect(filter);
filter.connect(destination);
Run Code Online (Sandbox Code Playgroud)
然后,我们可以从目标变量获取stream属性。这可用于添加到PeerConnection对象以发送到远程对等方:
peerConnection.addStream(destination.stream);
Run Code Online (Sandbox Code Playgroud)
注意:stream属性包含一个MediaStream对象,该对象仅具有更改的AudioMediaStreamTrack。因此,没有视频。如果还希望发送视频,则必须将此轨道添加到包含视频轨道的流对象中:
var audioTracks = destination.stream.getAudioTracks();
var track = audioTracks[0]; //stream only contains one audio track
localStream.addTrack(track);
peerConnection.addStream(localStream);
Run Code Online (Sandbox Code Playgroud)
请记住,addTrack如果MediaStream对象中已经有一个具有相同ID的轨道,则该方法将不会添加轨道。因此,您可能必须首先删除在源节点中获得的轨道。
通过调整中间节点内(源和目标之间)的值,声音应该可以随时更改。这是因为流在发送到另一个对等之前先经过节点。查看有关动态更改录制声音效果的示例(对于流,应该相同)。注意:我尚未测试此代码。尽管从理论上讲它是可行的,但是由于Web Audio API和WebRTC都处于起草阶段且尚未标准化,因此可能存在一些跨浏览器问题。我假设它可以在Mozilla Firefox和Google Chrome中运行。
参考
| 归档时间: |
|
| 查看次数: |
2112 次 |
| 最近记录: |