Получить все байты потока с веб-камеры после сжатия кодеком с помощью ffmpeg?

#vb.net #vb6 #ffmpeg #streaming

#vb.net #vb6 #ffmpeg #потоковая передача

Вопрос:

Мне нужно захватить каждый отдельный байт видеопотока с веб-камеры — после использования командной строки-ffmpeg для сжатия его с помощью codec.

Итак, не могли бы вы, пожалуйста, рассказать мне о том, как выглядит командная строка ffmpeg, и о стратегии получения выходного потока в мою программу, написанную VB6 или VB.net ? (Мне нужно манипулировать каждым байтом!) Высоко ценю любые предложения.


Обновление: интересно, можно ли сохранить выходные данные в виде файла «avi» на жестком диске и в то же время использовать мою программу для чтения содержимого файла сохранения. Могу ли я воспроизвести «часть файла avi», которую я извлекаю во время сохранения (добавления) файла? Есть ли лучший формат файла для одновременной записи и чтения (записи и воспроизведения), кроме «avi»?

Или какое-либо лучшее / более быстрое решение?

Комментарии:

1. Не совсем уверен, но вам нужно использовать фильтр DirectShow. Это способ захвата звука: ffmpeg -nostats -f dshow -i audio="S/PDIF (M-Audio Delta AP 192)" -acodec mp3 -f mp3 -ab

2. Спасибо! Я вижу, что некоторые люди используют выходные данные в качестве URL (что-то вроде «192.168.1.123: 8090»), но я хочу получить поток в свою программу, так что вы знаете, как?

3. Используйте стандартный формат. Последний параметр должен быть - .

4. @Brad: Не могли бы вы подробнее рассказать о STDIO и последнем параметре «-«? Я только что попробовал последний параметр как «-«, но у меня ошибка «[NULL @ 03714500] Не удается найти подходящий формат вывода для ‘pipe:’ pipe:: Недопустимый аргумент»

5. Используйте команду, которую я опубликовал в первую очередь. Вы не указываете какой-либо формат, и почему вы stdio туда вставили? ffmpeg -f dshow -i video="Lenovo EasyCamera" -f mp4 - или что-то в этом роде. Вам нужно как минимум указать формат вывода, и лучше всего, если вы также настроите выходные кодеки в соответствии с вашими спецификациями. Кроме того, вы не хотите запускать это в командной строке, иначе необработанные данные будут сброшены на вашу консоль. Если вы это сделаете, по крайней мере, используйте > someFile для вывода в файл.

Ответ №1:

Пожалуйста, просмотрите страницу https://trac.ffmpeg.org/wiki/Capture/Webcam Там четко указано, как снимать видео с веб-камеры с помощью ffmpeg.
Да, вы можете сохранять поток avi на диск и одновременно читать из него, я уверен, что это возможно в Linux, потому что нет блокировки файлов.
Или вы можете записывать в канал и считывать его из канала кадр за кадром.
Пример Linux для захвата видео и записи его в канал.
Чтение из /dev/video0

ffmpeg -f v4l2 -частота кадров 25 -размер видео 640×480 -i /dev/video0 -f rawvideo -pix_fmt yuv420p pipe1.

Сначала вы должны создать канал1 для выполнения этой команды, теперь вы можете читать из этого канала. Piple — это структура данных FIFO в Linux, которая будет сбрасываться по мере чтения данных. ТАК что это будет соответствовать вашим требованиям.

Комментарии:

1. Я решил проблему в Windows, но ваш ответ наверняка полезен для многих других linux.

2. @vantrung-cuncon Вы также можете предоставить ответ для пользователей Windows (и предоставленная Сатьям ссылка также содержит примеры Windows).