Gstreamer(0.10 版)允许使用“Appsrc”元素加载外部数据。
Appsrc 有一个控制属性,用于定义在考虑队列已满之前可以在 appsrc 中排队多少数据。它被命名为“最大字节数”。
当队列大小达到预定义的限制时,appsrc 会发出“足够数据”信号。
有一个应用程序:
- 它有一个馈送函数 X 从文件系统读取数据。
负责函数 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);
使用“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或更多。
你能帮我理解这个原因吗?