diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/Codec.java b/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/Codec.java deleted file mode 100755 index 4ab6f8f8..00000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/Codec.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - This file is part of Peers, a java SIP softphone. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - Copyright 2010 Yohann Martineau -*/ - -package com.genersoft.iot.vmp.gb28181.sdp; - -public class Codec { - - private int payloadType; - private String name; - - public int getPayloadType() { - return payloadType; - } - - public void setPayloadType(int payloadType) { - this.payloadType = payloadType; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof Codec)) { - return false; - } - Codec codec = (Codec)obj; - if (codec.getName() == null) { - return name == null; - } - return codec.getName().equalsIgnoreCase(name); - } - - @Override - public String toString() { - StringBuffer buf = new StringBuffer(); - buf.append(RFC4566_28181.TYPE_ATTRIBUTE).append(RFC4566_28181.SEPARATOR); - buf.append(RFC4566_28181.ATTR_RTPMAP).append(RFC4566_28181.ATTR_SEPARATOR); - buf.append(payloadType).append(" ").append(name).append("/"); - buf.append(9000).append("\r\n"); - return buf.toString(); - } - -} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/MediaDescription.java b/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/MediaDescription.java deleted file mode 100755 index 50f361f1..00000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/MediaDescription.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - This file is part of Peers, a java SIP softphone. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - Copyright 2007, 2008, 2009, 2010 Yohann Martineau - */ - -package com.genersoft.iot.vmp.gb28181.sdp; - -import java.net.Inet4Address; -import java.net.Inet6Address; -import java.net.InetAddress; -import java.util.Hashtable; -import java.util.List; - -public class MediaDescription { - - private String type; - private InetAddress ipAddress; - // attributes not codec-related - private Hashtable attributes; - private int port; - private List codecs; - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public Hashtable getAttributes() { - return attributes; - } - - public void setAttributes(Hashtable attributes) { - this.attributes = attributes; - } - - public InetAddress getIpAddress() { - return ipAddress; - } - - public void setIpAddress(InetAddress ipAddress) { - this.ipAddress = ipAddress; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - } - - public List getCodecs() { - return codecs; - } - - public void setCodecs(List codecs) { - this.codecs = codecs; - } - - @Override - public String toString() { - StringBuffer buf = new StringBuffer(); - buf.append(RFC4566_28181.TYPE_MEDIA).append(RFC4566_28181.SEPARATOR); - buf.append(type).append(" ").append(port); - buf.append(" RTP/AVP"); - if (codecs != null) { - for (Codec codec: codecs) { - buf.append(" "); - buf.append(codec.getPayloadType()); - } - buf.append("\r\n"); - } - if (ipAddress != null) { - int ipVersion; - if (ipAddress instanceof Inet4Address) { - ipVersion = 4; - } else if (ipAddress instanceof Inet6Address) { - ipVersion = 6; - } else { - throw new RuntimeException("unknown ip version: " + ipAddress); - } - buf.append(RFC4566_28181.TYPE_CONNECTION).append(RFC4566_28181.SEPARATOR); - buf.append("IN IP").append(ipVersion).append(" "); - buf.append(ipAddress.getHostAddress()).append("\r\n"); - } - if (codecs != null) { - for (Codec codec: codecs) { - buf.append(codec.toString()); - } - } - - if (attributes != null) { - for (String attributeName: attributes.keySet()) { - buf.append(RFC4566_28181.TYPE_ATTRIBUTE).append(RFC4566_28181.SEPARATOR); - buf.append(attributeName); - String attributeValue = attributes.get(attributeName); - if (attributeValue != null && !"".equals(attributeValue.trim())) { - buf.append(":").append(attributeValue); - } - buf.append("\r\n"); - } - } - return buf.toString(); - } - -} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/RFC4566_28181.java b/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/RFC4566_28181.java deleted file mode 100755 index dd6019be..00000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/RFC4566_28181.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - This file is part of Peers, a java SIP softphone. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - Copyright 2007, 2008, 2009, 2010 Yohann Martineau -*/ - -package com.genersoft.iot.vmp.gb28181.sdp; - -public class RFC4566_28181 { - - public static final char VERSION = '0'; - - public static final char TYPE_VERSION = 'v'; - public static final char TYPE_ORIGIN = 'o'; - public static final char TYPE_SUBJECT = 's'; - public static final char TYPE_INFO = 'i'; - public static final char TYPE_URI = 'u'; - public static final char TYPE_EMAIL = 'e'; - public static final char TYPE_PHONE = 'p'; - public static final char TYPE_CONNECTION = 'c'; - public static final char TYPE_BANDWITH = 'b'; - public static final char TYPE_TIME = 't'; - public static final char TYPE_REPEAT = 'r'; - public static final char TYPE_ZONE = 'z'; - public static final char TYPE_KEY = 'k'; - public static final char TYPE_ATTRIBUTE = 'a'; - public static final char TYPE_MEDIA = 'm'; - public static final char TYPE_SSRC = 'y'; - public static final char TYPE_MEDIA_DES = 'f'; - - public static final char SEPARATOR = '='; - public static final char ATTR_SEPARATOR = ':'; - - public static final String MEDIA_AUDIO = "audio"; - - public static final String ATTR_RTPMAP = "rtpmap"; - public static final String ATTR_SENDRECV = "sendrecv"; -} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/SdpLine.java b/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/SdpLine.java deleted file mode 100755 index 2d573382..00000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/SdpLine.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - This file is part of Peers, a java SIP softphone. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - Copyright 2007, 2008, 2009, 2010 Yohann Martineau -*/ - -package com.genersoft.iot.vmp.gb28181.sdp; - -public class SdpLine { - private char type; - private String value; - public char getType() { - return type; - } - public void setType(char type) { - this.type = type; - } - public String getValue() { - return value; - } - public void setValue(String value) { - this.value = value; - } - -} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/SdpParser.java b/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/SdpParser.java deleted file mode 100755 index fb8d499f..00000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/SdpParser.java +++ /dev/null @@ -1,230 +0,0 @@ -/* - This file is part of Peers, a java SIP softphone. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - Copyright 2007, 2008, 2009, 2010 Yohann Martineau -*/ - -package com.genersoft.iot.vmp.gb28181.sdp; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.InetAddress; -import java.util.ArrayList; -import java.util.Hashtable; -import java.util.List; - -public class SdpParser { - - public SessionDescription parse(byte[] body) throws IOException { - if (body == null || body.length == 0) { - return null; - } - ByteArrayInputStream in = new ByteArrayInputStream(body); - InputStreamReader inputStreamReader = new InputStreamReader(in); - BufferedReader reader = new BufferedReader(inputStreamReader); - SessionDescription sessionDescription = new SessionDescription(); - - //version - - String line = reader.readLine(); - if (line.length() < 3) { - return null; - } - if (line.charAt(0) != RFC4566_28181.TYPE_VERSION - || line.charAt(1) != RFC4566_28181.SEPARATOR - || line.charAt(2) != RFC4566_28181.VERSION) { - return null; - } - - //origin - - line = reader.readLine(); - if (line.length() < 3) { - return null; - } - if (line.charAt(0) != RFC4566_28181.TYPE_ORIGIN - || line.charAt(1) != RFC4566_28181.SEPARATOR) { - return null; - } - line = line.substring(2); - String[] originArr = line.split(" "); - if (originArr == null || originArr.length != 6) { - return null; - } - sessionDescription.setUsername(originArr[0]); - sessionDescription.setId(Long.parseLong(originArr[1])); - sessionDescription.setVersion(Long.parseLong(originArr[2])); - sessionDescription.setIpAddress(InetAddress.getByName(originArr[5])); - - //name - - line = reader.readLine(); - if (line.length() < 3) { - return null; - } - if (line.charAt(0) != RFC4566_28181.TYPE_SUBJECT - || line.charAt(1) != RFC4566_28181.SEPARATOR) { - return null; - } - sessionDescription.setName(line.substring(2)); - - //session connection and attributes - Hashtable sessionAttributes = new Hashtable(); - sessionDescription.setAttributes(sessionAttributes); - - while ((line = reader.readLine()) != null - && line.charAt(0) != RFC4566_28181.TYPE_MEDIA) { - if (line.length() > 3 - && line.charAt(0) == RFC4566_28181.TYPE_CONNECTION - && line.charAt(1) == RFC4566_28181.SEPARATOR) { - String connection = parseConnection(line.substring(2)); - if (connection == null) { - continue; - } - sessionDescription.setIpAddress(InetAddress.getByName(connection)); - } else if (line.length() > 3 - && line.charAt(0) == RFC4566_28181.TYPE_ATTRIBUTE - && line.charAt(1) == RFC4566_28181.SEPARATOR) { - String value = line.substring(2); - int pos = value.indexOf(RFC4566_28181.ATTR_SEPARATOR); - if (pos > -1) { - sessionAttributes.put(value.substring(0, pos), - value.substring(pos + 1)); - } else { - sessionAttributes.put(value, ""); - } - } - } - if (line == null) { - return null; - } - //we are at the first media line - - ArrayList mediaLines = new ArrayList(); - do { - if (line.length() < 2) { - return null; - } - if (line.charAt(1) != RFC4566_28181.SEPARATOR) { - return null; - } - if (line.charAt(0) == RFC4566_28181.TYPE_SSRC) { - sessionDescription.setSsrc(line.length() >=2 ?line.substring(2):""); - }else if (line.charAt(0) == RFC4566_28181.TYPE_MEDIA_DES) { - sessionDescription.setGbMediaDescriptions(line.length() >=2 ?line.substring(2):""); - }else { - SdpLine mediaLine = new SdpLine(); - mediaLine.setType(line.charAt(0)); - mediaLine.setValue(line.substring(2)); - mediaLines.add(mediaLine); - } - - } - while ((line = reader.readLine()) != null ); - - ArrayList mediaDescriptions = new ArrayList(); - sessionDescription.setMediaDescriptions(mediaDescriptions); - - for (SdpLine sdpLine : mediaLines) { - MediaDescription mediaDescription; - if (sdpLine.getType() == RFC4566_28181.TYPE_MEDIA) { - String[] mediaArr = sdpLine.getValue().split(" "); - if (mediaArr == null || mediaArr.length < 4) { - return null; - } - mediaDescription = new MediaDescription(); - mediaDescription.setType(mediaArr[0]); - //TODO manage port range - mediaDescription.setPort(Integer.parseInt(mediaArr[1])); - mediaDescription.setAttributes(new Hashtable()); - List codecs = new ArrayList(); - for (int i = 3; i < mediaArr.length; ++i) { - int payloadType = Integer.parseInt(mediaArr[i]); - Codec codec = new Codec(); - codec.setPayloadType(payloadType); - codec.setName("unsupported"); - codecs.add(codec); - } - mediaDescription.setCodecs(codecs); - mediaDescriptions.add(mediaDescription); - } else { - mediaDescription = mediaDescriptions.get(mediaDescriptions.size() - 1); - String sdpLineValue = sdpLine.getValue(); - if (sdpLine.getType() == RFC4566_28181.TYPE_CONNECTION) { - String ipAddress = parseConnection(sdpLineValue); - mediaDescription.setIpAddress(InetAddress.getByName(ipAddress)); - } else if (sdpLine.getType() == RFC4566_28181.TYPE_ATTRIBUTE) { - Hashtable attributes = mediaDescription.getAttributes(); - int pos = sdpLineValue.indexOf(RFC4566_28181.ATTR_SEPARATOR); - if (pos > -1) { - String name = sdpLineValue.substring(0, pos); - String value = sdpLineValue.substring(pos + 1); - pos = value.indexOf(" "); - if (pos > -1) { - int payloadType; - try { - payloadType = Integer.parseInt(value.substring(0, pos)); - List codecs = mediaDescription.getCodecs(); - for (Codec codec: codecs) { - if (codec.getPayloadType() == payloadType) { - value = value.substring(pos + 1); - pos = value.indexOf("/"); - if (pos > -1) { - value = value.substring(0, pos); - codec.setName(value); - } - break; - } - } - } catch (NumberFormatException e) { - attributes.put(name, value); - } - } else { - attributes.put(name, value); - } - } else { - attributes.put(sdpLineValue, ""); - } - } - } - } - sessionDescription.setMediaDescriptions(mediaDescriptions); - - for (MediaDescription description : mediaDescriptions) { - if (description.getIpAddress() == null) { - InetAddress sessionAddress = sessionDescription.getIpAddress(); - if (sessionAddress == null) { - return null; - } - description.setIpAddress(sessionAddress); - } - } - - - return sessionDescription; - } - - private String parseConnection(String line) { - String[] connectionArr = line.split(" "); - if (connectionArr == null || connectionArr.length != 3) { - return null; - } - return connectionArr[2]; - } - -} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/SessionDescription.java b/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/SessionDescription.java deleted file mode 100755 index ad68099b..00000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/sdp/SessionDescription.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - This file is part of Peers, a java SIP softphone. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - Copyright 2007, 2008, 2009, 2010 Yohann Martineau -*/ - -package com.genersoft.iot.vmp.gb28181.sdp; - -import java.net.Inet4Address; -import java.net.Inet6Address; -import java.net.InetAddress; -import java.util.Hashtable; -import java.util.List; - -public class SessionDescription { - - private long id; - private long version; - private String name; - private String username; - private InetAddress ipAddress; - private List mediaDescriptions; - private Hashtable attributes; - private String ssrc; - private String gbMediaDescriptions; - - public SessionDescription() { - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public InetAddress getIpAddress() { - return ipAddress; - } - - public void setIpAddress(InetAddress ipAddress) { - this.ipAddress = ipAddress; - } - - public List getMediaDescriptions() { - return mediaDescriptions; - } - - public void setMediaDescriptions(List mediaDescriptions) { - this.mediaDescriptions = mediaDescriptions; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public long getVersion() { - return version; - } - - public void setVersion(long version) { - this.version = version; - } - - public Hashtable getAttributes() { - return attributes; - } - - public void setAttributes(Hashtable attributes) { - this.attributes = attributes; - } - - public String getSsrc() { - return ssrc; - } - - public void setSsrc(String ssrc) { - this.ssrc = ssrc; - } - - public String getGbMediaDescriptions() { - return gbMediaDescriptions; - } - - public void setGbMediaDescriptions(String gbMediaDescriptions) { - this.gbMediaDescriptions = gbMediaDescriptions; - } - - @Override - public String toString() { - StringBuilder buf = new StringBuilder(); - buf.append("v=0\r\n"); - buf.append("o=").append(username).append(" ").append(id); - buf.append(" ").append(version); - int ipVersion; - if (ipAddress instanceof Inet4Address) { - ipVersion = 4; - } else if (ipAddress instanceof Inet6Address) { - ipVersion = 6; - } else { - throw new RuntimeException("unknown ip version: " + ipAddress); - } - buf.append(" IN IP").append(ipVersion).append(" "); - String hostAddress = ipAddress.getHostAddress(); - buf.append(hostAddress).append("\r\n"); - buf.append("s=").append(name).append("\r\n"); - buf.append("c=IN IP").append(ipVersion).append(" "); - buf.append(hostAddress).append("\r\n"); - buf.append("t=0 0\r\n"); - if (attributes != null){ - for (String attributeName: attributes.keySet()) { - String attributeValue = attributes.get(attributeName); - buf.append("a=").append(attributeName); - if (attributeValue != null && !"".equals(attributeValue.trim())) { - buf.append(":"); - buf.append(attributeValue); - buf.append("\r\n"); - } - } - } - if (mediaDescriptions != null){ - for (MediaDescription mediaDescription: mediaDescriptions) { - buf.append(mediaDescription.toString()); - } - } - - if (ssrc != null){ - buf.append("y=").append(ssrc).append("\r\n"); - } - if (gbMediaDescriptions != null){ - buf.append("f=").append(gbMediaDescriptions).append("\r\n"); - } - return buf.toString(); - } - -} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java index 6bab8090..980c8565 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java @@ -374,7 +374,6 @@ public class SIPCommander implements ISIPCommander { if ("TCP-PASSIVE".equals(streamMode)) { // tcp被动模式 content.append("a=setup:passive\r\n"); content.append("a=connection:new\r\n"); - } else if ("TCP-ACTIVE".equals(streamMode)) { // tcp主动模式 } else if ("TCP-ACTIVE".equals(streamMode)) { // tcp主动模式 content.append("a=setup:active\r\n"); content.append("a=connection:new\r\n"); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java index 9d0a9a3f..7e9e626b 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java @@ -113,45 +113,84 @@ public class InviteRequestProcessor extends SIPRequestAbstractProcessor { } // 解析sdp消息, 使用jainsip 自带的sdp解析方式 String contentString = new String(request.getRawContent()); - SessionDescription sdp = SdpFactory.getInstance().createSessionDescription(contentString); - // TODO 区分TCP发流还是udp, 当前默认udp + // jainSip不支持y=字段, 移除移除以解析。 + int ssrcIndex = contentString.indexOf("y="); + String ssrc = contentString.substring(ssrcIndex + 2, contentString.length()) + .replace("\r\n", "").replace("\n", ""); + + String substring = contentString.substring(0, contentString.indexOf("y=")); + SessionDescription sdp = SdpFactory.getInstance().createSessionDescription(substring); + // 获取支持的格式 Vector mediaDescriptions = sdp.getMediaDescriptions(true); // 查看是否支持PS 负载96 String ip = null; int port = -1; + boolean recvonly = false; + boolean mediaTransmissionTCP = false; + Boolean tcpActive = null; for (int i = 0; i < mediaDescriptions.size(); i++) { MediaDescription mediaDescription = (MediaDescription)mediaDescriptions.get(i); Media media = mediaDescription.getMedia(); - port = media.getMediaPort(); - } -// for (MediaDescription mediaDescription : mediaDescriptions) { -// -// List codecs = mediaDescription.getCodecs(); -// for (Codec codec : codecs) { -// if("96".equals(codec.getPayloadType()) || "PS".equals(codec.getName()) || "ps".equals(codec.getName())) { -// // TODO 这里很慢 -// ip = mediaDescription.getIpAddress().getHostName(); -// port = mediaDescription.getPort(); -// break; -// } -// } -// } -// if (ip == null || port == -1) { // TODO 没有合适的视频流格式, 可配置是否使用第一个media信息 -// if (mediaDescriptions.size() > 0) { -// ip = mediaDescriptions.get(0).getIpAddress().getHostName(); -// port = mediaDescriptions.get(0).getPort(); -// } -// } -// -// if (ip == null || port == -1) { -// response488Ack(evt); -// return; -// } + + Vector mediaFormats = media.getMediaFormats(false); + if (mediaFormats.contains("96")) { + port = media.getMediaPort(); + String mediaType = media.getMediaType(); + String protocol = media.getProtocol(); + + // 区分TCP发流还是udp, 当前默认udp + if ("TCP/RTP/AVP".equals(protocol)) { + String setup = mediaDescription.getAttribute("setup"); + if (setup != null) { + mediaTransmissionTCP = true; + if ("active".equals(setup)) { + tcpActive = true; + }else if ("passive".equals(setup)) { + tcpActive = false; + } + } + } +// Vector attributes = mediaDescription.getAttributes(false); +// for (Object attributeObj : attributes) { +// Attribute attribute = (Attribute)attributeObj; +// String name = attribute.getName(); +// switch (name){ +// case "recvonly": +// recvonly = true; +// break; +// case "rtpmap": +// case "connection": +// break; +// case "setup": +// mediaTransmissionTCP = true; +// if ("active".equals(attribute.getValue())) { // tcp主动模式 +// tcpActive = true; +// }else if ("passive".equals(attribute.getValue())){ // tcp被动模式 +// tcpActive = false; +// } +// break; // +// } +// if ("recvonly".equals(name)) { +// recvonly = true; +// } // -// String ssrc = sdp.getSsrc(); +// String value = attribute.getValue(); +// } + break; + } + } + if (port == -1) { + // 回复不支持的格式 + response415Ack(evt); // 不支持的格式,发415 + return; + } + String username = sdp.getOrigin().getUsername(); + String addressStr = sdp.getOrigin().getAddress(); + String sessionName = sdp.getSessionName().getValue(); + logger.info("[上级点播]用户:{}, 地址:{}:{}, ssrc:{}", username, addressStr, port, ssrc); // // Device device = storager.queryVideoDeviceByPlatformIdAndChannelId(platformId, channelId); // if (device == null) { @@ -277,6 +316,18 @@ public class InviteRequestProcessor extends SIPRequestAbstractProcessor { getServerTransaction(evt).sendResponse(response); } + /*** + * 回复415 不支持的媒体类型 + * @param evt + * @throws SipException + * @throws InvalidArgumentException + * @throws ParseException + */ + private void response415Ack(RequestEvent evt) throws SipException, InvalidArgumentException, ParseException { + Response response = getMessageFactory().createResponse(Response.UNSUPPORTED_MEDIA_TYPE, evt.getRequest()); + getServerTransaction(evt).sendResponse(response); + } + /*** * 回复488 * @param evt diff --git a/web_src/.postcssrc.js b/web_src/.postcssrc.js index 2fb7b665..f8737a12 100644 --- a/web_src/.postcssrc.js +++ b/web_src/.postcssrc.js @@ -7,7 +7,7 @@ module.exports = { // to edit target browsers: use "browserslist" field in package.json "autoprefixer": {}, 'postcss-pxtorem': { - rootValue: 24, + rootValue: 16, propList: ['font-size'] // 只转化font-size } }