我已经成功地将我的网络摄像头设置为指向Firebase数据库上的特定位置,并使用WebRTC播放视频。你知道吗
我在Javascript中执行以下操作(并在HTML中显示):
<video id="yourVideo" autoplay muted playsinline></video>
...
var database = firebase.database().ref('node_on_firebase');
var yourVideo = document.getElementById("yourVideo");
var friendsVideo = document.getElementById("friendsVideo");
var yourId = Math.floor(Math.random()*1000000000);
var servers = {'iceServers': [{'urls': 'stun:stun.services.mozilla.com'}, {'urls': 'stun:stun.l.google.com:19302'}, {'urls': 'turn:numb.viagenie.ca','credential': 'webrtc','username': 'websitebeaver@mail.com'}]};
var pc = new RTCPeerConnection(servers);
pc.onicecandidate = (event => event.candidate?sendMessage(yourId, JSON.stringify({'ice': event.candidate})):console.log("Sent All Ice") );
pc.onaddstream = (event => friendsVideo.srcObject = event.stream);
function sendMessage(senderId, data) {
var msg = database.push({ sender: senderId, message: data });
msg.remove();
}
function readMessage(data) {
// works
var msg = JSON.parse(data.val().message);
var sender = data.val().sender;
if (sender != yourId) {
if (msg.ice != undefined)
pc.addIceCandidate(new RTCIceCandidate(msg.ice));
else if (msg.sdp.type == "offer")
pc.setRemoteDescription(new RTCSessionDescription(msg.sdp))
.then(() => pc.createAnswer())
.then(answer => pc.setLocalDescription(answer))
.then(() => sendMessage(yourId, JSON.stringify({'sdp': pc.localDescription})));
else if (msg.sdp.type == "answer")
pc.setRemoteDescription(new RTCSessionDescription(msg.sdp));
}
};
database.on('child_added', readMessage);
function closeMyFace() {
yourVideo.srcObject.getTracks().forEach(track => track.stop());
}
function showMyFace() {
navigator.mediaDevices.getUserMedia({audio:false, video:true}).
then(function(stream){
pc.addStream(stream)
yourVideo.srcObject = stream
})
.catch(function(error){
console.log(error)
})
}
function showFriendsFace() {
pc.createOffer()
.then(offer => pc.setLocalDescription(offer) )
.then(() => sendMessage(yourId, JSON.stringify({'sdp': pc.localDescription})) );
}
但是,如何下载/流式传输此视频并成片处理视频,最好是使用Python脚本?你知道吗
如果要在视频流传输时下载/处理视频,则(python)客户端需要创建自己的RTCPeerConnection,以便它也可以接收视频流。我相信这在python中并非微不足道,尽管在其他平台上可能更容易实现。更多信息:WebRTC Python implementation
如果您的用例允许您在录制完成后处理视频(或者至少,您的用例没有问题,延迟很长),那么可以让javascript客户机在接收到数据时或稍后批量(在上面的示例中来自friendsVideo流)上载数据,可能是成批上载,您的自定义(python)客户机可以下载和处理的位置。你知道吗
虽然与RTCPeerConnection无关,但您可以在此处搜索使用firebase进行流式视频的其他用户(结果不一)。不过,这与您尝试使用RTCPeerConnection执行的操作有些不同。例如:Firebase Storage Video Streaming
相关问题 更多 >
编程相关推荐