потоковое видео к и от многочисленных источников

Я хотел получить некоторое представление тот, как некоторые из Вас приблизятся к этой проблеме. У меня есть робот, который запускает Linux и использует веб-камеру (с v4l2 драйвером) как один из его датчиков. Я записал панель управления с gtkmm. И сервер и клиент записаны в C++. Сервер является роботом, клиент является "панелью управления". Анализ изображения происходит на роботе, и я хотел бы передать потоком назад видео от камеры до панели управления по двум причинам: A) для забавы B) для накладывания результатов анализа изображения

Таким образом, мой вопрос, что некоторые хорошие пути состоят в том, чтобы передать видео потоком от веб-камеры до панели управления, а также уделяющий первостепенное значение коду робота для обработки его? Мне не интересно это, пишущий мою собственную схему сжатия видео и проводя его через существующий сетевой порт, новый сетевой порт (выделенный видеоданным) был бы лучшим, чтобы я думал. Вторая часть проблемы - то, как я отображаю видео в gtkmm? Видеоданные прибывают асинхронно, и я не управляю основной () в gtkmm, таким образом, я думаю, что это было бы хитро.

Я открыт для использования вещей как vlc, gstreamer или любые другие общие библиотеки сжатия, о которых я не знаю.

спасибо!

Править: Робот имеет процессор на 1 ГГц, выполняя рабочий стол как версия Linux, но № X11.

5
задан Chris H 14 January 2010 в 02:19
поделиться

3 ответа

Введите здесь код Если упростить (для теста)

$('#'+newId).dialog({autoOpen: true, modal: true, width:width }); 

и сделать его:

$('#SaisieARModal').dialog({autoOpen: true, modal: true, width:width }); 

появляется модальный? Вы также пробовали вариант bgiframe: true ?

Не уверены, что что-то из этого полностью актуально, но что-то ставит (скорее всего) селектор даты за модальные вещи где-то.

EDIT: Еще одна вещь, если изменить

$(function() { $("#MytextInputID").datepicker({ dateFormat: 'dd/mm/yy' }); });

на

    $(function() { 
       $("#MytextInputID").datepicker({ dateFormat: 'dd/mm/yy' });
       $("#MytextInputID").click(function(){alert("working");});
    });

, появится ли предупреждение?

-121--2669386-

может просто использовать эти две функции:

void renderstring2d(char string[], float r, float g, float b, float x, float y)
{
    glColor3f(r, g, b);

    glRasterPos2f(x, y);
    for(unsigned int i = 0; i < strlen(string); i++)
        glutBitmapCharacter(GLUT_BITMAP_9_BY_15, string[i]);
}

void renderstring3d(char string[], float r, float g, float b, float x, float y, float z)
{
    glDisable(GL_LIGHTING);
    glColor3f(r, g, b);

    glRasterPos3f(x, y, z);
    for(unsigned int i = 0; i < strlen(string); i++)
        glutBitmapCharacter(GLUT_BITMAP_9_BY_15, string[i]);
}

, тогда при визуализации 2D текста не забудьте сбросить матрицы вида модели и проекции.

glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();

// Render text and quads

glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();

Нет необходимости выполнять рендеринг для квадрата с использованием этих функций, поскольку эти функции выполняют рендеринг непосредственно для буфера кадров.

И если это не сработает для вас, проверьте это. http://www.opengl.org/resources/faq/technical/fonts.htm

Речь идет о визуализации текста с использованием glBitmap, glDrawPixels и альфа-наложения.

-121--1195912-

Gstreamer решает почти все это для вас, с очень небольшими усилиями, а также хорошо интегрируется с системой событий Glib. GStreamer включает V4L исходные плагины, gtk + выходные виджеты, различные фильтры для изменения размеров/кодирования/декодирования видео, и лучше всего, сетевой приемник и источники для перемещения данных между машинами.

Для прототипа можно использовать инструмент «gst-launch» для сборки видеопроводов и их тестирования, а затем достаточно просто создавать конвейеры программно в коде. Поиск «GStreamer network streaming», чтобы увидеть примеры людей, делающих это с помощью веб-камер и т.п.

2
ответ дан 15 December 2019 в 06:27
поделиться

Я не уверен насчет используемых технологий, но это может закончиться огромной синхронизацией *****, если вы хотите избежать выпадения кадров. Я передавал видео в файл и по сети одновременно. В конце концов, я использовал большой круговой буфер с тремя указателями: один для записи и два для чтения. Было три управляющих потока (и несколько дополнительных потоков кодирования): один записывал в буфер, который делал паузу, если он достигал точки в буфере, не прочитанной обоими другими, и два потока чтения, которые читали из буфера и записывали в файл/сеть (и делал паузу, если они опережали продюсера). Поскольку все записывалось и читалось как кадры, накладные расходы на синхронизацию можно было свести к минимуму.

Мой продюсер был транскодером (из другого файлового источника), но в вашем случае, вы можете захотеть, чтобы камера создавала целые кадры в любом формате, который она обычно делает, и делала транскодирование (с чем-то вроде ffmpeg) только для сервера, в то время как робот обрабатывает изображение.

Ваша проблема немного сложнее, так как роботу нужна обратная связь в реальном времени, поэтому он не может делать паузы и ждать, пока сервер наверстает упущенное. Поэтому, возможно, вы захотите как можно быстрее доставить кадры в систему управления и буферизировать некоторые из них в круглом буфере отдельно для потоковой передачи на "панель управления". Некоторые кодеки обрабатывают выпавшие фреймы лучше, чем другие, так что если сеть отстает, вы можете начать перезаписывать фреймы в конце буфера (заботясь о том, чтобы они не были прочитаны).

1
ответ дан 15 December 2019 в 06:27
поделиться

Когда вы говорите «новый видеопорт», а затем начните говорить о VLC / GTReaming, я нахожу его трудно поработать, что вы хотите. Очевидно, что эти программные пакеты помогут в потоковой передаче и сжимании через ряд протоколов, но ясно, что вам понадобится «сетевой порт», а не «видеопорт» для отправки потока.

Если то, что вы действительно имеете в виду, является отправка выхода дисплея через беспроводное видео / телевизор, это другое дело, однако вам понадобится совет от аппаратных экспертов, а не экспертов по программному обеспечению.

Двигается дальше. Я сделал много потоковых протоколов MMS / UDP, а VLC хорошо обрабатывает его (как сервер и клиент). Однако он предназначен для настольных компьютеров и может быть не так легким, как вы хотите. Что-то вроде gstreamer, Mencoder или FFMPEG на руке, я думаю, будет лучше. Какой процессор у робота? Вам понадобится немного грунта, если планируете сжатие в режиме реального времени.

На стороне клиента я думаю, что вы найдете ряд виджетов для обработки видео в GTK. Я бы рассмотрел это, прежде чем беспокоиться о деталях интерфейса.

0
ответ дан 15 December 2019 в 06:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: