在本文档中,它用于URL.createObjectURL
设置视频源.(这是接听电话的代码).
var offer = getOfferFromFriend(); navigator.getUserMedia({video: true}, function(stream) { pc.onaddstream = e => video.src = URL.createObjectURL(e.stream); pc.addStream(stream); pc.setRemoteDescription(new RTCSessionDescription(offer), function() { pc.createAnswer(function(answer) { pc.setLocalDescription(answer, function() { // send the answer to a server to be forwarded back to the caller (you) }, error); }, error); }, error); });
我希望video.src成为检索远程视频的地址.所以它应该由连接的另一端(无论是谁发起呼叫)修复和给出.但价值URL.createObjectURL
回答者的一边产生,它的事件取决于函数被调用的时间.如何使用它来获取远程视频流?
编辑:URL.createObjectURL
看起来像blob 的结果:http://some.site.com/xxxx-the-token-xxxx.使用此字符串,视频组件如何知道加载远程流的位置?是否存在{url:stream}的哈希映射?如果是这样,视频组件如何访问hashmap?
流对象确实存储了一个令牌字符串,您可以使用该字符串stream.toURL
.但它与结果不同URL.createObjectURL
.价值URL.createObjectURL
取决于时间.如果连续两次调用它,则会得到不同的值.
URL.createObjectURL(stream)
是一个黑客.停止使用它.正在努力将其删除.
使用 video.srcObject = stream
直接.它是标准的,并且实施得很好.
首先,本地资源的分配不应该是URL,而是了解WebRTC如何工作的红色环节.
WebRTC是一种传输API,直接从一个对等体发送数据到另一个对等体.不涉及内容网址.stream
您获得的遥控器onaddstream
是本地物体接收器侧,是传输的实时流式传输结果,可以播放.
您阅读的文档陈旧且过时.谢谢你指出来,我会解决它.它还有其他问题:你应该立即调用setRemoteDescription ,而不是等待接收器共享他们的摄像头,否则会错过传入的候选者.而不是您显示的代码,执行此操作:
pc.onaddstream = e => video.srcObject = e.stream; function getOfferFromFriend(offer) { return pc.setRemoteDescription(new RTCSessionDescription(offer)) .then(() => navigator.getUserMedia({video: true})) .then(stream => { pc.addStream(stream); return pc.createAnswer(); }) .then(answer => pc.setLocalDescription(answer)) .then(() => { // send the answer to a server to be forwarded back to the caller (you) }) .catch(error); }
它使用srcObject
,避免使用已弃用的回调API,并且不会导致间歇性ICE故障.