GStreamer issueshttps://gitlab.freedesktop.org/groups/gstreamer/-/issues2022-02-25T09:19:14Zhttps://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1705tsdemux: mpegts descriptors are parsed fail2022-02-25T09:19:14ZWenlin Hungtsdemux: mpegts descriptors are parsed failSome bitstream has private descriptor tags with invalid descriptor length bytes.
Should skip descriptor parsing which is invalid descriptor length and keep playing,
instead of returning descriptor parsing fail then stop playback.
What v...Some bitstream has private descriptor tags with invalid descriptor length bytes.
Should skip descriptor parsing which is invalid descriptor length and keep playing,
instead of returning descriptor parsing fail then stop playback.
What version of GStreamer you are using: Gstreamer 1.10.4
What operating system you are using (Windows, macOS, Linux): Embedded linuxhttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1045gst-libav fatal error if plugins_cache_generatorplugins_cache_generator not f...2022-02-24T15:22:02ZSeppo Yli-Olliseppo.yliolli@gmail.comgst-libav fatal error if plugins_cache_generatorplugins_cache_generator not foundNoticed while doing external build of gstreamer 1.20.0. We probably have packaging issue which exposed this but whenever https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-libav/docs/meson.build#L23 `plugins_c...Noticed while doing external build of gstreamer 1.20.0. We probably have packaging issue which exposed this but whenever https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-libav/docs/meson.build#L23 `plugins_cache_generator` is not found, `plugins_doc_dep` is not defined so https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-libav/docs/meson.build#L77 processes undefined variable.https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/185reqwest: Implement retries on errors2022-07-19T08:54:55ZSebastian Drögereqwest: Implement retries on errorsCan be relatively easily implemented around https://docs.rs/reqwest-retry/latest/reqwest_retry/ , just needs properties exposed.Can be relatively easily implemented around https://docs.rs/reqwest-retry/latest/reqwest_retry/ , just needs properties exposed.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1044ipcpipeline does not work on windows2022-02-25T08:33:39Zjinsl00000jinsl00000@msn.cnipcpipeline does not work on windowsWhen I use ipcpipeline in windows, I found "gstipcpipelinecomm.c" use fd in two different way.
1.POSIX read and write the fd as a File Descriptor.
2.Call gst_poll_funs and use the fd as a WSASocket.
Should "read/write" be "recv/send" ...When I use ipcpipeline in windows, I found "gstipcpipelinecomm.c" use fd in two different way.
1.POSIX read and write the fd as a File Descriptor.
2.Call gst_poll_funs and use the fd as a WSASocket.
Should "read/write" be "recv/send" in windows?
Thinks.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1042Raspberry Pi 3 with bullseye - Pipeline not running when audio and video, no ...2022-11-10T09:21:11ZbelowtoxicRaspberry Pi 3 with bullseye - Pipeline not running when audio and video, no video to HDMI, playbin unstable### Describe your issue
Unable to play back file with audio and video on a Raspberry Pi 3 with Debian bullseye.
#### Expected Behavior
playback of mp4 (h264 / aac) file with audio and video using hardware accelleration to HDMI output wi...### Describe your issue
Unable to play back file with audio and video on a Raspberry Pi 3 with Debian bullseye.
#### Expected Behavior
playback of mp4 (h264 / aac) file with audio and video using hardware accelleration to HDMI output without using X11 or QT (no desktop environment)
#### Observed Behavior
* videotestsrc works
* audio works
* playbin works, but unstable and no video output
* discrete pipeline outputs audio when video is omitted but pipeline does not start to play if both (audio and video) should be output
#### Setup
- Debian bullseye (32bit or 64bit)
- Raspberry Pi 3
- 1.18.4 or 1.19.2
- Command: `gst-launch-1.0 filesrc location=something.mp4 ! qtdemux name=demuxer !
demuxer.video_0 ! queue ! decodebin ! videoconvert ! videoscale ! kmssink !
demuxer.audio_0 ! queue ! decodebin ! audioconvert ! audioresample ! autoaudiosink`
### Steps to reproduce the bug
1. Install Debian bullseye (32bit or 64bit)
I used the *Raspberry Pi - Imager* and Debian bullseye lite 32bit/64bit
2. `apt update && apt upgrade`
3. `rpi-update`
4. Edit `/boot/config.txt` and reboot
* hdmi_group=2
* hdmi_mode=82
* hdmi_drive=2
* dtoverlay=vc4-kms-v3d
* max_framebuffers=2
* gpu_mem=128
5. `apt install gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-libav gstreamer1.0-nice gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-python3-plugin-loader gstreamer1.0-tools gstreamer1.0-plugins-base-apps`
6. run command from *Setup*
1. `gst-launch-1.0 videotestsrc ! kmssink`
Shows testsource without problems
2. `gst-play-1.0 --videosink kmssink something.mp4`
Plays back sound. Video gets visible after doing a seek with cursor keys. Stopps sporadically with error see 6.4
3. `playbin` manages to set pipeline to PLAYING, but no video either. Stopps sporadically with error see 6.4
4. `ERROR No valid frames decoded before end of stream for file:///something.mp4
ERROR debug information: ../gst-libs/gst/video/gstvideodecoder.c(1416): gst_video_decoder_sink_event_default (): /GstPlayBin:playbin/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/v4l2h264dec:v4l2h264dec0:
no valid frames found`
### How reproducible is the bug?
I tried with fresh installs of Debian bullseye 32bit and 64bit on Raspberry Pi 3
I tried two different PI3 boards and two different SD-cards
I tried packages from repository (1.18.4) and compiled from source (git) (1.19.2)
I tried gst-launch-1.0 and Python API
all with the same results
### Screenshots if relevant
### Solutions you have tried
see *How reproducible...*
### Related non-duplicate issues
### Additional Information
### ##### Edit (2022-02-24)
Tried following variations:
* Debian buster (32bit): Playback basically possible but no HW accel with or without KMS driver (didn't try with OMX, because of its deprecation)
* Debian bullseye (32bit) without firmware update (rpi-update): Same behaviour as described already but it seems that there is more smearing/stuttering and frame errors. To verify, updated firmware after test and was able to recognize an improvement.https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/issues/152RTSP media unable to remove bus watch2022-02-23T17:32:40ZSébastien PouplardRTSP media unable to remove bus watchSince we are using the 1.18.5 version of gstreamer and gst-rtsp-server (we were on 1.17.2 before), we can see a new error log:
`ERROR GST_BUS gstbus.c:1087:gst_bus_remove_watch:<bus6> no bus watch was present`
Our softwa...Since we are using the 1.18.5 version of gstreamer and gst-rtsp-server (we were on 1.17.2 before), we can see a new error log:
`ERROR GST_BUS gstbus.c:1087:gst_bus_remove_watch:<bus6> no bus watch was present`
Our software runs fine, but this log is annoying and may signify there is something wrong anyway. I looked into the source code and this is due to the code in rtsp_media.c, in function `finish_unprepare()` at line 4022:
```c
4016 /* the source has the last ref to the media */
4017 if (priv->source) {
4018 GstBus *bus;
4019
4020 GST_DEBUG ("removing bus watch");
4021 bus = gst_pipeline_get_bus (GST_PIPELINE_CAST (priv->pipeline));
4022 gst_bus_remove_watch (bus);
4023 gst_object_unref (bus);
4024
4025 GST_DEBUG ("destroy source");
4026 g_source_destroy (priv->source);
4027 g_source_unref (priv->source);
4028 priv->source = NULL;
4029 }
```
The problem seems that the watch has been created using `gst_bus_create_watch (bus)` in `default_prepare()` function and so is not registered into the bus instance itself so it cannot be removed from the bus (it seems that we should use the `gst_bus_add_watch()` or `gst_bus_add_signal_watch()` for that)https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1041tools: discoverer: Add json output2022-11-10T09:21:11ZSebastian Grosstools: discoverer: Add json outputUntil now `gst-discoverer-1.0` prints - quite well - formatted output.
But it is still cumbersome to parse automatically which might come in handy for some applications.
`ffprobe` on the other hand is able to do so, which I currently us...Until now `gst-discoverer-1.0` prints - quite well - formatted output.
But it is still cumbersome to parse automatically which might come in handy for some applications.
`ffprobe` on the other hand is able to do so, which I currently use for that particular job.
Since gstreamer at least in my understanding is kind of a more feature rich version or even successor to ffmpeg it would be nice to provide such a functionality.
This issue is for welcomed feedback. I intend to get right onto working on it.
Please let me know what you think if this feature might be useful or contradicts your understanding of what gst-discoverer should be used for.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1040Building Gst 1.20.0 x64 on Windows - why pygobject needs python 32bit2022-05-17T20:33:41ZOleg SobolevskiyBuilding Gst 1.20.0 x64 on Windows - why pygobject needs python 32bitHi!
I'm using Gstreamer's monorepo https://gitlab.freedesktop.org/gstreamer/gstreamer tag=1.20.0 to build x64 version of the binaries. The compilation works fine except that there are some modules that were not built.
I'm using the fo...Hi!
I'm using Gstreamer's monorepo https://gitlab.freedesktop.org/gstreamer/gstreamer tag=1.20.0 to build x64 version of the binaries. The compilation works fine except that there are some modules that were not built.
I'm using the following setup
Project name: gstreamer-full
Project version: 1.20.0
C compiler for the host machine: cl (msvc 19.29.30136 "Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30136 for x64")
C linker for the host machine: link link 14.29.30136.0
Host machine cpu family: x86_64
Host machine cpu: x86_64
And I get this problem:
Executing subproject pygobject
pygobject| Project name: pygobject
pygobject| Project version: 3.38.0
pygobject| C compiler for the host machine: cl (msvc 19.29.30136 "Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30136 for x64")
pygobject| C linker for the host machine: link link 14.29.30136.0
pygobject| Program C:\Python38\python found: YES (C:\Python38\python.exe)
pygobject| Need python for 32-bit, but found 64-bit
pygobject| gstreamer\subprojects\pygobject\meson.build:22:0: Exception: Python dependency not found
Subproject subprojects\pygobject is buildable: NO (disabling)
Why `pygobject` needs python 32-bit while all other modules are being built for x64? How do I compile it properly?
Thanks in advance.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1039[gst-python] Namespace Gst not available after building from source2022-11-10T09:21:11Zlucabergamini[gst-python] Namespace Gst not available after building from sourceHi folks,
I'm trying to build `gst-python` from source and run the [hello_world example](https://gitlab.freedesktop.org/gstreamer/gst-python/-/blob/master/examples/helloworld.py).
I'm in a system with pyenv installed at `/pyenv`. The ta...Hi folks,
I'm trying to build `gst-python` from source and run the [hello_world example](https://gitlab.freedesktop.org/gstreamer/gst-python/-/blob/master/examples/helloworld.py).
I'm in a system with pyenv installed at `/pyenv`. The tag of `gst-python` is `1.19.2`
These are the steps I'm following:
`meson build_dir/ -Dpygi-overrides-dir=/pyenv/versions/3.10.0/lib/python3.10/site-packages/gi/overrides/`
`ninja -C build_dir/`
`ninja -C build_dir install`
which outputs:
```
Installing gi/overrides/_gi_gst.cpython-310-x86_64-linux-gnu.so to /pyenv/versions/3.10.0/lib/python3.10/site-packages/gi/overrides
Installing plugin/libgstpython.so to /usr/local/lib/x86_64-linux-gnu/gstreamer-1.0
Installing /tmp/gst-python/gi/overrides/Gst.py to /pyenv/versions/3.10.0/lib/python3.10/site-packages/gi/overrides
Installing /tmp/gst-python/gi/overrides/GstPbutils.py to /pyenv/versions/3.10.0/lib/python3.10/site-packages/gi/overrides
```
I can confirm I see the files in the folder. The only unexpected path is the gstreamer one, as gstreamer is installed at `/usr/lib/x86-64-linux-gnu/gstreamer`.
However, when running the example I'm hitting:
```
Traceback (most recent call last):
File "/orca/pipeline.py", line 5, in <module>
gi.require_version("Gst", "1.0")
File "/pyenv/versions/3.10.0/lib/python3.10/site-packages/gi/__init__.py", line 126, in require_version
raise ValueError('Namespace %s not available' % namespace)
ValueError: Namespace Gst not available
```
I'm attaching the logs just in case:
[meson-log.txt](/uploads/3342d215ff56e9f89217546c1586cc3d/meson-log.txt)
[install-log.txt](/uploads/5d43980a3f2a46ba2d5fdffa9474212b/install-log.txt)
[build.ninja](/uploads/823f1ce81f5184d13a08d3e7d3e42085/build.ninja)https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1036rtpbasepayload: Passing potentially wrong and only one input buffer to header...2023-07-03T07:24:13ZSebastian Drögertpbasepayload: Passing potentially wrong and only one input buffer to header extension if payloader delays dataThe input meta buffer passed to the `write()` function of the header extension is only a single one and is the latest input buffer at the time the packet is pushed out.
If e.g.
- the H264 payloader receives H264 NALUs one per buffer an...The input meta buffer passed to the `write()` function of the header extension is only a single one and is the latest input buffer at the time the packet is pushed out.
If e.g.
- the H264 payloader receives H264 NALUs one per buffer and the aggregate-mode is none then a single output packet will be made of multiple input buffers, and only the last input buffer is passed to the header extension `write()` function
- the H264 payloader needs to decide whether to put the marker flag on the last packet of an AU, but can only know this once the next input buffer is received. In that case the **next** input buffer is passed to the header extension `write()` function, an input buffer that has nothing to do with the packet(s) that are output
- the payloader could accumulate multiple packets and then them out all at once. They would all at once be passed to the `write()` function with the very same input buffer.
I'm not entirely sure how this can be fixed with the existing data flow of the payloader base class.
CC @ystreet @ocrete
Related to https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1037 (depayloader)https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/375rtpheaderextension: Allows to get multiple mutable references to the extensio...2024-02-22T23:18:01ZSebastian Drögertpheaderextension: Allows to get multiple mutable references to the extension datahttps://gstreamer.pages.freedesktop.org/gstreamer-rs/git/docs/gstreamer_rtp/subclass/prelude/trait.RTPHeaderExtensionImpl.html#method.write
One is passed directly into the method, the other can be retrieved by mapping the `output` buffe...https://gstreamer.pages.freedesktop.org/gstreamer-rs/git/docs/gstreamer_rtp/subclass/prelude/trait.RTPHeaderExtensionImpl.html#method.write
One is passed directly into the method, the other can be retrieved by mapping the `output` buffer another time.
Unclear how to solve that.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1035audiotestsrc ! flacenc negotiation inconsistent2022-02-21T19:34:33ZJan Alexander Steffensaudiotestsrc ! flacenc negotiation inconsistentThe following pipeline chooses a format of `S8` for the source:
```sh
gst-launch-1.0 -v audiotestsrc ! flacenc ! flacparse ! flacdec ! audioconvert ! autoaudiosink
```
The following pipeline chooses a format of `S16LE` for the source:
`...The following pipeline chooses a format of `S8` for the source:
```sh
gst-launch-1.0 -v audiotestsrc ! flacenc ! flacparse ! flacdec ! audioconvert ! autoaudiosink
```
The following pipeline chooses a format of `S16LE` for the source:
```sh
gst-launch-1.0 -v audiotestsrc ! audio/x-raw ! flacenc ! flacparse ! flacdec ! audioconvert ! autoaudiosink
```
GStreamer 1.20.0, Arch Linux.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1032Move from gst-env.py to meson devenv2023-01-10T18:31:03ZNirbheek Chauhannirbheek.chauhan@gmail.comMove from gst-env.py to meson devenvMoving discussion from https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1743#note_1267301.
TODO list:
* [ ] Env values set by `gst-env.py` and `meson devenv` are the same on:
- [ ] Linux (when using system librari...Moving discussion from https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1743#note_1267301.
TODO list:
* [ ] Env values set by `gst-env.py` and `meson devenv` are the same on:
- [ ] Linux (when using system libraries)
- [ ] Linux (using wraps only)
- [ ] macOS
- [ ] Windows
* [x] Can build and run third-party apps inside that devenv correctly (when using pkg-config)
* [ ] Figure out min meson version requirement for all that (and change documentation when stable branch requires that version)
* [ ] Support an equivalent to --sysroot workflow
* Add missing env
- [x] GIO_EXTRA_MODULES
* https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2518
* https://gitlab.gnome.org/GNOME/glib-networking/-/merge_requests/208
- [x] GST_OMX_CONFIG_DIR
- [x] GST_PRESET_PATH
- [x] GST_ENCODING_TARGET_PATH
- [x] GST_VALIDATE_SCENARIOS_PATH
- [x] GST_VALIDATE_APPS_DIR
- [x] GST_PTP_HELPER
- [x] _GI_OVERRIDES_PATH
* https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1768
- [ ] PYTHONPATH
* https://github.com/mesonbuild/meson/pull/10023
- [ ] XDG_DATA_DIRS
- [ ] XDG_CONFIG_DIRS
- [ ] MONO_PATH
* [ ] bash completion
* [x] gdb
* [x] Support an equivalent to `--only-environment`
- https://github.com/mesonbuild/meson/pull/10023
* [ ] winepathhttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1030audiomixer: N individual mixes, cancel out own contribution2023-01-23T15:44:32ZDavid Grinbergaudiomixer: N individual mixes, cancel out own contributionI want to generate N individual mixes for each sink pad with its own contribution canceled out (mix-minus). While the idea and the algorithm seem to be straightforward I am not really sure whether it can be implemented without major revi...I want to generate N individual mixes for each sink pad with its own contribution canceled out (mix-minus). While the idea and the algorithm seem to be straightforward I am not really sure whether it can be implemented without major revisions of GstAggregator and GstAudioAggregator -- they seem to imply the use of only one src pad. Can you advise on this?
I already achieved what I wanted through the use of audioinvert and an additional audiomixer, but the performance is poorTim-Philipp Müllertim@centricular.comTim-Philipp Müllertim@centricular.comhttps://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1028gtk: DVD menu highlights don't line up with menus2022-02-22T14:33:12ZBastien Noceragtk: DVD menu highlights don't line up with menusThe menu highlights in DVDs don't line up with the menus themselves and are shifted to the right.
Press "M" a bunch of times to get back to the menu in totem:
http://samples.mplayerhq.hu/sub/DVD-short/red-will-not-display-subtitle.iso
...The menu highlights in DVDs don't line up with the menus themselves and are shifted to the right.
Press "M" a bunch of times to get back to the menu in totem:
http://samples.mplayerhq.hu/sub/DVD-short/red-will-not-display-subtitle.iso
Reproducible with the preview version of totem which uses GStreamer 1.20.0 and gtkglsink:
```
flatpak install --user https://flathub.org/beta-repo/appstream/org.gnome.Totem.Devel.flatpakref
```
![Screenshot_from_2022-02-20_13-04-57](/uploads/4d0acfdbd6e0c14622164429d4467b1d/Screenshot_from_2022-02-20_13-04-57.png)
Doesn't happen with the stable version of totem which uses GStreamer 1.20.0 and clutter-gst/clutter-gtk:
https://flathub.org/apps/details/org.gnome.Totem
![Screenshot_from_2022-02-20_13-05-47](/uploads/92854c0523c54559f89e25f0d2f55b8f/Screenshot_from_2022-02-20_13-05-47.png)
Any pointers as to where to look @thaytan ?https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/183Add IETF QUIC protocol elements2023-01-06T11:32:07ZTomasz AndrzejakAdd IETF QUIC protocol elementsWould it be interesting to have those in GStreamer?
https://github.com/aws/s2n-quicWould it be interesting to have those in GStreamer?
https://github.com/aws/s2n-quichttps://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/364isac plugin is not available with Cerbero2022-02-17T19:04:30Zmachenmusikisac plugin is not available with CerberoGStreamer 1.20 release notes say that isac plugin is included, but it's not there (only rtp pay/depay)GStreamer 1.20 release notes say that isac plugin is included, but it's not there (only rtp pay/depay)https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1021Need API for query or similar in order to reference display device's color ca...2022-02-15T18:41:31ZSeungha Yangseungha@centricular.comNeed API for query or similar in order to reference display device's color capability (MIN/MAX luminance for example)That would be useful or even required for HDR tone mapping.
On Windows, DXGI API provides [the information](https://docs.microsoft.com/en-us/windows/win32/api/dxgi1_6/ns-dxgi1_6-dxgi_output_desc1) but I'm not sure what's the status of t...That would be useful or even required for HDR tone mapping.
On Windows, DXGI API provides [the information](https://docs.microsoft.com/en-us/windows/win32/api/dxgi1_6/ns-dxgi1_6-dxgi_output_desc1) but I'm not sure what's the status of the other platforms.https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1020playbin3 : Add force-sw-decoders equivalent2023-01-20T09:53:30ZBastien Noceraplaybin3 : Add force-sw-decoders equivalentIt's currently difficult for applications to implement something equivalent to playbin2's "force-sw-decoders" for playbin3.
Some features are added dynamically by plugins, so filtering by feature early on isn't possible and `GST_ELEMENT...It's currently difficult for applications to implement something equivalent to playbin2's "force-sw-decoders" for playbin3.
Some features are added dynamically by plugins, so filtering by feature early on isn't possible and `GST_ELEMENT_FACTORY_TYPE_HARDWARE` is only available at the feature level.
The API proposed in:
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/758
would make it easier to disable those plugins as they become available/when they're being queried.https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1701avdec_h264 producing sudden PTS jumps in RTSP streams2022-02-14T16:35:14ZArkadiy Kulevavdec_h264 producing sudden PTS jumps in RTSP streamsHello!
I'm receiving a 30 FPS video stream from a RTSP camera via TCP. Every few seconds I experience sudden choppy playback:
`rtspsrc latency=2000 location=rtspt://guest:gstreamer1@sala.ath.cx:5540/Streaming/Channels/101 ! rtph264dep...Hello!
I'm receiving a 30 FPS video stream from a RTSP camera via TCP. Every few seconds I experience sudden choppy playback:
`rtspsrc latency=2000 location=rtspt://guest:gstreamer1@sala.ath.cx:5540/Streaming/Channels/101 ! rtph264depay ! h264parse ! identity name=id_parse ! avdec_h264 ! identity name=id_avdec ! watchdog timeout=10000 ! autovideosink`
I've been trying to wrap my head around this problem for quite a while and finally wrote a python script which shows me the PTS offsets in different parts of the pipeline ([gst.py](/uploads/1480a00860f8be0cbef49f409a4e50ce/gst.py) script attached)
`h264parse` produces a small jump in PTS only in the beginning of the playback, but stays more or less at 0.0333 afterwards (which is consistent with 30 FPS).
`avdec_h264`, however, produces jumps every several seconds:
```
[pts= 0.194 ] pts_parse delta from previous PTS not 0.0333 = 0.193780327
[pts= 0.194 ] pts_avdec delta from previous PTS not 0.0333 = 0.193780327
[pts= 4.31 ] pts_avdec delta from previous PTS not 0.0333 = 0.06699949600000021
[pts= 6.509 ] pts_avdec delta from previous PTS not 0.0333 = 0.06690735799999992
[pts= 8.307 ] pts_avdec delta from previous PTS not 0.0333 = 0.06704043799999937
[pts= 12.306 ] pts_avdec delta from previous PTS not 0.0333 = 0.06695861200000053
[pts= 13.705 ] pts_avdec delta from previous PTS not 0.0333 = 0.06703847100000004
[pts= 20.308 ] pts_avdec delta from previous PTS not 0.0333 = 0.06702971500000032
[pts= 20.642 ] pts_avdec delta from previous PTS not 0.0333 = 0.09999486099999899
[pts= 23.275 ] pts_avdec delta from previous PTS not 0.0333 = 0.06699473599999806
[pts= 24.341 ] pts_avdec delta from previous PTS not 0.0333 = 0.09999411300000105
```
Is it a bug? Or I should write a wrapper script which fixes the PTS after `avdec_h264` myself?