1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/andyspider-Camkit

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Срочно нужен сопровождающий!

В последнее время многие пользователи при использовании столкнулись с проблемами, особенно с ошибкой 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 — настраиваемый параметр, поддерживаются следующие параметры:

  1. DEBUG=ON|OFF — включить или выключить опцию отладки.
  2. PLAT=FSL|RPI|PC — выбрать используемую платформу (Freescale IMX, Raspberry Pi или PC), подробности см. ниже.
  3. CMAKE_TOOLCHAIN_FILE=cross_file — используется для кросс-компиляции, подробности см. ниже.

Видеосъёмка в Camkit осуществляется через стандартный интерфейс V4L, который поддерживает большинство USB-камер.

Поддержка преобразования цветов и кодирования H264 в Camkit доступна на трёх платформах:

  1. ПК Desktop (использует кодирование ffmpeg, зависит от библиотек libavutil, libavcodec и libswscale в ffmpeg).
  2. Raspberry Pi (использует ускорение GPU, зависит от таких библиотек, как vcos, vcsm, bcm_host, openmaxil и др.).
  3. Freescale I.MX6 (использует аппаратное кодирование IPU и VPU, зависит от IPU и VPU).

Компиляция и установка на платформе ПК

Используя кодирование 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 можно выбрать кросс-компиляцию на ПК или напрямую скомпилировать исходный код на 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 с тем же путём, что и на ПК.

Платформы Freescale и компиляция и установка

Будет добавлено позже.

Использование

Интерфейсы в 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);
```

Примечание:

  1. Каждая подфункция может использоваться независимо, например, только для захвата или для кодирования одного кадра изображения после преобразования, без упаковки и отправки и т. д.
  2. Если используется официальная камера Raspberry Pi, то часть захвата недоступна, необходимо написать дополнительный код, но остальные функции кодирования, упаковки и отправки могут использоваться нормально.

PS: В каталоге src есть два полных примера, которыми можно руководствоваться.

Пример — запуск cktool на Raspberry Pi для просмотра видео в реальном времени

Этот текст представляет собой перевод исходного текста. src/cktool.c — это инструмент, использующий Camkit и реализующий все его функции.

Использование:

$cktool [options]

Параметры:

  1. -? — отображает справочную информацию.
  2. -d — показывает отладочную информацию, каждая операция обозначается специальным символом.
  3. -s — устанавливает шаг 0/1/3/7/15 (0: только сбор данных, 1: сбор + преобразование, 3: сбор + преобразование + кодирование (по умолчанию), 7: сбор + преобразование + кодирование + упаковка, 15: сбор + преобразование + кодирование + упаковка + отправка).
  4. -i — задаёт устройство камеры (по умолчанию /dev/video0).
  5. -o — определяет файл для записи (в сочетании с параметром -s можно записывать данные каждого этапа для удобства отладки).
  6. -a — устанавливает IP-адрес сетевого устройства.
  7. -p — устанавливает номер порта сетевого устройства.
  8. -c — устанавливает формат изображения для сбора: 0: YUYV (по умолчанию), 1: YUV420.
  9. -w — устанавливает ширину видео (640).
  10. -h — устанавливает высоту видео (480).
  11. -r — устанавливает скорость кодирования в килобитах в секунду (1000).
  12. -f — устанавливает частоту кадров (15).
  13. -t — устанавливает, будет ли изображение чересстрочным (0).
  14. -g — устанавливает размер GOP для кодирования (12).

Предположим, что мы хотим использовать 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Camkit — это набор инструментов, связанных с видеокамерами. Он написан на языке C и включает в себя полный набор интерфейсов от захвата изображения до отправки по сети после упаковки в RTP: * захват изображения; * преобразование цветов; * кодирование H264; * упаковка RTP; * отправка по сети. Развернуть Свернуть
LGPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/andyspider-Camkit.git
git@api.gitlife.ru:oschina-mirror/andyspider-Camkit.git
oschina-mirror
andyspider-Camkit
andyspider-Camkit
master