SipUtils.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package com.genersoft.iot.vmp.gb28181.utils;
  2. import com.genersoft.iot.vmp.utils.GitUtil;
  3. import gov.nist.javax.sip.address.AddressImpl;
  4. import gov.nist.javax.sip.address.SipUri;
  5. import gov.nist.javax.sip.header.Subject;
  6. import javax.sip.PeerUnavailableException;
  7. import javax.sip.SipFactory;
  8. import javax.sip.header.FromHeader;
  9. import javax.sip.header.Header;
  10. import javax.sip.header.UserAgentHeader;
  11. import javax.sip.message.Request;
  12. import java.text.ParseException;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. import java.util.UUID;
  16. /**
  17. * @author panlinlin
  18. * @version 1.0.0
  19. * @description JAIN SIP的工具类
  20. * @createTime 2021年09月27日 15:12:00
  21. */
  22. public class SipUtils {
  23. public static String getUserIdFromFromHeader(Request request) {
  24. FromHeader fromHeader = (FromHeader)request.getHeader(FromHeader.NAME);
  25. return getUserIdFromFromHeader(fromHeader);
  26. }
  27. /**
  28. * 从subject读取channelId
  29. * */
  30. public static String getChannelIdFromRequest(Request request) {
  31. Header subject = request.getHeader("subject");
  32. if (subject == null) {
  33. // 如果缺失subject
  34. return null;
  35. }
  36. return ((Subject) subject).getSubject().split(":")[0];
  37. }
  38. public static String getUserIdFromFromHeader(FromHeader fromHeader) {
  39. AddressImpl address = (AddressImpl)fromHeader.getAddress();
  40. SipUri uri = (SipUri) address.getURI();
  41. return uri.getUser();
  42. }
  43. public static String getNewViaTag() {
  44. return "z9hG4bK" + System.currentTimeMillis();
  45. }
  46. public static UserAgentHeader createUserAgentHeader(SipFactory sipFactory, GitUtil gitUtil) throws PeerUnavailableException, ParseException {
  47. List<String> agentParam = new ArrayList<>();
  48. agentParam.add("WVP-Pro v");
  49. if (gitUtil != null && gitUtil.getCommitTime() != null) {
  50. agentParam.add(gitUtil.getBuildVersion() + ".");
  51. agentParam.add(gitUtil.getCommitTime());
  52. }
  53. return sipFactory.createHeaderFactory().createUserAgentHeader(agentParam);
  54. }
  55. public static String getNewFromTag(){
  56. return UUID.randomUUID().toString().replace("-", "");
  57. // return getNewTag();
  58. }
  59. public static String getNewTag(){
  60. return String.valueOf(System.currentTimeMillis());
  61. }
  62. /**
  63. * 云台指令码计算
  64. *
  65. * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移
  66. * @param upDown 镜头上移下移 0:停止 1:上移 2:下移
  67. * @param inOut 镜头放大缩小 0:停止 1:缩小 2:放大
  68. * @param moveSpeed 镜头移动速度 默认 0XFF (0-255)
  69. * @param zoomSpeed 镜头缩放速度 默认 0X1 (0-255)
  70. */
  71. public static String cmdString(int leftRight, int upDown, int inOut, int moveSpeed, int zoomSpeed) {
  72. int cmdCode = 0;
  73. if (leftRight == 2) {
  74. cmdCode|=0x01; // 右移
  75. } else if(leftRight == 1) {
  76. cmdCode|=0x02; // 左移
  77. }
  78. if (upDown == 2) {
  79. cmdCode|=0x04; // 下移
  80. } else if(upDown == 1) {
  81. cmdCode|=0x08; // 上移
  82. }
  83. if (inOut == 2) {
  84. cmdCode |= 0x10; // 放大
  85. } else if(inOut == 1) {
  86. cmdCode |= 0x20; // 缩小
  87. }
  88. StringBuilder builder = new StringBuilder("A50F01");
  89. String strTmp;
  90. strTmp = String.format("%02X", cmdCode);
  91. builder.append(strTmp, 0, 2);
  92. strTmp = String.format("%02X", moveSpeed);
  93. builder.append(strTmp, 0, 2);
  94. builder.append(strTmp, 0, 2);
  95. strTmp = String.format("%X", zoomSpeed);
  96. builder.append(strTmp, 0, 1).append("0");
  97. //计算校验码
  98. int checkCode = (0XA5 + 0X0F + 0X01 + cmdCode + moveSpeed + moveSpeed + (zoomSpeed /*<< 4*/ & 0XF0)) % 0X100;
  99. strTmp = String.format("%02X", checkCode);
  100. builder.append(strTmp, 0, 2);
  101. return builder.toString();
  102. }
  103. }