diff --git a/plugins/prebuffer-mixin/src/main.ts b/plugins/prebuffer-mixin/src/main.ts index 97fdaeff0..ea9da6c13 100644 --- a/plugins/prebuffer-mixin/src/main.ts +++ b/plugins/prebuffer-mixin/src/main.ts @@ -671,6 +671,7 @@ class PrebufferSession { const { reencodeAudio } = this.getAudioConfig(); + let codecCopy = false; if (!rtspMode || container !== 'rtsp') { if (this.audioDisabled) { mediaStreamOptions.audio = null; @@ -683,16 +684,25 @@ class PrebufferSession { } } else { - mediaStreamOptions.audio = { - codec: session?.inputAudioCodec, - } + codecCopy = true; } } else { // rtsp mode never transcodes. - mediaStreamOptions.audio = { - codec: session?.inputAudioCodec, - } + codecCopy = true; + } + + if (codecCopy) { + // reported codecs may be wrong/cached/etc, so before blindly copying the audio codec info, + // verify what was found. + if (session?.mediaStreamOptions?.audio?.codec === session?.inputAudioCodec) { + mediaStreamOptions.audio = session?.mediaStreamOptions?.audio; + } + else { + mediaStreamOptions.audio = { + codec: session?.inputAudioCodec, + } + } } if (mediaStreamOptions.video && session.inputVideoResolution?.[2] && session.inputVideoResolution?.[3]) { diff --git a/plugins/prebuffer-mixin/src/rfc4571.ts b/plugins/prebuffer-mixin/src/rfc4571.ts index 942797ff4..27b9b8d4c 100644 --- a/plugins/prebuffer-mixin/src/rfc4571.ts +++ b/plugins/prebuffer-mixin/src/rfc4571.ts @@ -75,8 +75,8 @@ export async function startRFC4571Parser(socket: net.Socket, sdp: string, mediaS return { sdp: Promise.resolve([Buffer.from(sdp)]), - inputAudioCodec: 'pcm', - inputVideoCodec: 'h264', + inputAudioCodec: mediaStreamOptions.audio.codec, + inputVideoCodec: mediaStreamOptions.video.codec, inputVideoResolution: undefined, isActive() { return isActive }, kill,