Page 302 - Web性能权威指南
P. 302
var ice = {"iceServers": [
{"url": "stun:stunserver.com:12345"},
{"url": "turn:user@turnserver.com", "credential": "pass"}
]};
var signalingChannel = new SignalingChannel(); ➌
var pc = new RTCPeerConnection(ice); ➍
navigator.getUserMedia({ "audio": true, "video": true }, gotStream, logError); ➎
function gotStream(evt) {
pc.addstream(evt.stream); ➏
var local_video = document.getElementById('local_video');
local_video.src = window.URL.createObjectURL(evt.stream); ➐
pc.createOffer(function(offer) { ➑
pc.setLocalDescription(offer);
signalingChannel.send(offer.sdp);
});
}
pc.onicecandidate = function(evt) { ➒
if (evt.candidate) {
signalingChannel.send(evt.candidate);
}
}
signalingChannel.onmessage = function(msg) { ➓
if (msg.candidate) {
pc.addIceCandidate(msg.candidate);
}
}
pc.onaddstream = function (evt) {
var remote_video = document.getElementById('remote_video');
remote_video.src = window.URL.createObjectURL(evt.stream);
}
function logError() { ... }
</script>
➊ 输出本地流的视频元素
➋ 输出远程流的视频元素
➌ 初始共享的发信通道
➍ 初始端连接对象
➎ 取得本地音频和视频流
➏ 通过端连接注册本地 MediaStream
➐ 把本地视频流输出到视频元素(本地视图)
292 | 第 18 章