0

应用程序有一个管道:

appsrc is-live=true ! audiorate skip-to-first=true tolerance=250000000 ! opusenc ! oggmux ! filesink

gst_element_send_event(appsrc, gst_event_new_eos())调用来终止它。但是 EOS 有时不会到达管道的总线。

当它没有通过时,必须传递 EOS 的循环的调用堆栈反而陷入等待预卷:

g_cond_wait () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
gst_base_sink_wait_preroll () at gstbasesink.c:2212
gst_base_sink_do_preroll () at gstbasesink.c:2306
gst_base_sink_do_sync () at gstbasesink.c:2508
gst_base_sink_chain_unlocked () at gstbasesink.c:3495
gst_base_sink_chain_main () at gstbasesink.c:3656
gst_pad_chain_data_unchecked () at gstpad.c:4188
gst_pad_push_data () at gstpad.c:4440
in gst_pad_push () at gstpad.c:4559
in gst_proxy_pad_chain_default () at gstghostpad.c:126
in gst_pad_chain_data_unchecked () at gstpad.c:4188
gst_pad_push_data () at gstpad.c:4440
in gst_pad_push () at gstpad.c:4559
in gst_base_src_loop () at gstbasesrc.c:2850
in gst_task_func () at gsttask.c:332
in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
in start_thread () at pthread_create.c:333
in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

该应用程序没有数据可以放入appsrc,因为它是清理过程的一部分。

GStreamer 1.8.3。

如何取消该预卷并在总线上获得适当的 EOS,以便关闭所有内容?

4

0 回答 0