Jump to content

    

STM32F4 запись и отправка видео

Доброе время суток. 

Нужна помощь в понимании реальных возможностей STM32F4.

Есть потребность писать видео с 2х камер 5-15 к/с на SD карту в любом формате(карта будет всегда в устройстве). 

Периодически нужна возможность получать небольшие кусочки видео(5-100 кадров) в фоне не прерывая запись и отправлять по сети.

Вопросы к гуру

1.Насколько все это реально в промышленной эксплуатации ?

2. Какие камеры и какие интерфейсы лучше использовать ?

3. В какой формат лучше писать ?

 

Share this post


Link to post
Share on other sites
10 minutes ago, Алексей Васильевич said:

Нужна помощь в понимании реальных возможностей STM32F4.

Я как бе не работал с STM32F4, но там Cortex-M4, а у меня с ним опыт на других МК. И вы не указали, какими интерфейсами подключаются ваши камеры. Но, думаю, что не справиться. Ну разве что гнать сырой поток на карту попробовать без всякого формата. Но остаётся ещё сеть: по какому протоколу нужно получать кусочки видео? UDP/TCP?

Тут бы что-нить типа линукса, благо плат недорогих много, например тут.

Share this post


Link to post
Share on other sites
3 часа назад, haker_fox сказал:

Я как бе не работал с STM32F4, но там Cortex-M4, а у меня с ним опыт на других МК. И вы не указали, какими интерфейсами подключаются ваши камеры. Но, думаю, что не справиться. Ну разве что гнать сырой поток на карту попробовать без всякого формата. Но остаётся ещё сеть: по какому протоколу нужно получать кусочки видео? UDP/TCP?

Тут бы что-нить типа линукса, благо плат недорогих много, например тут.

Речь о разработке прототипа, и STM32F4 не панацея, он просто мне знаком.

По интерфейсу камер мне нужно экспертное мнение, будут установлены оптимальные. ДВА устройство по одной камере с собственным SD тоже рассматриваются, но передатчик должен быть один.

Отправятся будут небольшие кусочки по запросу , суммарно не более минуты видео в день.

Линукс не рассматриваем, ни разу с ним не работал. 

Share this post


Link to post
Share on other sites
11 minutes ago, Алексей Васильевич said:

Линукс не рассматриваем, ни разу с ним не работал.

А вы работали с сетевыми стеками (lwIP, например), с операционными системами (FreeRTOS, ucOS и т.п.)? Просто позиция "ни разу не работал" может и не сработать, т.к. всё равно придётся заморочиться на изучение чего-то. ИМХО, линукс гораздо проще освоить за обилием готового ПО.

Share this post


Link to post
Share on other sites

Начнём с самого простого.

Чтобы записать кадр, его нужно получить, пережать в поток (либо добавить в MJPEG) и записать. С двух камер - соответсвенно, два кадра.

Процесс сжатия требует минимум памяти ещё на кадр (а лучше - значительно больше для хранения прошлых кадров, чтобы вычислять дельту). Допустим, камеры совсем никакие - 640 * 480. Потребуется 921кБ памяти на RGB картинку. Ой. И это только ОДИН кадр. А нужен кадр со второй камеры - ещё 921к. Но у F4 НЕТ таких объёмов памяти, и внешняя память - не выход.

Упс. Используйте Малинку и вешайте камеры на USB шину. Там памяти хватает и производительности процессора. А программу можно писать хоть на питоне.

Share this post


Link to post
Share on other sites
25 minutes ago, AlanDrakes said:

и внешняя память - не выход.

Кстати, почему?

И ещё, уже больше для себя: вычислительной производительности cm4 хватит для этого дела? Может быть я дезинформировал человекка:?

Share this post


Link to post
Share on other sites

Вопрос в том, что выходит с камеры и что хочется на выходе. Короче, рисуем схему с указанием, что где бегает.

Share this post


Link to post
Share on other sites
4 часа назад, Алексей Васильевич сказал:

Нужна помощь в понимании реальных возможностей STM32F4.

Есть потребность писать видео с 2х камер 5-15 к/с на SD карту в любом формате(карта будет всегда в устройстве). 

Периодически нужна возможность получать небольшие кусочки видео(5-100 кадров) в фоне не прерывая запись и отправлять по сети.

Вопросы к гуру

1.Насколько все это реально в промышленной эксплуатации ?

2. Какие камеры и какие интерфейсы лучше использовать ?

3. В какой формат лучше писать ?

 

Возможности STM32F4 тут неуместны: надо много озу. Берите копеечный MT7688 или малино-апельсино-банановые платы + linux.

1 - реально

2 - USB

3 - mjpeg

Share this post


Link to post
Share on other sites
19 часов назад, haker_fox сказал:

Кстати, почему?

И ещё, уже больше для себя: вычислительной производительности cm4 хватит для этого дела? Может быть я дезинформировал человекка:?

Если только брать нафаршированый -F7 (во всяком случае, нашёл только в нём встроеный JPEG кодер/декодер)...

С внешней памятью - не всё так гладко. Нужные объёмы - это SDRAM чипы, а у них имеется латентность при переключении чтение/запись, а это лишние такты. Либо пытаться захватывать кадр во внешнюю память, затем жать во внутреннюю, писать на карту.

Вот здесь есть пример по захвату аналогового видеосигнала. Картинка в итоге 320 * 240 жмётся 5мс. Грубо говоря, изображение 640 * 480 должно жаться уже около 20мс (4 раза больше чем 320 * 240). Только объём памяти требуется уже значительно больше чем у контроллера. Только внешняя. Плюс такты шины... можно получить 25-30мс на кадр. И это в лучшем случае. Получаем (без времени записи) - до 30FPS - пока всё хорошо, но запись на карту может быть очень долгой.

На -F7 можно получить скорее всего лучшую производительность, сгрузив кодирование на аппаратный блок, но опять же, упираемся во внешнюю память (а она будет постоянно дёргаться то на чтение, то на запись). Плюс, полученные данные нужно успеть залить на карту памяти.

У меня выходило кое-как 250кБ/с на рабочем проекте (SDIO + FatFS + RTOS). Тоже может стать узким местом, особенно если собрано с минимальным объёмом памяти. В общем, всё довольно грустно.

Я бы в итоге рекомендовал Raspberry Pi Zero и уже в ней всё это делать. Там и камера есть, вторую можно напаять на USB хост. И скорость работы с картой выше. И памяти достаточно. Ну и собственно, видеокодек аппаратный.

Edited by AlanDrakes

Share this post


Link to post
Share on other sites
6 часов назад, AlanDrakes сказал:

Я бы в итоге рекомендовал Raspberry Pi Zero и уже в ней всё это делать. Там и камера есть, вторую можно напаять на USB хост. И скорость работы с картой выше. И памяти достаточно. Ну и собственно, видеокодек аппаратный.

 

Действительно ваше рекомендация технически хорошо выглядят. 

Вторая камера по USB ? 

В какой среде разработки необходимо писать проект и как сильно это отличается от KEIL ?

Прошу порекомендовать открытое решение, с нуля в незнакомой среде не потяну. 

Share this post


Link to post
Share on other sites
18 minutes ago, Алексей Васильевич said:

В какой среде разработки необходимо писать проект и как сильно это отличается от KEIL ?

Принципиально отличается, т.к. по сути это программирование на ПК под Linux.

Другое дело, что вполне возможно найти готовое или почти готовое решение.

 

На STM задачу можно решить, если брать камеры с JPEG. Но я бы не стал - накладные расходы тут будут выше, а результат посредственный.

Share this post


Link to post
Share on other sites
On 11/14/2019 at 8:49 AM, AlanDrakes said:

Процесс сжатия требует минимум памяти ещё на кадр (а лучше - значительно больше для хранения прошлых кадров, чтобы вычислять дельту).

Допустим, камеры совсем никакие - 640 * 480. Потребуется 921кБ памяти на RGB картинку. Ой. И это только ОДИН кадр. А нужен кадр со второй камеры - ещё 921к. Но у F4 НЕТ таких объёмов памяти, и внешняя память - не выход.

jpeg в межкадровое сжатие не умеет.

и для него надо около 100-200 тактов (в зависимости от архитектуры МК) на пиксель. то есть на пару кадров в секунду с одной камеры stm32F4 возможно ещё хватило бы для VGA разрешения. и то если сильно постараться, но думаю не больше.

а если МК более могучий, и ему хватает дури зажать в жпег со скоростью прилетающих с камеры 30кадров в секунду, то памяти под буфер достаточно только на 8 строк изображения.

Но это баловство имхо, берите камеры с езернетом/вайфаем и рулите ими напрямую. ну или любой одноплатный ПК с линуксом для управелния/складирования картинок на SD карту,

хотя вроде бы и готовых ip камер которые сами на sd карту пишут слишком дофига есть, чтобы самому такое разрабатывать.

 

Share this post


Link to post
Share on other sites
В 15.11.2019 в 16:39, Алексей Васильевич сказал:

Действительно ваше рекомендация технически хорошо выглядят. 

Вторая камера по USB ? 

В какой среде разработки необходимо писать проект и как сильно это отличается от KEIL ?

Прошу порекомендовать открытое решение, с нуля в незнакомой среде не потяну. 

На самом деле, хоть в блокноте.

На RPi можно как скомпилировать приложение, так и писать его на интерпретируемых языках. Да хоть PHP, хотя там будет очень костыльно.

Хотите Си? Пишите на Си. Кросс-компилятор Вам в помощь. Хотите на Питоне? Нет ничего проще. Устанавливаете питона, пишете. Перл? Тоже можно. Хотя не уверен, что там можно удобно подключиться к видео.

 

Пример с родной камерой малинки. Кстати, на питоне:

https://randomnerdtutorials.com/video-streaming-with-raspberry-pi-camera/

https://www.raspberrypi.org/forums/viewtopic.php?t=49530 Запись видео с помощью штатной утилиты. Читать можно из того же файла, либо нарезать на части и читать отдельные части. Грубо, но возможно.

Технически можно писать и с нескольких камер.

Share this post


Link to post
Share on other sites
15 часов назад, AlanDrakes сказал:

На самом деле, хоть в блокноте.

На RPi можно как скомпилировать приложение, так и писать его на интерпретируемых языках. Да хоть PHP, хотя там будет очень костыльно.

Хотите Си? Пишите на Си. Кросс-компилятор Вам в помощь. Хотите на Питоне? Нет ничего проще. Устанавливаете питона, пишете. Перл? Тоже можно. Хотя не уверен, что там можно удобно подключиться к видео.

 

Пример с родной камерой малинки. Кстати, на питоне:

https://randomnerdtutorials.com/video-streaming-with-raspberry-pi-camera/

https://www.raspberrypi.org/forums/viewtopic.php?t=49530 Запись видео с помощью штатной утилиты. Читать можно из того же файла, либо нарезать на части и читать отдельные части. Грубо, но возможно.

Технически можно писать и с нескольких камер.

Спасибо , то что нужно!!!

Share this post


Link to post
Share on other sites
On 11/14/2019 at 3:20 PM, Алексей Васильевич said:

Линукс не рассматриваем, ни разу с ним не работал. 

Ну и как это называется после этого

10 minutes ago, Алексей Васильевич said:

Спасибо , то что нужно!!!

??????????????????????

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now