Протокол GB/T28181 — национальный стандарт соединения оборудования систем видеонаблюдения. Он определяет, как оборудование видеонаблюдения регистрируется на платформе, как осуществляется сигнальное взаимодействие и передача медиапотоков. При реализации процесса регистрации и процесса аутентификации протокола GB/T28181 обычно необходимо использовать языки программирования, такие как Java, и библиотеки сетевых коммуникаций (такие как Netty, Tomcat и т. д.) для разработки соответствующего сервера и клиента. приложения.
Ниже приведена упрощенная идея реализации процесса регистрации и сертификации GB/T28181, а также способы использования Java для примерной реализации этих процессов:
Обнаружение устройств:Платформы обычно транслируютSIP ОПЦИИ отправляют сообщения в сеть для обнаружения устройств. Однако в реальном процессе регистрации этот шаг может не потребоваться, поскольку устройство может активно инициировать запрос на регистрацию на платформе.
Отправить запрос на регистрацию:От устройства к платформе Отправить SIP Запрос REGISTER Запрос содержит параметры устройства, связанные с GB/T28181, такие как идентификатор устройства, пароль, IP-адрес, номер порта и т. д.
Платформа обрабатывает запросы на регистрацию:После того, как платформа получит запрос на регистрацию,Проверьте информацию в запросе (например, пароль),и проверьте, зарегистрировано ли устройство. Если проверка пройдена и устройство не зарегистрировано,затем примите запрос на регистрацию,И на устройство Отправить SIP 200 ОК, ответ.
Устройство получает ответ о регистрации:устройство получаетSIP 200 После ответа ОК регистрация подтверждается как успешная.
В GB/T28181 аутентификация обычно тесно интегрирована с процессом регистрации, поскольку при регистрации устройству необходимо предоставить аутентификационную информацию, например пароли. Но если потребуются дополнительные шаги аутентификации (например, аутентификация во время связи), этого можно добиться следующими способами:
Аутентификация на основе SIP:существоватьSIPпротоколсередина,Вы можете использовать дайджест-аутентификацию HTTP (Digest Аутентификация) и другие методы аутентификации. Когда устройство отправляет запрос, ему необходимо включить информацию аутентификации (например, имя пользователя и сводку пароля) в заголовок запроса. Платформа определяет, принимать ли запрос после проверки этой информации.
Зашифрованная связь на основе TLS/SSL.:УчреждатьTLS/SSLЗашифрованное соединение,Обеспечьте безопасность данных в процессе общения. Хотя это не прямой процесс сертификации.,Но шифрование связи может повысить безопасность системы.,Предотвращение атак «человек посередине» и т. д.
Определить логику обработки сообщений SIP:использоватьJavaизSIPБиблиотека(нравитьсяMobicents JAIN SIP, JSIP и т. д.) для анализа и построения SIP-сообщений. Эти библиотеки предоставляют низкоуровневые функции, необходимые для работы с протоколом SIP.
Реализация логики регистрации и аутентификации:существоватьJavaСерверное приложениесередина,Напишите логику для обработкиSIP ЗАРЕГИСТРИРОВАТЬ запрос, проверить информацию аутентификации в запросе и отправить SIP 200 ОК, ответ.Также при необходимости реализуйте дополнительную логику аутентификации.
сетевая связь:использоватьJavaизсетевая библиотеки связи (такие как Netty, программирование сокетов и т. д.) для отправки и получения SIP-сообщений. Эти библиотеки предоставляют TCP/UDP и т. д. связь требовала низкоуровневой функциональности.
Многопоточная или асинхронная обработка:потому чтоSIPпротоколосновано на событияхиз,Поэтому необходимоиспользовать Многопоточная или асинхронная механизм обработки для одновременной обработки запросов регистрации и аутентификации для нескольких устройств.
Логирование и обработка исключений:Детали реализацииизрегистрацияи Механизм обработки исключений,Чтобы при возникновении проблемы ее можно было быстро обнаружить и решить.
Обратите внимание, что из-за сложности и разнообразия протокола GB/T28181 приведенные выше идеи реализации представляют собой лишь приблизительную основу. При фактической разработке необходимо провести детальную реализацию и тестирование в соответствии с конкретными версиями протокола, моделями устройств и требованиями платформы.
В практических приложениях вам необходимо выбрать подходящую SIP-библиотеку и написать код согласно документации библиотеки. Кроме того, GB/T28181 также содержит множество специальных полей и расширений, связанных с видеонаблюдением, которые не будут подробно рассмотрены в следующих примерах.
// Предположим, мы используем SIP-библиотеку под названием SipStack, которая предоставляет такие интерфейсы, как SipProvider и SipListener.
// Реализация SipListener для обработки событий SIP.
public class Gb28181SipListener implements SipListener {
@Override
public void processRequest(RequestEvent requestEvent) {
Request request = requestEvent.getRequest();
// Проверьте, является ли запрос ЗАРЕГИСТРИРОВАННЫМ
if (request.getMethod().equals(Request.REGISTER)) {
// Обрабатывать запросы на регистрацию
processRegister(request);
}
// ... Обработка других типов SIP-запросов
}
private void processRegister(Request request) {
// Анализируйте информацию аутентификации (например, имя пользователя, пароль и т. д.) в запросе REGISTER.
// Предположим, у нас есть способ проанализировать эту информацию.
String username = parseUsernameFromRequest(request);
String password = parsePasswordFromRequest(request);
// Проверьте имя пользователя и пароль (это всего лишь пример, на практике может потребоваться запрос к базе данных и т. д.)
if (isValidUser(username, password)) {
// Создание и отправка SIP 200 ОК, ответ
Response response = messageFactory.createResponse(200, request);
// Сюда можно добавить дополнительные заголовки ответа, такие как информация аутентификации, идентификатор устройства и т. д.
// serverTransaction.sendResponse(response); // ПРИМЕЧАНИЕ. Эта строка кода является псевдокодом, в зависимости от вашей библиотеки SIP.
// В реальных приложениях вам также может потребоваться сохранить информацию об устройстве в базе данных.
saveDeviceInfo(username, /* Другая информация об устройстве */);
System.out.println("Регистрация устройства прошла успешно:" + username);
} else {
// Отправить SIP 401 Несанкционированный ответ
// ...
}
}
// Гипотетический метод анализа имени пользователя и пароля из SIP-запроса
private String parseUsernameFromRequest(Request request) {
// ...
return "someUsername";
}
private String parsePasswordFromRequest(Request request) {
// ... Возможно через заголовок авторизации или непосредственно в теле запроса.
return "somePassword";
}
// Гипотетический метод аутентификации пользователя
private boolean isValidUser(String username, String password) {
// ... Внедрить специальную логику проверки
return true; // Только например
}
// Гипотетический метод сохранения информации об устройстве
private void saveDeviceInfo(String username, /* Другая информация об устройстве */) {
// ... Сохраните информацию об устройстве в базе данных или файле конфигурации.
}
// Другие методы SipListener...
}
// Пример кода (псевдокод) для инициализации стека SIP и прослушивателя
public class Gb28181Server {
public static void main(String[] args) {
SipFactory sipFactory = SipFactory.getInstance();
sipFactory.setPathName("gov.nist");
Properties properties = new Properties();
// Установите свойства стека SIP-протоколов.
// ...
SipStack sipStack = sipFactory.createSipStack(properties);
ListeningPoint listeningPoint = sipStack.createListeningPoint("0.0.0.0", 5060, "udp");
SipProvider sipProvider = sipStack.createSipProvider(listeningPoint);
Gb28181SipListener sipListener = new Gb28181SipListener();
sipProvider.addSipListener(sipListener);
// ... Другой код инициализации, например обработка тайм-аута SIP, закрытие перехватчиков и т. д.
// Запустите сервер до получения сигнала о завершении работы.
// ...
}
}
Важное примечание:
1. Приведенный выше код представляет собой сильно упрощенный пример и используется только для иллюстрации того, как обрабатывать запросы SIP REGISTER. Он не содержит всех деталей протокола GB/T28181, таких как идентификатор устройства, информация о местоположении, синхронизация времени и т. д.
2. В реальных проектах вам необходимо выбрать подходящую библиотеку SIP (например, JAIN SIP, Mobicents SIP сервлеты и т. д.) и написать код в соответствии с документацией библиотеки и API.
3.SipFactory
、SipStack
、ListeningPoint
、SipProvider
иRequestEvent
Это все предположенияиз,Необходимо реализовать самостоятельно