Я хотел получить некоторое представление тот, как некоторые из Вас приблизятся к этой проблеме. У меня есть робот, который запускает Linux и использует веб-камеру (с v4l2 драйвером) как один из его датчиков. Я записал панель управления с gtkmm. И сервер и клиент записаны в C++. Сервер является роботом, клиент является "панелью управления". Анализ изображения происходит на роботе, и я хотел бы передать потоком назад видео от камеры до панели управления по двум причинам: A) для забавы B) для накладывания результатов анализа изображения
Таким образом, мой вопрос, что некоторые хорошие пути состоят в том, чтобы передать видео потоком от веб-камеры до панели управления, а также уделяющий первостепенное значение коду робота для обработки его? Мне не интересно это, пишущий мою собственную схему сжатия видео и проводя его через существующий сетевой порт, новый сетевой порт (выделенный видеоданным) был бы лучшим, чтобы я думал. Вторая часть проблемы - то, как я отображаю видео в gtkmm? Видеоданные прибывают асинхронно, и я не управляю основной () в gtkmm, таким образом, я думаю, что это было бы хитро.
Я открыт для использования вещей как vlc, gstreamer или любые другие общие библиотеки сжатия, о которых я не знаю.
спасибо!
Править: Робот имеет процессор на 1 ГГц, выполняя рабочий стол как версия Linux, но № X11.
Введите здесь код
Если упростить (для теста)
$('#'+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», чтобы увидеть примеры людей, делающих это с помощью веб-камер и т.п.
Я не уверен насчет используемых технологий, но это может закончиться огромной синхронизацией *****, если вы хотите избежать выпадения кадров. Я передавал видео в файл и по сети одновременно. В конце концов, я использовал большой круговой буфер с тремя указателями: один для записи и два для чтения. Было три управляющих потока (и несколько дополнительных потоков кодирования): один записывал в буфер, который делал паузу, если он достигал точки в буфере, не прочитанной обоими другими, и два потока чтения, которые читали из буфера и записывали в файл/сеть (и делал паузу, если они опережали продюсера). Поскольку все записывалось и читалось как кадры, накладные расходы на синхронизацию можно было свести к минимуму.
Мой продюсер был транскодером (из другого файлового источника), но в вашем случае, вы можете захотеть, чтобы камера создавала целые кадры в любом формате, который она обычно делает, и делала транскодирование (с чем-то вроде ffmpeg) только для сервера, в то время как робот обрабатывает изображение.
Ваша проблема немного сложнее, так как роботу нужна обратная связь в реальном времени, поэтому он не может делать паузы и ждать, пока сервер наверстает упущенное. Поэтому, возможно, вы захотите как можно быстрее доставить кадры в систему управления и буферизировать некоторые из них в круглом буфере отдельно для потоковой передачи на "панель управления". Некоторые кодеки обрабатывают выпавшие фреймы лучше, чем другие, так что если сеть отстает, вы можете начать перезаписывать фреймы в конце буфера (заботясь о том, чтобы они не были прочитаны).
Когда вы говорите «новый видеопорт», а затем начните говорить о VLC / GTReaming, я нахожу его трудно поработать, что вы хотите. Очевидно, что эти программные пакеты помогут в потоковой передаче и сжимании через ряд протоколов, но ясно, что вам понадобится «сетевой порт», а не «видеопорт» для отправки потока.
Если то, что вы действительно имеете в виду, является отправка выхода дисплея через беспроводное видео / телевизор, это другое дело, однако вам понадобится совет от аппаратных экспертов, а не экспертов по программному обеспечению.
Двигается дальше. Я сделал много потоковых протоколов MMS / UDP, а VLC хорошо обрабатывает его (как сервер и клиент). Однако он предназначен для настольных компьютеров и может быть не так легким, как вы хотите. Что-то вроде gstreamer, Mencoder или FFMPEG на руке, я думаю, будет лучше. Какой процессор у робота? Вам понадобится немного грунта, если планируете сжатие в режиме реального времени.
На стороне клиента я думаю, что вы найдете ряд виджетов для обработки видео в GTK. Я бы рассмотрел это, прежде чем беспокоиться о деталях интерфейса.