我正在使用webrtc + janusgateway + streamCapture构建流媒体服务。
这开始播放视频:
public streamVideo() {
var video = $('#video1').get(0);
var stream;
video.onplay = () => {
if (video.captureStream) {
stream = video.captureStream();
} else if (video.mozCaptureStream) {
stream = video.mozCaptureStream();
} else {
alert('captureStream() not supported');
}
console.log(stream);
$("#secondvideoforll").get(0).srcObject = stream;
this.sfutest.createOffer(
{
media: { audioRecv: 0, videoRecv: 0, audioSend: 1, videoSend: 1}, // Publishers are sendonly
stream: stream,
success: (jsep) => {
Janus.debug("Got publisher SDP!");
Janus.debug(jsep);
var publish = { "request": "configure", "audio": 1, "video": 1 };
this.sfutest.send({"message": publish, "jsep": jsep});
},
error: (error) => {
Janus.error("WebRTC111 error:", error);
}
});
}
}
视频播放效果很好,但是当我尝试创建一个优惠(以及进一步的addStream)时。我收到这个错误:
WebRTC111 error: DOMException [InternalError: "Cannot create an offer with no local tracks, no offerToReceiveAudio/Video, and no DataChannel."
code: 0
nsresult: 0x0]
同样的优惠创建(没有stream参数)适用于网络摄像头的快照,但不适用于视频流。
我发现的主要区别是网络摄像头使用:LocalMediaStream
,而我的streamCapture
使用MediaStream。
关于这个的任何想法?
答案 0 :(得分:0)
调用video.captureStream()时getTracks()返回空数组,但1.5秒后,它会按预期返回曲目。
将其添加到文档用途,因为其他人可能会发现这一点令人困惑。
解决方案:
setInterval(function(){
// We wait till the mediaTracks are added to mediaStream
console.log(stream.getTracks());
// Further actions with the mediaStream
}, 1000);
谢谢!