Gstreamer appsrc

时间:2013-03-02 17:00:57

标签: c gstreamer

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

Appsrc有一个控制属性,用于定义在考虑队列已满之前可以在appsrc中排队的数据量。它被命名为“max-bytes”。

当队列大小达到预定义限制时,apprc信号带有“足够数据”信号。

有一个申请:

  1. 它具有从文件系统读取数据的馈送功能X.
  2. “start”和“stop”函数负责函数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字节

  4. 一切看起来都很好 - pipline正在运行,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或更多。

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

0 个答案:

没有答案