diff --git a/plugins/webrtc/package-lock.json b/plugins/webrtc/package-lock.json index 43d816e10..7af111629 100644 --- a/plugins/webrtc/package-lock.json +++ b/plugins/webrtc/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/webrtc", - "version": "0.0.39", + "version": "0.0.40", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scrypted/webrtc", - "version": "0.0.39", + "version": "0.0.40", "dependencies": { "@koush/werift": "file:../../external/werift/packages/webrtc", "@scrypted/common": "file:../../common", diff --git a/plugins/webrtc/package.json b/plugins/webrtc/package.json index afc8cd4f4..e781b8238 100644 --- a/plugins/webrtc/package.json +++ b/plugins/webrtc/package.json @@ -1,6 +1,6 @@ { "name": "@scrypted/webrtc", - "version": "0.0.39", + "version": "0.0.40", "scripts": { "prepublishOnly": "NODE_ENV=production scrypted-webpack", "prescrypted-vscode-launch": "scrypted-webpack", diff --git a/plugins/webrtc/src/ffmpeg-to-wrtc.ts b/plugins/webrtc/src/ffmpeg-to-wrtc.ts index 0ec7f2131..63f2ab177 100644 --- a/plugins/webrtc/src/ffmpeg-to-wrtc.ts +++ b/plugins/webrtc/src/ffmpeg-to-wrtc.ts @@ -5,13 +5,12 @@ import { connectRTCSignalingClients } from "@scrypted/common/src/rtc-signaling"; import { RtspServer } from "@scrypted/common/src/rtsp-server"; import { createSdpInput, parseSdp } from "@scrypted/common/src/sdp-utils"; import sdk, { FFmpegInput, Intercom, MediaStreamDestination, MediaStreamTool, RTCAVSignalingSetup, RTCSignalingSession } from "@scrypted/sdk"; -import ip from 'ip'; import { WeriftOutputSignalingSession } from "./output-signaling-session"; import { waitConnected } from "./peerconnection-util"; import { getFFmpegRtpAudioOutputArguments, RtpTrack, RtpTracks, startRtpForwarderProcess } from "./rtp-forwarders"; import { ScryptedSessionControl } from "./session-control"; import { requiredAudioCodecs, requiredVideoCodec } from "./webrtc-required-codecs"; -import { isPeerConnectionAlive } from "./werift-util"; +import { isPeerConnectionAlive, logIsPrivateIceTransport } from "./werift-util"; const { mediaManager } = sdk; @@ -169,15 +168,7 @@ export async function createRTCPeerConnectionSink( await waitConnected(pc); console.log('connected', Date.now() - timeStart); - - let isPrivate = true; - for (const ice of pc.iceTransports) { - const [address, port] = ice.connection.remoteAddr; - isPrivate = isPrivate && ip.isPrivate(address); - console.log('ice transport ip', address); - } - - console.log('Connection is local network:', isPrivate); + const isPrivate = logIsPrivateIceTransport(console, pc); // should really inspect the session description here. diff --git a/plugins/webrtc/src/werift-util.ts b/plugins/webrtc/src/werift-util.ts index 6187e20c2..cd6cffc48 100644 --- a/plugins/webrtc/src/werift-util.ts +++ b/plugins/webrtc/src/werift-util.ts @@ -1,4 +1,5 @@ import { RTCIceServer, RTCPeerConnection, RTCSessionDescription } from "@koush/werift"; +import ip from 'ip'; export function createRawResponse(response: RTCSessionDescription): RTCSessionDescriptionInit { return { @@ -40,3 +41,14 @@ export function getWeriftIceServers(configuration: RTCConfiguration): RTCIceServ return ret; } + +export function logIsPrivateIceTransport(console: Console, pc: RTCPeerConnection) { + let isPrivate = true; + for (const ice of pc.iceTransports) { + const [address, port] = ice.connection.remoteAddr; + isPrivate = isPrivate && ip.isPrivate(address); + console.log('ice transport ip', address); + } + console.log('Connection is local network:', isPrivate); + return isPrivate; +} diff --git a/plugins/webrtc/src/wrtc-to-rtsp.ts b/plugins/webrtc/src/wrtc-to-rtsp.ts index 5eaa12dfd..413450a4d 100644 --- a/plugins/webrtc/src/wrtc-to-rtsp.ts +++ b/plugins/webrtc/src/wrtc-to-rtsp.ts @@ -1,7 +1,7 @@ -import { BundlePolicy, Output, Pipeline, RTCPeerConnection, RtcpPacket, RtcpPayloadSpecificFeedback, RTCRtpTransceiver, RTCSessionDescription, RtpPacket, uint16Add } from "@koush/werift"; +import { BundlePolicy, Pipeline, RTCPeerConnection, RtcpPacket, RtcpPayloadSpecificFeedback, RTCRtpTransceiver, RtpPacket, uint16Add } from "@koush/werift"; import { FullIntraRequest } from "@koush/werift/lib/rtp/src/rtcp/psfb/fullIntraRequest"; import { listenZeroSingleClient } from "@scrypted/common/src/listen-cluster"; -import { findH264NaluType, findH264NaluTypeInNalu, getNaluTypesInNalu, H264_NAL_TYPE_IDR, RtspServer } from "@scrypted/common/src/rtsp-server"; +import { getNaluTypesInNalu, RtspServer } from "@scrypted/common/src/rtsp-server"; import { createSdpInput, parseSdp } from '@scrypted/common/src/sdp-utils'; import sdk, { FFmpegInput, Intercom, MediaObject, MediaStreamUrl, ResponseMediaStreamOptions, RTCAVSignalingSetup, RTCSessionControl, RTCSignalingChannel, RTCSignalingOptions, RTCSignalingSendIceCandidate, RTCSignalingSession, ScryptedMimeTypes } from "@scrypted/sdk"; import dgram from 'dgram'; @@ -9,7 +9,7 @@ import { Socket } from "net"; import { waitConnected } from "./peerconnection-util"; import { getFFmpegRtpAudioOutputArguments, startRtpForwarderProcess } from "./rtp-forwarders"; import { requiredAudioCodecs, requiredVideoCodec } from "./webrtc-required-codecs"; -import { createRawResponse, getWeriftIceServers, isPeerConnectionAlive } from "./werift-util"; +import { createRawResponse, getWeriftIceServers, isPeerConnectionAlive, logIsPrivateIceTransport } from "./werift-util"; const { mediaManager } = sdk; @@ -98,6 +98,7 @@ export async function createRTCPeerConnectionSource(options: { waitConnected(pc).then(() => { console.log('connected', Date.now() - timeStart); + logIsPrivateIceTransport(console, pc); sessionControl.startSession().catch(() => { }); }); @@ -297,6 +298,7 @@ export async function createRTCPeerConnectionSource(options: { const url = `rtsp://127.0.0.1:${port}`; const mediaStreamUrl: MediaStreamUrl = { url, + container: 'rtsp', mediaStreamOptions, };