将音频和视频轨道组合到新的媒体流中
Combining audio and video tracks into new MediaStream
我需要使用来自不同MediaStreams的音频和视频创建一个MediaStream。 在 Firefox 中,我可以从一系列轨道中实例化一个新的 MediaStream:
var outputTracks = [];
outputTracks = outputTracks.concat(outputAudioStream.getTracks());
outputTracks = outputTracks.concat(outputVideoStream.getTracks());
outputMediaStream = new MediaStream(outputTracks);
不幸的是,这在Chrome中不起作用:
引用错误: 未定义媒体流
Chrome 中是否有替代方法可以合并来自不同流的曲目?
仍然以webkit为供应商前缀:
var outputTracks = [];
outputTracks = outputTracks.concat(outputAudioStream.getTracks());
outputTracks = outputTracks.concat(outputVideoStream.getTracks());
outputMediaStream = new webkitMediaStream(outputTracks);
这是此问题的更新解决方案,
根据MediaStreamAPI,可以将多个轨道添加到同一个MediaStream,如下所示:
假设您从getUserMedia获得了流:
const constraints = {audio: true, video: true}
navigator.mediaDevices.getUserMedia(constraints)
.then(function(stream) {
// stream is of MediaStream type
let newStream = new MediaStream();
// getTracks method returns an array of all stream inputs
// within a MediaStream object, in this case we have
// two tracks, an audio and a video track
stream.getTracks().forEach(track => newStream.addTrack(track));
// now play stream locally, or stream it with RTCPeerConnection or Peerjs
let mediaPlayer = document.getElementById('player');
mediaPlayer.srcObject = newStream;
})
上面的代码将提示用户访问他/她的麦克风和摄像头,然后一旦用户授予权限,它将运行回调,为我们提供一个流,这是一个 MediaStream 对象。此媒体流包含两个轨道,一个用于音频,一个用于视频。然后,我们使用addTrack将每个单独的轨道添加到全新的MediaStream对象中,最后,我们将新创建的流放在HTML元素中。
请注意,如果您将 CanvasCaptureMediaStreamTrack 传递给 addTrack 方法,它也可以工作。
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 根据id将json数组组合为一个json数组
- 接受不在列表中的值-引导组合框
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 组合两个javascript函数
- Telerik rad组合框多列数据绑定
- 触发媒体查询断点时刷新页面
- 组合 2 个 JavaScript .scroll 函数
- 如何使用jquery组合两个数组
- 让javascript知道epub3电子书中何时播放媒体覆盖
- onChange不足以从Dojo组合框触发查询
- 组合承诺和非承诺值
- 所有控件的组合框
- 媒体查询/matchMedia上的脚本
- 在D3中组合多个事件
- 使用按钮和媒体查询切换显示状态
- AngularJS-如何只对多个事件的组合采取行动
- 如何在服务、技能、投资组合等方面添加滑动效果
- 如何在没有插件和Wordpress的情况下创建共享社交媒体
- 将音频和视频轨道组合到新的媒体流中