В данном посте будет приведён пример реализации онлайн видеостриминга с помощью вебкамеры и одноплатника Orange Pi One.
Ну начнём с того, что здесь используется:
1) Платка с картинки
2) Вебкамера
А это 810+155 = 965р.- т.е. это может себе позволить даже школьник.
Итак стриминг это вещание контента в сеть. Т.е. нужен сервер который будет раздавать информационный поток. Раздавать можно широковещательно либо по запросу. В нашем случае будет по запросу.
Сперва нужно проверить- поднимается ли драйвер камеры:
opigaz@orangepione:~$ lsusb
...
Bus 002 Device 002: ID 1908:2311 GEMBIRD
...
Камера подхватилась. Теперь попробуем сделать снимок камеры. Я пошёл лёгким путём и поставил библиотеку OpenCV:
opigaz@orangepione:~$ sudo apt install python-opencv
Нашёл в интернете пример:
import cv2
import numpy
cap = cv2.VideoCapture(0) #ignore the errors
cap.set(3, 960) #Set the width important because the default will timeout
#ignore the error or false response
cap.set(4, 544) #Set the height ignore the errors
r, frame = cap.read()
cv2.imwrite("photo.jpg", frame)
И сделал первый снимок:
opigaz@orangepione:~$ python cam.py
Не очень картинка получилась, но котакт есть! Также можно использовать напрямую API «video for Linux» для получения изображения с камеры.
Для стриминга нужно организовать раздающий сервер. Для этого потребуется существенно больше времени, т.к. помимо всего прочего нужно имплементировать поддержку какого-либо формата раздачи (а лучше нескольких). И, тем более, есть готовые решения. Я поставил ffmpeg и vlc, соответственно.
Чтобы запустить сервер можно использовать эту комманду:
cvlc v4l2:///dev/video0 :v4l2-standard=mpeg2 :input-slave=alsa://hw:0,0 :live-caching=300 :sout="#transcode{vcodec=WMV2,vb=800,scale=1,acodec=wma2,ab=128,channels=2,samplerate=44100}:http{dst=:8080/stream.wmv}"
А чтобы проверить видеопоток на клиенте можно сделать вот так:
vlc -vvv http://192.168.100.10:8080/stream.wmv
Железная часть выглядит так:
А результат таков:
Также к этому потоку можно подключаться и с мобильных устройств. Я пробовал со своего смартфона с установленным на нём vlc.
PS: Для меня самым удивительным было, что и камера и платка работают. Причём загрузка платы примерно такова во время вещания:
PPS: Жаль, что мою прошлую публикацию выпилили. Хотел донести народу, что даже студент может себе позволить взять дешманскую железку и она будет работать.
Комментарии (17)
mizhgun
17.05.2017 18:09+1> Хотел донести народу, что даже студент может себе позволить взять дешманскую железку и она будет работать.
«Она» — стриминг с камеры онлайн — будет работать на китайской ардуино-камере и ESP8266, что еще «дешманнее» и будет, к тому же, действительно интересно, потому что нетривиально, потому что надо думать и стараться.
Есть, конечно, некая доблесть в том, чтобы создать плату компьютера за 15$ с 4ядерным процессором, 256Мб памяти и всевозможными интерфейсами, сделав ее в разы мощнее тех компьютеров, которые и 15 лет назад спокойно стримили видео, но вот в том, чтобы прикрутить к ней веб-камеру и набрать кучу aptов с клавы познавательной ценности для аудитории Хабра — имхо — 0.gazpar
18.05.2017 07:46+1Ну аудитория Хабра состоит не только из «зубров».
Связать ардуино-камеру и ESP8266- вперёд, дерзайте! Я с радостью почитаю об этом. Особенно, мне интересно, как Вы собираетесь имплементировать поддержку форматов раздачи видео, сервера и связать камеру с SoC'ом. На каждую из этих задач по времени нужно вложить минимум по 10 полных рабочих дней среднего разработчика с широкой экспертизой. Вы можете себе позволить такое? Я- нет, уже не студент.
Кстати, чтобы сделать это- тоже нужно думать. Удивительно, правда?)
Kanumowa
17.05.2017 23:36Как думаешь, реально ли из этого апельсина сделать аналог xaomi mini tv ( android 4.4.x, пульт, wifi ) ???
gazpar
18.05.2017 07:47Думаю- возможно. Только софт нужно будет оптимизировать, точнее видеоплеер. Желательно, даже собственный разработать.
С пультом и WiFi особых проблем не должно быть.
Nizametdinov
18.05.2017 12:32Пипец, все такие умные аж мозг жмет, а в профиль зайдешь — ноль статей. Зато об****ать чужую — это мы первые.
Я за любые мануалы, даже такие простые, новичкам и в написании статей и в малинках с чего то начинать надо.gazpar
18.05.2017 13:30Кстати, оно выглядит просто и коротко, но чтобы до этого просто и коротко добраться я потратил где-то 2 дня на эксперименты и ещё около 1,5 часов, чтобы выжемку сделать для публикации. И это с учётом того, что небольшой опыт в этой области и сфере имею. Если бы этого опыта не было, то провозился бы дней 10, думаю.
dbrr
18.05.2017 16:22Если кому-то интересно, могу накидать мануал по сборке прошивки для orpi и пакетной базы на основе генту.
begemot_nn
<зануда mode on>
Извините, это полная статья? или случайно черновик опубликовался?
хабы:
«Обработка изображений» — это про то, что вы OpenCV из репа поставили?
«Анализ и проектирование систем» — это про то, что вы спроектировали систему из апельсинки и вебкамеры?
</зануда mode off>
Не хочу обидеть, но что вы хотели сказать то этой статьёй?
gazpar
Вряд ли у вас выйдет меня обидеть)
«Обработка изображений» и «Анализ и проектирование систем»- чтобы хоть какие-то более ли менее близкие потоки были.
Сказать хотел, что дешманское железо с AliExpressa работает. Причём можно сделать что-то более ли менее полезное с его помощью.
begemot_nn
Мне близка и понятна ваша тяга вот к таким экспериментам.
у меня у самого ворох разных одноплатников.
я лишь хотел сказать, что если просто сказать что работает — то можно было разместить фотку и написать «оно работает».
если же писать статью для того, чтобы школьники копипастили — нужно как то побольше этой копипасты (подробностей).
статья выглядит и ни как анонс и ни как мануал
вот о чём я.
gazpar
Не анонс точно.
Как мануал- вполне. Названия все даны, комманды даны- т.е. бери да проверяй, если интересно.
Не спорю, подробностей можно напихать вал- только толку то от этого?
begemot_nn
а если просто реализовать, а не ладони чесать (в хорошем смысле), то вон на столе стоит камера sanncecam на моторизованном подвесе, с wifi, которая умеет ONVIF и много чего ещё и куплена на том же али за 1200р.
gazpar
Классная штука. Надо будет заказать.