Deno имеет эту вещь ReadableStream, которая должна быть совместима с тем, что из браузеров. https://developer.mozilla.org/en-us/doc ... ablestream
И это следует использовать, когда вы хотите транслировать вещи. В примере в их документах используется некоторая дата/интервал и текст, а не видео
Но я нашел немного более старого кода в Интернете, который показывает, как использовать его с видео:
const { size } = await Deno.stat("video.mp4");
const range = req.headers.get("range");
if (!range) {
throw new Error("no range");
}
console.log("req range=", range)
const num_blocks = 100;
const block_size = 16_384;
const chunk_size = block_size * num_blocks;
const start_index = Number(range.replace(/\D/g, "")?.trim());
const end_index = Math.min(start_index + chunk_size, size);
const file = await Deno.open("video.mp4", { read: true });
if (start_index > 0) {
await file.seek(start_index, Deno.SeekMode.Start);
}
let read_blocks = num_blocks;
let read_bytes = 0;
console.info("calc range=", start_index, end_index, size)
const stream = new ReadableStream({
start(){
console.log("start")
},
async pull(controller) {
const chunk = new Uint8Array(block_size);
try {
const read = await file.read(chunk);
console.log("read block bytes=", read)
if (read !== null && read > 0) {
controller.enqueue(chunk.subarray(0, read));
read_bytes += read;
}
read_blocks--;
if (read_blocks === 0) {
log.info("no more blocks", read_bytes)
controller.close();
file.close();
}
} catch (e) {
controller.error(e);
console.log(e)
file.close();
}
},
cancel(reason){
console.log("canceled=", reason)
file.close();
}
});
return new Response(stream, {
status: 206,
headers: {
"Content-Range": `bytes ${start_index}-${end_index}/${size}`,
"Accept-Ranges": "bytes",
"Content-Length": `${end_index - start_index}`,
"Content-Type": "video/mp4",
},
});
< /code>
Приведенный выше код предназначен для сервера видео в куски около 1,5 МБ каждый, и ReadableStream должен читать каждый кусок в блоках 16 КБ, так что это 100 блоков. /p>
Похоже, что он нормально транслируется в Firefox, но иногда я получаю ошибку в консоли Deno Typeerror: контроллер потока не может закрыть или заканчивать или enqueue
(не всегда)
В Chrome он транслируется всего около 12 секунд, даже видео длиной 30 секунд. Если вы нажмите на игру снова, это начинается с самого начала. И в консоли я иногда получаю ту же ошибку, что и у Firefox.
Есть идеи, как это исправить?
Deno имеет эту вещь ReadableStream, которая должна быть совместима с тем, что из браузеров. https://developer.mozilla.org/en-us/docs/web/api/readablestream И это следует использовать, когда вы хотите транслировать вещи. В примере в их документах используется некоторая дата/интервал и текст, а не видео Но я нашел немного более старого кода в Интернете, который показывает, как использовать его с видео: [code] const { size } = await Deno.stat("video.mp4"); const range = req.headers.get("range");
if (!range) { throw new Error("no range"); } console.log("req range=", range)
return new Response(stream, { status: 206, headers: { "Content-Range": `bytes ${start_index}-${end_index}/${size}`, "Accept-Ranges": "bytes", "Content-Length": `${end_index - start_index}`, "Content-Type": "video/mp4", }, }); < /code> Приведенный выше код предназначен для сервера видео в куски около 1,5 МБ каждый, и ReadableStream должен читать каждый кусок в блоках 16 КБ, так что это 100 блоков. /p> Похоже, что он нормально транслируется в Firefox, но иногда я получаю ошибку в консоли Deno Typeerror: контроллер потока не может закрыть или заканчивать или enqueue [/code] (не всегда) В Chrome он транслируется всего около 12 секунд, даже видео длиной 30 секунд. Если вы нажмите на игру снова, это начинается с самого начала. И в консоли я иногда получаю ту же ошибку, что и у Firefox. Есть идеи, как это исправить?
У меня проблемы с потоковой передачей от Flir Grasshopper3 до OpenCV. Есть ли способ транслировать непосредственно от камеры FLIR в мой код с помощью Python? Когда я использую приведенный ниже код, CV.VideoCapture не может распознать камеру FLIR в...
Я пытаюсь погрузиться в большой паркетный файл с полярными. Это должно быть легко достичь в (1) памяти:
import os ; os.environ = '4'
import polars as pl
import time, random
import numpy as np
random.seed(42)
Я использую сервер вывода Triton с серверной частью Python и в настоящий момент отправляю запросы gRPC. Кто-нибудь знает, как мы можем использовать серверную часть Python для потоковой передачи (например, ответов модели), потому что я не нашел в...
Я использую сервер вывода Triton с серверной частью Python и в настоящий момент отправляю запросы gRPC. Кто-нибудь знает, как мы можем использовать серверную часть Python для потоковой передачи (например, ответов модели), потому что я не нашел в...