| | |
| | | package com.genersoft.iot.vmp.gb28181.transmit.request.impl;
|
| | |
|
| | | import javax.sdp.*;
|
| | | import javax.sip.InvalidArgumentException;
|
| | | import javax.sip.RequestEvent;
|
| | | import javax.sip.SipException;
|
| | | import javax.sip.SipFactory;
|
| | | import javax.sip.*;
|
| | | import javax.sip.address.Address;
|
| | | import javax.sip.address.SipURI;
|
| | | import javax.sip.header.*;
|
| | | import javax.sip.message.Request;
|
| | | import javax.sip.message.Response;
|
| | |
|
| | | import com.genersoft.iot.vmp.common.StreamInfo;
|
| | | import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
|
| | | import com.genersoft.iot.vmp.gb28181.bean.*;
|
| | | import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
|
| | | import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
|
| | | import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor;
|
| | | import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
|
| | | import com.genersoft.iot.vmp.media.zlm.dto.IMediaServerItem;
|
| | | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
|
| | | import com.genersoft.iot.vmp.service.IMediaServerService;
|
| | | import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
|
| | |
| | | // 查询平台下是否有该通道
|
| | | DeviceChannel channel = storager.queryChannelInParentPlatform(requesterId, channelId);
|
| | | GbStream gbStream = storager.queryStreamInParentPlatform(requesterId, channelId);
|
| | | IMediaServerItem mediaServerItem = null;
|
| | | MediaServerItem mediaServerItem = null;
|
| | | // 不是通道可能是直播流
|
| | | if (channel != null && gbStream == null ) {
|
| | | if (channel.getStatus() == 0) {
|
| | |
| | | String mediaServerId = gbStream.getMediaServerId();
|
| | | mediaServerItem = mediaServerService.getOne(mediaServerId);
|
| | | if (mediaServerItem == null) {
|
| | | logger.info("[ app={}, stream={} ]zlm找不到,返回410",gbStream.getApp(), gbStream.getStream());
|
| | | logger.info("[ app={}, stream={} ]找不到zlm {},返回410",gbStream.getApp(), gbStream.getStream(), mediaServerId);
|
| | | responseAck(evt, Response.GONE, "media server not found");
|
| | | return;
|
| | | }
|
| | |
| | |
|
| | | StringBuffer content = new StringBuffer(200);
|
| | | content.append("v=0\r\n");
|
| | | content.append("o="+"00000"+" 0 0 IN IP4 "+mediaServerItemInUSe.getSdpIp()+"\r\n");
|
| | | content.append("o="+ channelId +" 0 0 IN IP4 "+mediaServerItemInUSe.getSdpIp()+"\r\n");
|
| | | content.append("s=Play\r\n");
|
| | | content.append("c=IN IP4 "+mediaServerItemInUSe.getSdpIp()+"\r\n");
|
| | | content.append("t=0 0\r\n");
|
| | |
| | | // 未知错误。直接转发设备点播的错误
|
| | | Response response = null;
|
| | | try {
|
| | | response = getMessageFactory().createResponse(event.getResponse().getStatusCode(), evt.getRequest());
|
| | | getServerTransaction(evt).sendResponse(response);
|
| | | response = getMessageFactory().createResponse(event.statusCode, evt.getRequest());
|
| | | ServerTransaction serverTransaction = getServerTransaction(evt);
|
| | | serverTransaction.sendResponse(response);
|
| | | if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
|
| | | } catch (ParseException | SipException | InvalidArgumentException e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | |
| | | // TODO 添加对tcp的支持
|
| | | StringBuffer content = new StringBuffer(200);
|
| | | content.append("v=0\r\n");
|
| | | content.append("o="+"00000"+" 0 0 IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
|
| | | content.append("o="+ channelId +" 0 0 IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
|
| | | content.append("s=Play\r\n");
|
| | | content.append("c=IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
|
| | | content.append("t=0 0\r\n");
|
| | |
| | | */
|
| | | private void responseAck(RequestEvent evt, int statusCode) throws SipException, InvalidArgumentException, ParseException {
|
| | | Response response = getMessageFactory().createResponse(statusCode, evt.getRequest());
|
| | | getServerTransaction(evt).sendResponse(response);
|
| | | ServerTransaction serverTransaction = getServerTransaction(evt);
|
| | | serverTransaction.sendResponse(response);
|
| | | if (statusCode >= 200) {
|
| | | if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
|
| | | }
|
| | | }
|
| | |
|
| | | private void responseAck(RequestEvent evt, int statusCode, String msg) throws SipException, InvalidArgumentException, ParseException {
|
| | | Response response = getMessageFactory().createResponse(statusCode, evt.getRequest());
|
| | | response.setReasonPhrase(msg);
|
| | | getServerTransaction(evt).sendResponse(response);
|
| | | ServerTransaction serverTransaction = getServerTransaction(evt);
|
| | | serverTransaction.sendResponse(response);
|
| | | if (statusCode >= 200) {
|
| | | if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|