У меня есть программа на C ++, которая выполняет такой цикл, захватывая кадры с видеоустройства, используя собственный драйвер, к которому у меня нет доступа.
while(true) {
mybuf = getNextFrame(); // blocks
}
Я хотел бы построить некоторую логику, используя другие языки программирования, поэтому я думал об использовании следующего интерфейса. (Мне нужна только поддержка Linux)
Я думал о наличии файла где-то, например:
/my/video/device
И каждый раз, когда я звоню read()
на нем, это дало бы мне текущий кадр. Кроме того, если я снова вызову read (), я бы хотел, чтобы он блокировался до следующего доступного кадра и возвращал его мне. Кроме того, если я некоторое время не вызываю open (), я не хочу буферизовать промежуточные кадры.
Какой будет лучший подход?
Я пытался использовать FUSE для реализации файловой системы, но он пытался искать внутри файла, если это был обычный файл, и считывал только до размера, указанного мной для файла. Затем я сделал устройство для персонажа, но оно никогда бы не read()
функция, вместо этого было бы сказать, что разрешение отказано …
Я думал о том, чтобы попробовать CUSE или что-то в этом роде. Я слишком усложняю вещи? Мне просто нужно иметь возможность работать с потоком фреймов, которые постоянно поступают из моего цикла C ++, но я хочу проанализировать их на другом языке, таком как Python или Go. Я также не хочу смешивать компиляцию моего кода на C ++ с Go или python, я хочу, чтобы эти два кода были полностью разделены. Я думал, что наличие какого-либо файлового API между ними облегчит задачу. Что было бы хорошим способом справиться с этим?
Я бы написал программу, используя именованные каналы. Следует иметь в виду, что если принимающая сторона отключится в середине записи, сервер получит сигнал SIGPIPE, и если этот сигнал не будет обработан или заблокирован, сервер будет прерван.
Других решений пока нет …