Интерфейс C ++ Stream в Linux

У меня есть программа на C ++, которая выполняет такой цикл, захватывая кадры с видеоустройства, используя собственный драйвер, к которому у меня нет доступа.

while(true) {
mybuf = getNextFrame(); // blocks
}

Я хотел бы построить некоторую логику, используя другие языки программирования, поэтому я думал об использовании следующего интерфейса. (Мне нужна только поддержка Linux)
Я думал о наличии файла где-то, например:
/my/video/device
И каждый раз, когда я звоню read() на нем, это дало бы мне текущий кадр. Кроме того, если я снова вызову read (), я бы хотел, чтобы он блокировался до следующего доступного кадра и возвращал его мне. Кроме того, если я некоторое время не вызываю open (), я не хочу буферизовать промежуточные кадры.

Какой будет лучший подход?
Я пытался использовать FUSE для реализации файловой системы, но он пытался искать внутри файла, если это был обычный файл, и считывал только до размера, указанного мной для файла. Затем я сделал устройство для персонажа, но оно никогда бы не read() функция, вместо этого было бы сказать, что разрешение отказано …

Я думал о том, чтобы попробовать CUSE или что-то в этом роде. Я слишком усложняю вещи? Мне просто нужно иметь возможность работать с потоком фреймов, которые постоянно поступают из моего цикла C ++, но я хочу проанализировать их на другом языке, таком как Python или Go. Я также не хочу смешивать компиляцию моего кода на C ++ с Go или python, я хочу, чтобы эти два кода были полностью разделены. Я думал, что наличие какого-либо файлового API между ними облегчит задачу. Что было бы хорошим способом справиться с этим?

1

Решение

Я бы написал программу, используя именованные каналы. Следует иметь в виду, что если принимающая сторона отключится в середине записи, сервер получит сигнал SIGPIPE, и если этот сигнал не будет обработан или заблокирован, сервер будет прерван.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]