Ich möchte die Webcam und das Audio des Benutzers aufzeichnen und in einer Datei auf dem Server speichern. Diese Dateien könnten dann anderen Benutzern zur Verfügung gestellt werden.
Ich habe keine Probleme mit der Wiedergabe, aber ich habe Probleme, den Inhalt aufzunehmen.
Ich verstehe, dass die .record()
Funktion getUserMedia noch nicht geschrieben wurde - bisher wurde nur ein Vorschlag dafür gemacht.
Ich möchte mithilfe der PeerConnectionAPI eine Peer-Verbindung auf meinem Server herstellen. Ich verstehe, dass dies ein bisschen hackig ist, aber ich denke, es sollte möglich sein, einen Peer auf dem Server zu erstellen und aufzuzeichnen, was der Client-Peer sendet.
Wenn dies möglich ist, sollte ich diese Daten in flv oder einem anderen Videoformat speichern können.
Eigentlich bevorzuge ich die clientseitige Aufnahme von Webcam + Audio, damit der Client Videos erneut aufnehmen kann, wenn ihm der erste Versuch vor dem Hochladen nicht gefallen hat. Dies würde auch Unterbrechungen bei Netzwerkverbindungen ermöglichen. Ich habe einen Code gesehen, mit dem einzelne "Bilder" von der Webcam aufgezeichnet werden können, indem die Daten auf die Leinwand gesendet werden - das ist cool, aber ich brauche auch Audio.
Hier ist der clientseitige Code, den ich bisher habe:
<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 x = new XMLHttpRequest();
x.open('POST', 'uploadMessage');
x.send(videoblob);
*/
var data = {};
data.video = videoblob;
data.metadata = 'test metadata';
data.action = "upload_video";
jQuery.post("http://www.foundthru.co.uk/uploadvideo.php", data, onUploadSuccess);
}
function onUploadSuccess() {
alert ('video uploaded');
}
</script>
<div id="webcamcontrols">
<a class="recordbutton" href="javascript:startRecording();">RECORD</a>
</div>
quelle
Antworten:
Sie sollten sich unbedingt Kurento ansehen . Es bietet eine WebRTC-Serverinfrastruktur, mit der Sie aus einem WebRTC-Feed und vielem mehr aufnehmen können. Sie können auch einige Beispiele für die Anwendung finden Sie planen , hier . Es ist wirklich einfach, dieser Demo Aufnahmefunktionen hinzuzufügen und die Mediendatei in einer URI (lokale Festplatte oder wo auch immer) zu speichern.
Das Projekt ist unter
LGPLApache 2.0 lizenziertBEARBEITEN 1
Seit diesem Beitrag haben wir ein neues Tutorial hinzugefügt, das zeigt, wie der Rekorder in einigen Szenarien hinzugefügt wird
Haftungsausschluss: Ich bin Teil des Teams, das Kurento entwickelt.
quelle
Bitte überprüfen Sie die RecordRTC
RecordRTC ist MIT-lizenziert auf Github .
quelle
Ich glaube, die Verwendung von Kurento oder anderen MCUs nur zum Aufzeichnen von Videos wäre etwas übertrieben, insbesondere angesichts der Tatsache, dass Chrome seit Version 25 MediaRecorder API-Unterstützung von Version 47 und Firefox bietet. An dieser Kreuzung benötigen Sie möglicherweise nicht einmal eine externe JS-Bibliothek, um die Aufgabe zu erledigen. Probieren Sie diese Demo aus, die ich zum Aufnehmen von Video / Audio mit MediaRecorder erstellt habe:
Demo - würde in Chrome und Firefox funktionieren (absichtlich weggelassen, Blob auf Servercode zu schieben)
Github-Codequelle
Wenn Sie Firefox ausführen, können Sie es hier selbst testen (Chrome-Anforderungen
https
):quelle
Ja, wie Sie verstanden haben, ist MediaStreamRecorder derzeit nicht implementiert.
MediaStreamRecorder ist eine WebRTC-API zum Aufzeichnen von getUserMedia () - Streams. Damit können Web-Apps eine Datei aus einer Live-Audio- / Videositzung erstellen.
Alternativ können Sie diese http://ericbidelman.tumblr.com/post/31486670538/creating-webm-video-from-getusermedia mögen, aber Audio fehlt Teil.
quelle
Sie können RecordRTC-together verwenden , das auf RecordRTC basiert.
Es unterstützt die gemeinsame Aufnahme von Video und Audio in separaten Dateien. Sie benötigen ein Tool
ffmpeg
, um zwei Dateien auf dem Server zu einer zusammenzuführen.quelle
Web Call Server 4 kann WebRTC-Audio und -Video in einen WebM-Container aufnehmen. Die Aufnahme erfolgt mit dem Vorbis-Codec für Audio und dem VP8-Codec für Video. Anfängliche WebRTC-Codecs sind Opus oder G.711 und VP8. Für die serverseitige Aufzeichnung ist daher entweder die serverseitige Transcodierung von Opus / G.711 nach Vorbis oder die Transcodierung nach VP8-H.264 erforderlich, wenn ein anderer Container, z. B. AVI, verwendet werden muss.
quelle
Für die Aufzeichnung habe ich auch nicht genug Wissen darüber,
Aber ich fand das auf Git Hub-
In Zeile 89 in meinem Fallcode OnrecordComplete wird tatsächlich ein Link der Rekorderdatei angehängt. Wenn Sie auf diesen Link klicken, wird der Download gestartet, und Sie können diesen Pfad als Datei auf Ihrem Server speichern.
Der Aufzeichnungscode sieht ungefähr so aus
Das blobUrl hält den Pfad. Ich habe mein Problem damit gelöst und hoffe, dass jemand dies nützlich findet
quelle
Technisch gesehen können Sie FFMPEG im Backend verwenden, um Video und Audio zu mischen
quelle