diff --git a/plugins/prebuffer-mixin/package-lock.json b/plugins/prebuffer-mixin/package-lock.json index d246eb805..4c535f2cd 100644 --- a/plugins/prebuffer-mixin/package-lock.json +++ b/plugins/prebuffer-mixin/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/prebuffer-mixin", - "version": "0.9.72", + "version": "0.9.73", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scrypted/prebuffer-mixin", - "version": "0.9.72", + "version": "0.9.73", "license": "Apache-2.0", "dependencies": { "@scrypted/common": "file:../../common", diff --git a/plugins/prebuffer-mixin/package.json b/plugins/prebuffer-mixin/package.json index 6d8a9045d..2be93c578 100644 --- a/plugins/prebuffer-mixin/package.json +++ b/plugins/prebuffer-mixin/package.json @@ -1,6 +1,6 @@ { "name": "@scrypted/prebuffer-mixin", - "version": "0.9.72", + "version": "0.9.73", "description": "Video Stream Rebroadcast, Prebuffer, and Management Plugin for Scrypted.", "author": "Scrypted", "license": "Apache-2.0", diff --git a/plugins/prebuffer-mixin/src/main.ts b/plugins/prebuffer-mixin/src/main.ts index 9e4c1eef9..23037bd22 100644 --- a/plugins/prebuffer-mixin/src/main.ts +++ b/plugins/prebuffer-mixin/src/main.ts @@ -1114,7 +1114,8 @@ class PrebufferSession { return chunk; } - const client = await listenZeroSingleClient(); + const hostname = options?.route === 'external' ? '0.0.0.0' : undefined; + const client = await listenZeroSingleClient(hostname); const rtspServerPath = '/' + crypto.randomBytes(8).toString('hex'); socketPromise = client.clientPromise.then(async (socket) => { sdp = addTrackControls(sdp); @@ -1148,6 +1149,19 @@ class PrebufferSession { return socket; }) url = client.url.replace('tcp://', 'rtsp://') + rtspServerPath; + if (hostname) { + try { + const addresses = await sdk.endpointManager.getLocalAddresses(); + const [address] = addresses; + if (address) { + const u = new URL(url); + u.hostname = address; + url = u.toString(); + } + } + catch (e) { + } + } } else { const client = await listenZeroSingleClient(); diff --git a/server/src/listen-zero.ts b/server/src/listen-zero.ts index 74e5097bf..48248e217 100644 --- a/server/src/listen-zero.ts +++ b/server/src/listen-zero.ts @@ -1,15 +1,15 @@ import { once } from 'events'; import net from 'net'; -export async function listenZero(server: net.Server) { - server.listen(0); +export async function listenZero(server: net.Server, hostname?: string) { + server.listen(0, hostname); await once(server, 'listening'); return (server.address() as net.AddressInfo).port; } -export async function listenZeroSingleClient() { +export async function listenZeroSingleClient(hostname?: string) { const server = new net.Server(); - const port = await listenZero(server); + const port = await listenZero(server, hostname); const clientPromise = new Promise((resolve, reject) => { const timeout = setTimeout(() => { @@ -24,7 +24,7 @@ export async function listenZeroSingleClient() { }); }); - clientPromise.catch(() => {}); + clientPromise.catch(() => { }); return { server,