diff --git a/common/src/ffmpeg-rebroadcast.ts b/common/src/ffmpeg-rebroadcast.ts index b2022cf15..7c95f5011 100644 --- a/common/src/ffmpeg-rebroadcast.ts +++ b/common/src/ffmpeg-rebroadcast.ts @@ -269,7 +269,11 @@ export async function startParserSession(ffmpegInput: FFmpegIn }; // tbh parsing stdout is super sketchy way of doing this. - parseAudioCodec(cp).then(result => inputAudioCodec = result); + parseAudioCodec(cp).then(result => { + inputAudioCodec = result; + if (inputAudioCodec === 'pcm_mulaw') + inputAudioCodec = 'pcm_ulaw'; + }); parseResolution(cp).then(result => inputVideoResolution = result); await parseVideoCodec(cp).then(result => inputVideoCodec = result); diff --git a/common/src/sdp-utils.ts b/common/src/sdp-utils.ts index 21f4a4355..6f9519c24 100644 --- a/common/src/sdp-utils.ts +++ b/common/src/sdp-utils.ts @@ -217,13 +217,26 @@ const acontrol = 'a=control:'; const artpmap = 'a=rtpmap:'; export function parseMSection(msection: string[]) { const control = msection.find(line => line.startsWith(acontrol))?.substring(acontrol.length); - const rtpmapFirst = msection.find(line => line.startsWith(artpmap)); const mline = parseMLine(msection[0]); - let codec = parseRtpMap(mline.type, rtpmapFirst).codec; - const rtpmaps = msection.filter(line => line.startsWith(artpmap)).map(line => parseRtpMap(mline.type, line)); + let codec: string; + const [rtpmapFirst] = rtpmaps; + if (rtpmapFirst) { + codec = rtpmapFirst.codec; + } + else { + // just guess + const [firstPayloadType ] = mline.payloadTypes; + if (firstPayloadType === 0) + codec = 'pcm_ulaw'; + else if (firstPayloadType === 8) + codec = 'pcm_alaw'; + else + codec = 'pcm_alaw'; + } + let direction: string; for (const checkDirection of ['sendonly', 'sendrecv', 'recvonly', 'inactive']) { const found = msection.find(line => line === 'a=' + checkDirection); diff --git a/plugins/prebuffer-mixin/package-lock.json b/plugins/prebuffer-mixin/package-lock.json index d111c5d1a..368302d1a 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.84", + "version": "0.9.85", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scrypted/prebuffer-mixin", - "version": "0.9.84", + "version": "0.9.85", "license": "Apache-2.0", "dependencies": { "@scrypted/common": "file:../../common", diff --git a/plugins/prebuffer-mixin/package.json b/plugins/prebuffer-mixin/package.json index 20f9728f4..d8444c391 100644 --- a/plugins/prebuffer-mixin/package.json +++ b/plugins/prebuffer-mixin/package.json @@ -1,6 +1,6 @@ { "name": "@scrypted/prebuffer-mixin", - "version": "0.9.84", + "version": "0.9.85", "description": "Video Stream Rebroadcast, Prebuffer, and Management Plugin for Scrypted.", "author": "Scrypted", "license": "Apache-2.0", diff --git a/plugins/webrtc/package-lock.json b/plugins/webrtc/package-lock.json index 76c1ffc77..54e3c9417 100644 --- a/plugins/webrtc/package-lock.json +++ b/plugins/webrtc/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/webrtc", - "version": "0.1.44", + "version": "0.1.45", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scrypted/webrtc", - "version": "0.1.44", + "version": "0.1.45", "dependencies": { "@scrypted/common": "file:../../common", "@scrypted/sdk": "file:../../sdk", diff --git a/plugins/webrtc/package.json b/plugins/webrtc/package.json index ee7368022..c51eb8961 100644 --- a/plugins/webrtc/package.json +++ b/plugins/webrtc/package.json @@ -1,6 +1,6 @@ { "name": "@scrypted/webrtc", - "version": "0.1.44", + "version": "0.1.45", "scripts": { "scrypted-setup-project": "scrypted-setup-project", "prescrypted-setup-project": "scrypted-package-json", diff --git a/plugins/webrtc/src/ffmpeg-to-wrtc.ts b/plugins/webrtc/src/ffmpeg-to-wrtc.ts index b08f113b3..cb95d8a7b 100644 --- a/plugins/webrtc/src/ffmpeg-to-wrtc.ts +++ b/plugins/webrtc/src/ffmpeg-to-wrtc.ts @@ -109,7 +109,7 @@ export async function createTrackForwarder(options: { if (!maximumCompatibilityMode) { let found: RTCRtpCodecParameters; - if (mediaStreamOptions?.audio?.codec === 'pcm_mulaw') { + if (mediaStreamOptions?.audio?.codec === 'pcm_ulaw') { found = audioTransceiver.codecs.find(codec => codec.mimeType === 'audio/PCMU') } else if (mediaStreamOptions?.audio?.codec === 'pcm_alaw') { diff --git a/plugins/webrtc/src/webrtc-required-codecs.ts b/plugins/webrtc/src/webrtc-required-codecs.ts index 9cc61b41f..4516cda6d 100644 --- a/plugins/webrtc/src/webrtc-required-codecs.ts +++ b/plugins/webrtc/src/webrtc-required-codecs.ts @@ -50,7 +50,7 @@ export function getAudioCodec(outputCodecParameters: RTCRtpCodecParameters) { } if (outputCodecParameters.name === 'PCMU') { return { - name: 'pcm_mulaw', + name: 'pcm_ulaw', encoder: 'pcm_mulaw', }; }