Срочно нужен сопровождающий!
В последнее время многие пользователи при использовании столкнулись с проблемами, особенно с ошибкой no encode, которая возникает часто. К сожалению, у автора ограничено время и энергия, а также нет последней версии Raspberry Pi под рукой, поэтому он больше не может сопровождать этот проект.
Надеюсь, кто-то из пользователей сможет помочь с сопровождением проекта, чтобы сделать камеру более доступной для других пользователей! Если вы заинтересованы, пожалуйста, напишите мне: andy@andy87.com
.
Camkit (Camera toolKit)
Camkit — это набор инструментов, связанных с камерой, написанный на языке C, который включает в себя полный набор интерфейсов от сбора изображений до преобразования цвета, кодирования H264, упаковки RTP и отправки по сети.
Вы можете скачать уже скомпилированную двоичную версию из папки с приложениями проекта.
Camkit использует систему сборки cmake. Перед компиляцией убедитесь, что у вас установлен cmake.
Чтобы завершить компиляцию и установку, выполните следующие шаги:
```shell
cd Camkit_source_dir
mkdir build
cd build
cmake ../ -Dkey=value
make
make install
```
Где -Dkey=value — настраиваемый параметр, поддерживаются следующие параметры:
Видеосъёмка в Camkit осуществляется через стандартный интерфейс V4L, который поддерживает большинство USB-камер.
Поддержка преобразования цветов и кодирования H264 в Camkit доступна на трёх платформах:
Используя кодирование ffmpeg, Camkit можно использовать на ПК. В принципе, он должен быть кроссплатформенным, но поскольку разработка автора в основном выполнялась на Linux, другие платформы не тестировались, и в будущем будет проведено портирование. Ниже описывается, как скомпилировать и установить его на Linux.
Компиляция и установка на Linux очень просты. Рассмотрим пример Ubuntu. Сначала установите среду компиляции:
```
sudo apt-get install cmake libavcodec54 libavcodec-dev libswscale2 libswscale-dev libavutil52 libavutil-dev # версии библиотек могут меняться, рекомендуется настроить в соответствии с вашей системой
```
Затем следуйте шагам сборки, используя следующую команду для сборки и компиляции:
```
mkdir build
cd build
cmake ../
make
make install
```
После установки на вашем компьютере будут созданы три файла: 1. инструмент cktool
; 2. библиотека libcamkit.so
; 3. файлы заголовков разработки. По умолчанию программа устанавливается в каталог /usr/local
, но вы можете указать другой путь, добавив опцию -DCMAKE_INSTALL_PREFIX=where
во время сборки.
Для использования на Raspberry Pi можно выбрать кросс-компиляцию на ПК или напрямую скомпилировать исходный код на Raspberry Pi. Здесь описывается второй способ.
Сначала используйте такие инструменты, как scp
, чтобы скопировать исходный код Camkit на Raspberry Pi, затем перейдите в каталог исходного кода. Поскольку Raspberry Pi также работает под управлением Linux, теоретически можно использовать библиотеку ffmpeg так же, как и на ПК, но на практике производительность очень низкая, достигая только 1–2 кадров в секунду, при этом загрузка процессора составляет около 90%, поэтому рекомендуется использовать решение для ускорения GPU на Raspberry Pi, которое описано ниже.
Для ускорения работы GPU требуется несколько файлов заголовков и библиотек, которые обычно находятся в каталоге /opt/vc/
, и их не нужно устанавливать отдельно.
Процесс компиляции очень прост. Перейдите в каталог исходного кода Camkit и используйте следующую команду для компиляции и установки:
```
mkdir build
cd build
cmake ../ -DPLAT=RPI
make
make install
```
Таким образом, Camkit будет установлен на ваш Raspberry Pi с тем же путём, что и на ПК.
Будет добавлено позже.
Интерфейсы в Camkit очень просты и удобны, и каждая функция следует аналогичному интерфейсу.
```C
xxxHandle = xxx_open(xxParams); // Открыть дескриптор xxx, например: capture_open, convert_open...
... // Конкретные операции
xxx_close(xxxHandle); // Закрыть дескриптор, например capture_close, convert_close...
```
Обычно шаги вызова следующие:
```C
struct cap_handle *caphandle = NULL; // Операция захвата
struct cvt_handle *cvthandle = NULL; // Преобразование операции
struct enc_handle *enchandle = NULL; // Кодирование операции
struct pac_handle *pachandle = NULL; // Упаковка операции
struct net_handle *nethandle = NULL; // Сетевая операция
struct cap_param capp; // Параметры захвата
struct cvt_param cvtp; // Конвертировать параметры
struct enc_param encp; // Закодировать параметры
struct pac_param pacp; // Упаковать параметры
struct net_param netp; // Сетевые параметры
// Установить различные параметры
capp.xxx = xxx
...
cvtp.xxx = xxx;
...
encp.xxx = xxx;
...
pacp.xxx = xxx;
...
netp.xxx = xxx;
...
// Использовать установленные параметры для открытия различных функций
caphandle = capture_open(capp);
cvthandle = convert_open(cvtp);
enchandle = encode_open(encp);
pachandle = pack_open(pacp);
nethandle = net_open(netp);
capture_start(caphandle); // Начать захват
while(1)
{
capture_get_data(caphandle, ...); // Получить кадр изображения
convert_do(cvthandle, ...); // Преобразовать, YUV422=>YUV420, если ваша камера поддерживает сбор данных YUV420 напрямую, этот шаг не требуется
while (encode_get_headers(enchandle, ...) == 1) // Получить заголовки h264 PPS/SPS
{
...
}
encode_do(enchandle, ...); // Кодировать кадр изображения
pack_put(pachandle, ...); // Отправить закодированное изображение в упаковщик
while(pack_get(pachandle, ...) == 1) // Получить пакет RTP после упаковки
{
net_send(nethandle, ...); // отправить пакет RTP
}
}
capture_stop(caphandle); // Остановить захват
// Закрытие различных функций
net_close(nethandle);
pack_close(pachandle);
encode_close(enchandle);
convert_close(cvthandle);
capture_close(caphandle);
```
Примечание:
PS: В каталоге src есть два полных примера, которыми можно руководствоваться.
Этот текст представляет собой перевод исходного текста. src/cktool.c — это инструмент, использующий Camkit и реализующий все его функции.
Использование:
$cktool [options]
Параметры:
Предположим, что мы хотим использовать Camkit на Raspberry Pi и соединить его с ПК через один маршрутизатор.
RPI (Camkit) <==> маршрутизатор <==> ПК (VLC)
Сначала выполните компиляцию и установку согласно приведённому выше объяснению.
Настройте Raspberry Pi для поддержки камеры и назначьте gpu_mem. В системе Raspbian используйте команду sudo raspi-config, а в системе Arch см. Wiki.
Затем откройте файл video.sdp на ПК с помощью блокнота и измените IP-адрес на IP-адрес ПК, предположим, 192.168.1.2, и установите порт, предположим, 8888. Запустите проигрыватель VLC и откройте файл demo/video.sdp.
Наконец, запустите на Raspberry Pi:
#cktool -s 15 -a 192.168.1.2 -p 8888
Теперь вы должны увидеть видео в реальном времени с Raspberry Pi в окне VLC на ПК.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )