看最近的访问搜索关键字,大部分都是通过WVP-GB28181关键字搜索过来的,原来调到一半,就去干别的事情了,趁着年前比较空闲,重新捡起来,发现还比较顺利的调通了取流,记录下过程
pjsip客户端注册到wvp sip服务器的default.config配置文件。
# 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”,主要是application.yml配置文件中zlm的id配置不正确。
media:
#media-server-Id
id: f5pIoX4tqRzE7TI0
media-server-Id是config.ini文件中的mediaServerId
[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 : [鍏ㄥ眬寮傚父]锛?
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向zlm申请了一个rtp的端口,然后将这个端口转发给了国标摄像头,然后zlm接收到推流后,通知到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
}
本文为呱牛笔记原创文章,转载无需和我联系,但请注明来自呱牛笔记 ,it3q.com