现在是否可以使用GetUserMedia API从网络摄像头读取视频流并将其直接发送到服务器进行进一步广播?

时间:2013-07-26 16:48:39

标签: html5 node.js websocket webrtc getusermedia

我需要构建一个使用WebRTC获取网络摄像头视频流和麦克风音频流的Web应用程序,并立即将其转换为服务器,以便进一步向多个客户端广播。该应用必须以全双工的方式实时完成。我的意思是这将是一种实时视频聊天。这将是某种教育应用程序。 所以问题是:现在可能吗?我应该使用哪些技术? 我应该在后端使用WebRTC和WebSocket以及Node.js吗?或者我可以使用PHP而不是节点?我可以使用Socket.io吗?有没有其他方法可以实现这一目标?可能是闪光灯?

3 个答案:

答案 0 :(得分:4)

WebRTC中的PeerConnection API不需要后端服务器来在对等体之间进行一个或多个连接。

您唯一需要后端服务器的是作为中介来首先建立对等体之间的连接。为此,您可以使用WebSocket API,Ajax或实现此目的所需的任何其他方法。此外,是的,您可以使用PHP为WebSocket编写服务器端(或者您希望用于建立对等连接的任何方法)。这完全取决于你。

目前,只有Chrome和Firefox支持足够的WebRTC API才能进行视频聊天。很快,Opera可能会加入这个组合,但是没有人确定WebRTC是否会被添加到IE11中,而且Apple似乎无意在任何时候将WebRTC添加到Safari中(因为他们拥有自己的专有技术)听起来很熟悉?!)。

无论如何,WebRTC是你最好的选择。作为补充说明,我认为不可能使用JS将视频和音频发送到服务器,然后让服务器将该数据转发给其他对等方。相反,您需要使用WebRTC建立点对点连接,然后从那里开始。

编辑:如果你使用TURN服务器,你可以通过服务器重新路由你的音频和视频数据,但这实际上是最不理想的情况,你仍然只能这样做,如果你是使用WebRTC API。

答案 1 :(得分:2)

它可能对你有帮助。

MediaStreamRecorder是一个用于记录getUserMedia()流的WebRTC API(仍在实施中)。它允许Web应用程序通过实时音频/视频会话创建文件。

以下是将流发送到服务器的示例实现。

 <video autoplay></video>

    <script language="javascript" type="text/javascript">
    function onVideoFail(e) {
        console.log('webcam fail!', e);
      };

    function hasGetUserMedia() {
      // Note: Opera is unprefixed.
      return !!(navigator.getUserMedia || navigator.webkitGetUserMedia ||
                navigator.mozGetUserMedia || navigator.msGetUserMedia);
    }

    if (hasGetUserMedia()) {
      // Good to go!
    } else {
      alert('getUserMedia() is not supported in your browser');
    }

    window.URL = window.URL || window.webkitURL;
    navigator.getUserMedia  = navigator.getUserMedia || 
                             navigator.webkitGetUserMedia ||
                              navigator.mozGetUserMedia || 
                               navigator.msGetUserMedia;

    var video = document.querySelector('video');
    var streamRecorder;
    var webcamstream;

    if (navigator.getUserMedia) {
      navigator.getUserMedia({audio: true, video: true}, function(stream) {
        video.src = window.URL.createObjectURL(stream);
        webcamstream = stream;
    //  streamrecorder = webcamstream.record();
      }, onVideoFail);
    } else {
        alert ('failed');
    }

    function startRecording() {
        streamRecorder = webcamstream.record();
        setTimeout(stopRecording, 10000);
    }
    function stopRecording() {
        streamRecorder.getRecordedData(postVideoToServer);
    }
    function postVideoToServer(videoblob) {

        var data = {};
        data.video = videoblob;
        data.metadata = 'test metadata';
        data.action = "upload_video";
        jQuery.post("http://www.kongraju.in/uploadvideo.php", data, onUploadSuccess);
    }
    function onUploadSuccess() {
        alert ('video uploaded');
    }

    </script>

    <div id="webcamcontrols">
        <button class="recordbutton" onclick="startRecording();">RECORD</button>
    </div>

您可以将录制的文件发送到服务器。

<强>参考文献:

http://www.w3.org/TR/mediastream-recording/

答案 2 :(得分:1)

与多个参与者的实时双工视频聊天是视频会议,为此您需要一个服务器组件,它混合参与者的音频和视频并将其广播给他们。你非常需要一个媒体服务器。对于WebRTC,有一些可用;看看Doubango的网真服务器:https://code.google.com/p/telepresence/

Mobicents具有良好的SIP堆栈,但webRTC的多媒体功能有限。

否则为什么不开始写一个? :)