Это продолжение https://raspberrypi.stackexchange.com/questions/93254/stream-usb-webcam-with-audio?noredirect=1#comment150507_93254
Я, как и многие другие храбрые тинкеры до меня, думал, что было бы несложно взять старую USB-камеру (c920) и соединить ее с Raspberry Pi, чтобы создать сетевое потоковое устройство (например, радионяня). Как те, что были до меня, я теперь понял (после двух дней вырванных волос), что это чрезвычайно сложная задача.
Постановка проблемы: у меня малиновый пи ноль и веб-камера c920. Я хочу использовать поток битов H.264 от веб-камеры и подавать его на пи без перекодирования (слабый процессор действительно будет бороться). Я хочу объединить видеопоток со звуком и отправить его в браузер (телефон, планшет, компьютер - что-то HTML5 без NAPI).
Моя текущая стратегия заключается в следующем:
ffmpeg -re -f s16le -i /dev/zero -f v4l2 -thread_queue_size 512 -codec:v h264 -s 1920x1080 -i /dev/video0 -codec:v copy -acodec aac -ab 128k -g 50 http://localhost:8090/camera.ffm
(это с фиктивным звуком - я решил добавить аудио позже)
Затем следует sudo ffserver -d -f /etc/ffserver.conf
для получения канала и его трансляции в виде потока. Это файл ffserver.conf
:
`HTTPPort 8090
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 100000
CustomLog -
<Feed camera.ffm>
File /tmp/streamwebm.ffm
FileMaxSize 50M
ACL allow localhost
ACL allow 128.199.149.46
ACL allow 127.0.0.1
ACL allow 192.168.0.0 192.168.0.255
</Feed>
<Stream stream>
ACL allow 192.168.0.0 192.168.0.255
Format webm
# Video Settings
VideoFrameRate 30
VideoSize 1920x1080
# Audio settings
AudioCodec libvorbis
AudioSampleRate 48000
AVOptionAudio flags +global_header
MaxTime 0
AVOptionVideo me_range 16
AVOptionVideo qdiff 4
AVOptionVideo qmin 4
AVOptionVideo qmax 40
#AVOptionVideo good
AVOptionVideo flags +global_header
# Streaming settings
PreRoll 10
StartSendOnKey
Metadata author "author"
Metadata copyright "copyright"
Metadata title "Web app name"
Metadata comment "comment"
</stream>
Мой основной html - <html><head></head><body><video> <source src="http://localhost:8090/stream"> </video></body></html>
Однако поток не работает (браузер не подключается), и я получаю следующее:
И браузер на клиенте говорит (failed) NET::ERR_CONNECTION_REFUSED
Мысли:- https://stackoverflow.com/questions/28435564/begin-stream-simple-mp4-with-ffserver объясняет, что ffserver не может транслировать .mp4 из-за заголовков или чего-то еще. Вот почему я использую webm (который не поддерживает h.264, я полагаю, и вызывает очень медленное преобразование производительности в vp9). Я не беспокоюсь об использовании процессора в данный момент, просто хочу, чтобы изображение появилось в браузере!
Я слышал, что одна проблема связана с «чанкингом» - что камера h.264 является потоком битов, но потоки h.264 для html5 должны быть разделены на части. Не уверен, как это будет работать.
Я пробовал VLC для некоторых вещей (RTP), но не имел успеха.
Большинство ресурсов (SE и другие сайты) относятся к 2010–2015 гг., И кажется, что с тех пор развивалась версия v4l2 и другие.
Поскольку моя проблема, скорее всего, заключается в общем незнании предмета, я был бы признателен за любые ответы, которые дают общее представление о теории, лежащей в основе различных методов. Я знаю, что это делает вопрос более требовательным к мнению и менее подходящим для SE, но я собираюсь выбросить мой компьютер в окно (вы знаете это чувство).
Спасибо!