Здравствуйте, есть мини компьютер cubieboard 1 и цель: транслировать с него веб камеру (которая подключена к нему через USB). Варианты моих решений: Ставим Debian, устанавливаем ffmpeg и транслируем Ставим Android, устанавливаем любое приложения для трансляции (я использовал IP Webcam) Я думал что первый вариант будет лучше, так как: ОС без графической оболочки - меньше кушает Нету всяких приложений которые бы тоже кушали ресурсы А оказалось всё на оборот, на android трансляция работала почти идеально (задержка около 0.2с.) с хорошим разрешением. А на Debian при разрешении 320X240 были ужасные падения FPS + задержка около 2с и ЦП загружен на 100%. А при разрешении 640X480 она вообще не работала. Возможно чего-то я недопонимаю, но как так возможно?
Ответ Задержки, они же лаги, могут происходить по многим причинам. В Вашем случае это проблеме с перекодированием. Устройство слабенькое, в риалтайме сложно управится. ffmpeg может немножко кешировать (ну как минимум на один кадр будет отставать - картинку нужно в буфер поместить, потом отправить) собственно сама сеть. Тут без коментариев. проигрыватель. Плееры также любят кешировать, потому что данные в сети не идут часто равномерным потоком и небольшая пауза вносит задержку. Потом либо нужно ускорять воспроизведение, либо придерживать задержку (которая будет накапливаться). Небольшой буфер решает проблему. Теперь перейдем к командам. ffmpeg -f v4l2 -r 25 -s 640x480 -i /dev/video0 -fflags nobuffer -c:v copy -f sdl - Тут нужно немножко уточнить. -f v4l2 -r 25 -s 640x480 -i /dev/video0 - тут все просто, выбрали формат, источник и кол-во кадров в секунду. Это выбирается по личным предпочтениям и возможностям камеры. -fflags nobuffer - говорит ffmpeg не буферизировать. Может помочь немножко убрать задержку. -c:v copy - это важная строка. Она говорит "не пытайся перекодировать видео. Просто копируй. -f sdl - - это не будет работать, если нет gui. Эта опция говорит "выводи на экран". Она хороша для тестов, но не для реальной работы. Так как хочется минимум задержек, можно попробовать использовать udp (тогда нужна где то такая конструкция -f mpegts udp://127.0.0.1:8080) или другие удобные протоколы.