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 浏览器打开页面, 我可以正确获取 sdpcandidate 信息。看来视频可以解码信息。

在远程视频中,我只能看到

此外,它似乎崩溃了。我试图点击“关闭 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_DATAmediaElement.pausedmediaElement.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/createAnswersetLocalDescription/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,但它仍然是黑色的的主要内容,如果未能解决你的问题,请参考以下文章

web技术分享| webRTC 媒体流录制

web技术分享| webRTC 媒体流录制

11┃音视频直播系统之 WebRTC 进行文本聊天并实时传输文件

使用WebRTC在远程浏览器中查看视频,本地浏览器永远不会得到ontrack事件

webRTC初探之小知识

使用 webrtc 时 ReplayKit 不起作用