LINUX.ORG.RU

К слову о Linux на ARM

 ,


1

1

Имеется у меня система видеонаблюдения.

MiniITX-овая платка, Селерон, ноутбучный HDD на SATA. Программная часть - motion, который получает видео с сетевой камеры по RTSP 1920х1080, а затем пишет его в mkv-файл, и стримит в MJPG в два стрима, первый полноразмерный 1920х1080 для внутреннего наблюдения, и что-то типа 320х200 для удаленного наблюдения чтоб меньше жрало трафик.

Решил попробовать перевести все это на маложрущий ARM. Благо есть у меня платка Cubietruck с двухядерным ARM на борту и двумя гигами DDR3.

Так вот даже простой стрим видео с RTSP в 1920х1080 на выходе дает слайд-шоу. Приблизительно кадр в секунду.

netcam_url rtsp://192.168.1.10:554/user=admin&password=&channel=1&stream=0?.sdp
stream_port 10015
stream_maxrate 25
stream_localhost off
stream_quality 40
text_right %d.%m.%Y_%H:%M:%S
width 1920
height 1080
framerate 25
; %f.mp4root@cubietruck:/etc/motion# cat /proc/cpuinfo 
processor	: 0
model name	: ARMv7 Processor rev 4 (v7l)
BogoMIPS	: 50.52
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xc07
CPU revision	: 4

processor	: 1
model name	: ARMv7 Processor rev 4 (v7l)
BogoMIPS	: 50.52
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xc07
CPU revision	: 4

Hardware	: Allwinner sun7i (A20) Family
Revision	: 0000
Serial		: 165165c40782dcef
root@cubietruck:/etc/motion# uname -a
Linux cubietruck 4.19.13-sunxi #5.69 SMP Wed Jan 9 15:42:24 CET 2019 armv7l GNU/Linux
root@cubietruck:/etc/motion

Задача этой платки - motion и все. Даже X11 не установлен.

В чем может быть дело, кроме того что ARM - уг?

обычно по rtsp отдают h.264/h.265/etc. потому как на mjpeg > 2040x2040, общепринятого rfc нет.

Allwinner A20 - (https://linux-sunxi.org/A20) - умеет декодировать такое видео посредством отдельного модуля(https://linux-sunxi.org/CedarX для 3.4.x и 3.10.x, https://linux-sunxi.org/Cedrus - mainline).

motion вряд ли умеет использовать этот модуль => делает декодирование софтварно, чего A20 как ядро общего назначения вытянуть не может. Запущены или нет X11 - к данной ситуации ортогонально.

dhampire ★★★ ()

это - ископаемый кортекс а7 на 1ггц. его производительность - где-то как у равночастотного пентиума 4, а то и ниже. + FPU - слабая сторона армов, особенно бюджетных.

крутите аппаратное декодирование-кодирование. тогда мож и вывезет.

NiTr0 ★★★★★ ()

полноразмерный 1920х1080 для внутреннего наблюдения

Если исключить это, то можно обойтись гораздо меньшими ресурсами.

Если в тупую гнать поток, обрабатывать его, детектить движение и перекодировать для записи - да, это ресурсоемко. Насколько помню, для HD-камеры у меня AMD C60 хватало максимум на 4 FPS. Т.е., один проц при полной загрузке смог бы обслужить 2 камеры.

Если максимально использовать возможности камеры и урезать необходимость в вычислениях в самом motion, то у меня удавалось на том же C60 завести ~8 Full HD-камер (в принципе, тут уже не критично, full hd оно или выше - основной поток все равно идет мимо motion).

YAR ★★★★★ ()

Блин, ты спермерочку на первопне еще запустить попытайся...

Ясен пень, не тянет! Возьми современного ARMянина + говорят, что в нынешних линуксах уже есть аппаратная поддержка дебильного графического ядра! И будет тебе щассье. Только я сомневаюсь, что рукожопы, которые софт пишут, сделали нормальную параллелизацию и возможность аппаратного декодирования видео. А коли сделали бы, то на 10-ядерном ARMянине оно бы отлично работало! (а еще лучше работало бы на 1024-ядерном мипсе, только мипсы зачем-то закопали)

anonymous ()

Альвинер - одни из худших процов арм. они доисторические, половина их фич сделана не как у всех, с использованием проприетарных библиотек, бубна, жвачи и черной магии. Использовать их для перекодирования видео скорее всего получится только если заставить использовать cedarx в качестве кодера.

Slackware_user ★★★★★ ()

Кубитрак максимум для торрентов сгодится или ардуина-переросток. У меня эта хроновина с 2014 года. Максимум торренты и i2p какой-нибудь с тюнингом количества соединений.

Хотя в своё время поднимал на нём motion с USB-камерой 640x480.

Radjah ★★★★★ ()

Хорошо. Поставил тот же самый motion, с теми же самыми настройками, но уже на RPI 2. Четырехъядерный BCM2835 все дела:

root@raspberrypi:/etc/motion# cat /proc/cpuinfo 
processor	: 0
model name	: ARMv7 Processor rev 4 (v7l)
BogoMIPS	: 38.40
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

processor	: 1
model name	: ARMv7 Processor rev 4 (v7l)
BogoMIPS	: 38.40
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

processor	: 2
model name	: ARMv7 Processor rev 4 (v7l)
BogoMIPS	: 38.40
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

processor	: 3
model name	: ARMv7 Processor rev 4 (v7l)
BogoMIPS	: 38.40
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

Hardware	: BCM2835
Revision	: a22082
Serial		: 0000000043b25b77

Все почти то же самое. Конечно FPS'ов стало чуть побольше, где-то 5-7 кадров в секунду, однако огромная латентность осталась. Между событием перед камерой и его отображением проходит секунд 5. Запись видео в файл (через ffmpeg) отключать пробовал, оставлял только стрим. Не помогло.

Что, и четырехъядерного ARM'а мало ? Если мало - то какой тогда ARM нужен ? Стоимостью как x86 (кстати Atom Z3735F с TDP в два ватта - с этой задачей почему-то справляется на УРА) ?

windows10 ()
Ответ на: комментарий от windows10

Вот именно!

Но эти железяки хороши как замена микроконтроллерам: если ты захочешь полноценную веб-морду к МК присобачить, то это тебе выльется в лишних 500-1000 рублей + еще минимум пару-тройку недель мучений с прошивками (и всяким идиотизмом вроде lwip). А тут ты за ту же 1000 рублей получаешь полноценный линукс, да еще и флешку приличных объемов. Пиши, что хочешь... По USB или UART соединяешься с дешевым МК (без МК, увы, не обойтись: линукс — не RT, и никогда им не будет) и кайфуешь.

anonymous ()
Ответ на: комментарий от windows10

Забудь ты о видео на ARMянах! Купи за 5 косарей БУшный комп, да и работай с ним. Какого-нибудь двухъядерного селерона на 2.5ГГц с четырьмя гигами оперативы должно хватить, чтобы 20 кадров в секунду обрабатывать успевать (если, конечно, ты не хочешь слишком многого! Потому как лет 10 назад я на подобной машинке пытался коррелировать кадры, чтобы сдвиги считать — больше, чем 3 кадра в секунду, не считалось никак!).

anonymous ()
Ответ на: комментарий от foror

Попробуй для начала вот это https://www.pine64.org/?product=rock64-media-board-computer за 25 баксов.

Название загуглил, вики не загуглил, форумы не загуглил, да ? Работать вменяемо оно будет ТОЛЬКО ПОД АНДРОИД.

Что не удивительно, это же RK

windows10 ()
Ответ на: комментарий от AbbaT

2160p 30Hz 8bit h264/h265/vp8 partial UI using GPU no Youtube no vp9 / mpeg4 / mpeg2 / 10bit HDR / YCbCr no

Видимо ничего. Знакомая ситуация для китай-платок.

У меня был в 2014-м году опыт с RK3188. Проц шустрее Allwinner'а A20 который тогда у меня тоже был. Но оба они вменяемо работали только под Android. Для Линуксов у каждого из них были свои костыли с определенной степенью эффективности.

windows10 ()
Ответ на: комментарий от windows10

ТОЛЬКО ПОД АНДРОИД

Заруть андроид, поищи нужный софт, задача у тебя простейшая, можно даже на коленке нужный софт написать поискав либы на гитхабе/интернете. Может тот же motion под андроидом соберётся...

foror ★★★ ()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от windows10

Что не удивительно, это же RK

А Хромбуки на чём строят, не на RK ли?

Вот всегда найдётся на ЛОРе какой-то рукожоп, который обвиняет в своих неудачах весь мир, но только не свои кривые руки и тупую голову.

anonymous ()
Ответ на: комментарий от anonymous

А Хромбуки на чём строят, не на RK ли?

Мсье теоретик ? Ня. https://imgur.com/a/g1zq0H3

Вот всегда найдётся на ЛОРе какой-то рукожоп, который

Возьмет официальный образ ОС для устройства, установит туда официальное приложение с официального репозитория, запустит и увидит как оно тормозит.

И всегда найдется теоретик, у которого все всегда работает, вопреки нытью всех форумов на тему топика включая тематические форумы устройств.

windows10 ()
Ответ на: комментарий от windows10

Мсье теоретик ? Ня.

Что «Ня»? Зачем ты мне какой-то целерон показываешь?
Что, не знает твоя головешка, что на ARM-ах тоже выпускают Хромбуки?
Да-да, именно на Rockchip-ах. Есть ещё и на Mediatek-ах.

Возьмет доисторическую г-но плату, официальный образ ОС для устройства, установит туда официальное приложение с официального репозитория, запустит, увидит как оно тормозит, и тут же побежит ныть на ЛОРе.

Исправил. Не благодари.

И всегда найдется теоретик, у которого все всегда работает...

Долбень, через мои руки прошли платы почти на всех популярных в последние годы SoC.
А вот этот хренов motion у меня работал на 1-ядерном 1.2ГГц ARMv5te процессоре ещё лет 6 назад. Только не 1080p, а 720p (с Logitech C270)

вопреки нытью всех форумов на тему топика включая тематические форумы устройств.

Да, всё так и есть, подавляющее большинство людей - рукожопы.

anonymous ()
Ответ на: комментарий от burato

Тебе нельзя в одноплатники, сиди дальше на своих селеронах.

УМВР, 6 потоков в фуллХД

Ты тоже не прочитал топик?) У тебя идет запись потока «как есть» в файл. У меня перекодируется с h264 в mjpeg и стримится в веб-сервер. С записью у меня проблем нет. У меня проблема именно в просмотре картинки с камеры в режиме реального времени без сторонних плагинов в любом браузере из любого уголка планеты.

windows10 ()
Ответ на: комментарий от burato

Так ... Еще раз ...

1. Мне нужно преобразовывать видеопоток из h264 в mjpeg (на камере их два, полноразмерный, и превью);

2. Motion на x86 с этой задачей справляется на 5 баллов;

3. На двух ARM, на которых заявляется «поддержка нормального Linux», видеопоток mjpeg получается с очень низким FPS и отстающий на 5-6 секунд от фактического видео. Руку перед камерой поднял - и через 6 секунд это отобразилось в mjpeg;

4. Этот же самый конфиг работает на трех слабых x86: Celeron J1800, Атом Z3735F, AMD C-60 без задержек, с 25 FPS.

Решение нужно ЧИСТО ПРОГРАММНОЕ, если оно есть. Не нужно менять камеры, они работают. Не нужно менять железо, сейчас все отлично работает на MiniITX. Не нужно покупать никакие ARM-платки стоимостью как мой комплект на MiniITX, у меня уже есть две, мне хочется перенести это все на одну из них. Получится - здорово, сэкономлю 10 квадратных см и 5 ватт питания. Не получится - ничего страшного.

Как-то так.

windows10 ()

MiniITX-овая платка, Селерон

windows10: А поподробнее? Проблема - жручесть ваттов сама по себе? Оно шумное получается? Корпус есть? Чем охлаждаешь?

Та же самая просьба к burato, расскажи про свою арможелезку поподробнее. Хотелось бы и истории успеха услышать с обеих сторон, а не только недостатки.

hobbit ★★★★★ ()
Ответ на: комментарий от hobbit

Поподробнее.

У меня умный дом. При чем это скорее необходимость, чем понты. Сюда подвязаны конвекторы, освещение, счетчик электричества и нагрузки, видеонаблюдение за пределами дома, мониторинг клиентских серваков (самописные скрипты) для работы и тд. Из-за лимита мощности (автомат на 16А, это около 4 кВт при превышении которых он отключается на улице) и принципиального отсутствия газа, мне приходится читерить: включать конвекторы по цепочке (они у меня с WiFi), и отключать их и(или) бойлер при превышении потребляемой мощности. Нутыпонел, включили на кухне электрочайник - бойлер выключился на 5 минут и так далее.

Этой логикой у меня занимается RPI. И определением текущей нагрузки, и выключением, и даже наружным светом.

Еще у меня есть MiniITX'овая платка с Celeron J1800, с HDD на пол-террабайта, которая занимается только лишь тем что пишет видео на винт, стримит текущий поток в mjpeg и хостит полтора php-шных скрипта.

Жрет эта платка не много, ватт 30, но мне хотелось бы, чтобы оно занимало еще меньше места, чтобы видеонаблюдение было в той же самой железке, где и датчики-релюшки + чтоб оно само включалось после восстановления питания (функция в BIOS есть, но она отрабатывает через раз).

Вопрос лишь в стриминге. Камера не умеет в mjpeg, умеет только в h264 и snapshot.жпг, но мне нужно чтобы мое видео отображалось в любой точке планеты практически в любом браузере на любой платформе без установки всяких бэкдорных плагинов.

Сейчас я медленно прихожу к тому, что проще скриптом внутри Малины, дергать snapshot.жпг с камеры в цикле через curl, писать его в /tmp, а уже в вебморде при помощи JS обновлять картинку несколько раз в секунду.

windows10 ()
Ответ на: комментарий от windows10

проще скриптом внутри Малины, дергать snapshot.жпг с камеры в цикле через curl, писать его в /tmp, а уже в вебморде при помощи JS обновлять картинку несколько раз в секунду.

А веб-сервер у тебя (будет?) на Малине, что ли?

anonymous ()
Ответ на: комментарий от anonymous

Да. Я уже проверил.

ЭТО запущено в постоянном режиме.

<?php
$frm=0;
$ch = curl_init("http://192.168.1.10/webcapture.jpg?command=snap&channel=0");
while( 1==1 ) {
$frm++;
$fp = fopen("/tmp/tmp.jpg", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
fclose($fp);
rename ("/tmp/tmp.jpg","/tmp/image.jpg");
echo "$frm \n";
}
curl_close($ch);
?>

Это для просмотра

<script src="../jquery.min.js"></script>
<img id='a'></img>
<script>
setInterval(function(){
    $("#a").attr("src", "image.jpg?get="+new Date().getTime());
},500);
</script>

Само собой в веб-директории симлинка на /tmp/image.jpg

Метод костыльный, дает примерно 2-4 кадра в секунду, что более чем достаточно для превью. Зато будет работать под любым браузером и любой ОС, абы поддерживало JS.

windows10 ()

Может стоить пересмотреть требования? Браузеры сейчас вроде H.264 уже умеют. А ещё можно поток плеером смотреть. И тогда транскодирование будет не нужно, и ARM потянет

Harald ★★★★★ ()

потому что одноплатников с параллельным аппаратным декодированием нескольких потоков из H.264 и аппаратным кодированием в MJPEG скорей всего не существует в природе

Harald ★★★★★ ()
Последнее исправление: Harald (всего исправлений: 1)

motion у меня достаточно много ест даже на x86, я гоняю kerberos.io в докер контейнере, но они не рекомендуют больше одной камеры на RPi вешать.

ksim ()
Ответ на: комментарий от windows10

Еще у меня есть MiniITX'овая платка с Celeron J1800, с HDD на пол-террабайта, которая занимается только лишь тем что пишет видео на винт, стримит текущий поток в mjpeg и хостит полтора php-шных скрипта.

Так я и интересуюсь:

Оно шумное получается? Корпус есть? Чем охлаждаешь?

hobbit ★★★★★ ()
Ответ на: комментарий от hobbit

Сорян. MSI J1800I с пассивным охлаждением, в обычном пластиковом электрическом шкафу. Шум - только от ноутбучного HDD, но поскольку это все у меня в отдельном кабинете - то не мешает.

windows10 ()
Ответ на: комментарий от windows10

У меня просто есть мечта идиота о домашнем максимально бесшумном сервере. Что до HDD — есть плеер Dune HD Max с воткнутым WD Green на 2 терабайта, так вот, я его шума при работе не слышу. Если удастся сделать настолько же тихий серверок, мне это будет за счастье.

hobbit ★★★★★ ()
Ответ на: комментарий от hobbit

Сервер - для домашних нужд?

У меня просто есть еще хостинговый сервер, тоже на MiniITX, только на Celeron 1037u, хостю десяток клиентских сайтов, лишние стабильные 300 баксов в месяц, весьма шустрая конструкция, но увы из-за периодических выключений света, аптайм страдает. Вот думаю где бы найти VPS-ник с 4-8 гигами мозгов и как минимум 64 гб SSD-шником подешевле, а главное абюзоустойчивый (ovh, hetzner мимо).

Могу тебе порекомендовать взять на Ali что-то формфактора NanoITX. Оно дешевое, бесшумное, относительно быстрое. https://minidevices.info/post_568833f123f8f

Кроме размеров, немаловажное достоинство этих плат - питание. 12в или 19в по одному разъему, никаких громоздких БП, или PicoPSU которые сами по себе недешевое удовольствие. Охлаждение организовано весьма хитро - ядро через термопасту прямо на алюминиевый корпус. За эти железки я могу поручиться, для сервера их хватит с головой.

Если же цена все таки кусается - ищи на вторичке платы на Celeron 847 или Atom D2550, у меня в Незалежной в обьявлениях их цена 10 баксов.

А жил бы ты рядом с Николаевом (юг Украины), я бы тебе за пивас отдал 1-2 шикарных одноюнитовых корпуса, мне они не нужны, я иду на миниатюризацию.

windows10 ()

Так вот даже простой стрим видео с RTSP в 1920х1080 на выходе дает слайд-шоу

Аппаратное ускорение FTW.

Я вот этим как раз сейчас занимаюсь, правда, на Freescale i.MX6 Quad. Так вот там программное декодирование не вывозит VGA AVC поток, когда аппаратное вполне справляется даже с 4 параллельно.

a1batross ★★★★★ ()
Ответ на: комментарий от Harald

потому что одноплатников с параллельным аппаратным декодированием нескольких потоков из H.264 ... не существует...

Есть такие. Так же «параллельно», как и две или больше задач могут выполняться на одном ядре CPU. В VPU тоже есть контекст, который можно сохранять, переключать, и восстанавливать. В TV-коробках такая хрень работает для функциональности, которую называют «картинка в картинке».

... аппаратным кодированием в MJPEG ...

Модуль jpeg компрессии/декомпрессии, как это ни странно, иногда представляет из себя отдельный от VPU блок IP.
А mjpeg, ЕМНИП, это какой-то поток jpeg-ов.

Под онтопиком, как обычно, запилить это всё будет сложно.

anonymous ()