在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);
这样,我就可以拥有声音和音乐流,但是如何将其发送给发布者?有可能还是有其他方法可以做到这一点?
更新:现在有一种正式的方法,使用提供给的videoSource
和audioSource
属性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] 删除。
我来说两句