Глядя на ключевые слова для недавних посещений, большинство из них были найдены по ключевому слову WVP-GB28181. Оказалось, что в середине настройки я занимался другими делами. Год назад я воспользовался свободным временем и снова взялся за него. и обнаружил, что все прошло относительно гладко. Отрегулируйте поток и запишите процесс.
Клиент pjsip зарегистрирован в файле конфигурации default.config sip-сервера wvp.
# This is a comment in the config file.
#--id sip:44010200491110000001@47.105.47.160:5061;transport=tcp
#--registrar sip:47.105.47.160:5061;transport=tcp
#--realm 3402000000
--id sip:41010500002000000002@4101050000
--registrar sip:4101050000
--proxy=sip:192.168.16.213:8116
--realm 4101050000
--username 41010500002000000002
--password 12345678
--local-port=5066
#--auto-loop
--clock-rate 16000
--ptime 20
#--null-audio
#--ip-addr=192.168.16.99
#log-config
--log-level=6
#--log-file=log/siplog
--auto-answer 200
#video
--video
--vcapture-dev 0
#webrtc echo
--ec-opt=3
#--stereo
--ec-tail=75
#register
--reg-timeout=120
Файл конфигурации WVP неправильный, из-за чего поток всегда сообщает: «Доступный zlm не найден». Это происходит главным образом из-за того, что конфигурация идентификатора zlm в файле конфигурации application.yml неверна.
media:
#media-server-Id
id: f5pIoX4tqRzE7TI0
media-server-Id — это mediaServerId в файле config.ini.
[general]
addMuteAudio=1
check_nvidia_dev=1
continue_push_ms=15000
enableVhost=0
enable_audio=1
enable_ffmpeg_log=0
flowThreshold=1024
fmp4_demand=0
hls_demand=0
maxStreamWaitMS=15000
mediaServerId=f5pIoX4tqRzE7TI0
Получение потока сообщает об ошибке 500:
2024-02-06 17:17:29.103 ERROR --- GlobalExceptionHandler : [鍏ㄥ眬riaoeffectотец] Адзе?
java.lang.NullPointerException: null
at com.genersoft.iot.vmp.service.impl.PlayServiceImpl.play(PlayServiceImpl.java:119)
at com.genersoft.iot.vmp.vmanager.gb28181.play.PlayController.play(PlayController.java:124)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Измените строку PlayServiceImpl.java:119 и перекомпилируйте:
До модификации:
if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE") && !mediaServerItem.isRtpEnable()) {
logger.warn("[По требованию] Сбор трафика с одного порта не поддерживает сбор активного трафика TCP. deviceId: {},channelId:{}", deviceId, channelId);
throw new ControllerException(ErrorCode.ERROR100.getCode(), "Сбор трафика с одного порта не поддерживает сбор активного трафика TCP.");
}
После модификации:
if (device != null && device.getStreamMode() != null && device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE") && !mediaServerItem.isRtpEnable()) {
logger.warn("[По требованию] Сбор трафика с одного порта не поддерживает сбор активного трафика TCP. deviceId: {},channelId:{}", deviceId, channelId);
throw new ControllerException(ErrorCode.ERROR100.getCode(), "Сбор трафика с одного порта не поддерживает сбор активного трафика TCP.");
}
Наконец-то я увидел видео. Далее продолжаем анализировать исходный код.
Журналы, просмотренные из ZLM: WVP подал заявку на порт rtp из zlm, а затем перенаправил порт на камеру национального стандарта. Затем zlm получил push-поток, уведомил WVP, и отображение интерфейса обновилось.
POST /index/api/getRtpInfo
# header:
Accept-Encoding : gzip
Connection : Keep-Alive
Content-Length : 95
Content-Type : application/x-www-form-urlencoded
Host : 192.168.16.83:8080
User-Agent : okhttp/4.10.0
# content:
secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&stream_id=41010500002000000002_41010500002000000002
# response:
{
"code" : 0,
"exist" : false
}
2024-02-06 17:31:50.264 I [MediaServer] [665-event poller 0] Rtsp.cpp:440 getPortPair | got port from pool:50002-50003
2024-02-06 17:31:50.264 D [MediaServer] [665-event poller 0] WebApi.cpp:250 http api debug |
# request:
POST /index/api/openRtpServer
# header:
Accept-Encoding : gzip
Connection : Keep-Alive
Content-Length : 127
Content-Type : application/x-www-form-urlencoded
Host : 192.168.16.83:8080
User-Agent : okhttp/4.10.0
# content:
secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&re_use_port=0&stream_id=41010500002000000002_41010500002000000002&port=0&tcp_mode=0
# response:
{
"code" : 0,
"port" : 50002
}
2024-02-06 17:31:50.440 D [MediaServer] [665-event poller 0] WebApi.cpp:250 http api debug |
# request:
POST /index/api/getMediaList
# header:
Accept-Encoding : gzip
Connection : Keep-Alive
Content-Length : 123
Content-Type : application/x-www-form-urlencoded
Host : 192.168.16.83:8080
User-Agent : okhttp/4.10.0
# content:
secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&app=rtp&vhost=__defaultVhost__&stream=41010500002000000002_41010500002000000002
# response:
{
"code" : 0
}
2024-02-06 17:31:52.456 D [MediaServer] [665-event poller 0] WebHook.cpp:201 operator() | hook http://192.168.16.213:8089/index/hook/on_publish 2020ms,success:{
"app" : "rtp",
"id" : "41010500002000000002_41010500002000000002",
"ip" : "192.168.16.213",
"mediaServerId" : "f5pIoX4tqRzE7TI0",
"originType" : 3,
"originTypeStr" : "rtp_push",
"params" : "",
"port" : 4002,
"schema" : "rtp",
"stream" : "41010500002000000002_41010500002000000002",
"vhost" : "__defaultVhost__"
}
2024-02-06 17:31:44.686 W [MediaServer] [665-event poller 0] WebHook.cpp:188 operator() | hook http://127.0.0.1:18081/api/record/on_record_mp4 14ms,failed[network err]:3(connection refused):{
"app" : "rtp",
"file_name" : "17-30-11-0.mp4",
"file_path" : "/home/OV500/LB/zlm/bin/www/record/rtp/41010500002000000002_41010500002000000002/2024-02-06/17-30-11-0.mp4",
"file_size" : 679851,
"folder" : "/home/OV500/LB/zlm/bin/www/record/rtp/41010500002000000002_41010500002000000002/",
"mediaServerId" : "f5pIoX4tqRzE7TI0",
"start_time" : 1707211811,
"stream" : "41010500002000000002_41010500002000000002",
"time_len" : 98.599998474121094,
"url" : "record/rtp/41010500002000000002_41010500002000000002/2024-02-06/17-30-11-0.mp4",
"vhost" : "__defaultVhost__"
}
Закройте порт rtp в конце:
2024-02-06 17:32:19.326 D [MediaServer] [665-event poller 0] WebApi.cpp:250 http api debug |
# request:
POST /index/api/closeRtpServer
# header:
Accept-Encoding : gzip
Connection : Keep-Alive
Content-Length : 95
Content-Type : application/x-www-form-urlencoded
Host : 192.168.16.83:8080
User-Agent : okhttp/4.10.0
# content:
secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&stream_id=41010500002000000002_41010500002000000002
# response:
{
"code" : 0,
"hit" : 1
}
Эта статья является оригинальной статьей Guiniu Notes. Для перепечатки обращаться ко мне не обязательно, но, пожалуйста, укажите, что она взята из Guiniu Notes, it3q.com.