2013-02-20 16 views
12

Ich muss eine App erstellen, die Video mit einer Webcam oder einer mobilen Kamera aufzeichnen kann (es muss plattformübergreifend sein).Html5 Videoaufnahme und -upload?

Bisher habe ich mit webrtc getusermedia einen kleinen Proof of Concept geschrieben. Es kann das Video und die Wiedergabe aufnehmen, aber ich bin mir nicht sicher, wie ich die Datei zum Hochladen auf den Server bringen soll. Hier

ist ein Link zu dieser Probe http://jsfiddle.net/3FfUP/

und den Javascript-Code:

(function ($) { 
window.URL = window.URL || window.webkitURL; 
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || 
      navigator.mozGetUserMedia || navigator.msGetUserMedia; 
var video = document.querySelector('video'); 
var onFailSoHard = function(e) { 
    console.log('Reeeejected!', e); 
}; 
$('#capture-button').click (function() { 
    console.log ("capture click!"); 
    if (navigator.getUserMedia) { 
     // Not showing vendor prefixes. 
     navigator.getUserMedia({video: true, audio: true}, function(localMediaStream) { 
      var video = document.querySelector('video'); 
      video.src = window.URL.createObjectURL(localMediaStream); 

      // Note: onloadedmetadata doesn't fire in Chrome when using it with getUserMedia. 
      // See crbug.com/110938. 
      video.onloadedmetadata = function(e) { 
       // Ready to go. Do some stuff. 
      }; 
     }, onFailSoHard); 
    } else { 
     video.src = 'somevideo.webm'; // fallback. 
    } 
}); 
$('#stop-button').click (function (e) { 
    video.pause(); 
    localMediaStream.stop(); 
}); 
})(jQuery); 

Wie kann ich bekommen, was in dieser Probe als eine Datei aufgezeichnet wird, so dass es auf den Server hochgeladen werden kann .

+0

Eric Bidelman beschreibt ein Verfahren zur .webm von getUserMedia Aufnahme: http://ericbidelman.tumblr.com/post/31486670538/creating-webm-video-from-getusermedia. recorder.js (oder sogar RecorderJS) könnte ebenfalls nützlich sein. –

+1

Es gibt einen Working Draft-Vorschlag für W3C zum Aufzeichnen der API unter [http://lists.w3.org/Archives/Public/public-media-capture/2012Dec/att-0159/RecordingProposal.html](http://lists. w3.org/Archives/Public/public-media-capture/2012Dec/att-0159/RecordingProposal.html) Allerdings weder [Firefox] (http://www.webrtc.org/firefox#TOC-Recording-API) noch Chrome hat es bisher implementiert. Es sieht jedoch vielversprechend aus. – ghendricks

Antwort

2

Sie können video und audio getrennt aufzeichnen. Sie können Dateien (WAV/WebM) erhalten und sie bei Bedarf hochladen. webkitMediaStream verwendet zwei Objekte: 1) audioTracks und 2) videoTracks. Sie können möglicherweise beide Audio/Videoaufzeichnungen kombinieren!

5

Hallo tut mir leid, wenn dies etwas spät ist, aber hier ist, wie ich es geschafft habe, die Datei auf einen Server hochladen, ich habe wirklich keine Ahnung, ob dies der beste Weg ist, aber ich hoffe, es hilft geben Sie einen Hinweis. Nach dem Tutorial schrieb Eric Bidelman (wie Sam Dutton kommentierte), was Sie bekommen ist ein Blob, also habe ich eine XMLHttpRequest gemacht, um das Video zu bekommen und den Antworttyp als Blob, danach habe ich ein FormData erstellt, in dem ich angehängt habe die Antwort, damit der Blob an den Server gesendet werden kann. Hier sieht meine Funktion aus.

function sendXHR(){ 
    //Envia bien blob, no interpretado 
    var xhr = new XMLHttpRequest(); 
    var video=$("#myexportingvideo"); 
    xhr.open('GET', video.src , true); 
    xhr.responseType = 'blob'; 
    xhr.onload = function(e) { 
    if (this.status == 200) { 
     // Note: .response instead of .responseText 
     var blob = new Blob([this.response], {type: 'video/webm'}); 
     console.log(blob.size/1024); 
     console.log(blob.type); 
     form = new FormData(), 
     request = new XMLHttpRequest(); 
     form.append("myblob",blob,"Capture.webm"); 
     form.append("myname",$("#name_test").value); 
     request.open("POST","./UploadServlet",true); 
     request.send(form); 
     } 
    }; 
    xhr.send(); 
} 
+0

Dies scheint zu funktionieren, aber ich bekomme einen 404-Status, wenn ich versuche, das BLOB zu holen. Meine Frage und Code kann hier angesehen werden: http://stackoverflow.com/questions/27707322/xmlhttprequest-status-of-404-with-blob-url – RickyAYoder

0

Die einzige Querplattform Web-Video-Recorder ist die HDFVR webcam video recorder software.

Es verwendet Flash (Aufzeichnungen mit Flash Codecs + Streams zu einem Medienserver) auf dem Desktop und die HTML Media Capture API (Aufnahme mit OS + Upload auf Webserver) auf dem Handy, um Videos von so ziemlich jedem Desktop oder mobilen Browser aufzunehmen .

Sie können es mit einer ffmpeg-Installation verknüpfen, um alles in ein plattformübergreifendes Format wie MP4 (iOS-Datensätze in einen .mov-Container, der nicht unter Android abgespielt wird) zu konvertieren. Außerdem verfügt es über eine JS-API.

+0

Kann ich es verwenden, ohne Medienserver zu installieren, wie ich nur aufzeichnen muss und speichern Sie das Video auf dem Server? –

+0

'Die einzige Cross-Plattform ...' ist offensichtlich nicht wahr (zumindest jetzt), wenn HTML5 es unterstützt. http: // www.w3.org/TR/mediastream-recording/. – 0xc0de

+0

Media Recorder-API funktioniert noch nicht auf IE, Edge und Safari https://addpipe.com/blog/mediarecorder-api/ –