完成向上级联->点播--002
This commit is contained in:
@@ -15,6 +15,7 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.genersoft.iot.vmp.gb28181.transmit.response.impl.*;
|
||||
import com.genersoft.iot.vmp.gb28181.transmit.response.impl.*;
|
||||
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
|
||||
import com.genersoft.iot.vmp.vmanager.service.IPlayService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -103,6 +104,9 @@ public class SIPProcessorFactory {
|
||||
@Autowired
|
||||
private OtherResponseProcessor otherResponseProcessor;
|
||||
|
||||
@Autowired
|
||||
private IPlayService playService;
|
||||
|
||||
|
||||
// 注:这里使用注解会导致循环依赖注入,暂用springBean
|
||||
private SipProvider tcpSipProvider;
|
||||
@@ -120,7 +124,9 @@ public class SIPProcessorFactory {
|
||||
processor.setTcpSipProvider(getTcpSipProvider());
|
||||
processor.setUdpSipProvider(getUdpSipProvider());
|
||||
|
||||
processor.setCmder(cmder);
|
||||
processor.setCmderFroPlatform(cmderFroPlatform);
|
||||
processor.setPlayService(playService);
|
||||
processor.setStorager(storager);
|
||||
return processor;
|
||||
} else if (Request.REGISTER.equals(method)) {
|
||||
|
||||
@@ -10,19 +10,26 @@ import javax.sip.header.SubjectHeader;
|
||||
import javax.sip.message.Request;
|
||||
import javax.sip.message.Response;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.Device;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
|
||||
import com.genersoft.iot.vmp.gb28181.sdp.Codec;
|
||||
import com.genersoft.iot.vmp.gb28181.sdp.MediaDescription;
|
||||
import com.genersoft.iot.vmp.gb28181.sdp.SdpParser;
|
||||
import com.genersoft.iot.vmp.gb28181.sdp.SessionDescription;
|
||||
import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
|
||||
import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
|
||||
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.storager.IVideoManagerStorager;
|
||||
import com.genersoft.iot.vmp.vmanager.play.bean.PlayResult;
|
||||
import com.genersoft.iot.vmp.vmanager.service.IPlayService;
|
||||
import gov.nist.javax.sip.address.AddressImpl;
|
||||
import gov.nist.javax.sip.address.SipUri;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.ParseException;
|
||||
@@ -41,6 +48,10 @@ public class InviteRequestProcessor extends SIPRequestAbstractProcessor {
|
||||
|
||||
private IVideoManagerStorager storager;
|
||||
|
||||
private SIPCommander cmder;
|
||||
|
||||
private IPlayService playService;
|
||||
|
||||
/**
|
||||
* 处理invite请求
|
||||
*
|
||||
@@ -119,7 +130,30 @@ public class InviteRequestProcessor extends SIPRequestAbstractProcessor {
|
||||
|
||||
|
||||
String ssrc = sdp.getSsrc();
|
||||
|
||||
Device device = storager.queryVideoDeviceByPlatformIdAndChannelId(platformId, channelId);
|
||||
if (device == null) {
|
||||
logger.warn("点播平台{}的通道{}时未找到设备信息", platformId, channel);
|
||||
response500Ack(evt);
|
||||
return;
|
||||
}
|
||||
|
||||
// 通知下级推流,
|
||||
PlayResult playResult = playService.play(device.getDeviceId(), channelId, (response)->{
|
||||
// 收到推流, 回复200OK
|
||||
|
||||
},(event -> {
|
||||
// 未知错误。直接转发设备点播的错误
|
||||
Response response = null;
|
||||
try {
|
||||
response = getMessageFactory().createResponse(event.getResponse().getStatusCode(), evt.getRequest());
|
||||
getServerTransaction(evt).sendResponse(response);
|
||||
|
||||
} catch (ParseException | SipException | InvalidArgumentException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}));
|
||||
playResult.getResult();
|
||||
// 查找合适的端口推流,
|
||||
// 发送 200ok
|
||||
// 收到ack后调用推流接口
|
||||
@@ -149,14 +183,16 @@ public class InviteRequestProcessor extends SIPRequestAbstractProcessor {
|
||||
}
|
||||
|
||||
/***
|
||||
* 回复404
|
||||
* 回复200 OK
|
||||
* @param evt
|
||||
* @throws SipException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws ParseException
|
||||
*/
|
||||
private void response404Ack(RequestEvent evt) throws SipException, InvalidArgumentException, ParseException {
|
||||
Response response = getMessageFactory().createResponse(Response.NOT_FOUND, evt.getRequest());
|
||||
private void responseAck(RequestEvent evt, String sdp) throws SipException, InvalidArgumentException, ParseException {
|
||||
Response response = getMessageFactory().createResponse(Response.OK, evt.getRequest());
|
||||
ContentTypeHeader contentTypeHeader = getHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
|
||||
response.setContent(sdp, contentTypeHeader);
|
||||
getServerTransaction(evt).sendResponse(response);
|
||||
}
|
||||
|
||||
@@ -172,6 +208,18 @@ public class InviteRequestProcessor extends SIPRequestAbstractProcessor {
|
||||
getServerTransaction(evt).sendResponse(response);
|
||||
}
|
||||
|
||||
/***
|
||||
* 回复404
|
||||
* @param evt
|
||||
* @throws SipException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws ParseException
|
||||
*/
|
||||
private void response404Ack(RequestEvent evt) throws SipException, InvalidArgumentException, ParseException {
|
||||
Response response = getMessageFactory().createResponse(Response.NOT_FOUND, evt.getRequest());
|
||||
getServerTransaction(evt).sendResponse(response);
|
||||
}
|
||||
|
||||
/***
|
||||
* 回复488
|
||||
* @param evt
|
||||
@@ -185,16 +233,14 @@ public class InviteRequestProcessor extends SIPRequestAbstractProcessor {
|
||||
}
|
||||
|
||||
/***
|
||||
* 回复200 OK
|
||||
* 回复500
|
||||
* @param evt
|
||||
* @throws SipException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws ParseException
|
||||
*/
|
||||
private void responseAck(RequestEvent evt, String sdp) throws SipException, InvalidArgumentException, ParseException {
|
||||
Response response = getMessageFactory().createResponse(Response.OK, evt.getRequest());
|
||||
ContentTypeHeader contentTypeHeader = getHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
|
||||
response.setContent(sdp, contentTypeHeader);
|
||||
private void response500Ack(RequestEvent evt) throws SipException, InvalidArgumentException, ParseException {
|
||||
Response response = getMessageFactory().createResponse(Response.SERVER_INTERNAL_ERROR, evt.getRequest());
|
||||
getServerTransaction(evt).sendResponse(response);
|
||||
}
|
||||
|
||||
@@ -207,6 +253,8 @@ public class InviteRequestProcessor extends SIPRequestAbstractProcessor {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public SIPCommanderFroPlatform getCmderFroPlatform() {
|
||||
return cmderFroPlatform;
|
||||
}
|
||||
@@ -222,4 +270,20 @@ public class InviteRequestProcessor extends SIPRequestAbstractProcessor {
|
||||
public void setStorager(IVideoManagerStorager storager) {
|
||||
this.storager = storager;
|
||||
}
|
||||
|
||||
public SIPCommander getCmder() {
|
||||
return cmder;
|
||||
}
|
||||
|
||||
public void setCmder(SIPCommander cmder) {
|
||||
this.cmder = cmder;
|
||||
}
|
||||
|
||||
public IPlayService getPlayService() {
|
||||
return playService;
|
||||
}
|
||||
|
||||
public void setPlayService(IPlayService playService) {
|
||||
this.playService = playService;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user