Je souhaite enregistrer la webcam et l'audio des utilisateurs et les enregistrer dans un fichier sur le serveur. Ces fichiers pourraient alors être servis à d'autres utilisateurs.
Je n'ai aucun problème de lecture, mais j'ai des problèmes pour enregistrer le contenu.
Je crois comprendre que la .record()
fonction getUserMedia n'a pas encore été écrite - seule une proposition a été faite pour cela jusqu'à présent.
Je voudrais créer une connexion homologue sur mon serveur en utilisant PeerConnectionAPI. Je comprends que c'est un peu piraté, mais je pense qu'il devrait être possible de créer un pair sur le serveur et d'enregistrer ce que le client-pair envoie.
Si cela est possible, je devrais alors pouvoir enregistrer ces données au format flv ou dans tout autre format vidéo.
Ma préférence est en fait d'enregistrer la webcam + audio côté client, pour permettre au client de réenregistrer des vidéos s'il n'a pas aimé sa première tentative avant le téléchargement. Cela permettrait également des interruptions dans les connexions réseau. J'ai vu du code qui permet d'enregistrer des «images» individuelles de la webcam en envoyant les données sur la toile - c'est cool, mais j'ai aussi besoin de l'audio.
Voici le code côté client que j'ai jusqu'à présent:
<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>