diff --git a/common/src/rtsp-server.ts b/common/src/rtsp-server.ts index 595503c1a..17c65a4ba 100644 --- a/common/src/rtsp-server.ts +++ b/common/src/rtsp-server.ts @@ -56,6 +56,7 @@ export const H264_NAL_TYPE_RESERVED31 = 31; export const H264_NAL_TYPE_IDR = 5; export const H264_NAL_TYPE_SEI = 6; export const H264_NAL_TYPE_SPS = 7; +export const H264_NAL_TYPE_PPS = 8; // aggregate NAL Unit export const H264_NAL_TYPE_STAP_A = 24; export const H264_NAL_TYPE_STAP_B = 25; diff --git a/common/src/settings-mixin.ts b/common/src/settings-mixin.ts index 6c259a755..5cc8028bf 100644 --- a/common/src/settings-mixin.ts +++ b/common/src/settings-mixin.ts @@ -21,7 +21,7 @@ export abstract class SettingsMixinDeviceBase extends MixinDeviceBase; - abstract putMixinSetting(key: string, value: SettingValue): Promise; + abstract putMixinSetting(key: string, value: SettingValue): Promise; async getSettings(): Promise { const settingsPromise = this.mixinDeviceInterfaces.includes(ScryptedInterface.Settings) ? this.mixinDevice.getSettings() : undefined; @@ -77,8 +77,8 @@ export abstract class SettingsMixinDeviceBase extends MixinDeviceBase(); const videoSectionDeferred = new Deferred(); const audioSectionDeferred = new Deferred(); @@ -167,8 +168,8 @@ export async function startRtpForwarderProcess(console: Console, ffmpegInput: FF try { const optionsResponse = await rtspClient.options(); const describe = await rtspClient.describe(); - const sdp = describe.body.toString(); - const parsedSdp = parseSdp(sdp); + rtspSdp = describe.body.toString(); + const parsedSdp = parseSdp(rtspSdp); const videoSection = parsedSdp.msections.find(msection => msection.type === 'video' && (msection.codec === videoCodec || videoCodec === 'copy')); // maybe fallback to udp forwarding/transcoding? @@ -201,7 +202,7 @@ export async function startRtpForwarderProcess(console: Console, ffmpegInput: FF else { // console.log('audio codec transcoding:', audio.codecCopy); - const newSdp = parseSdp(sdp); + const newSdp = parseSdp(rtspSdp); let audioSection = newSdp.msections.find(msection => msection.type === 'audio' && msection.codec === audioCodec) if (!audioSection) audioSection = newSdp.msections.find(msection => msection.type === 'audio'); @@ -415,6 +416,7 @@ export async function startRtpForwarderProcess(console: Console, ffmpegInput: FF } else { console.log('bypassing ffmpeg, perfect codecs'); + sdpDeferred.resolve(rtspSdp); } if (!rtspClientHooked) { diff --git a/sdk/package-lock.json b/sdk/package-lock.json index f62c6d53b..c78de818a 100644 --- a/sdk/package-lock.json +++ b/sdk/package-lock.json @@ -19,6 +19,7 @@ "raw-loader": "^4.0.2", "rimraf": "^3.0.2", "tmp": "^0.2.1", + "typescript": "^4.9.3", "webpack": "^5.74.0", "webpack-bundle-analyzer": "^4.5.0" }, @@ -1755,9 +1756,9 @@ } }, "node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -1857,9 +1858,9 @@ } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2020,9 +2021,9 @@ } }, "node_modules/raw-loader/node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -2371,11 +2372,9 @@ } }, "node_modules/typescript": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", - "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", - "dev": true, - "peer": true, + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", + "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3797,9 +3796,9 @@ "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==" }, "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -3874,9 +3873,9 @@ } }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -3991,9 +3990,9 @@ }, "dependencies": { "loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -4226,11 +4225,9 @@ } }, "typescript": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", - "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", - "dev": true, - "peer": true + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", + "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==" }, "uri-js": { "version": "4.4.1", diff --git a/sdk/package.json b/sdk/package.json index 2c2104422..44b533c14 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -38,6 +38,7 @@ "raw-loader": "^4.0.2", "rimraf": "^3.0.2", "tmp": "^0.2.1", + "typescript": "^4.9.3", "webpack": "^5.74.0", "webpack-bundle-analyzer": "^4.5.0" },