648540858 / wvp-GB28181-pro

WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联,支持rtsp/rtmp等视频流转发到国标平台,支持rtsp/rtmp等推流转发到国标平台。
https://doc.wvp-pro.cn
MIT License
4.8k stars 1.42k forks source link

BUG:【TCP主动连接对方】获取IP地址不对 #1543

Closed tsingphone closed 1 month ago

tsingphone commented 1 month ago

环境信息:

问题:使用TCP主动模式播放出错,TCP主动连接对方的IP不是一个公网IP

这段代码:SIPCommander.java / playStreamCmd

` Request request = headerProvider.createInviteRequest(device, channel.getChannelId(), content.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, ssrcInfo.getSsrc(),sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));

    logger.info("-------request-------------");
    logger.info(request.toString());
    sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, (e -> {
        streamSession.remove(device.getDeviceId(), channel.getChannelId(), ssrcInfo.getStream());
        mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
        errorEvent.response(e);
    }), e -> {
        ResponseEvent responseEvent = (ResponseEvent) e.event;
        SIPResponse response = (SIPResponse) responseEvent.getResponse();
        String callId = response.getCallIdHeader().getCallId();
        streamSession.put(device.getDeviceId(), channel.getChannelId(), callId, stream, ssrcInfo.getSsrc(), mediaServerItem.getId(), response,
                InviteSessionType.PLAY);
        logger.info("-------response-------------");
        logger.info(((ResponseEvent) e.event).getResponse().toString());
        okEvent.response(e);
    });`

输出部分是我加上去的, (1)在request部分正确,IP是公网IP (2)但是在response部分,返回的IP是一个奇怪的内网地址 192.168.225.100. 摄像头我换移动和电信的4G卡都是这个地址。

tsingphone commented 1 month ago

image

648540858 commented 1 month ago

这个是SIP协议栈根据设备连接使用的IP获取的,你服务有公网IP,但是如果不是直接落在网卡的话,设备或者服务并不会使用你的IP发起请求。