- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试设置视频聊天,其中两个对等连接交换视频。这发生在创建数据通道之后。所以这是事件的过程:
但是,如果我切换第 2 步和第 3 步(因此 answerer 首先开始流式传输),那么事情就会开始出错。只有在步骤 1、3 和 2 都发生后,双方才必须开始流式传输。
我很确定这与 SDP 报价和答案的顺序有关。
当我让应答者在它有一个onnegotiationneeded 事件时创建一个新提议时,行为是不同的但仍然不稳定。
我现在对如何添加报价和答案一无所知。
代码如下:
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
PeerConnection = window.mozRTCPeerConnection || window.webkitRTCPeerConnection || window.RTCPeerConnection;
IceCandidate = window.mozRTCIceCandidate || window.RTCIceCandidate || window.RTCIceCandidate;
SessionDescription = window.mozRTCSessionDescription || window.webkitRTCSessionDescription || window.RTCSessionDescription;
var videoOfferer = document.getElementById('videoOfferer');
var videoAnswerer = document.getElementById('videoAnswerer');
var buttonOfferer = document.getElementById('buttonOfferer');
var buttonAnswerer = document.getElementById('buttonAnswerer');
var servers = {
iceServers: [
{url: "stun:23.21.150.121"},
{url: "stun:stun.1.google.com:19302"}
]
};
var offerer = new PeerConnection(servers), answerer = new PeerConnection(servers);
var channelOfferer = null, channelAnswerer = null;
offerer.onicecandidate = function(e) {
if(e.candidate == null) return;
answerer.addIceCandidate(new IceCandidate(e.candidate), function(){}, error);
};
offerer.onaddstream = function(e) {
videoOfferer.src = URL.createObjectURL(e.stream);
videoOfferer.play();
};
answerer.onicecandidate = function(e) {
if(e.candidate == null) return;
offerer.addIceCandidate(new IceCandidate(e.candidate), function(){}, error);
};
answerer.onaddstream = function(e) {
videoAnswerer.src = URL.createObjectURL(e.stream);
videoAnswerer.play();
};
function offerCreated(sdp) {
console.log('offer');
offerer.setLocalDescription(new SessionDescription(sdp), function() {
answerer.setRemoteDescription(new SessionDescription(sdp), function() {
answerer.createAnswer(answerCreated, error);
}, error);
}, error);
}
function answerCreated(sdp) {
console.log('answer');
answerer.setLocalDescription(new SessionDescription(sdp), function() {
}, error);
offerer.setRemoteDescription(new SessionDescription(sdp), function() {
}, error);
}
function error() {}
buttonOfferer.addEventListener('click', function() {
navigator.getUserMedia({audio: true, video: true}, function(stream) {
offerer.addStream(stream);
}, function(){});
});
buttonAnswerer.addEventListener('click', function() {
navigator.getUserMedia({audio: true, video: true}, function(stream) {
answerer.addStream(stream);
}, function(){});
});
channelOfferer = offerer.createDataChannel('channel', {reliable: true});
offerer.createOffer(offerCreated, error);
answerer.ondatachannel = function(e) {
channelOfferer = e.channel;
channelOfferer.onmessage = function(e) {
console.log(e.data);
};
channelOfferer.onmessage = function(e) {
console.log(e.data);
};
// these are added later
offerer.onnegotiationneeded = function() {
offerer.createOffer(offerCreated, error);
};
answerer.onnegotiationneeded = function() {
offerer.createOffer(offerCreated, error);
};
};
最佳答案
我认为问题出在第 3 步,当回答者添加视频时,您让提供者启动。在真正的远程调用中,提议者怎么知道要这样做?
据我所知,当应答者需要重新协商时, Angular 色实际上被颠倒了,因为出于重新协商的目的:重新协商者充当提议者,而非重新协商者充当提议者回答者。
换句话说:对pc.onnegotiationneeded
的响应总是:
createOffer()
,setLocalDescription(描述)
pc.localDescription
给对方不分边。
我不是 SDP 方面的权威,所以我不确定这是正确的方法,但是 the examples in the spec至少向我表明上述步骤是正确的,并且我是这样工作的。
我已经在 this Firefox jsfiddle 中对此进行了测试它似乎有效。 fiddle 使用说明:
Offer
按钮并复制报价。addTrack
,另一端应该会显示视频。addTrack
,您应该可以双向播放视频。这会产生眩光吗?我敢肯定,可能有更好的方法来处理这个问题,但这似乎对我有用。
关于javascript - 如何使用 offer/answer 交换来自两个对等连接的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29511602/
我正在学习 spring 并陷入了这个错误。我已经清理了项目,运行了 Maven build,它运行了构建成功并刷新了目标,但我仍然没有运气。这是代码: 错误 Apr 21, 2015 8:49:30
我已将以下 html 代码添加到我们网站之一的产品页面中: 30,00 €
题目地址:https://leetcode.com/problems/shopping-offers/description/ 题目描述 InLeetCode Store, there are s
我通过 MyRepository.myConflatedChannel.offer(myvalue) 发送一个值. 然后我希望在 collect { } 收到它或 onEach { }我的 ViewM
我想知道我可以使用 In-app-purchase 来做以下事情。 我想使用 IAP 在商店中进行交易。 (在那家商店获得 50%)。 假设我的 IAP 是 10 美元,但今天我提供 10% 的购买折
我想使用亚马逊 API 获取“offer-listing”。我自己探索过,但没有得到它的线索。如果有人向我建议 API 端点以获取报价列表或替代方案,那就太好了 最佳答案 您可以取消产品页面或使用亚马
我在数据库中研究了这个问题,搜索了问题,发现了两个不同的错误。我已经确定 503 错误是亚马逊阻止了我,但我得到了一个不同的错误,该错误是相同的,但没有 503 返回。我无法破译差异。任何人都可以提供
我正在尝试设置视频聊天,其中两个对等连接交换视频。这发生在创建数据通道之后。所以这是事件的过程: offerer 创建数据通道,offerer 创建并提供,answerer 创建答案。到目前为止,一切
我正在尝试使用类 offer 设置第一个 div 的背景颜色。我认为 .offer:first-child 可以解决问题,但这行不通。 我也尝试过使用 :nth-child(1),但这也不起作用。 非
我想构建一个小型应用程序,它将访问某些网站并从这些网站读取特定数据,我希望该应用程序尽可能通用,以便以后可以在我想要的任何网站上运行。那么有没有什么好的方法可以使用.net来解析网站呢? 最佳答案 我
我正在使用 http://schema.org/Offer对于分类网站页面。一些用户提交了他们销售商品的价格,但有些用户没有。当他们的广告没有价格时,我会跳过 price 和 priceCurrenc
我刚刚将我的 Android 应用程序上传到 Google Play 商店并发布了它。然后我注意到它旁边有一个 Offered By 和我的开发者名称。无论如何,我可以更改Offered By 之后的
我有一个链接阻塞队列,我在其中执行插入和删除操作。 在链接阻塞队列的情况下,我需要知道哪个更好 put 或 offer。 性能参数是 CPU 利用率、内存和总吞吐量。 应用程序使用实时系统,其中可以有
一、题目 给定一个字符串 s ,请计算这个字符串中有多少个回文子字符串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的 子串。 二、示例 输入:s = "abc" 输出
题目: 输入两个链表,找出它们的第一个公共节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], list
题目: 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4
题目: 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点。 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val =
为什么服务器不能使用 DHCP 发现和请求的源 IP 中使用的目标 IP 地址 0.0.0.0?它可以使用从 DHCP 发现和请求中获知的客户端 MAC 地址将帧定向到适当的客户端机器。 最佳答案 单
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
CompletableDeferred文件说 All functions on this interface and on all interfaces derived from it are thr
我是一名优秀的程序员,十分优秀!