Пытаюсь сделать следующее:
приходит видео поток нарезанный на сегменты (h.264 / aac).
собрал пайплайн:
appsrc_a -> aacparse ->faad -> faac -> flvmux
appsrc_v -> h264parse -ffh264_dec -> x264enc -> flvmux -> rtmpsink
(a)управляют подачей данных в пайплайн сигналы gstremera:
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);
(b) также указан максимальный размер буфера 40k (свойство «max-bytes»). Заполнение буфера начинается по сигналу «need-data» и прекращается по достижении «max-bytes» и получению сигнала «enough-data».
В реальности:
* приходит сигнал «need-data», данные загружаются ... очередь заполняется до 40к, 90к и т.п.
из лога:
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**)
потом скажем по достижении 1Mб (величина не постоянная) приходит «enough-data» и загрузка данных останавливается.
Мне же нужно чтобы данные запрашивались более или менее равномерно - так сегменты я получаю от удаленной камеры и что делать когда данных недостаточно пока не знаю ...
Кто-небудь может объяснить почему так происходит ?
Бьюсь уж неделю - не могу никак понять.