如何使用opentok流音频文件?

街机

在opentok中,使用OT.initPublisher,您只能将deviceId传递给audioSource。有人知道流音频文件的方法吗?

例如,我这样做:

navigator.getUserMedia({audio: true, video: false},
function(stream) {
    var context = new AudioContext();
    var microphone = context.createMediaStreamSource(stream);
    var backgroundMusic = context.createMediaElementSource(document.getElementById("song"));
    var mixedOutput = context.createMediaStreamDestination();
    microphone.connect(mixedOutput);
    backgroundMusic.connect(mixedOutput);
},
handleError);

这样,我就可以拥有声音和音乐流,但是如何将其发送给发布者?有可能还是有其他方法可以做到这一点?

艾哈姆

更新:现在有一种正式的方法,使用提供给videoSourceaudioSource属性OT.initPublisher,请参阅文档:https : //tokbox.com/developer/sdks/js/reference/OT.html#initPublisher

这是一个如何将画布元素作为视频轨道流式传输的示例:https : //github.com/opentok/opentok-web-samples/tree/master/Publish-Canvas

您可以应用相同的技术来流式传输音频轨道。


旧答案:

目前尚无法使用官方支持的API,但是有一种方法可以做到这一点。

请参阅有关相机滤镜的TokBox博客文章:https ://tokbox.com/blog/camera-filters-in-opentok-for-web/

为了在流到达OpenTok JS SDK之前对其进行修改,我们使用mockGetUserMedia函数来拦截流:

https://github.com/aullman/opentok-camera-filters/blob/master/src/mock-get-user-media.js

您可以使用进行音频混合的函数来调用mockGetUserMedia。像这样:

mockGetUserMedia(function(originalStream) {
  var context = new AudioContext();
  var microphone = context.createMediaStreamSource(originalStream);
  var backgroundMusic = context.createMediaElementSource(document.getElementById("song"));
  var mixedOutput = context.createMediaStreamDestination();
  microphone.connect(mixedOutput);
  backgroundMusic.connect(mixedOutput);

  var stream = mixedOutput.stream;
  originalStream.getVideoTracks().map(function(track) {
    stream.addTrack(track);
  });
  return stream;
});

注意:我尚未测试此功能,但它将引导您正确的方向。请记住,此技术容易出错,并且TokBox并未正式支持该技术。

我们目前正在开发一项新功能,该功能将启用该用例,但我无法估计何时可以使用该功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章