Linux + язык для захвата видео и отображения - PullRequest
0 голосов
/ 07 января 2010

Очень скоро мы будем работать над проектом с открытым исходным кодом, который выполняет множество задач, и один из модулей касается захвата прямой трансляции с камеры на основе USB в течение 48 часов и перезаписи в непрерывном цикле. Это будет происходить параллельно с другими операциями в приложении. Мы также должны отобразить захваченный канал за 48 часов пользователю в качестве опции меню.

Я хотел бы, чтобы вы все предложили подходящий стек технологий с открытым исходным кодом с учетом аудио / видео части модуля, без этой функции я определенно могу использовать Qt для своей работы, но с этой функцией становится трудным предложением. Я разработал приложения с графическим интерфейсом для Qt на платформе Linux, но не смог придумать что-то, что может записывать и отображать видео в приложении. У Qt есть фонон, но его настройка - это кошмар. Ранее некоторые из вас предлагали v4linux. Я попытался скомпилировать пример программы capture.c на компьютере RHEL 4, и он выдал следующие ошибки.

usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:436: warning: no semicolon at end of struct or union

/usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:436: error: syntax error before '*' token

/usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:438: error: syntax error before '*' token

/usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:438: warning: data definition has no type or storage class

/usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:439: error: syntax error before '}' token

/usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:810: error: field `win' has incomplete type

Так что зашел в тупик, к тому же я не нашел конкретных реальных примеров того же. Кроме того, веб-сайт не обновляется часто, что указывает на застой в процессе разработки.

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

EDIT: Смог скомпилировать программу, импортировав локальную копию videodev2.h и добавив оператор define для включения макроса __user. Но теперь он не будет работать, так как не может найти устройство / dev / video. Так что опять застрял в тупике в video4linux

Ответы [ 3 ]

0 голосов
/ 08 января 2010

gstreamer - очень способный мультимедийный стек для захвата, и привязки pygst и PyQt4 существуют для использования в Python.

0 голосов
/ 10 апреля 2011

Если указано «не удается найти / dev / video», то это потому, что Linux нумерует устройства. Если бы вы посмотрели в файл .c, вы бы увидели несколько arg_opts как -d ... (где ... станет / dev / video0) или вы можете перейти в файл .c и добавить 0 к / dev / video, вы найдете его где-то около строки 590 в начале int main.

0 голосов
/ 07 января 2010

Вы можете попробовать семейство библиотек FFmpeg . С недавнего времени (я думаю), он также поставляется с библиотекой libavdevice, которая поддерживает V4L и V4L2 для захвата видео, и не должно быть очень сложно построить конвейер FFmpeg для чтения видео из источника avdevice и записи его с использованием avcodec и авформат в файл ...

...