fix(gateway): deliver audio + per-IDR SPS/PPS in GoLive screen share
Screen share showed a single frozen frame: the GoLive pipeline sent video only (-"-an", h264 muxer cannot carry audio) so the audio SSRC never transmitted and Discord kept the stream in thumbnail state. - prepareStream: mux NUT when includeAudio (h264 muxer drops audio) and return the actual container format - Demuxer: support NUT input with a second output pipe (fd3) carrying Ogg Opus; parse OGG pages into opus frames (20ms, 48kHz) emitted as GoLiveFrames; fix metadata parsing that dropped the audio stream line when it arrived in a later stderr chunk (early parsedMeta return) - playStream: pipe audio.stream into AudioStream → RTP on the audio SSRC - Encoders: -x264-params repeat-headers=1 → SPS/PPS inline before EVERY IDR (NUT remux drops container extradata; also enables PLI recovery) - screenShareController: includeAudio true - tests: demuxerNut.test.ts — OGG parser unit test + real ffmpeg NUT integration (video access units + parsed opus frames)
This commit is contained in:
@@ -179,6 +179,9 @@ export class WebRtcConnWrapper {
|
||||
throw new Error("WebRTC connection not ready");
|
||||
}
|
||||
const { audioSsrc, videoSsrc } = this.mediaConnection.webRtcParams;
|
||||
console.log(
|
||||
`[goLive:WebRtc] setPacketizer(${videoCodec}) audioSsrc=${audioSsrc} videoSsrc=${videoSsrc} rtxSsrc=${this.mediaConnection.webRtcParams.rtxSsrc}`,
|
||||
);
|
||||
this._videoCodec = normalizeVideoCodec(videoCodec);
|
||||
// Audio packetizer: opus 120 @ 48kHz, playout delay ext id 5 (like @dank074)
|
||||
this._audioTrack?.setPacketizer(
|
||||
|
||||
Reference in New Issue
Block a user