Обсуждение процесса взаимодействия сигнализации GB28181 и стыковки Android-устройства
Обсуждение процесса взаимодействия сигнализации GB28181 и стыковки Android-устройства

Необходимость спецификации GB28181

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

  1. Реализация взаимосвязи и совместимости устройств
    • Совместимость с устройствами разных производителей.:В сфере видеонаблюдения,На рынке представлено множество производителей оборудования.,Оборудование мониторинга, выпускаемое разными производителями, может иметь различия в протоколах связи, форматах данных и т. д. ГБ28181 Спецификация обеспечивает единый стандарт связи для устройств разных производителей, чтобы они могли идентифицировать, подключаться и взаимодействовать друг с другом. Например, используется A Производитель систем видеонаблюдения, которые можно использовать с B Устройства хранения данных поставщика и C Системы платформы мониторинга производителя обеспечивают бесшовную стыковку, что значительно улучшает совместимость и взаимодействие оборудования.
    • Удобная межсистемная интеграция:Помимо необходимости взаимосвязи между устройствами разных производителей,В некоторых крупных проектах мониторинга,Это также может включать в себя несколько различных подсистем мониторинга.,Например, система мониторинга городской безопасности.、система мониторинга дорожного движение, система внутреннего мониторинга предприятия и т. д. ГБ28181 Спецификации позволяют интегрировать эти различные системы мониторинга на основе унифицированных стандартов для обеспечения обмена информацией и совместной работы, избегая проблемы информационных островов, вызванной несовместимостью между системами.
  2. Обеспечить безопасность передачи информации
    • Шифрование и аутентификация данных:GB28181 Спецификация выдвигает требования безопасности к процессу связи между устройствами, включая зашифрованную передачу данных, аутентификацию личности устройства и т. д. Технология шифрования может предотвратить кражу или подделку данных видеонаблюдения во время передачи, обеспечивая конфиденциальность и целостность информации. Механизм аутентификации личности может гарантировать, что только легальные устройства смогут получить доступ к системе, предотвратить вторжение и злонамеренные атаки незаконных устройств, а также повысить безопасность системы.
    • Контроль доступа и управление правами:Спецификация также оговаривает права доступа и права работы различных пользователей к системе мониторинга.,Например,Администраторы могут настраивать устройство и управлять им.,Обычные пользователи могут только просматривать видео в реальном времени или воспроизводить записи и т. д. Это эффективно предотвращает несанкционированный доступ и операции.,Защитите безопасность и конфиденциальность систем наблюдения.
  3. Повышение эффективности управления системой
    • Централизованное управление оборудованием:Для систем с большим количеством устройств мониторинга,Например, сеть мониторинга безопасности на уровне города.,Управление оборудованием представляет собой огромную проблему. ГБ28181 Стандарт поддерживает централизованное управление оборудованием. Центр мониторинга может удаленно настраивать, контролировать, модернизировать и выполнять другие операции с оборудованием, распределенным в разных местах, посредством единой платформы управления, что значительно повышает эффективность управления оборудованием и снижает затраты на управление.
    • Устранение неполадок и устранение неполадок:Когда система мониторинга дает сбой,GB28181 В спецификации оговаривается информация о неисправностях и механизм сигнализации, которые должно обеспечивать оборудование, что позволяет администраторам быстро и точно находить неисправное оборудование и причины неисправностей, своевременно устранять их, сокращать время сбоя системы и повышать ее надежность и стабильность.
  4. Содействие развитию отраслевой стандартизации
    • Стандартизировать рыночный порядок:До того, как появился единый стандарт,Рынок видеонаблюдения хаотичен,Каждый производитель работает сам по себе.,Качество и производительность продукции различаются。GB28181 Разработка спецификаций обеспечивает отрасль едиными техническими стандартами и спецификациями, побуждает производителей вести разработку и производство продукции в соответствии со стандартами, повышает качество и производительность продукции, стандартизирует рыночный порядок и способствует здоровому развитию отрасли.
    • Продвижение технологических инноваций:Разработка стандартов обеспечивает четкое направление и основу для технологических инноваций.,Производители могут, при условии соблюдения стандартов,Постоянно исследовать и внедрять новые технологии и приложения.,Содействие постоянному развитию технологий видеонаблюдения.。Например,существовать GB28181 На основе правил некоторые производители разработали оборудование для мониторинга с интеллектуальными функциями анализа, которое может реализовать расширенные функции, такие как распознавание лиц и анализ поведения, а также повысить уровень интеллекта системы мониторинга.
  5. Удовлетворение потребностей общественной безопасности
    • Чрезвычайное командование и скоординированные действия:существовать公共安全领域,Такие как общественная безопасность, противопожарная защита, управление чрезвычайными ситуациями и другие отделы.,Необходимость быстрого получения точной информации мониторинга,для экстренного командования и координации действий. ГБ28181 Спецификация гарантирует, что системы наблюдения между различными ведомствами могут быть связаны между собой. В случае чрезвычайной ситуации различные ведомства могут быстро обмениваться видеозаписями и информацией, что повышает скорость и эффективность реагирования на чрезвычайные ситуации, а также обеспечивает надежную поддержку для обеспечения общественной безопасности.
    • Сбор и отслеживание доказательств:Видео наблюдения как важный источник доказательств,существовать案件侦破、Играет важную роль в расследовании несчастных случаев и других аспектах.。GB28181 Стандарты обеспечивают стандартизацию и надежность данных видеонаблюдения, позволяют использовать видео наблюдения в качестве эффективных доказательств и облегчают работу судебных органов и связанных с ними ведомств.

Процесс взаимодействия сигнализации GB28181

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

Процесс регистрации

  1. Устройство нижнего уровня инициирует запрос на регистрацию:Оборудование для мониторинга нижнего уровня(например, камера、Энкодер и т. д.)Платформа восходящего мониторинга(или центральный сервер управления)отправлятьREGISTERзапросить сообщение。В этом сообщении содержится основная информация об устройстве.,Например, оборудование ID、IP-адрес、порт Число、Тип оборудования и т. д.,и запрошенный срок действия(expiresПоле)и другая информация。
  2. Для превосходной платформы требуется сертификация (необязательно).:После того, как вышестоящая платформа получит запрос на регистрацию,,Если функция аутентификации включена,Отвечу401 Unauthorizedответ,要求下级设备существоватьназад续из注册просить中нести认证信息。401Ответ содержит параметры, необходимые для аутентификации.,Например, домен аутентификации(realm)、случайное число(nonce)ждать。
  3. Устройство нижнего уровня снова инициирует запрос на регистрацию (с информацией аутентификации).:Оборудование нижнего уровня основано на требованиях платформы верхнего уровня.,существовать第二次отправлятьизREGISTERДобавьте данные аутентификации в запрос,Обычно используется дайджест-аутентификация.,计算出ответценить(response)и добавить к запросу。Информация аутентификации включает имя пользователя.、пароль、случайное число、Метод запрос, запрос URI Суммарная стоимость прочей информации.
  4. Превосходящая платформа проверяет и отвечает:上级平台收到第二次注册проситьназад,Проверьте правильность аутентификационной информации. Если проверка прошла,тогда ответь200 OKответ,Указывает на успешную регистрацию,в то же времясуществоватьответ中可以包含注册из有效期(expiresПоле)и другая информация。Платформа верхнего уровня будет записывать информацию устройств нижнего уровня.,для последующего управления и контроля.

Процесс консервации

  1. Устройство нижнего уровня отправляет запрос на поддержание активности.:После успешной регистрации,Устройствам нижнего уровня необходимо регулярно отправлять запросы поддержки активности на платформу верхнего уровня.,для поддержания действительности соединения。保活просить通常使用MESSAGEметод,并существоватьв теле сообщениянести保活命令(cmdtype="keepalive")和设备状态и другая информация。
  2. Ответ с превосходной платформы:上级平台收到保活проситьназад,отвечать200 OKответ,Указывает на подтверждение получения контрольной информации.

Процесс запроса информации об оборудовании

  1. Устройство отправляет запрос запроса:上级平台或其他有权限из设备可以К下级设备отправлять设备信息查询просить,Сообщение запроса содержит тип запрашиваемой команды и запрашиваемое устройство.
  2. Устройства нижнего уровня отвечают на результаты запроса:下级设备收到查询проситьназад,根据просить中из命令类型和设备 ID, найдите соответствующую информацию об устройстве и верните результаты запроса на вышестоящую платформу. Результаты запроса обычно начинаются с XML Тело сообщения в формате инкапсулировано, включая основную информацию, информацию о состоянии, информацию о канале и т. д. устройства.

Процесс предварительного просмотра видео в реальном времени

GB28181 Процесс в спецификациях предварительного просмотра видео в реальном время в основном включает в себя следующие этапы:

  1. Сделать запрос на предварительный просмотр34:
    • Действия платформы (клиента) верхнего уровня:Когда платформа мониторинга верхнего уровня или клиент с разрешением хотят просмотреть видео в реальном времени с устройства нижнего уровня.,会К下级设备отправлятьINVITEпросить。просить中包含медиапотокописание информации,Например, формат кодирования видео, разрешение, частота кадров и т. д.,и адрес для получения видеопотока ипорт Числои другая информация。существовать消息头域中通常会нестиsubjectПоле,Указывает источник видео по запросу. Идентификатор, порядковый номер медиапотока отправителя, получатель медиапотока ID、принимающая сторонамедиапоток序列Числождать参数。Например,SDPв теле сообщенияsПоле为 “play” Представляет собой режим реального времени по требованию.
  2. Маршрутизация и пересылка запросов
    • Обработка SIP-сервера:SIP Сервер получает сообщение от вышестоящей платформыINVITEпроситьназад,Начать работу по маршрутизации и пересылке сигналов. Он будет использовать информацию о целевом устройстве в запросе.,Перенаправить запрос в сетевой домен соответствующего устройства нижнего уровня или непосредственно на устройство нижнего уровня.
  3. Установить медиа-соединение (загрузить устройство на медиа-сервер)
    • SIP-сервер к медиа-серверу:SIP 服务器首先К媒体服务器отправлятьINVITEпросить,此просить不нестиSDPтело сообщения,Цель состоит в том, чтобы уведомить медиасервер о необходимости подготовиться к приему.медиапоток。
    • ответ медиа-сервера:媒体服务器收到 SIP СервераINVITEпроситьназад,отвечать200 OKответ,нестиSDPтело сообщения。в теле сообщения描述了媒体服务器接收медиапотокиз IP, порт, формат мультимедиа и т. д., чтобы устройство нижнего уровня могло правильно отправлять медиапоток на медиасервер.
  4. Установите медиа-соединение (медиа-сервер с нижестоящим устройством)
    • SIP-сервер к устройству нижнего уровня:SIP 服务器收到媒体服务器返回из200 OKответназад,Воля该ответв теле сообщенияиз Сопутствующая информация添加到新изINVITEпросить中,并отправлять给下级设备(медиапотокотправлять者)。这个просить中изsПоле同样为 “play” Представляет собой по требованию в реальном времени,и увеличитьyПоле描述同步源(SSRC)ценить,fПоле描述媒体参数ждать,告知下级设备К媒体服务器отправлятьмедиапотокиз具体要求。
    • Ответ устройства нижнего уровня:下级设备收到 SIP СервераINVITEпроситьназад,отвечать200 OKответ,нестиSDPтело сообщения,в теле сообщения描述了下级设备отправлятьмедиапотокиз IP, порт, медиаформат, SSRC поля и другое содержимое, указывающее, что устройство нижнего уровня готово отправлять медиапотоки.
  5. Подтверждение установления сеанса
    • Платформа верхнего уровня для медиасервера:SIP 服务器收到下级设备返回из200 OKответназад,КОтвет с превосходной сообщение с подтверждением платформы,Сообщите превосходящей платформемедиапотокиз传输路径已经建立。上级平台收到Подтвердите сообщениеназад,Начните готовиться к получениюмедиапоток。
    • SIP-сервер к устройству нижнего уровня:SIP 服务器К媒体服务器отправлятьACKпросить,просить中нести下级设备отвечатьиз200 OKответтело сообщения,完成与媒体СервераINVITEсессиянастроить процесс。в то же время,SIP 服务器也К下级设备отправлятьACKпросить,Запрос не содержит тела сообщения,完成与下级设备изINVITEсессиянастроить процесс。До сих пор,三方из媒体сессия Соединение установлено,медиапоток Можно начать передачу。
  6. потоковое мультимедиа
    • Отправка устройства нижнего уровня:Оборудование нижнего уровня на базесессия建立时确定из参数,Трансляция живого видео через RTP(Real-time Transport Протокол) протокол передается на принимающий порт, указанный медиасервером. RTP Протокол используется для передачи аудио- и видеоданных в режиме реального времени, чтобы обеспечить последовательный характер данных в реальном времени.
    • переадресация медиасервера:медиасервер получает Отправка устройства нижнего уровняизмедиапотокназад,По запросу превосходной платформы,Волямедиапоток转发到上级平台指定из接收地址和порт。Превосходная платформа принимает и декодируетмедиапоток,Вы можете добиться предварительного просмотра видео в реальном времени.
  7. Завершить предварительный просмотр
    • По инициативе превосходной платформы:когда предварительный просмотр закончится,上级平台К上级 SIP 服务器отправлятьBYEпросить,уведомить SIP Сервер остановил передачу видео.
    • Ответ SIP-сервера:SIP 服务器收到BYEпроситьназадотвечать200 OKответ,сессияотключиться。然назад,SIP 服务器分别К媒体服务器和下级设备отправлятьBYEпросить,уведомить它们结束медиапотокиз传输。
    • Медиа-сервер и ответ устройства нижнего уровня:Медиа-серверы и нижестоящие устройства получаютBYEпроситьназад,分别отвечать200 OKответ,сессияотключиться,Весь процесс предварительного просмотра видео в реальном время закончилось.

GB28181 док-станция

В этой статье в качестве примера используется модуль доступа к устройству GB28181 платформы Android из Daniu Live SDK, чтобы показать, как реализовать и подключить устройство GB28181.

Помимо поддержки обычного доступа к аудио- и видеоданным, терминалы Android также могут поддерживать подписку и уведомление о местонахождении мобильного устройства (MobilePosition), захват изображений, голосовую трансляцию и голосовую внутреннюю связь, загрузку и воспроизведение исторического видео и аудио, а поддерживаемые типы данных стыковки: следующее:

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

Функциональный дизайн

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

Пример интеграции

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

Язык кода:java
копировать
/*
 * MainActivity.java
 * Author: daniusdk.com
 * WeChat: xinsheng120
 */
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);

    /*
     *аудиотрансляция, отправлятьInviteпроситьаномальный
     */
    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 теперь доступна в версии 2022 года. Поскольку влияние и область применения спецификации в отрасли увеличиваются, предполагается, что появятся итеративные версии, такие как 2026 и 2030 годы. Наши прогнозируемые тенденции развития GB28181 могут заключаться в следующих аспектах. , желающие также могут обсудить со мной индивидуально:

  1. Технические стандарты продолжают оптимизироваться
    • Обновление формата кодирования:вместе с视频技术из不断发展,будущее GB28181 Формат кодирования будет постоянно оптимизироваться и расширяться. Уже добавлено в H.265 Благодаря поддержке других высокоэффективных форматов кодирования совместимость и адаптируемость к стандартам кодирования нового поколения могут быть дополнительно улучшены в будущем для повышения эффективности и качества передачи видео и снижения использования полосы пропускания. Например, в некоторых сценариях, требующих более высокого качества изображения и пропускной способности, более совершенные форматы кодирования могут лучше удовлетворить потребности.
    • Улучшения транспортного протокола:существовать传输协议上,Его стабильность и надежность будут постоянно повышаться. Некоторые детали существующего протокола могут быть оптимизированы.,Уменьшите задержки передачи, потерю пакетов и другие проблемы.,Повысить эффективность сигнальных взаимодействий. в то же время,Также будет адаптироваться к развитию сетевых технологий.,лучшая поддержка 5G、IPv6 и другие новые сетевые среды для удовлетворения крупномасштабных потребностей в передаче видео с высокой степенью параллелизма.
    • Улучшения безопасности:视频监控涉及到公共安全和个人隐私ждать重要信息,因此安全性Воля是будущее发展из重点。GB28181 Требования и спецификации для механизмов безопасности, таких как шифрование данных, аутентификация личности и контроль доступа, будут и дальше усиливаться для борьбы со все более сложными угрозами сетевой безопасности. Например, более совершенные алгоритмы шифрования используются для усиления управления аутентификацией устройств и пользователей, чтобы обеспечить безопасную передачу и хранение видеоданных.
  2. Интеграция с другими стандартами и технологиями
    • Интеграция с Интернетом вещей:物联网技术из发展使得各种设备之间из互联互通变得更加紧密。GB28181 В дальнейшем он будет интегрирован с технологией Интернета вещей для реализации связи между системой видеонаблюдения и другими интеллектуальными устройствами, таких как информационное взаимодействие и совместная работа с датчиками, системами контроля доступа, системами противопожарной защиты и т. д. Например, когда датчик обнаруживает ненормальную ситуацию, он может автоматически активировать систему видеонаблюдения для записи и сигнализации, повышая интеллектуальный уровень предотвращения безопасности.
    • В сочетании с искусственным интеллектом:人工智能技术существовать视频分析领域из应用越来越广泛。будущее,GB28181 Он будет глубоко интегрирован с технологией искусственного интеллекта для интеллектуального анализа и обработки видеоконтента, например, распознавания лиц, анализа поведения, распознавания номерных знаков и т. д. Это значительно повысит эффективность и ценность видеонаблюдения и обеспечит более мощную техническую поддержку в сфере общественной безопасности, управления дорожным движением, управления предприятием и других областях.
    • Интеграция с облачными вычислениями:云计算技术为视频监控系统из存储和计算提供了强大из支持。GB28181 В дальнейшем он будет объединен с технологией облачных вычислений для реализации облачного хранения и облачной обработки видеоданных, что позволит сократить инвестиции пользователей в оборудование и затраты на его обслуживание. В то же время возможности совместного использования ресурсов и гибкого расширения платформы облачных вычислений могут лучше удовлетворить потребности различных пользователей.
  3. Сценарии применения продолжают расширяться
    • Строительство умного города:существовать Строительство умного В городе видеонаблюдение является важной составляющей. ГБ28181 Он будет широко использоваться в различных областях умных городов, таких как управление городским движением, предотвращение и контроль общественной безопасности, мониторинг городской среды и т. д. Благодаря интеграции с другими системами управления городами достигается обмен информацией и совместная работа, что обеспечивает мощную поддержку интеллектуального управления городами.
    • Интеллектуальное поле безопасности:В дополнение к сфере общественной безопасности,GB28181 существовать Интеллектуальное поле Область применения безопасности также будет продолжать расширяться. Например, в корпоративной безопасности, общественной безопасности, домашней безопасности и других сценариях, основанных на GB28181 Усовершенствованная система видеонаблюдения может реализовать взаимосвязь и централизованное управление несколькими устройствами, повышая надежность и уровень интеллекта системы безопасности.
    • Межотраслевые приложения:GB28181 Сфера применения не только ограничится областью безопасности, но и распространится на другие отрасли. Например, в таких отраслях, как образование, здравоохранение и финансы, системы видеонаблюдения также пользуются широким спросом. ГБ28181 Он может предоставить стандартизированные решения для систем видеонаблюдения в этих отраслях и способствовать интеграции и совместному использованию видеоресурсов между различными отраслями.
  4. Промышленная экология продолжает улучшаться
    • Улучшенная совместимость устройств:вместе с GB28181 Благодаря постоянному продвижению и применению производители оборудования будут уделять больше внимания совместимости продуктов и производить больше продуктов, соответствующих GB28181 Стандартное оборудование. Это позволит улучшить взаимосвязь и совместимость оборудования разных производителей, уменьшит сложность и стоимость системной интеграции, а также будет способствовать здоровому развитию индустрии видеонаблюдения.
    • Укрепление промышленного сотрудничества:GB28181 Его разработка требует совместного взаимодействия всех звеньев отраслевой цепочки, включая производителей оборудования, разработчиков программного обеспечения, системных интеграторов, операторов и т. д. В будущем сотрудничество между этими предприятиями станет более тесным и совместно будет способствовать GB28181 Постоянные инновации и применение технологий сформировали более полную промышленную экологию.
boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.