Tôi đã viết một số video luồng mã qua websocket để sourcebuffer
hoạt động trong Chrome và Edge.Không thể phát trực tuyến video qua websocket tới Firefox
Tuy nhiên, khi tôi chạy ứng dụng này trong Firefox, video không bao giờ phát lại, chỉ hiển thị hình động bánh xe quay. Khi tôi kiểm tra số liệu thống kê <video>
, nó đọc HAVE_METADATA
làm trạng thái sẵn sàng và NETWORK_LOADING
làm trạng thái mạng.
Mã này trông sau:
<!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>
làm bạn nhận được sự kiện lỗi trên yếu tố video hoặc đệm nguồn? điều gì sẽ xảy ra khi bạn trực tiếp sử dụng URL video dưới dạng "src" (không có nguồn phương tiện truyền thông) – sbr
Không có sự kiện lỗi. Các dữ liệu được tạo ra trên bay bởi máy chủ (từ một dòng IP ví dụ), do đó, không có URL tôi có thể điểm yếu tố video. – Hans
Bạn có thể tạo một plnkr http://plnkr.co để minh họa không? – guest271314