Bonne journée! Je suis en train de regarder des vidéos en streaming ce matin et j'ai rencontré un problème avec le ArrayBuffer entrant qui contient des données binaires d'un fichier audio.Lecture des données binaires audio ArrayBuffer entrantes à partir du serveur binaryjs simultanément
Voici le code que je trouve pour la lecture des données audio binaires (Uint8Array):
function playByteArray(byteArray) {
var arrayBuffer = new ArrayBuffer(byteArray.length);
var bufferView = new Uint8Array(arrayBuffer);
for (i = 0; i < byteArray.length; i++) {
bufferView[i] = byteArray[i];
}
context.decodeAudioData(arrayBuffer, function(buffer) {
buf = buffer;
play();
});
}
// Play the loaded file
function play() {
// Create a source node from the buffer
var source = context.createBufferSource();
source.buffer = buf;
// Connect to the final output node (the speakers)
source.connect(context.destination);
// Play immediately
source.start(0);
}
maintenant ci-dessous, je l'ai utilisé MediaStreamRecorder de https://github.com/streamproc/MediaStreamRecorder pour enregistrer le flux de getUserMedia. Ce code envoie en continu les données binaires enregistrées au serveur.
if (navigator.getUserMedia) {
navigator.getUserMedia({audio: true, video: true}, function(stream) {
video.src = (window.URL || window.webkitURL).createObjectURL(stream); //get this for video strewam url
video.muted = true;
multiStreamRecorder = new MultiStreamRecorder(stream);
multiStreamRecorder.canvas = {
width: video.width,
height: video.height
};
multiStreamRecorder.video = video;
multiStreamRecorder.ondataavailable = function(blobs) {
var audioReader = new FileReader();
audioReader.addEventListener("loadend", function() {
var arrBuf = audioReader.result;
var binary = new Uint8Array(arrBuf);
streamToServ.write(binary);
// streamToServ is the binaryjs client
});
audioReader.readAsArrayBuffer(blobs.audio);
};
multiStreamRecorder.start(1);
}, onVideoFail);
} else {
alert ('failed');
}
Convertir les blobs produits en binaire et envoyer (audio et vidéo) à binaryjs qui sera joué sur un autre client avec ceci:
client.on('stream', function (stream, meta) {
stream.on('data', function(data) {
playByteArray(new Uint8Array(data));
});
});
J'ai eu aucun problème avec le transfert des données binaires mais le problème est qu'il y a un son hiccup dans la lecture de manière significative sur chaque donnée binaire qui a été jouée. Y a-t-il quelque chose qui ne va pas dans la façon dont je joue les ArrayBuffers entrants? Je pense aussi à demander à streamproc à ce sujet.
Merci d'avance!
Cheers.
Je l'obtiens, mais à quelle heure devrais-je l'utiliser? J'ai essayé d'utiliser context.currentTime + la durée du dernier buffer (byte array) mais c'est toujours pareil. Des idées? Merci pour votre réponse! :) –
Merci pour cette idée. J'ai trouvé une mise en file d'attente tampon audio liée à cela et ti travaillé. Je l'afficherai comme une réponse. –