gpt4 book ai didi

javascript - RTCPeerConnection.ontrack 事件未触发

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:42:09 31 4
gpt4 key购买 nike

我接触 WebRTC 时遇到了一个问题,即 RTCPeerConnection.ontrack 事件不会在创建新的 MediaStreamTrack 对象时触发(通过 RTCPeerConnection.addTrack() 函数)。

使用教科书 WebRTC getUserMedia 示例,当单击开始按钮时,我从我的笔记本电脑的相机中获取了一个流,我将其设置为一个元素(本地)的 srcObject。单击“调用”按钮时,我对抓取的流使用 addTrack 方法,我将其保存在全局 localStream 变量中。此时全局定义的 ontrack 事件处理程序应该触发并给我第二个视频,对吗?不过,没有骰子。

我能够让它与 addStream 和 onaddstream 一起工作 - 但两者都已从最新的 WebRTC 规范中删除,并且不受最新版本的 Chrome 和 FireFox 的支持。

附上图片和脚本 - 任何指导将不胜感激!

Pic with Web Console output

'use strict';

var localStream;
var yourVideo = document.querySelector('#yours');
var theirVideo = document.querySelector('#theirs');
var callBtn = document.querySelector('#callBtn');
var startBtn = document.querySelector('#startBtn');
startBtn.onclick = hasUserMedia;
callBtn.onclick = call;

var cfg = null;
var pc1 = new RTCPeerConnection(cfg);
var pc2 = new RTCPeerConnection(cfg);

pc1.ontrack = function(e){
console.log("ontrack fired!");
theirVideo.srcObject = e.streams[0];
}

function hasUserMedia(){
console.log("entering hasUserMedia()...");
navigator.mediaDevices.getUserMedia({video: true, audio: false}).then(function(stream){

localStream = stream;
console.log("stream val: " + localStream);

yourVideo.srcObject = stream;

});
}

function call(){
console.log("stream val @ call(): " + localStream);
localStream.getTracks().forEach(track => pc1.addTrack(track, localStream));
}

index.html

<html lang="en">
<head>
<meta charset="utf-8" />
<title>Learning WebRTC - Chapter 4: Creating a
RTCPeerConnection</title>
<style>
body {
background-color: #3D6DF2;
margin-top: 15px;
}
video {
background: black;
border: 1px solid gray;
}
#container {
position: relative;
display: block;
margin: 0 auto;
width: 500px;
height: 500px;
}
#yours {
width: 150px;
height: 150px;
position: absolute;
top: 15px;
right: 15px;
}
#theirs {
width: 500px;
height: 500px;
}
</style>
</head>
<body>
<div id="container">
<video id="yours" autoplay></video>
<video id="theirs" autoplay></video>
<button id="startBtn">Start</button>
<button id="callBtn">Call</button>
</div>
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
<script type="text/javascript" src="main.js"></script>
</body>
</html>

最佳答案

Firefox 和 Chrome 仍然支持 onaddstream。 Chrome 尚不支持 addTrack,您仍然可以使用 addStream(尽管 Firefox 提示)。

您的脚本也缺少 SDP 和 ICE 候选项的交换,以便开火。

检查 https://webrtc.github.io/samples/src/content/peerconnection/pc1/一个完整的工作示例。

关于javascript - RTCPeerConnection.ontrack 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41145823/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com