J'ai écrit de la vidéo de flux de code sur un WebSocket donc un sourcebuffer
qui fonctionne dans Chrome et Edge.Impossible de diffuser de la vidéo sur un WebSocket à Firefox
Cependant, quand je lance ceci dans Firefox, la vidéo ne joue jamais, juste une animation de roue tournante est affichée. Lorsque je vérifie les statistiques <video>
, il lit HAVE_METADATA
comme état prêt et NETWORK_LOADING
comme état du réseau.
Le code semble suit:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<video controls></video>
<script>
var mime = 'video/mp4; codecs="avc1.4D401E,mp4a.40.2"';
var address = 'ws://localhost:54132'
/* Media Source */
var source = new MediaSource();
var video = document.querySelector('video');
video.src = URL.createObjectURL(source);
source.addEventListener('sourceopen', sourceOpen);
/* Buffer */
var buffer;
var socket;
var queue = [];
var offset = -1;
var timescale;
// When the media source opens:
function sourceOpen() {
buffer = source.addSourceBuffer(mime);
buffer.addEventListener('updateend', processQueue);
socket = new WebSocket(address);
socket.binaryType = 'arraybuffer';
socket.onmessage = onMessage;
}
// When more data is received.
function onMessage(event) {
queue.push(event.data);
processQueue();
}
// Process queue if possible.
function processQueue() {
if ((queue.length == 0) || (buffer.updating)) {
return;
}
var data = queue.shift();
if (offset === -1) {
var parsed = parseMP4(data);
if (parsed.hasOwnProperty('moov')) {
timescale = parsed.moov.mvhd.timescale;
} else if (parsed.hasOwnProperty('moof')) {
offset = 0 - (parsed.moof.traf[0].tfdt.baseMediaDecodeTime/this.timescale - 0.4);
buffer.timestampOffset = offset;
}
}
// console.log('appending ' + data.byteLength + ' bytes');
buffer.appendBuffer(data);
}
// Parse out the offset.
function parseMP4(data) {
// SNIP for brevity
}
</script>
</body>
</html>
vous obtenez événement d'erreur sur l'élément vidéo ou tampon source? que se passe-t-il lorsque vous utilisez directement l'URL de la vidéo en tant que "src" (sans média) – sbr
Aucun événement d'erreur. Les données sont générées à la volée par le serveur (à partir d'un flux IP par exemple), il n'y a donc pas d'URL vers laquelle je puisse pointer l'élément vidéo. – Hans
Pouvez-vous créer un plnkr http://plnkr.co pour démontrer? – guest271314