[Обмен сухой информацией] GB28181 Разработка решения для записи правоохранительных органов и технические исследования
[Обмен сухой информацией] GB28181 Разработка решения для записи правоохранительных органов и технические исследования

Технический бэкграунд

Регистраторы для правоохранительных органов GB28181 широко используются в правоохранительных органах, таких как общественная безопасность, дорожная полиция и городское управление, а также в таких отраслях, как железные дороги, электроэнергетика и водное хозяйство. В правоохранительных органах, обеспечивающих общественную безопасность, записывающие устройства правоохранительных органов могут записывать процесс правоохранительных органов в режиме реального времени и загружать их в командный центр, предоставляя убедительные доказательства для рассмотрения дел. При проверках на железных дорогах записывающие устройства правоохранительных органов могут передавать аудио- и видеоданные с места проверки; в командный центр в режиме реального времени, осуществляя удаленный мониторинг и диспетчеризацию.

Зачем использовать спецификацию протокола GB28181?

У многих разработчиков возникает этот вопрос. Первые записывающие устройства правоохранительных органов либо имели частные протоколы, либо использовали передачу RTP или RTMP. Почему все записывающие устройства правоохранительных органов в настоящее время используют GB28181? Причина, по которой регистраторы правоохранительных органов используют протокол GB28181, связана с различными соображениями, такими как стандартизация и совместимость, эффективная передача данных и контроль, снижение сложности и стоимости системы, увеличение широты сценариев применения и обеспечение безопасности данных и защиты конфиденциальности:

1. Стандартизация и совместимость

GB28181 — это национальный стандарт моей страны для сетевых систем видеонаблюдения общественной безопасности (GB/T 28181-2016 «Технические требования к передаче, обмену и управлению сетевыми системами видеонаблюдения общественной безопасности»). Он определяет структуру межсоединений, передачу и параметры связи. обмен системами видеонаблюдения, основные требования к контролю и требованиям безопасности, а также технические требования, такие как управление, процессы передачи и интерфейсы протоколов. Принятие протокола GB28181 может обеспечить беспрепятственное соединение рекордера правоохранительных органов с другими устройствами или системами, которые соответствуют этому стандарту, для достижения информационной взаимосвязи и совместимости, что значительно повышает уровень совместимости и стандартизации системы.

2. Эффективная передача данных и контроль.

Протокол GB28181 поддерживает передачу видеоданных на основе протокола TCP/IP, что обеспечивает надежность и согласованность данных. В то же время он также добавляет механизмы аутентификации, шифрования и контроля доступа для обеспечения безопасности системы. Благодаря протоколу GB28181 записывающее устройство для правоохранительных органов может осуществлять передачу и удаленный мониторинг видеоданных в реальном времени, повышая эффективность передачи данных и возможности управления.

3. Снижение сложности и стоимости системы.

Если записывающее устройство правоохранительных органов не поддерживает протокол GB28181, возможно, ему придется использовать SDK записывающего устройства для вторичной разработки во время системной интеграции, что увеличит сложность и стоимость разработки системы. Использование записывающих устройств правоохранительных органов, поддерживающих протокол GB28181, можно напрямую зарегистрировать на существующей платформе GB28181 для обеспечения удаленного просмотра, внутренней связи и других функций без необходимости инвестиций в отдельную системную платформу, что снижает затраты на интеграцию, эксплуатацию и обслуживание системы. .

4. Расширьте спектр сценариев применения.

Протокол GB28181 обладает хорошей масштабируемостью и легко интегрируется с другими системами. Например, его можно связать с системами сигнализации, системами контроля доступа и т. д. для достижения более интеллектуального управления безопасностью. Это означает, что регистраторы правоохранительных органов имеют более широкие перспективы применения в сфере общественной безопасности, городского управления, государственного надзора и других областях. В то же время, по мере постоянного развития технологий Интернета вещей, все больше и больше устройств будут поддерживать протокол GB28181, а сценарии применения будут становиться все более обширными.

5. Обеспечьте безопасность данных и защиту конфиденциальности.

Протокол GB28181 добавляет такие механизмы, как аутентификация безопасности, шифрование и контроль доступа во время процесса передачи данных. Эти механизмы могут эффективно защитить безопасность и конфиденциальность передаваемых данных. Для таких устройств, как нательные камеры, которые записывают конфиденциальную информацию, крайне важно обеспечить безопасность данных и защиту конфиденциальности.

Технические характеристики регистратора для правоохранительных органов GB28181

  1. Поддержка протокола
    • Регистратор правоохранительных органов поддерживает GB/T Протокол 28181 обеспечивает бесшовное соединение с различными платформами и системами видеонаблюдения для достижения информационной взаимосвязи.
  2. Захват и кодирование видео
    • Оснащенный камерой высокой четкости, он может собирать видеоданные в режиме реального времени и использует эффективные технологии кодирования видео, такие как H.264/H.265, для обработки сжатия, сокращая объем передаваемых данных и повышая эффективность передачи.
  3. передача в реальном времени
    • Поддерживает 4G/5G, Wi-Fi и другие технологии беспроводной связи для реализации передачи видеоданных. в реальном времени в командный центр или облачную платформу. Поддержка RTP OVER UDP и RTP OVER Несколько режимов передачи, таких как TCP, обеспечивают стабильность и надежность данных.
  4. Функция хранения
    • Имеют местное действие хранения, способного сохранять большие объемы видеоданных для последующего просмотра и сбора доказательств. В то же время поддержка облачных функций хранение, загрузка видеоданных в облако для резервного копирования и удаленного доступа.
  5. пульт дистанционного управления
    • Поддерживает функции управления PTZ и предустановки положения, что позволяет командному центру дистанционного управления направлением и углом камеры для достижения более точного мониторинга.

Основные функции регистратора правоохранительных органов GB28181

  1. Голосовой домофон и трансляция
    • Оснащен микрофоном и динамиком, поддерживает функции голосовой связи и трансляции. Командный центр может отправлять голосовые инструкции или передавать экстренные сообщения сотрудникам правоохранительных органов через систему; сотрудники правоохранительных органов также могут давать голосовые ответы или сообщать о ситуациях на месте с помощью записывающих устройств правоохранительных органов.
  2. Функция позиционирования
    • Встроенный модуль GPS или позиционирования Beidou может сообщать информацию о местоположении сотрудников правоохранительных органов в режиме реального времени, помогая командно-диспетчерскому центру точно понимать ход проверки и распределение персонала.
  3. Интеллектуальная идентификация
    • В сочетании с технологией интеллектуальной идентификации изображений AI,Интеллектуальный анализ видеоматериалов,Распознавание ключевой информации, такой как лица, номерные знаки и т. д.,Повышение эффективности мониторинга.
  4. Обнаружение аномального поведения
    • Мониторинг в режиме реального времени аномального поведения, такого как скопление людей, вторжение в зоны ограниченного доступа и т. д., а также своевременная подача сигналов раннего предупреждения.
  5. Безопасность и защита конфиденциальности
    • Технология шифрования данных используется для обеспечения безопасности и конфиденциальности во время передачи данных; строгое управление правами пользователей гарантирует, что только пользователи с соответствующими разрешениями могут получить доступ и управлять данными, передаваемыми записывающими устройствами правоохранительных органов, при соблюдении соответствующих законов, правил и политик конфиденциальности для защиты; конфиденциальность личности.

Как интегрировать возможности GB28181 в регистраторы правоохранительных органов

В качестве примера в этой статье используется SDK для доступа к устройствам Android GB28181 (SmartGBD) от Daniu Live SDK.

Тип стыковки данных

  • Данные перед кодированием (в настоящее время поддерживаются типы данных YV12/NV21/NV12/I420/RGB24/RGBA32/RGB565);
  • Закодированные данные (например, данные 264/HEVC, такие как дроны, или локально проанализированные аудио- и видеоданные MP4);
  • Извлеките поток RTSP или RTMP и подключите его к платформе GB28181 (например, другие потоки RTSP IPC можно подключить к платформе национального стандарта через платформу Android GB28181).

Поддержка функций

  • [Формат видео] H.264/H.265 (жестко закодирован в Android H.265);
  • [Аудиоформат] G.711 Закон, AAC;
  • [Регулировка громкости] Терминал сбора данных на платформе Android поддерживает регулировку громкости в режиме реального времени;
  • [H.264 Hardcoding] Поддержка жесткого кодирования H.264 для определенных моделей;
  • [Жесткое кодирование H.265] Поддержка жесткого кодирования H.265 для определенных моделей;
  • [Конфигурация параметров программного и жесткого кодирования] Поддержка интервала кадров, частоты кадров, настроек скорости передачи данных;
  • [Конфигурация параметров программного кодирования] поддерживает профиль мягкого кодирования, скорость мягкого кодирования и настройки переменной скорости кодирования;
  • Поддержка чистой передачи видео, аудио и видео PS пакета;
  • Поддержка RTP OVER UDP и RTP OVER Пассивный режим TCP;
  • Поддержка настроек протокола передачи сети канала сигнализации TCP/UDP;
  • Поддерживает регистрацию, отмену, обновление регистрации и настройку периода действия регистрации;
  • Поддержка ответа на запрос каталога устройства;
  • Поддержка механизма пульса, поддержка интервала пульса и настроек времени обнаружения пульса;
  • Поддержка подписки и уведомлений о местонахождении мобильного устройства (MobilePosition);
  • Применимые национальные стандарты: GB/T 28181-2016;
  • Поддержка голосового вещания;
  • Поддержка голосовой связи;
  • Поддержка захвата изображений;
  • Поддержка поиска исторических видео и аудио файлов;
  • Поддерживает загрузку исторических видео и аудио файлов;
  • Поддержка воспроизведения исторических видео и аудио файлов;
  • Поддержка управления PTZ и запроса предустановленного положения;
  • [Водяной знак в реальном времени] поддерживает динамические текстовые водяные знаки и водяные знаки PNG;
  • [Зеркалирование] Платформа Android поддерживает функцию зеркального отображения передней камеры в реальном времени;
  • [Отключение звука в реальном времени] Поддерживает отключение/включение звука в реальном времени;
  • [Живой снимок]поддерживать Живой снимок;
  • [Шумоподавление] поддерживает обработку шумоподавления, автоматическое усиление и обнаружение VAD, вызванного звуками окружающей среды, помехами мобильного телефона и т. д.;
  • [Стыковка видеоданных перед внешним кодированием] поддерживает стыковку данных YUV;
  • [Стыковка аудиоданных перед внешним кодированием] поддерживает стыковку PCM;
  • [Стыковка внешних кодированных видеоданных] Поддерживает стыковку внешних данных H.264;
  • [Стыковка аудиоданных после внешнего кодирования] Стыковка внешних данных AAC;
  • [Расширенная функция записи] Поддерживает использование в сочетании с SDK записи для обеспечения функций, связанных с записью.​

1. Подготовительные работы

  1. Подтвердите среду разработки
    • Убедитесь, что ваша среда разработки Android поддерживает Android. Версия 5.1 и выше.
    • Поддерживаемые архитектуры ЦП включают Armv7, Arm64, x86, x86_64.
  2. Получить ресурсы SDK
    • Загрузите и разархивируйте Daniel Direct. трансляцияSDK SDK для доступа к устройствам платформы Android GB28181 (SmartGBD).
    • Поместите необходимые файлы Java (например, SmartPublisherJniV2.java и SmartPlayerJniV2.java) под правильными именами пакетов (например, com.daniulive.smartpublisher и com.daniulive.smartplayer).
    • Объедините файлы .jar и .so (например, smartavengine.jar, smartgbsipagent.jar, libSmartPublisher.so, libSmartPlayer.so), добавленный в проект.
  3. Элементы конфигурации
    • Добавьте необходимые разрешения в AndroidManifest.xml, такие как доступ к сети, хранилище файлов, изменение настроек звука, доступ к местоположению и т. д.
    • Убедитесь, что ваш файл build.gradle настроен с использованием правильного ABI (приложение Binary Interface) для создания APK, поддерживающих различные архитектуры ЦП.

2. Настройте SIP-сервер.

  1. Получить информацию о SIP-сервере
    • Включая такую ​​информацию, как адрес SIP-сервера, порт, учетные данные пользователя (например, имя пользователя и пароль). Эту информацию обычно необходимо жестко запрограммировать в коде Android или прочитать из файла конфигурации.
  2. Настроить SIP-прокси
    • Используйте прокси-класс SIP GB28181 (например, GBSIPAgent) для управления SIP-соединениями и сигнализацией.

3. Зарегистрируйте устройство

  1. Отправить запрос на регистрацию
    • использоватьSIPактерское мастерство Отправить запрос на Регистрация на SIP-сервере.
  2. Обработка обратных вызовов при регистрации
    • Обработка обратных вызовов, таких как успешная регистрация, тайм-аут или ошибка передачи.
  3. Оставайтесь зарегистрированными
    • Отправить пульсовое сообщение Оставайтесь зарегистрированными и при необходимости перерегистрируйтесь.

4. Сбор и передача аудио и видео.

  1. Аудио и видео коллекция
    • Вы можете использовать Camera2, AudioRecord и т. д. для сбора видео и аудио.
  2. Установить параметры кодирования
    • Установите тип кодирования звука (например, AAC, PCMA и т. д.), мягкое и жесткое кодирование, а также скорость передачи данных в соответствии со стандартом GB28181.
    • Поддерживает кодирование видео H.264/H.265. Такие параметры, как интервал GOP, частота кадров, скорость передачи данных и т. д., можно настроить по мере необходимости.
  3. Передача аудио и видео
    • В соответствии с требованиями спецификации GB28181 используйте RTP. PS упаковывает и передает аудио- и видеопотоки.

5. Расширенные функции

  1. Живой снимок
    • выполнить Живой снимок Функция,Поддержка формата JPEG,И загрузите изображения на национальную стандартную платформу в соответствии со стандартом GB28181.
  2. голосовая связь
    • Поддержка связи между устройством Android платформы GB28181 и сервером GB. связь(broadcast)。
  3. отчет о местоположении
    • Позволяет устройству сообщать о своем местоположении (MobilePosition), когда это необходимо.
  4. Улучшение качества звука
    • Включает шумоподавление и автоматическую регулировку усиления (3А).
  5. Водяной знак добавлен
    • Поддерживает добавление динамического текста или водяных знаков к захваченным изображениям.

6. Документы и ресурсы

7. Вызов примера кода

Если взять в качестве примера док-станцию ​​Camera2 для платформы Android, то сигнальная часть должна реализовать следующий интерфейс, отмеченный красным:

Язык кода:java
копировать
public class MainActivity extends Activity implements ViewTreeObserver.OnGlobalLayoutListener, Camera2Listener,
        GBSIPAgentListener, GBSIPAgentPlayListener, GBSIPAgentAudioBroadcastListener,
        GBSIPAgentDeviceControlListener, GBSIPAgentQueryCommandListener, 
        GBSIPAgentTalkListener, 
        GBSIPAgentQueryRecordInfoListener{
}

Обработка медиаданныхинтерфейс,Пожалуйста, обратитесь к SmartPublisherJniV2.java.,Если вам нужна голосовая трансляция или Голосовой домофон,Пожалуйста, обратитесь к SmartPlayerJniV2.java.

Обработка сигналов

GBSIPAgentListener в основном отвечает за регистрацию GB28181, контрольное сообщение, DevicePosition и т. д., например, за успешную регистрацию, тайм-аут регистрации, ошибку транспортного уровня сети регистрации, исключение контрольного сигнала, обработку запроса о местоположении устройства:

Язык кода:java
копировать
public interface GBSIPAgentListener
{
    /*Регистрация прошла успешно
    * @param dateString: Дата сервера используется для калибровки времени устройства. Пользователь решает, следует ли калибровать время устройства.
    */
    void ntsRegisterOK(String dateString);

    /*
    *Тайм-аут регистрации
    */
    void ntsRegisterTimeout();

    /*
    *Зарегистрировать исключение сетевого транспортного уровня.
    */
    void ntsRegisterTransportError(String errorInfo);

    /*
    *Сердцебиение достигает аномального количества раз.
    */
    void ntsOnHeartBeatException(int exceptionCount, String lastExceptionInfo);

    /*
     * запрос местоположения устройства, В основном используется для подписок на местоположение мобильных устройств.
     * @param interval интервал запроса, Единица миллисекунды
     */
    void ntsOnDevicePositionRequest(String deviceId, int interval);
}

GBSIPAgentPlayListener в основном обрабатывает приглашения, подтверждения, пока и т. д. из GB28181:

Язык кода:java
копировать
public interface GBSIPAgentPlayListener {

    /*
     *Получайте видео и аудио в реальном времени по запросу от s=Play.
     */
    void ntsOnInvitePlay(String deviceId, SessionDescription sessionDescription);

    /*
     *Отправить игру invite response аномальный
     */
    void ntsOnPlayInviteResponseException(String deviceId, int statusCode, String errorInfo);

    /*
     * ОТМЕНА получено play ПРИГЛАСИТЕ запрос
     */
    void ntsOnCancelPlay(String deviceId);

    /*
     * Подтверждение получено
     */
    void ntsOnAckPlay(String deviceId);

    /*
     * Получено до свидания
     */
    void ntsOnByePlay(String deviceId);

    /*
     * Не получаю ПОКА В случае сообщения Прекратить игру
     */
    void ntsOnTerminatePlay(String deviceId);

    /*
     * Разговор, соответствующий сеансу Play, завершается, Обычно этот обратный вызов не запускается. В настоящее время он отвечает только на 200 КБ. Но если вы не получили ACK по истечении времени 64*T1, вы можете начинать.
    получил это, Пожалуйста, сделайте соответствующую очистку
    */
    void ntsOnPlayDialogTerminated(String deviceId);
}

GBSIPAgentAudioBroadcastListener в основном связан с обработкой голосового вещания GB28181. Если у вас есть потребности, связанные с голосовым вещанием, вы можете обратиться к демонстрационному примеру для реализации:

Язык кода:java
копировать
public interface GBSIPAgentAudioBroadcastListener {

    /*
     *Получить голосовое уведомление о трансляции
     */
    void ntsOnNotifyBroadcastCommand(String fromUserName, String fromUserNameAtDomain, String sn, String sourceID, String targetID);

    /*
     *Требуется подготовка к приему контента SDP для голосовых трансляций.
     */
    void ntsOnAudioBroadcast(String commandFromUserName, String commandFromUserNameAtDomain, String sourceID, String targetID);

    /*
     *аудиотрансляция, Отправить запрос на приглашение
     */
    void ntsOnInviteAudioBroadcastException(String sourceID, String targetID, String errorInfo);

    /*
     *аудиотрансляция, Тайм-аут ожидания ответа на приглашение
     */
    void ntsOnInviteAudioBroadcastTimeout(String sourceID, String targetID);

    /*
     *аудиотрансляция, Получите окончательный ответ на приглашение
     */
    void ntsOnInviteAudioBroadcastResponse(String sourceID, String targetID, int statusCode, SessionDescription sessionDescription);

    /*
     * аудиотрансляция, ПОКА получено Message
     */
    void ntsOnByeAudioBroadcast(String sourceID, String targetID);


    /*
     * Не получаю ПОКА В случае сообщения Завершить аудиотрансляцию
     */
    void ntsOnTerminateAudioBroadcast(String sourceID, String targetID);
}

GBSIPAgentDeviceControlListener в основном связан с управлением устройством GB28181, таким как удаленный запуск и управление PTZ:

Язык кода:java
копировать
public interface GBSIPAgentDeviceControlListener {

    /*
     * Получена команда управления дистанционным запуском
     */
    void ntsOnDeviceControlTeleBootCommand(String deviceId, String teleBootValue);

    /*
    * PTZ-управление
     */
    void ntsOnDeviceControlPTZCmd(String deviceId, String typeValue);
}

GBSIPAgentQueryCommandListener — это в основном команда запроса GB28181, например запрос заданной позиции:

Язык кода:java
копировать
public interface GBSIPAgentQueryCommandListener {

    /*
     * Запрос предустановленного положения оборудования
     */
    void ntsOnDevicePresetQueryCommand(String fromUserName, String fromUserNameAtDomain, String sn, String deviceId);
}

GBSIPAgentTalkListener в основном обрабатывает обработку, связанную с голосовой внутренней связью GB28181:

Язык кода:java
копировать
public interface GBSIPAgentTalkListener {
    /*
     *Получено s=Обсуждение Голосовой домофон
     */
    void ntsOnInviteTalk(String deviceId, SessionDescription sessionDescription);

    /*
     *Отправить разговор invite response аномальный
     */
    void ntsOnTalkInviteResponseException(String deviceId, int statusCode, String errorInfo);

    /*
     * ОТМЕНА получено Talk ПРИГЛАСИТЕ запрос
     */
    void ntsOnCancelTalk(String deviceId);

    /*
     * Подтверждение получено
     */
    void ntsOnAckTalk(String deviceId);

    /*
     * Получено до свидания
     */
    void ntsOnByeTalk(String deviceId);

    /*
     * Не получаю ПОКА В случае сообщения Завершить разговор
     */
    void ntsOnTerminateTalk(String deviceId);

    /*
     * Разговор, соответствующий сеансу разговора, завершается, Обычно этот обратный вызов не запускается. В настоящее время он отвечает только на 200 КБ. Но если вы не получили ACK по истечении времени 64*T1, вы можете начинать.
    получил это, Пожалуйста, сделайте соответствующую очистку
    */
    void ntsOnTalkDialogTerminated(String deviceId);
}

GBSIPAgentPlaybackListener связан с историческим воспроизведением видео и аудио:

Язык кода:java
копировать
public interface GBSIPAgentPlaybackListener {
    void ntsOnInvitePlayback(long var1, String var3, SessionDescription var4);

    void ntsOnPlaybackInviteResponseException(long var1, String var3, int var4, String var5);

    void ntsOnCancelPlayback(long var1, String var3);

    void ntsOnAckPlayback(long var1, String var3);

    void ntsOnPlaybackMANSRTSPPlayCommand(long var1, String var3);

    void ntsOnPlaybackMANSRTSPPauseCommand(long var1, String var3);

    void ntsOnPlaybackMANSRTSPScaleCommand(long var1, String var3, double var4);

    void ntsOnPlaybackMANSRTSPSeekCommand(long var1, String var3, double var4);

    void ntsOnPlaybackMANSRTSPTeardownCommand(long var1, String var3);

    void ntsOnByePlayback(long var1, String var3);

    void ntsOnTerminatePlayback(long var1, String var3);

    void ntsOnPlaybackDialogTerminated(long var1, String var3);
}

GBSIPAgentDownloadListen относится к историческим загрузкам видео и аудио:

Язык кода:java
копировать
public interface GBSIPAgentDownloadListener {
    void ntsOnInviteDownload(long var1, String var3, SessionDescription var4);

    void ntsOnDownloadInviteResponseException(long var1, String var3, int var4, String var5);

    void ntsOnCancelDownload(long var1, String var3);

    void ntsOnAckDownload(long var1, String var3);

    void ntsOnDownloadMANSRTSPScaleCommand(long var1, String var3, double var4);

    void ntsOnByeDownload(long var1, String var3);

    void ntsOnTerminateDownload(long var1, String var3);

    void ntsOnDownloadDialogTerminated(long var1, String var3);
}
Обработка медиаданных
Отправка данных RTP

Дизайн интерфейса, связанного с RTP Sender (SmartPublisherJniV2.java):

Язык кода:java
копировать
/*
 * SmartPublisherJniV2.java
 * Author: https://daniusdk.com
 * WeChat:xinsheng120
 */
/*
 * Создать RTP Экземпляр отправителя
 *
 * @param резерв: передайте 0, чтобы зарезервировать параметры
 *
 * @return RTP Sender Дескриптор, 0 указывает на сбой
 */
public native long CreateRTPSender(int reserve);

/**
 *настраивать RTP Транспортный протокол отправителя
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 * @param transport_protocol, 0:UDP, 1:TCP, По умолчанию – UDP.
 *
 * @return {0} if successful
 */
public native int SetRTPSenderTransportProtocol(long rtp_sender_handle, int transport_protocol);

/**
 *настраивать RTP Sender Тип IP-адреса
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 * @param ip_address_type, 0:IPV4, 1:IPV6, По умолчанию — IPV4, В настоящее время поддерживает только IPV4.
 *
 * @return {0} if successful
 */
public native int SetRTPSenderIPAddressType(long rtp_sender_handle, int ip_address_type);

/**
 *настраивать RTP Sender RTP Локальный порт сокета
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 * @param port, Это должно быть четное число. Если установлено значение 0, SDK автоматически выделит его. Значение по умолчанию — 0.
 *
 * @return {0} if successful
 */
public native int SetRTPSenderLocalPort(long rtp_sender_handle, int port);

/**
 *настраивать RTP Sender SSRC
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 * @param ssrc, Если установлено, эта строка должна быть конвертирована в тип uint32, В противном случае установка не удастся
 *
 * @return {0} if successful
 */
public native int SetRTPSenderSSRC(long rtp_sender_handle, String ssrc);

/**
 *настраивать RTP Sender RTP socket Размер буфера отправки
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 * @param buffer_size, Должно быть больше 0, По умолчанию — 512*1024, Пока только для UDP сокет действителен, Рассмотрите возможность установки соответствующих значений в зависимости от скорости передачи видео.
 *
 * @return {0} if successful
 */
public native int SetRTPSenderSocketSendBuffer(long rtp_sender_handle, int buffer_size);

/**
 *настраивать RTP Sender Тактовая частота временной метки RTP
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 * @param clock_rate, Должно быть больше 0, Для GB28181 Регулирование PS составляет 90 к Гц, это 90000
 *
 * @return {0} if successful
 */
public native int SetRTPSenderClockRate(long rtp_sender_handle, int clock_rate);

/**
 *настраивать RTP Sender IP-адрес назначения, Обратите внимание, что в настоящее время он используется для push-уведомлений GB2818, и установлен только один адрес. Если расширение будет использоваться в других местах в будущем, возможно, потребуется установить несколько адресов назначения, и к тому времени интерфейс можно будет настроить.
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 * @param address, IP-адрес
 * @param port, порт
 *
 * @return {0} if successful
 */
public native int SetRTPSenderDestination(long rtp_sender_handle, String address, int port);

/**
 * Установите, следует ли включать RTP Receiver
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 * @param is_enable, 0 означает отсутствие приема пакетов RTP, 1 означает получение пакетов RTP, Значение SDK по умолчанию — 0.
 * @return
 */
public native int EnableRTPSenderReceive(long rtp_sender_handle, int is_enable);

/**
 *настраиватьRTP Receiver SSRC
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 * @param ssrc, Если установлено, эта строка должна быть конвертирована в тип uint32, В противном случае установка не удастся
 *
 * @return {0} if successful
 */
public native int SetRTPSenderReceiveSSRC(long rtp_sender_handle, String ssrc);

/**
 *настраиватьRTP Receiver Payload Сопутствующая информация
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 *
 * @param payload_type, Пожалуйста, обратитесь к RFC 3551
 *
 * @param encoding_name, имя кодировки, Пожалуйста, обратитесь к RFC 3551, Если payload_type не является динамическим, Может быть, просто передать ноль
 *
 * @param media_type, тип носителя, Пожалуйста, обратитесь к RFC 3551, 1 Это видео, 2 это аудио
 *
 * @param clock_rate, Пожалуйста, обратитесь к RFC 3551
 *
 * @return {0} if successful
 */
public native int SetRTPSenderReceivePayloadType(long rtp_sender_handle, int payload_type, String encoding_name, int media_type, int clock_rate);

/**
 *настраиватьRTP Receiver P.S. баллы и баллы clock frequency
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 *
 * @param ps_clock_frequency, По умолчанию 90000, Необходимо установить некоторые специальные сцены
 *
 * @return {0} if successful
 */
public native int SetRTPSenderReceivePSClockFrequency(long rtp_sender_handle, int ps_clock_frequency);

/**
 *настраивать RTP Receiver Частота дискретизации звука
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 * @param sampling_rate, Частота дискретизации звука
 *
 * @return {0} if successful
 */
public native int SetRTPSenderReceiveAudioSamplingRate(long rtp_sender_handle, int sampling_rate);

/**
 *настраивать RTP Receiver Количество аудиоканалов
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 * @param channels, Количество аудиоканалов
 *
 * @return {0} if successful
 */
public native int SetRTPSenderReceiveAudioChannels(long rtp_sender_handle, int channels);

/**
 *Инициализация RTP Sender, Перед инициализацией вызовите вышеуказанный интерфейс для настройки соответствующих параметров.
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 *
 * @return {0} if successful
 */
public native int InitRTPSender(long rtp_sender_handle);

/**
 * Получить РТП Sender RTP Локальный порт сокета
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 *
 * @return Возвращает 0 в случае неудачи, В случае успеха верните ответный порт, Пожалуйста, позвоните после успешного возврата InitRTPSender.
 */
public native int GetRTPSenderLocalPort(long rtp_sender_handle);

/**
 * UnInit RTP Sender
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 *
 * @return {0} if successful
 */
public native int UnInitRTPSender(long rtp_sender_handle);

/**
 * Выпустить RTP Sender, После освобождения rtp_sender_handle станет недействительным, не используйте его снова.
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 *
 * @return {0} if successful
 */
public native int DestoryRTPSender(long rtp_sender_handle);
Прием данных RTP

В соответствии с дизайном интерфейса, связанного с приемником RTP (SmartPlayerJniV2.java), если нет технических требований, связанных с голосовым вещанием или голосовой внутренней связью, эту часть можно игнорировать:

Язык кода:java
копировать
/*
 * SmartPlayerJniV2.java
 * Author: https://daniusdk.com
 * WeChat: xinsheng120
 */
/*
 * Создать RTP Receiver
 *
 * @param резерв: передайте 0, чтобы зарезервировать параметры
 *
 * @return RTP Receiver Дескриптор, 0 указывает на сбой
 */
public native long CreateRTPReceiver(int reserve);


/**
 *настраивать RTP Транспортный протокол приемника
 *
 * @param rtp_receiver_handle, CreateRTPReceiver
 * @param transport_protocol, 0:UDP, 1:TCP, По умолчанию – UDP.
 *
 * @return {0} if successful
 */
public native int SetRTPReceiverTransportProtocol(long rtp_receiver_handle, int transport_protocol);


/**
 *настраивать RTP Receiver Тип IP-адреса
 *
 * @param rtp_receiver_handle, CreateRTPReceiver
 * @param ip_address_type, 0:IPV4, 1:IPV6, По умолчанию — IPV4.
 *
 * @return {0} if successful
 */
public native int SetRTPReceiverIPAddressType(long rtp_receiver_handle, int ip_address_type);


/**
 *настраивать RTP Receiver RTP Локальный порт сокета
 *
 * @param rtp_receiver_handle, CreateRTPReceiver
 * @param port, Это должно быть четное число. Если установлено значение 0, SDK автоматически выделит его. Значение по умолчанию — 0.
 *
 * @return {0} if successful
 */
public native int SetRTPReceiverLocalPort(long rtp_receiver_handle, int port);


/**
 *настраивать RTP Receiver SSRC
 *
 * @param rtp_receiver_handle, CreateRTPReceiver
 * @param ssrc, Если установлено, эта строка должна быть конвертирована в тип uint32, В противном случае установка не удастся
 *
 * @return {0} if successful
 */
public native int SetRTPReceiverSSRC(long rtp_receiver_handle, String ssrc);


/**
 *создавать RTP Receiver сессия
 *
 * @param rtp_receiver_handle, CreateRTPReceiver
 * @param reserve, Зарезервированное значение, в настоящее время передано 0
 *
 * @return {0} if successful
 */
public native int CreateRTPReceiverSession(long rtp_receiver_handle, int reserve);


/**
 *Получать RTP Receiver RTP Локальный порт сокета
 *
 * @param rtp_receiver_handle, CreateRTPReceiver
 *
 * @return Возвращает 0 в случае неудачи, В случае успеха верните ответный порт, Пожалуйста, позвоните после успешного завершения CreateRTPReceiverSession.
 */
public native int GetRTPReceiverLocalPort(long rtp_receiver_handle);


/**
 *настраивать RTP Receiver Payload Сопутствующая информация
 *
 * @param rtp_receiver_handle, CreateRTPReceiver
 *
 * @param payload_type, Пожалуйста, обратитесь к RFC 3551
 *
 * @param encoding_name, имя кодировки, Пожалуйста, обратитесь к RFC 3551, Если payload_type не является динамическим, Может быть, просто передать ноль
 *
 * @param media_type, тип носителя, Пожалуйста, обратитесь к RFC 3551, 1 Это видео, 2 это аудио
 *
 * @param clock_rate, Пожалуйста, обратитесь к RFC 3551
 *
 * @return {0} if successful
 */
public native int SetRTPReceiverPayloadType(long rtp_receiver_handle, int payload_type, String encoding_name, int media_type, int clock_rate);


/**
 *настраивать RTP Receiver Частота дискретизации звука
 *
 * @param rtp_receiver_handle, CreateRTPReceiver
 * @param sampling_rate, Частота дискретизации звука
 *
 * @return {0} if successful
 */
public native int SetRTPReceiverAudioSamplingRate(long rtp_receiver_handle, int sampling_rate);

/**
 *настраивать RTP Receiver Количество аудиоканалов
 *
 * @param rtp_receiver_handle, CreateRTPReceiver
 * @param channels, Количество аудиоканалов
 *
 * @return {0} if successful
 */
public native int SetRTPReceiverAudioChannels(long rtp_receiver_handle, int channels);


/**
 *настраивать RTP Receiver удаленный адрес
 *
 * @param rtp_receiver_handle, CreateRTPReceiver
 * @param address, IP-адрес
 * @param port, порт
 *
 * @return {0} if successful
 */
public native int SetRTPReceiverRemoteAddress(long rtp_receiver_handle, String address, int port);

/**
 *инициализация RTP Receiver
 *
 * @param rtp_receiver_handle, CreateRTPReceiver
 *
 * @return {0} if successful
 */
public native int InitRTPReceiver(long rtp_receiver_handle);

/**
 *UnInit RTP Receiver
 *
 * @param rtp_receiver_handle, CreateRTPReceiver
 *
 * @return {0} if successful
 */
public native int UnInitRTPReceiver(long rtp_receiver_handle);


/**
 *Destory RTP Receiver Session
 *
 * @param rtp_receiver_handle, CreateRTPReceiver
 *
 * @return {0} if successful
 */
public native int DestoryRTPReceiverSession(long rtp_receiver_handle);


/**
 *Destory RTP Receiver
 *
 * @param rtp_receiver_handle, CreateRTPReceiver
 *
 * @return {0} if successful
 */
public native int DestoryRTPReceiver(long rtp_receiver_handle);

PostAudioPacket (SmartPlayerJniV2.java) доставляет аудиопакеты на внешние источники Live, в настоящее время используется только для голосовой связи:

Язык кода:java
копировать
/*
 * SmartPlayerJniV2.java
 * Author: https://daniusdk.com
 */
/**
 * Доставка аудиопакетов на внешний Live source, Обратите внимание, что объект ByteBuffer должен быть DirectBuffer.
 *
 * @param handle: return value from SmartPlayerOpen()
 *
 * @return {0} if successful
 */
public native int PostAudioPacket(long handle, int codec_id,
                          java.nio.ByteBuffer packet, int offset, int size, long pts, boolean is_pts_discontinuity,
                          java.nio.ByteBuffer extra_data, int extra_data_offset, int extra_data_size, int sample_rate, int channels);

Вызов интерфейса GB28181

Конструкция, соответствующая вызовам интерфейса, связанным с GB28181, выглядит следующим образом:

Язык кода:java
копировать
/*
 * SmartPublisherJniV2.java
 * Author: https://daniusdk.com
 * WeChat: xinsheng120
 */
/**
 * Настройка GB28181 RTP Sender
 *
 * @param rtp_sender_handle, Возвращаемое значение CreateRTPSender
 * @param rtp_payload_type, Для GB28181 PS, Определение протокола — 96, Более подробную информацию можно найти в SDP.  RFC 3551 определено
 * @param encoding_name, имя кодировки, Пожалуйста, обратитесь к RFC 3551, На данный момент поддерживаются только: "PS", Возврат других значений не удался
 * @return {0} if successful
 */
public native int SetGB28181RTPSender(long handle, long rtp_sender_handle, int rtp_payload_type, String encoding_name);

/**
 * Настройка GB28181 RTP Получен обратный вызов аудиопакета
 * @param handle
 * @param audio_packet_callback
 * @return
 */
public native int SetGB28181ReceiveAudioPacketCallback(long handle, NTAudioPacketCallback audio_packet_callback);

/**
 * запускать GB28181 медиапоток
 *
 * @return {0} if successful
 */
public native int StartGB28181MediaStream(long handle);

/**
 * останавливаться GB28181 медиапоток
 *
 * @return {0} if successful
 */
public native int StopGB28181MediaStream(long handle);

Подвести итог

Решение GB28181 в сфере записывающих устройств для правоохранительных органов обеспечивает более комплексное решение для правоохранительных органов за счет объединения оборудования, передачи и хранения данных в реальном времени, удаленного мониторинга и управления, интеллектуального анализа, безопасности и защиты конфиденциальности и других аспектов. и безопасная техническая поддержка. Реализация этих решений не только повышает эффективность правоохранительных органов, но и повышает общественную безопасность. Регистратор для правоохранительных органов GB28181 играет важную роль в области записи и удаленного мониторинга правоохранительных органов благодаря своим эффективным, стабильным и безопасным техническим характеристикам. Благодаря постоянному развитию технологий и постоянному расширению сценариев применения регистраторы GB28181 для правоохранительных органов будут продолжать оказывать мощную поддержку общественной безопасности и социального управления. Вышеупомянутое представляет собой техническое исследование рекордера для правоохранительных органов GB28181. Заинтересованные разработчики могут связаться со мной индивидуально для обсуждения.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose