webrtc - 视频得到blob,但它仍然是黑色的
Posted
技术标签:
【中文标题】webrtc - 视频得到blob,但它仍然是黑色的【英文标题】:webrtc - video get blob, but it remain black 【发布时间】:2012-08-24 17:21:04 【问题描述】:我使用 chrome 21 运行我的 webrtc 代码。
如果我在同一个 chrome 中打开两个选项卡,然后打开带有 webrtc 代码的页面。 一个选项卡用于发送视频流;一个标签用于接收视频流 它工作正常。
但是,如果我使用两种隐身模式或两种不同的 chrome 浏览器打开页面, 我可以正确获取 sdp 和 candidate 信息。看来视频可以解码信息。
在远程视频中,我只能看到
此外,它似乎崩溃了。我试图点击“关闭 chrome”,但没用。
有人有类似的问题吗?
【问题讨论】:
【参考方案1】:在测试WebRTC时,我发现当我们在错误地方调用peerConnection.addStream(…)
时会出现这种情况----
您必须记住,在 WebRTC 中排序非常重要!
更新时间:2014 年 7 月 17 日星期四下午 6:36(UTC)
以下情况会出现空白视频:
-
当您的 SSL 证书已过期或包含无效条目时,您正在使用 STUN。
您正在使用 STUN,但它是阻止或隐藏外部 IP 地址或某些端口的公司防火墙、医院网络或专用网络。
两个对等方都有无效的 sendrecv/sendonly/recvonly 对
提供者没有附加流,或者是 Firefox,如果用户仅附加音频流但您使用的是
OfferToReceiveVideo:true
,则会失败
您正在检查htmlMediaElement.HAVE_CURRENT_DATA
或mediaElement.paused
或mediaElement.currentTime
,而它是已知有关这些属性的问题的android。
解决方案?
-
使用来自 XirSys 的 TURN 或 install your own。
确保您使用的是有效的 SSL 证书或改用 HTTP。
确保提供者附加了流;还要确保根据附加的流使用
OfferToReceiveAudio
/OfferToReceiveVideo
。
确保您没有修改 SDP;还尝试比较两个同行之间的 SDP 并找出不匹配。
现在,代码的顺序是一种罕见的问题,因为我们都知道应该在创建报价或答案之前调用addStream
;即使是重新协商的会议。
尝试使用chrome://webrtc-internals
和Firefox 的about:config
来查看这些浏览器内部发生了什么;并始终将控制台日志用于 onIceConnectionStateChange
事件,这有助于您检查 ICE-Agent failed
是否在 ICE 连接检查过程中或...
有时为提供者设置-remote-sdp 太早,会导致异常。始终将onSdpError
用于createOffer
/createAnswer
和setLocalDescription
/setRemoteDescription
,例如
peer.setRemoteDescription(remoteSDP, onSdpSuccess, onSdpFailure);
一些演示资源:
-
https://github.com/muaz-khan/WebRTC-Experiment / Demos
https://github.com/mozilla/webrtc-landing
和https://www.webrtc-experiment.com/docs/TURN-server-installation-guide.html
【讨论】:
该过程是在创建报价时---您必须在创建 PeerConnection 后立即添加流---但是在创建答案时---您必须在调用 setRemoteDescription 后添加流---我测试过;它对我有用! --- 这只是我的个人经验!!!! pc2.onaddstream = gotRemoteStream; pc2.setRemoteDescription(pc2.SDP_OFFER, 新的 SessionDescription(sdp));这是错的吗? peerConnection.setRemoteDescription(peerConnection.SDP_OFFER, 报价); --- peerConnection.addStream(yourCameraStream); ----- 这样您为其他对等方附加的流就可以正常工作! 我也有同样的问题,但是排序似乎是正确的,但仍然没有显示视频流。有没有人设法解决这个问题? OfferToReceiveAudio 和 OfferToReceiveVideo 约束对于 createOffer/createAnswer“必须”为真。必须在创建 offer/answer sdp 之前调用“addStream”。【参考方案2】:我遇到了同样的问题,我只是在将流附加为 VideoElement.src 后立即调用 VideoElement.play() 解决了这个问题
document.querySelector( "#video" ).src = window.URL.createObjectURL( remoteStream );
document.querySelector( "#video" ).play();
不要等待loadedmetadata事件,因为它似乎没有被触发,而是WebRTC流。
【讨论】:
将在添加 e src 后立即播放视频,例如你的 blob 网址。对于您的 selfView,请使用 来防止听到自己的声音。以上是关于webrtc - 视频得到blob,但它仍然是黑色的的主要内容,如果未能解决你的问题,请参考以下文章
11┃音视频直播系统之 WebRTC 进行文本聊天并实时传输文件