Я работаю над программой, которая мигрирует из 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
Gstreamer Количество обработанных кадров [закрыто] ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1740046659
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 отправляет поток? Набор свойств из моего потока, один из них - частота кадров, я считаю, что ищу это значение.
Подробнее здесь: [url]https://stackoverflow.com/questions/79451678/gstreamer-number-of-processed-frames[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия