Gstreamer Количество обработанных кадров [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Gstreamer Количество обработанных кадров [закрыто]

Сообщение Anonymous »

Я работаю над программой, которая мигрирует из OpenCV в GSTREAMER, в настоящее время у меня есть трубопровод и рамки, полученные из RTSP -потока в GSTREAMER. < /p>
Я получаю Буферные данные из RTSP -потока и сбрасывают его в CV :: Mat, после этого я обрабатываю и отображаю этот коврик на экране, используя imshow (). В то же время я делаю этот процесс в цикле, поэтому на моем экране Imshow постоянно обновляется с изображениями в реальном времени, извлеченных из потока RTSP. Я отображаю полученные данные на моем экране в виде формата медиа/видео в реальном времени.pipeline_str = "rtspsrc location=" + source_video + " ! queue ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! video/x-raw,format=BGR ! queue ! appsink name=stream sync=false";
< /code>
Затем, чтобы получить кадр, я выполняю следующее < /p>
cv::Mat VideoFrameProcessing::getFrameFromGST()
{
cv::Mat _temp_frame;

int w, h;
GstStructure* structure;
GstMapInfo map;

current_gst.sink = gst_bin_get_by_name(GST_BIN(current_gst.pipeline), "stream");
if (!current_gst.sink)
logNeuralAndPrint("ERROR: Sink es nulo");

current_gst.appsink = GST_APP_SINK(current_gst.sink);
if (!current_gst.appsink)
{
logNeuralAndPrint("ERROR: Appsink es nulo");
gst_object_unref(current_gst.sink);
}

current_gst.sample = gst_app_sink_pull_sample(current_gst.appsink);
if (!current_gst.sample)
{
logNeuralAndPrint("ERROR: Sample es nulo");
gst_object_unref(current_gst.sink);
}

current_gst.buffer = gst_sample_get_buffer(current_gst.sample);
if (!current_gst.buffer)
{
logNeuralAndPrint("ERROR: El buffer es nulo");
gst_sample_unref(current_gst.sample);
gst_object_unref(current_gst.sink);
}

current_gst.caps = gst_sample_get_caps(current_gst.sample);

memset(&map, 0, sizeof(map));

if (gst_buffer_map(current_gst.buffer, &map, GST_MAP_READ))
{
gst_structure_get_int(structure, "width", &w);
gst_structure_get_int(structure, "height", &h);

_temp_frame = cv::Mat(h, w, CV_8UC3, (void*)map.data, w * 3).clone();
gst_buffer_unmap(current_gst.buffer, &map);
//gst_buffer_unref(current_gst.buffer);
}
else
logNeuralAndPrint("ERROR: No se puede mapear el buffer");

gst_sample_unref(current_gst.sample);
gst_object_unref(current_gst.sink);

return _temp_frame;
}
< /code>
Наконец -то я отображаю возвращение предыдущей функции с использованием imshow (). < /p>
Мой вопрос - следующий, что является лучшим подходом для получения Количество обработанных кадров через gstreamer? Как извлечь кадровую кадров, в какой Gstreamer отправляет поток?

Подробнее здесь: https://stackoverflow.com/questions/794 ... sed-frames
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»