mirror of
https://github.com/koush/scrypted.git
synced 2026-06-09 20:40:23 +01:00
homekit: add mp4 fragment io timeout
This commit is contained in:
@@ -7,19 +7,28 @@ import { readLength } from './read-stream';
|
||||
|
||||
const { mediaManager } = sdk;
|
||||
|
||||
export async function* parseFragmentedMP4(readable: Readable): AsyncGenerator<MP4Atom> {
|
||||
export async function* parseFragmentedMP4(readable: Readable, timeout = 0): AsyncGenerator<MP4Atom> {
|
||||
while (true) {
|
||||
const header = await readLength(readable, 8);
|
||||
const length = header.readInt32BE(0) - 8;
|
||||
const type = header.slice(4).toString();
|
||||
const data = await readLength(readable, length);
|
||||
const t = timeout ? setTimeout(() => {
|
||||
readable.destroy(new Error('Timeout waiting for MP4 atom'));
|
||||
}, timeout) : undefined;
|
||||
try {
|
||||
const header = await readLength(readable, 8);
|
||||
const length = header.readInt32BE(0) - 8;
|
||||
const type = header.slice(4).toString();
|
||||
const data = await readLength(readable, length);
|
||||
clearTimeout(t);
|
||||
|
||||
yield {
|
||||
header,
|
||||
length,
|
||||
type,
|
||||
data,
|
||||
};
|
||||
yield {
|
||||
header,
|
||||
length,
|
||||
type,
|
||||
data,
|
||||
};
|
||||
}
|
||||
finally {
|
||||
clearTimeout(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@ export async function* handleFragmentsRequests(streamId: number, device: Scrypte
|
||||
session = {
|
||||
socket,
|
||||
cp: undefined,
|
||||
generator: parseFragmentedMP4(socket),
|
||||
generator: parseFragmentedMP4(socket, 30000),
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user