Согласно переводу текста на русский язык:
public byte PacketLossRate { get; set; }
}
Получение номера телефона по номеру и цвету автомобиля
Данный интерфейс можно не реализовывать, так как он уже интегрирован с вышестоящей платформой Redis.
RTVS при ответе вышестоящей платформе должен использовать номер и цвет автомобиля для получения номера телефона. Для этого требуется реализовать следующий HTTP-интерфейс на шлюзе:
[Адрес настроенного HTTP-интерфейса шлюза] GetVehicleSim?PlateCode=[номер автомобиля]=&PlateColor=[цвет автомобиля]
Например: http://127.0.0.1:8888/GetVehicleSim?PlateCode=京A12345=&PlateColor=2
Поле | Описание | Пример |
---|---|---|
PlateCode | Номер автомобиля | 京A12345 |
PlateColor | Цвет автомобиля | 2 |
Ответ:
При подключении устройства необходимо отправить запрос на получение свойств аудио и видео. После получения результата его следует сохранить в Redis в следующем формате:
Категория | Значение |
---|---|
Тип данных | Hash |
Ключ | AVParameters:[номер телефона] |
Значение | JTRTAVParametersUpload |
TTL | -1 |
/// <summary>
/// Отправка свойств аудио и видео устройством
/// 0x1003
/// </summary>
[DataContract]
public class JTRTAVParametersUpload {
/// <summary>
/// Способ кодирования звука (0: сохранить, 1: G.721, 2: G.722, 3: G.723, 4: G.728, 5: G.729, ... см. JTRTAVCodeType)
/// </summary>
[DataMember]
public JTRTAVCodeType AudioCodeType { get; set; }
/// <summary>
/// Количество звуковых каналов
/// </summary>
[DataMember]
public byte AudioChannels { get; set; }
/// <summary>
/// Частота дискретизации звука (0: 8 кГц, 1: 22.05 кГц, 2: 44.1 кГц, 3: 48 кГц)
/// </summary>
[DataMember]
public JTRTAudioSampleRate AudioSamplingRate { get; set; }
/// <summary>
/// Разрядность звука (0: 8 бит, 1: 16 бит, 2: 32 бит, см. JTRTAudioSampleDigit)
/// </summary>
[DataMember]
public JTRTAudioSampleDigit AudioSamplingDigit { set; get; }
/// <summary>
/// Длина кадра звука (от 1 до 4294967295)
/// </summary>
[DataMember]
public UInt16 AudioFrameLength { get; set; }
/// <summary>
/// Поддержка вывода звука (0: нет, 1: да)
/// </summary>
[DataMember]
public byte AudioOut { get; set; }
/// <summary>
/// Метод кодирования видео (0: сохранить, 1: G.721, 2: G.722, 3: G.723, 4: G.728, 5: G.729, ... см. JTRTAVCodeType)
/// </summary>
[DataMember]
public JTRTAVCodeType VideoCodeType { get; set; }
/// <summary>
/// Максимальное количество физических каналов звука, поддерживаемое устройством
/// </summary>
[DataMember]
public byte AudioMaxChannels { get; set; }
/// <summary>
/// Максимальное количество физических каналов видео, поддерживаемое устройством
/// </summary>
[DataMember]
public byte VideoMaxChannels { get; set; }
}
127.0.0.1:6379> HGETALL AVParameters:013777883241
1) "AudioChannels"
2) "1"
3) "AudioMaxChannels"
4) "8"
5) "AudioCodeType"
6) "6"
7) "AudioFrameLength"
8) "320"
9) "AudioOut"
10) "0"
11) "AudioSamplingDigit"
12) "1"
13) "AudioSamplingRate"
14) "0"
15) "VideoCodeType"
16) "98"
17) "VideoMaxChannels"
18) "8"
``` **Текст запроса написан на языке C#.**
**Перевод текста запроса:**
/// 音视频类型 /// 0x00: звук и видео; 0x01: аудио; 0x02: видео public byte AvitemType { get; set; }
/// /// Мобильный номер. Если больше не используется HTTP-запрос для обмена SIM-интерфейсом. public string Sim { get; set; }
/// CTags можно использовать для различения вызовов, которые не проходят через сетевой шлюз API-адреса. public string CTags { get; set; } }
**Пример:**
```bash
127.0.0.1:6379> GET 皖A12341.1.1.0
"real@{AvitemType:0,Sim:\"111111111111\"}"
Правительственная платформа: запрос истории звука и видео:
Категория | Значение |
---|---|
Тип | String |
Ключ | [номерной знак].[цвет автомобиля].[логический канал].[знак звука и видео] |
Значение | back@[JTRTDownPlayBackMsgStartUp в формате JSON] |
TTL | Рекомендуется 5 минут, то есть 300 |
/// Удаленный запрос сообщения о воспроизведении записи
/// Из канала DOWN_PLAYBACK_MSG_STARTUP
/// 0x9A01
public class JTRTDownPlayBackMsgStartUp
{
/// Тип потока
public byte STREAM_TYPE { get; set; }
/// Время начала воспроизведения (UTC время в секундах)
public UInt64 PLAYBACK_STARTTIME { get; set; }
/// Время окончания воспроизведения (UTC время в секундах)
public UInt64 PLAYBACK_ENDTIME { get; set; }
/// Номер мобильного телефона. Если больше не используется HTTP для обмена SIM-интерфейсом
public string Sim { get; set; }
/// Звук и видео тип
/// 0x00: звук и видео; 0x01: аудио; 0x02: видео; 0x03: видео или звук и видео
public byte AVITEM_TYPE { get; set; }
/// CTags можно использовать для различения вызовов, которые не проходят через сетевой шлюз API-адреса
public string CTags { get; set; }
}
Пример:
127.0.0.1:6379> GET 皖A12341.1.3.0
"back@{\"AVITEM_TYPE\":0,\"STREAM_TYPE\":0,\"PLAYBACK_STARTTIME\":1611244800,\"PLAYBACK_ENDTIME\":1611248400,Sim:\"111111111111\"} "
Процесс:
Формат видеофайла, который кэшируется на сервере, — VDT. RTVS поддерживает преобразование файлов формата VDT в формат MP4 и загрузку на указанный FTP-сервер. (Логика загрузки записанного видео с устройства на FTP совпадает).
Категория | Значение |
---|---|
Тип | Publish |
Ключ | transcode_mp4_upload_ftp_start |
Значение | TranscodeUploadStart в формате JSON |
public class TranscodeUploadStart
{
/// Ключ для записи в Redis
public string redis_key;
/// Режим записи в Redis: 0.string set 1.publish
public int redis_mode;
/// Пользовательский тег
public string tag;
/// Номер телефона
public string sim;
/// Канал
public byte channel;
/// DateTimeToUNIX_long (время по Гринвичу)
public long start_time;
/// DateTimeToUNIX_long (время по Гринвичу)
public long end_time;
/// Поле имеет то же значение, что и 1078 0x1205
public ulong alam;
/// Поле имеет то же значение, что и 1078 0x1205
public byte video_audio_type;
/// Поле имеет то же значение, что и 1078 0x1205
public byte stream_type;
/// Поле имеет то же значение, что и 1078 0x1205
public byte storage_type;
/// Информация FTP
public string ftp_ip;
public int ftp_port;
public string ftp_username;
public string ftp_password;
public string ftp_remote_filename;
public string ftp_remote_filepath;
}
После завершения преобразования MP4 и загрузки на FTP RTVS записывает результат обратно в Redis указанным способом (redis_key и redis_mode из TranscodeUploadStart). Платформа должна получить окончательный результат соответствующим образом.
Категория | Значение |
---|---|
Тип | Subscribe или String определяется [TranscodeUploadStart.redis_mode] |
Ключ | [указанный redis_key из TranscodeUploadStart] |
Значение | TranscodeUploadFinish в формате JSON |
public class TranscodeUploadFinish
{
/// <summary>
/// Пользовательский тег.
/// </summary>
public string tag;
/// <summary>
/// //0 успех, -2 ошибка при запросе к базе данных, -3 ошибка при загрузке по FTP.
/// </summary>
public int error_code;
}
Конфигурация возможностей устройства
Этот раздел предназначен для решения проблемы несовместимости реализации различных производителей оборудования. Можно настроить передачу данных в зависимости от типа устройства, поддерживая при этом определённое количество каналов для передачи видео в реальном времени или по истории.
Категория | Значение |
---|---|
Тип | String |
Ключ | SIM_CONFIG_FOR_RTVS_[номер телефона] |
Значение | JSON из SimLimiteConfig |
TTL | -1 |
Класс SimLimiteConfig
/// <summary>
/// Конфигурация для каждого номера телефона устройства.
/// </summary>
public class SimLimiteConfig
{
/// <summary>
/// Максимальное количество подключений.
/// </summary>
public int m_sim_max_connection_all;
/// <summary>
/// Максимальное количество подключений для потока в реальном времени.
/// </summary>
public int m_sim_max_connection_realplay;
/// <summary>
/// Максимальное количество подключений для воспроизведения потока по истории.
/// </summary>
public int m_sim_max_connection_backplay;
/// <summary>
/// Максимальное количество подключений для двусторонней связи.
/// </summary>
public int m_sim_max_connection_talk;
/// <summary>
/// Максимальное количество подключений для прослушивания.
/// </summary>
public int m_sim_max_connection_listen;
/// <summary>
/// Максимальное количество одновременных подключений на одном канале.
/// </summary>
public int m_channel_max_connection_all;
/// <summary>
/// Максимальное количество одновременных подключений для одного канала в режиме реального времени (с учётом двух потоков: основного и дополнительного).
/// </summary>
public int m_channel_max_connection_realplay;
/// <summary>
/// Максимальное количество одновременных подключений для одного канала при воспроизведении потока по истории.
/// </summary>
public int m_channel_max_connection_backplay;
/// <summary>
/// Максимальное количество одновременных подключений для одного канала для двусторонней связи.
/// </summary>
public int m_channel_max_connection_talk;
/// <summary>
/// Максимальное количество одновременных подключений для одного канала прослушивания.
/// </summary>
public int m_channel_max_connection_listen;
/// <summary>
/// Возможность одновременного проведения двусторонней связи и прослушивания на одном устройстве.
/// </summary>
public bool m_is_talkback_listen_meanwhile;
/// <summary>
/// Возможность одновременной передачи данных в реальном времени и по истории на одном канале.
/// </summary>
public bool m_is_channel_real_back_meanwhile;
/// <summary>
/// Возможность одновременной передачи разных типов потоков на одном канале.
/// </summary>
public bool m_is_channel_real_streamtype_meanwhile;
/// <summary>
/// Является ли время абсолютным.
/// </summary>
public bool m_is_absolute_timestamp;
/// <summary>
/// Начальное время для абсолютного времени.
/// </summary>
public long m_start_absolute_timestamp;
/// <summary>
/// 1. Версия JT1078 от 2016 года, 2. Версия JT1078 от 2014 года.
/// </summary>
public int m_protocol_type;
/// <summary>
/// Указывает, является ли устройство Cheji, где одно соединение отправляет данные только по одному каналу.
/// </summary>
public static bool m_is_device_connection_single_channel = true;
/// <summary>
/// Режим обработки B-кадров: 0 — автоматический, 1 — с B-кадрами, 2 — без B-кадров.
/// </summary>
public int m_b_frame_type;
/// <summary>
/// Метод принудительного кодирования для основного видеопотока.
/// </summary>
public JTRTAVCodeType m_force_pt_video_main;
/// <summary>
/// Метод принудительного кодирования для субвидеопотока.
/// </summary>
public JTRTAVCodeType m_force_pt_video_sub;
/// <summary>
/// Метод принудительного кодирования для аудиопотока основного канала.
/// </summary>
public JTRTAVCodeType m_force_pt_audio_main;
/// <summary>
/// Метод принудительного кодирования для аудиопотока субканала.
/// </summary>
public JTRTAVCodeType m_force_pt_audio_sub;
/// <summary>
/// Последнее кодирование для видеопотока основного канала.
/// </summary>
public JTRTAVCodeType m_last_pt_video_main;
/// <summary>
/// Последнее кодирование для аудиопотока основного канала.
/// </summary>
public JTRTAVCodeType m_last_pt_audio_main;
/// <summary>
/// Длина кадра аудиопотока для основного канала.
/// </summary>
public ushort m_audio_frame_length_main;
/// <summary>
/// Наличие заголовка Haisi в аудиопотоке для основного канала (необязательно).
/// </summary>
public bool? m_is_audio_have_haisi_header_main;
/// <summary>
/// Последнее кодирование для видеопотока субканала.
/// </summary>
public JTRTAVCodeType m_last_pt_video_sub;
/// <summary>
/// Последнее кодирование для аудиопотока субканала.
/// </summary>
public JTRTAVCodeType m_last_pt_audio_sub;
/// <summary>
/// Длина кадра аудиопотока для субканала.
/// </summary>
public ushort m_audio_frame_length_sub;
/// <summary>
/// Наличие заголовка Haisi в аудиопотоке для субканала (необязательно).
/// </summary>
public bool? m_is_audio_have_haisi_header_sub;
} | ---- |
| Tag | Tag与获取GOV服务地址的Tag保持一致,建议为手机号 |013300001111|
| VehicleNO | 车牌号码 |京A12345|
| VehicleColor | 车牌颜色 | 2 |
| ChannelID | 逻辑通道号 0 表示所有 | 1 |
| AvitemType | 音视频类型 0x00:音视频;0x01:音频;0x02:视频 | 0 |
**Возврат данных:**
| Возвращаемое значение | Описание |
| --- | --- |
|-1|Ошибка параметра |
|0|Неудача |
|1|Успех |
### **Ответ удалённого управления записью видео с помощью шлюза на вышестоящую платформу (интерфейс 0x9A02)**
Адрес интерфейса:
[Адрес кластера управления]ProxyTag/[Tag]/1004/WebService/Gov0x9A02?VehicleNO=[Номер автомобиля]&VehicleColor=[Цвет автомобиля]&ControlType=[Тип управления]&FastTime=[Коэффициент]&DateTime=[Позиция перетаскивания]
Значение Tag должно совпадать со значением, полученным при получении адреса GOV-сервиса.
Пример: http://127.0.0.1:30888/ProxyTag/013300001111/1004/WebService/Gov0x9A02?VehicleNO=京A12345&VehicleColor=2&ControlType=5&FastTime=0&DateTime=1606905169
Параметры интерфейса можно посмотреть в определении 0x9A02 протокола 1078:
| Поле | Описание | Пример |
| ---- | ---- | ---- |
| Tag | Значение Tag совпадает со значением, полученным при получении адреса GOV-сервиса, рекомендуется использовать номер телефона | 013300001111 |
| VehicleNO | Номер автомобиля | 京A12345 |
| VehicleColor | Цвет автомобиля | 2 |
| ControlType | Тип воспроизведения<br> 0x00: нормальное воспроизведение, 0x01: пауза воспроизведения, 0x02: завершение воспроизведения, 0x03: быстрое воспроизведение, 0x04: ключевая рамка быстрого воспроизведения, 0x05: перетаскивание воспроизведения, 0x06: ключевая рамка воспроизведения | 5 |
| FastTime | Коэффициент быстрого или медленного воспроизведения. Применяется только для типов воспроизведения 0x3 или 0x4. <br> 0x00: недействительно, 0x01: 1 раз, 0x02: 2 раза, 0x03: 4 раза, 0x04: 8 раз, 0x05: 16 раз | 0 |
| DateTime | Позиция перетаскивания, выражается в UTC секундах. Используется только при типе воспроизведения 0x5. | 1606905169 |
Возвращаемые данные:
| Возвращаемое значение | Описание |
| --- | --- |
|-1|Ошибка параметров |
|0|Неудачное выполнение |
|1|Успешное выполнение |
### Получение токена
Адрес интерфейса:
[Адрес кластера управления]ProxyTag/[Tag]/1004/api/Server/GetToken
Получение токена, срок действия которого составляет 5 минут или после использования.
Пример: http://127.0.0.1:30888/ProxyTag/013300001111/1004/api/Server/GetToken
**Возвращаемые данные:**
| Имя поля | Тип | Описание |
| --- | --- | --- |
|token| string | |
|expires |long | Время истечения срока действия в формате UTC |
Пример:
{ "token": "c27b02e4c9c84231a73c109f594a83a2", "expires": 1699869390 }
### Получение FlvToken
Адрес интерфейса:
[Адрес кластера управления]ProxyTag/[Tag]/1004/api/Server/GetFlvToken
Аналогичен интерфейсу GetToken, но также выводит информацию о сервере.
Пример: http://127.0.0.1:30888/ProxyTag/013300001111/1004/api/Server/GetFlvToken
**Возвращаемые данные:**
| Имя поля | Тип | Описание |
| --- | --- | --- |
|token| string | |
|expires |long | Срок действия в формате UTC |
|ip |string | IP-адрес сервера |
|port |int | Порт сервера |
|domain |string | Домен сервера |
Пример:
{ "ip": "10.10.10.228", "port": 6006, "domain": "10.10.10.228", "token": "c27b02e4c9c84231a73c109f594a83a2", "expires": 1699869390 }
### Свойства аудио и видео устройства
Адрес интерфейса:
[Адрес кластера управления]ProxyTag/[Tag]/1004/api/Server/SetAVParam
Платформа 808 должна отправлять запрос на получение свойств аудио и видео при подключении устройства. После получения результата необходимо вызвать этот интерфейс.
#### Параметры
| Параметр | Расположение | Тип | Обязательный | Описание |
| --- | --- | --- | --- | --- |
|sim|query|string| Да ||
|body|body|[JTRTAVParametersUpload](#schemajtrtavparametersupload)| Да |json|
> Тело параметра
```json
{
"audioCodeType": 0,
"audioChannels": 0,
"audioSamplingRate": 0,
"audioSamplingDigit": 0,
"audioFrameLength": 0,
"audioOut": 0,
"videoCodeType": 0,
"audioMaxChannels": 0,
"videoMaxChannels": 0
}
Код состояния HTTP | Описание | Тип возвращаемых данных |
---|---|---|
200 | OK | Успех |
Пример
Ответ 200
true
Адрес интерфейса:
[Адрес кластера управления]ProxyTag/[Tag]/1004/api/Server/SetOrderAck
После того как RTVS отправит запрос на список записей на устройство, устройство ответит после получения запроса, и ответ должен быть записан с использованием этого интерфейса.
Параметр | Местоположение | Тип | Обязательно | Описание |
---|---|---|---|---|
msg_id | query | string | Да | Идентификатор команды |
body | body | VideoOrderAck | Да | json |
Тело параметра
{
"status": 0,
"videoList": {
"serialNumber": 0,
"fileCount": 0,
"fileList": [
{
"channel": 0,
"startTime": "2019-08-24 14:15:22",
"endTime": "2019-08-24 14:15:22",
"alarm": 0,
"mediaType": 0,
"streamType": 0,
"storageType": 0,
"fileSize": 0
}
]
},
"data": "string",
"errMessage": "string"
}
Код состояния HTTP | Описание | Тип возвращаемых данных |
---|---|---|
200 | OK | Успех |
Пример
Ответ 200
true
Адрес интерфейса:
[Адрес кластера управления]ProxyTag/[Tag]/1004/api/Server/SetDeviceConfig
Этот интерфейс в основном используется для решения проблем несовместимости конфигурации различных производителей устройств, таких как необходимость в головке Haisi, поддержка нескольких каналов передачи данных в реальном времени или по истории и т. д.
Параметр | Местоположение | Тип | Обязательно | Описание |
---|---|---|---|---|
sim | query | string | Да | |
body | body | SimLimiteConfig | Да | json |
Тело параметра
{
"m_sim_max_connection_all": 0,
"m_sim_max_connection_realplay": 0,
"m_sim_max_connection_backplay":
``` **0**
{
"m_sim_max_connection_talk": 0,
"m_sim_max_connection_listen": 0,
"m_channel_max_connection_all": 0,
"m_channel_max_connection_realplay": 0,
"m_channel_max_connection_backplay": 0,
"m_channel_max_connection_talk": 0,
"m_channel_max_connection_listen": 0,
"m_is_talkback_listen_meanwhile": true,
"m_is_channel_real_back_meanwhile": true,
"m_is_channel_real_streamtype_meanwhile": true,
"m_is_absolute_timestamp": true,
"m_start_absolute_timestamp": 0,
"m_protocol_type": 0,
"m_b_frame_type": 0,
"m_force_pt_video_main": 0,
"m_force_pt_video_sub": 0,
"m_force_pt_audio_main": 0,
"m_force_pt_audio_sub": 0,
"m_cache_vdt": true,
"m_last_pt_video_main": 0,
"m_last_pt_audio_main": 0,
"m_audio_frame_length_main": 0,
"m_is_audio_have_haisi_header_main": true,
"m_last_pt_video_sub": 0,
"m_last_pt_audio_sub": 0,
"m_audio_frame_length_sub": 0,
"m_is_audio_have_haisi_header_sub": true,
"m_last_talk_pt": 0,
"m_talk_frame_length": 0,
"m_is_talk_have_haisi_header": true
}
**返回数据**
|HTTP状态码 ||说明|数据类型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|boolean|
> 例
> 200 Response
```json
true
磁盘空间配置
接口地址:
[集群管理地址]ProxyTag/[Tag]/1004/api/Server/SetStorageSetting
此处按照1077功能要求配置磁盘空间使用规则,需要平台将配置写入,RTVS会按照配置的值进行磁盘空间管理。
参数名 | 位置 | 类型 | 必须 | 说明 |
---|---|---|---|---|
body | body | JTStorageSettings | yes | json |
Body 参数
{
"beyondFlag": 0,
"alarmThreshold": 0
}
HTTP状态码 | 说明 | 数据类型 | |
---|---|---|---|
200 | OK | 成功 | boolean |
例
200 Response
true
时效口令
Интерфейс адреса:
[集群管理地址]ProxyTag/[Tag]/1004/api/Server/SetAuthorizeCode1
[集群管理地址]ProxyTag/[Tag]/1004/api/Server/SetAuthorizeCode2
与政府平台交互的时效口令信息,需要平台在更新时写入
Параметр имени | Положение | Тип | Обязательно | Объяснение |
---|---|---|---|---|
authorizeCode | query | string | yes | 时效口令 |
HTTP状态码 | Объяснение | Данные типа | |
---|---|---|---|
200 | OK | Успех | boolean |
Пример
200 Response
true
政府平台音实时音视频请求
Интерфейс адреса:
[集群管理地址]ProxyTag/[Tag]/1004/api/Server/SetGovRealVideoRequest
政府平台音视频请求会先从809链路发送消息,网关返回服务器信息后政府平台才会请求视频流,RTVS收到的请求无法确认是实时还是历史,所以需要网关调用此接口将其他信息写入。
Параметр имени | Положение | Тип | Обязательно | Объяснение |
---|---|---|---|---|
body | body | GovRealVideoMsg | yes | json |
Body 参数
{
"plateCode": "string",
"plateColor": 0,
"channel": 0,
"dataType": 0,
"avitemType": 0,
"sim": "string",
"cTags": "string"
}
HTTP状态码 | Объяснение | Данные типа | |
---|---|---|---|
200 | OK | Успех | boolean |
Пример
200 Response
true
政府平台音历史音视频请求
Интерфейс адреса:
[集群管理地址]ProxyTag/[Tag]/1004/api/Server/SetGovRealVideoRequest
政府平台音视频请求会先从809链路发送消息,网关返回服务器信息后政府平台才会请求视频流,RTVS收到的请求无法确认是实时还是历史,所以需要网关调用此接口将其他信息写入。
Параметр имени | Положение | Тип | Обязательно | Объяснение |
---|---|---|---|---|
body | body | GovPlayBackMsg | yes | json |
Body 参数
{
"plateCode": "string",
"plateColor": 0,
"channel": 0,
"dataType": 0,
"streamType": 0,
"playbackStartTime": 0,
"playbackEndTime": 0,
"sim": "string",
"avitemType": 0,
"cTags": "string"
}
HTTP状态码 | Объяснение | Данные типа | |
---|---|---|---|
200 | OK | Успех | boolean |
Пример
200 Response
true
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )