3

Gstreamer(0.10 版)允许使用“Appsrc”元素加载外部数据。

Appsrc 有一个控制属性,用于定义在考虑队列已满之前可以在 appsrc 中排队多少数据。它被命名为“最大字节数”。

当队列大小达到预定义的限制时,appsrc 会发出“足够数据”信号。

有一个应用程序:

  1. 它有一个馈送函数 X 从文件系统读取数据。
  2. 负责函数 X 执行的“开始”和“停止”函数。使用appsrc注册的两个函数:

    g_signal_connect(app->appsrc_v, "need-data", G_CALLBACK(start_feed),   app);       
    g_signal_connect(app->appsrc_v, "enough-data", G_CALLBACK(stop_feed),    app);
    
  3. 使用“max-bytes”属性定义的队列限制为:40960 字节

一切似乎都定义得很好——管道正在运行,appsrc 消耗数据,馈送正在工作,appsrc 发出“需要”和“足够”的信号。

但有时我可以看到以下内容:

appsrc gstappsrc.c:1451:gst_app_src_push_buffer_full:<appsrc_v> queue filled (**890033** >= **40960**)
appsrc gstappsrc.c:1451:gst_app_src_push_buffer_full:<appsrc_v> queue filled (**898225** >= **40960**)
appsrc gstappsrc.c:1451:gst_app_src_push_buffer_full:<appsrc_v> queue filled (**898225** >= **40960**)

已达到队列限制,但未发出“足够”的信号。馈送功能将继续将数据推送到appsrc,而不是40K,它可以推送到1Mb或更多。

你能帮我理解这个原因吗?

4

0 回答 0