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

OSCHINA-MIRROR/killvxk-Camkit

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

Camkit (Camera toolKit)Camkit — это набор инструментов, связанный с камерой, написанный на языке C. Он включает полный набор интерфейсов от: извлечения изображений -> преобразования цвета -> кодирования H264 -> упаковки RTP -> отправки по сети.

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

Компиляция

Camkit использует систему сборки cmake, поэтому убедитесь, что cmake установлен перед компиляцией. Следуйте следующим шагам для компиляции и установки:

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-камер. Camkit поддерживает преобразование цвета и кодирование H264 на трёх платформах:

  1. ПК (использует кодировку 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, сначала установите компилятор: ```shell sudo apt-get install cmake libavcodec54 libavcodec-dev libswscale2 libswscale-dev libavutil52 libavutil-dev #версии библиотек могут меняться, поэтому убедитесь, что они соответствуют вашей системе
    Затем следуйте шагам сборки, используя следующие команды:
     ```shell
    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 кадра в секунду и потреблением CPU около 90%. Поэтому рекомендуется использовать GPU-ускорение, оптимизированное для Raspberry Pi. Ниже приведены инструкции по компиляции.Для использования GPU-ускорения потребуются некоторые заголовочные файлы и библиотеки, которые обычно находятся в каталоге /opt/vc/ и не требуют отдельной установки.

Процесс компиляции очень прост. Перейдите в каталог исходного кода Camkit и используйте следующие команды для компиляции и установки:

mkdir build
cd build
cmake . -DPLAT=RPI
make 
make install

Таким образом, Camkit будет установлен на вашей Raspberry Pi, и путь к нему будет таким же, как и на ПК.

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

В разработке

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

Интерфейс Camkit очень прост и удобен, каждый подфункциональный модуль следует аналогичному интерфейсу.

xxxHandle = xxx_open(xxParams);     // Открыть xxx handle, например: capture_open, convert_open.
. . .                               // Конкретные действия
xxx_close(xxxHandle);               // Закрыть handle, например capture_close, convert_close.

Обычный порядок вызова:C struct cap_handle *caphandle = NULL; // Capture handler struct cvt_handle *cvthandle = NULL; // Conversion handler struct enc_handle *enchandle = NULL; // Encoding handler struct pac_handle *pachandle = NULL; // Packing handler struct net_handle *nethandle = NULL; // Network handler struct cap_param capp; // Capture parameters struct cvt_param cvtp; // Conversion parameters struct enc_param encp; // Encoding parameters struct pac_param pacp; // Packing parameters struct net_param netp; // Network parameters // Setting parameters capp.xxx = xxx; . . . cvtp.xxx = xxx; . . . encp.xxx = xxx; . . . pacp.xxx = xxx; . . . netp.xxx = xxx; . . . // Opening functions using the set parameters caphandle = capture_open(capp); cvthandle = convert_open(cvtp); enchandle = encode_open(encp); pachandle = pack_open(pacp); nethandle = net_open(netp); capture_start(caphandle); // Start capture while(1) { capture_get_data(caphandle, . . . ); // Get one frame convert_do(cvthandle, . . . ); // Conversion, YUV422=>YUV420, if your camera supports direct capture of YUV420 data, this is not required } ```markdown while (encode_get_headers(enchandle, . . . ) == 1) // Get H264 headers, PPS/SPS { . . . } encode_do(enchandle, . . . ); // Encode image frame pack_put(pachandle, . . . ); // Send encoded image to the packer while(pack_get(pachandle, . . . ) == 1) // Get packed RTP packet { net_send(nethandle, . . . ); // Send RTP packet } } capture_stop(caphandle); // Stop capture // Close all functions net_close(nethandle);

      encode_close(enchandle);
      convert_close(cvthandle);
      capture_close(caphandle);
      ```Примечание:
 1. Каждая из этих подфункций может использоваться независимо, например, только для захвата, или для записи закодированного изображения в файл без упаковки и отправки и т. д.
 2. Если используется официальная камера Raspberry Pi, то функция захвата недоступна и потребуется написать дополнительный код, но все последующие функции кодирования и упаковки будут работать.
 PS: В каталоге src есть два полных примера, которые можно использовать в качестве образца.
 ### Пример -- Запуск cktool на Raspberry Pi для просмотра реального времени
 Файл src/cktool.c представляет собой инструмент, использующий Camkit, который поддерживает все функции 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 и подключить Raspberry Pi и PC к одному маршрутизатору.
RPI(Camkit) <==> Маршрутизатор <==> PC (VLC)
Во-первых, выполните компиляцию и установку, как описано выше.
Настройте Raspberry Pi для включения поддержки камеры и выделения `gpu_mem`, для системы Raspbian используйте `sudo raspi-config`, для системы Arch смотрите [Wiki](https://wiki.archlinux.org/index.php/Raspberry_Pi).
```Сначала откройте файл `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 на вашем ПК.

---

Исправленный текст:

Предположим, что мы хотим использовать Camkit на Raspberry Pi и подключить Raspberry Pi и PC к одному маршрутизатору.
RPI(Camkit) <==> Маршрутизатор <==> PC (VLC)
Во-первых, выполните компиляцию и установку, как описано выше.
Настройте Raspberry Pi для включения поддержки камеры и выделения `gpu_mem`, для системы Raspbian используйте `sudo raspi-config`, для системы Arch смотрите [Wiki](https://wiki.archlinux.org/index.php/Raspberry_Pi).
```Сначала откройте файл `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. Он включает полный набор интерфейсов, включающих: изображение采集 -> цветовое преобразование -> кодирование H264 -> упаковка RTP -> отправка по сетиCamkit — это набор инструментов, связанный с камерой, написанный на языке C. Он включает полный набор интерфейсов, включающи... Развернуть Свернуть
LGPL-3.0
Отмена

Обновления

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

Участники

все

Язык

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

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