Skip to content

Commit 2b13387

Browse files
committed
Restructure buffering to reduce codec glitches when dropping overruns
1 parent 46ff853 commit 2b13387

File tree

1 file changed

+23
-5
lines changed

1 file changed

+23
-5
lines changed

index.js

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -152,11 +152,26 @@ const pipelineMachine = Machine(
152152
max-size-bytes=0
153153
`
154154

155+
const bufferQueue = `
156+
queue
157+
max-size-time=${delayNs}
158+
max-size-buffers=0
159+
max-size-bytes=0
160+
`
161+
162+
const dropQueue = `
163+
queue
164+
leaky=downstream
165+
max-size-time=${1 * SEC}
166+
max-size-buffers=0
167+
max-size-bytes=0
168+
`
169+
155170
let outStream
156171
if (outUri.startsWith('rtmp://')) {
157-
outStream = `flvmux name=mux streamable=true ! queue name=outqueue leaky=downstream ! rtmpsink name=sink enable-last-sample=false location="${outUri} live=1"`
172+
outStream = `flvmux name=mux streamable=true ! queue ! rtmpsink name=sink enable-last-sample=false location="${outUri} live=1"`
158173
} else if (outUri.startsWith('srt://')) {
159-
outStream = `mpegtsmux name=mux ! queue name=outqueue leaky=downstream ! srtsink name=sink uri=${outUri}`
174+
outStream = `mpegtsmux name=mux ! queue ! srtsink name=sink uri=${outUri}`
160175
} else {
161176
throw new Error(`Unexpected output stream protocol: ${outUri}`)
162177
}
@@ -172,8 +187,8 @@ const pipelineMachine = Machine(
172187
! gdkpixbufoverlay location=${gstEscape(overlayImg)}
173188
! queue
174189
! isel.
175-
input-selector name=isel ! queue ! x264enc bitrate=${x264Bitrate} tune=zerolatency speed-preset=${x264Preset} byte-stream=true threads=0 key-int-max=60 ! queue ! mux.
176-
demux. ! queue ! aacparse ! decodebin ! audioconvert ! volume name=vol volume=0 ! audioconvert ! voaacenc bitrate=96000 ! aacparse ! queue ! mux.
190+
input-selector name=isel ! ${dropQueue} name=videoqueue ! x264enc bitrate=${x264Bitrate} tune=zerolatency speed-preset=${x264Preset} byte-stream=true threads=0 key-int-max=60 ! ${bufferQueue} name=videobufqueue ! mux.
191+
demux. ! queue ! aacparse ! decodebin ! audioconvert ! volume name=vol volume=0 ! audioconvert ! ${dropQueue} name=audioqueue ! voaacenc bitrate=96000 ! aacparse ! ${bufferQueue} name=audiobufqueue ! mux.
177192
${outStream}
178193
`)
179194

@@ -218,7 +233,10 @@ const pipelineMachine = Machine(
218233
}
219234
debugInterval = setInterval(() => {
220235
printQueue('delayqueue')
221-
printQueue('outqueue')
236+
printQueue('videoqueue')
237+
printQueue('audioqueue')
238+
printQueue('videobufqueue')
239+
printQueue('audiobufqueue')
222240
console.log('---')
223241
}, 1000)
224242
}

0 commit comments

Comments
 (0)