Wrong dts values for fdsrc before rtpbin
Hi,
I have a problem with the following pipelines (using GStreamer 1.16.2 compiled from source, on a Mageia 7 or CentOS 7 Linux computer):
export GST_DEBUG=WARN
AUDIOCAPS="audio/x-raw,format=S16LE,layout=interleaved,rate=48000,channels=2"
gst-launch-1.0 -v audiotestsrc wave=5 ! volume volume=0.1 ! ${AUDIOCAPS} ! fdsink fd=3 3>&1 1>&2 | gst-launch-1.0 -v rtpbin name=bin \
fdsrc fd=0 do-timestamp=true ! ${AUDIOCAPS} ! queue ! identity silent=false ! audiorate ! audioresample ! audioconvert ! \
queue ! opusenc bitrate=120000 ! rtpopuspay pt=97 ! bin.send_rtp_sink_1 bin.send_rtp_src_1 ! udpsink host=224.0.0.0 port=7002 sync=true
Many times, the first valid dts and pts have non zero value (the same as computer uptime), and the pipeline is stuck.
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: none, pts: none, duration: none, offset: 303104, offset_end: -1, flags: 00000000 , meta: none) 0x7fcb1401cb40
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: none, pts: none, duration: none, offset: 307200, offset_end: -1, flags: 00000000 , meta: none) 0x7fcb1401cc60
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 3:41:25.228818633, pts: 3:41:25.228818633, duration: none, offset: 311296, offset_end: -1, flags: 00000000 , meta: none) 0x7fcb1401cd80
$ uptime
12:54:58 up 3:41, 28 users, load average: 1,44, 0,93, 1,42
Other times, dts and pts start at zero and all is fine:
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: none, pts: none, duration: none, offset: 344064, offset_end: -1, flags: 00000000 , meta: none) 0x7f20e80636c0
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: none, pts: none, duration: none, offset: 348160, offset_end: -1, flags: 00000000 , meta: none) 0x7f20e80637e0
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: none, pts: none, duration: none, offset: 352256, offset_end: -1, flags: 00000000 , meta: none) 0x7f20e8063900
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: none, pts: none, duration: none, offset: 356352, offset_end: -1, flags: 00000000 , meta: none) 0x7f20e8063a20
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 0:00:00.001073520, pts: 0:00:00.001073520, duration: none, offset: 360448, offset_end: -1, flags: 00000000 , meta: none) 0x7f20e8063b40
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 0:00:00.001098004, pts: 0:00:00.001098004, duration: none, offset: 364544, offset_end: -1, flags: 00000000 , meta: none) 0x7f20e8063c60
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 0:00:00.001129851, pts: 0:00:00.001129851, duration: none, offset: 368640, offset_end: -1, flags: 00000000 , meta: none) 0x7f20e8063d80
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 0:00:00.001144254, pts: 0:00:00.001144254, duration: none, offset: 372736, offset_end: -1, flags: 00000000 , meta: none) 0x7f20e8063ea0
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 0:00:00.001158460, pts: 0:00:00.001158460, duration: none, offset: 376832, offset_end: -1, flags: 00000000 , meta: none) 0x7f20e8071000
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 0:00:00.001174380, pts: 0:00:00.001174380, duration: none, offset: 380928, offset_end: -1, flags: 00000000 , meta: none) 0x7f20e8071120
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 0:00:00.001190767, pts: 0:00:00.001190767, duration: none, offset: 385024, offset_end: -1, flags: 00000000 , meta: none) 0x7f20e8071240
...
If I remove audiorate element, everything is fine everytime, even if high dts and pts values are present:
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: none, pts: none, duration: none, offset: 413696, offset_end: -1, flags: 00000000 , meta: none) 0x7f49e8052a20
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: none, pts: none, duration: none, offset: 417792, offset_end: -1, flags: 00000000 , meta: none) 0x7f49e8052b40
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: none, pts: none, duration: none, offset: 421888, offset_end: -1, flags: 00000000 , meta: none) 0x7f49e8052c60
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: none, pts: none, duration: none, offset: 425984, offset_end: -1, flags: 00000000 , meta: none) 0x7f49e8052d80
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 3:59:53.127592312, pts: 3:59:53.127592312, duration: none, offset: 430080, offset_end: -1, flags: 00000000 , meta: none) 0x7f49e8052ea0
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 3:59:53.127624415, pts: 3:59:53.127624415, duration: none, offset: 434176, offset_end: -1, flags: 00000000 , meta: none) 0x7f49e8053000
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 0:00:00.002044840, pts: 0:00:00.002044840, duration: none, offset: 438272, offset_end: -1, flags: 00000000 , meta: none) 0x7f49e8053120
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 0:00:00.002052869, pts: 0:00:00.002052869, duration: none, offset: 442368, offset_end: -1, flags: 00000000 , meta: none) 0x7f49e8053240
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 0:00:00.002057722, pts: 0:00:00.002057722, duration: none, offset: 446464, offset_end: -1, flags: 00000000 , meta: none) 0x7f49e8053360
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 0:00:00.002062097, pts: 0:00:00.002062097, duration: none, offset: 450560, offset_end: -1, flags: 00000000 , meta: none) 0x7f49e80515a0
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 0:00:00.002067359, pts: 0:00:00.002067359, duration: none, offset: 454656, offset_end: -1, flags: 00000000 , meta: none) 0x7f49e8051480
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 0:00:00.002072052, pts: 0:00:00.002072052, duration: none, offset: 458752, offset_end: -1, flags: 00000000 , meta: none) 0x7f49e8034d80
/GstPipeline:pipeline0/GstIdentity:identity0: last-message = chain ******* (identity0:sink) (4096 bytes, dts: 0:00:00.002079149, pts: 0:00:00.002079149, duration: none, offset: 462848, offset_end: -1, flags: 00000000 , meta: none) 0x7f49e80516c0
...
The original problem is reported at:
- gstremer-devel: https://lists.freedesktop.org/archives/gstreamer-devel/2020-May/074958.html
- Snowmix: https://sourceforge.net/p/snowmix/discussion/Snowmix_Support_Forum/thread/ccee999022/
Regards,
Francesc