Я создал прямой непрерывный поток mjpeg. Грубая иллюстрация, как это
....[image (jpeg)]->[text "content-length"]->[image (jpeg)]->[text "content-length"]->....
Как вы можете видеть, я получаю данные из медиа-линии gstreamer, которая содержит изображение и мой собственный текст
(Примечание: хотя я использую Gstreamer, мой вопрос касается только принципов C ++.)
Чтобы проанализировать эти данные в реальном времени, я пытаюсь получить их и поместить в очередь. Впоследствии я планирую проанализировать данные по слову «длина содержимого» после того, как очередь содержит определенное количество пакетов.
Мой код выглядит следующим образом:
void clear( std::queue<char> &q )
{
std::queue<char> empty;
std::swap( q, empty );
}
static GstFlowReturn new_buffer (GstAppSink *app_sink, gpointer user_data)
{
GstBuffer* buffer = gst_app_sink_pull_buffer(app_sink);
//create queue
std::queue<char> q;
g_print("The input buffer contents are\n");
gint i=0;
for(i=0; buffer->data[i];i++)
{
//g_print("\n%d",i);
q.push(buffer->data[i]);
}
//g_print("\nsize of inbuf is %d\n",GST_BUFFER_SIZE(buffer));
g_print("\n");
gst_buffer_unref(buffer);
//#####################
//parsing method here???
//#####################
clear(q);
return GST_FLOW_OK;
}
Я использовал циклические очереди / кольцевой буфер в C / C ++ раньше. Это лучший вариант? Или же очереди C ++ STL были бы более подходящими в этом сценарии, как описано выше?