当前位置: 首页 > 知识库问答 >
问题:

如何在Python中处理流到Firebase信令服务器的视频

计阳泽
2023-03-14

我在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脚本中处理?

共有1个答案

严信瑞
2023-03-14

如果您打算在视频流的同时下载/处理视频,那么您的(python)客户端将需要创建自己的RTCPeerConnection,这样它也可以接收视频流。我相信这在python中并不容易,但在其他平台上可能更容易。更多信息:WebRTC Python实现

如果您的用例允许您在录制完成后处理视频(或者至少,您的用例可以处理相当长的延迟),那么可以让javascript客户机将接收到的数据或以后成批(从上面示例中的friendsVideo流)(可能是块)上载到您的自定义(python)客户机可以下载和处理的位置。

虽然与RTCPeerConnection无关,但您可以在这里搜索使用firebase进行流式视频的其他用户(结果好坏参半)。不过,这与您尝试使用RTCPeerConnection所做的有些不同。示例:Firebase存储视频流

 类似资料:
  • 我正在做一个Android应用程序,使用Firebase云消息。

  • 问题内容: 我的公司拥有数千个现有的xml Web服务,并开始为新项目采用AngularJs。 http://angularjs.org/上的教程专门使用json服务。看起来他们在控制器中进行了服务调用,解析了生成的JSON,并将生成的对象直接传递给视图。 我该如何处理XML?我看到四个选项: 解析它,然后将DOM对象直接传递到UI(view)。 在服务器端围绕我的XML服务放置一个JSON包装器

  • 问题内容: 我是OpenCV的初学者。我想对要上传到服务器的视频帧进行一些图像处理。我只想读取可用的框架并将它们写入目录中。然后,等待视频的另一部分上载并将帧写入目录。并且,我应该等待每个帧都完全上传,然后将其写入文件。 您能告诉我如何使用OpenCV(Python)吗? 编辑1: 我编写了这段代码,用于从文件中捕获视频,而新数据将附加在文件末尾。换句话说,该文件不是完整的视频,并且另一个程序正在

  • 下面是我的代码: 所以问题是调用!当没有框架时,它将返回!而且它不会再捕捉帧了,即使我等了很长时间。

  • 在 Cadence 中部署代码期间,服务器重新启动功能如何工作?将重新启动哪些内容?它会仅重新启动 Cadence 服务,还是也会重新启动工作线程?如果重新启动工作人员,活动和工作流是否会从头开始重新启动?

  • 我的问题是如何处理RegisterMessageHandler方法中的取消令牌,每当收到新消息时,该方法就会被调用?此外,我还想“优雅地”处理订阅客户端的关闭,也就是说,如果一条消息已经被处理,那么我希望该消息得到完全处理,然后我想关闭连接。下面是我正在使用的代码。 目前我们正按照以下方法进行:1。使用信号量锁锁定消息的进程,并在finally块中释放锁。2.调用CancellationToken