У меня есть веб-камера Logitech C920. Он имеет возможность напрямую кодировать видео в H264.
Я хочу воспроизвести то, что было сделано с Beaglebone, но с использованием Raspberry Pi: отправить поток H264 в сеть . Тогда Raspberry Pi предназначен только для упаковки потока в RTP, сжатие видео выполняется самой веб-камерой. Режим H264 обеспечивается с использованием video4linux.
Пока, и если я использую обычный компьютер с последней версией Ubuntu, он работает с использованием VLC в качестве сервера или GStreamer. Например, если я запускаю на Raspberry Pi сервер VLC, используя команду:
cvlc --sout=#rtp{sdp=rtsp://:8554/test} 'v4l2:///dev/video0:chroma=H264:width=800:height=600:fps=30'
... а затем, если я читаю поток с VLC на другом компьютере, все в порядке.
Однако, если я использую Raspberry Pi для отправки видеопотока, результат довольно плохой. Много мусора на изображении, как только что-то движется. Ключи изображений хорошо принимаются каждые 10 секунд, но в то же время они недостаточно хороши по сравнению с потоком с обычного компьютера.
Я также попробовал метод, описанный для beaglebone, с помощью предоставленной утилиты захвата : хорошо, если я смотрю с реального компьютера, та же проблема с мусором, если я смотрю с Raspberry Pi.
Это не проблема сети: я провел некоторые проверки сети с Wireshark и статистикой VLC, у меня нет потери пакетов. Я пробовал использовать Raspbian и Arch Linux для Raspi (gstreamer 0.10 в raspbian, gstreamer 1.0 в Arch Linux).
Я не знаю, уместно это или нет, но я также тестировал версию Raspbian с поддержкой float. Сначала необходимо выполнить обновление, чтобы использовать ядро 3.2; но та же проблема, видео имеет какой-то мусор.
Есть идеи о том, что я могу сделать, чтобы улучшить качество видео?
источник
Ответы:
У меня была такая же проблема, нашел эту ветку при поиске аппаратного кодера, а не проблем с920.
Тем не менее, выполните обновление прошивки для Raspberry Pi и мусор должен быть удален
$> sudo rpi-update
Я сам нашел решение здесь: http://wiki.matthiasbock.net/index.php/Logitech_C920,_streaming_H.264#Raspberry_Pi
источник
Вы можете попробовать и использовать FFMPEG. Но проблема не в том, чтобы использовать версию репозитория, потому что она устарела. Есть раздвоенная версия, которая работает очень хорошо.
Вам придется скомпилировать его, что займет около 5 часов или загрузить предварительно скомпилированный двоичный файл.
Затем вы можете передать данные из драйвера V4L в FFMPEG с этими настройками. Где
-i "fifo"
должно быть просто,-i
чтобы захватить поток по каналу, и-f
вам нужно будет дважды проверить, как вывести его H264. FLV перепаковывает его в FLV, в который можно играть с HTML-плеерами.или пример, который я обнаружил, который нацелен на V4L напрямую, но у вас должна быть камера,
/dev/video*
где *1
или больше ...-f
обозначает формат для вывода. Это не означает , что она будет перекодировать его как H264 в FLV просто получает завернутый в формате FLV. затем измените адрес вашего клиента VLC player. например-f mpegts udp:192.168.1.19:1234
VLC, кажется, не слишком хорошо работает на Pi. У меня был очень небольшой успех при установке модуля Pi cmaera на мой компьютер с использованием UDP. Это сработало, но не было стабильным.
Вы также можете посмотреть на установку nginx с модулем rtmp, который работает. Посмотрите это руководство, но вам нужно немного подправить настройки. Затем вы подключаете проигрыватель VLC к потоку nginx-rtmp, и он будет работать как шарм.
источник
Кажется, это работает для меня @ минимум ...
cvlc v4l2:// :v4l2-dev=/dev/video0 :v4l2-width=640 :v4l2-height=480 --sout="#transcode{vcodec=h264,vb=800,scale=1,acodec=mp4a,ab=128,channels=2,samplerate=44100}:rtp{sdp=rtsp://:8554/live.ts}" -I dummy
источник
Попробуйте с большим буфером на клиенте, отображающем видео. Для меня есть существенная разница между буфером 1000 мс и буфером 200 мс. Буфер 5000 мс выглядит лучше, чем буфер 1000 мс.
: Сетевое кэширование = 2000
источник
Я опубликовал возможное решение на малиновом форуме с использованием облегченного RTSP-сервера на основе live555, который захватывает H264 из драйвера V4L2. Это доступно от github h264_v4l2_rtspserver
Это было сделано для распикамера, но оно должно работать с любым устройством V4L2, которое обеспечивает H264.
источник
Если я хорошо понял вашу ситуацию, вы хотите, чтобы Raspberry транскодировал видео в H264? Я думаю, именно поэтому вы получаете плохую производительность, потому что VLC использует программное кодирование, а Raspberry не подходит для этой задачи.
Я бы предложил попробовать с Gstreamer и
gst-omx
плагинами . Есть элемент для аппаратного кодирования видео, который сделает хороший сервер из вашего Raspberry.источник