WVP GB28181服务器取视频流

看最近的访问搜索关键字,大部分都是通过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

请先登录后发表评论
  • 最新评论
  • 总共0条评论