Commit 667266f387375524a2d4a0b48ab13465dcf83dbb
1 parent
5d541e4a
增加移动位置查询和订阅功能,优化信令Tag的生成
Showing
2 changed files
with
78 additions
and
11 deletions
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
| ... | ... | @@ -214,7 +214,16 @@ public interface ISIPCommander { |
| 214 | 214 | * |
| 215 | 215 | * @param device 视频设备 |
| 216 | 216 | */ |
| 217 | - boolean mobilePostitionQuery(Device device); | |
| 217 | + boolean mobilePostitionQuery(Device device, SipSubscribe.Event errorEvent); | |
| 218 | + | |
| 219 | + /** | |
| 220 | + * 订阅、取消订阅移动位置 | |
| 221 | + * | |
| 222 | + * @param device 视频设备 | |
| 223 | + * @param expires 订阅超时时间(值=0时为取消订阅) | |
| 224 | + * @param interval 上报时间间隔 | |
| 225 | + */ | |
| 226 | + boolean mobilePositionSubscribe(Device device, int expires, int interval); | |
| 218 | 227 | |
| 219 | 228 | /** |
| 220 | 229 | * 释放rtpserver | ... | ... |
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
| ... | ... | @@ -235,7 +235,8 @@ public class SIPCommander implements ISIPCommander { |
| 235 | 235 | ptzXml.append("</Info>\r\n"); |
| 236 | 236 | ptzXml.append("</Control>\r\n"); |
| 237 | 237 | |
| 238 | - Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtzTag", null); | |
| 238 | + String tm = Long.toString(System.currentTimeMillis()); | |
| 239 | + Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtz" + tm, null); | |
| 239 | 240 | |
| 240 | 241 | transmitRequest(device, request); |
| 241 | 242 | return true; |
| ... | ... | @@ -271,7 +272,8 @@ public class SIPCommander implements ISIPCommander { |
| 271 | 272 | ptzXml.append("</Info>\r\n"); |
| 272 | 273 | ptzXml.append("</Control>\r\n"); |
| 273 | 274 | |
| 274 | - Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtzTag", null); | |
| 275 | + String tm = Long.toString(System.currentTimeMillis()); | |
| 276 | + Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtz" + tm, null); | |
| 275 | 277 | transmitRequest(device, request); |
| 276 | 278 | return true; |
| 277 | 279 | } catch (SipException | ParseException | InvalidArgumentException e) { |
| ... | ... | @@ -383,7 +385,8 @@ public class SIPCommander implements ISIPCommander { |
| 383 | 385 | |
| 384 | 386 | content.append("y="+ssrc+"\r\n");//ssrc |
| 385 | 387 | |
| 386 | - Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, "live", null, ssrc); | |
| 388 | + String tm = Long.toString(System.currentTimeMillis()); | |
| 389 | + Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, "FromInvt" + tm, null, ssrc); | |
| 387 | 390 | |
| 388 | 391 | ClientTransaction transaction = transmitRequest(device, request, errorEvent); |
| 389 | 392 | streamSession.put(streamId, transaction); |
| ... | ... | @@ -482,7 +485,8 @@ public class SIPCommander implements ISIPCommander { |
| 482 | 485 | |
| 483 | 486 | content.append("y="+ssrc+"\r\n");//ssrc |
| 484 | 487 | |
| 485 | - Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "playback", null); | |
| 488 | + String tm = Long.toString(System.currentTimeMillis()); | |
| 489 | + Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null); | |
| 486 | 490 | |
| 487 | 491 | ClientTransaction transaction = transmitRequest(device, request, errorEvent); |
| 488 | 492 | streamSession.put(streamId, transaction); |
| ... | ... | @@ -665,7 +669,8 @@ public class SIPCommander implements ISIPCommander { |
| 665 | 669 | catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n"); |
| 666 | 670 | catalogXml.append("</Query>\r\n"); |
| 667 | 671 | |
| 668 | - Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaDeviceInfoBranch", "FromDeviceInfoTag", null); | |
| 672 | + String tm = Long.toString(System.currentTimeMillis()); | |
| 673 | + Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaDeviceInfoBranch", "FromDev" + tm, null); | |
| 669 | 674 | |
| 670 | 675 | transmitRequest(device, request); |
| 671 | 676 | |
| ... | ... | @@ -694,7 +699,8 @@ public class SIPCommander implements ISIPCommander { |
| 694 | 699 | catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n"); |
| 695 | 700 | catalogXml.append("</Query>\r\n"); |
| 696 | 701 | |
| 697 | - Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaCatalogBranch", "FromCatalogTag", null); | |
| 702 | + String tm = Long.toString(System.currentTimeMillis()); | |
| 703 | + Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaCatalogBranch", "FromCat" + tm, null); | |
| 698 | 704 | |
| 699 | 705 | transmitRequest(device, request, errorEvent); |
| 700 | 706 | } catch (SipException | ParseException | InvalidArgumentException e) { |
| ... | ... | @@ -728,7 +734,8 @@ public class SIPCommander implements ISIPCommander { |
| 728 | 734 | recordInfoXml.append("<Type>all</Type>\r\n"); |
| 729 | 735 | recordInfoXml.append("</Query>\r\n"); |
| 730 | 736 | |
| 731 | - Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(), "ViaRecordInfoBranch", "FromRecordInfoTag", null); | |
| 737 | + String tm = Long.toString(System.currentTimeMillis()); | |
| 738 | + Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(), "ViaRecordInfoBranch", "fromRec" + tm, null); | |
| 732 | 739 | |
| 733 | 740 | transmitRequest(device, request); |
| 734 | 741 | } catch (SipException | ParseException | InvalidArgumentException e) { |
| ... | ... | @@ -777,11 +784,62 @@ public class SIPCommander implements ISIPCommander { |
| 777 | 784 | * @param device 视频设备 |
| 778 | 785 | */ |
| 779 | 786 | @Override |
| 780 | - public boolean mobilePostitionQuery(Device device) { | |
| 781 | - // TODO Auto-generated method stub | |
| 782 | - return false; | |
| 787 | + public boolean mobilePostitionQuery(Device device, SipSubscribe.Event errorEvent) { | |
| 788 | + try { | |
| 789 | + StringBuffer mobilePostitionXml = new StringBuffer(200); | |
| 790 | + mobilePostitionXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n"); | |
| 791 | + mobilePostitionXml.append("<Query>\r\n"); | |
| 792 | + mobilePostitionXml.append("<CmdType>MobilePosition</CmdType>\r\n"); | |
| 793 | + mobilePostitionXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n"); | |
| 794 | + mobilePostitionXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n"); | |
| 795 | + mobilePostitionXml.append("<Interval>60</Interval>\r\n"); | |
| 796 | + mobilePostitionXml.append("</Query>\r\n"); | |
| 797 | + | |
| 798 | + String tm = Long.toString(System.currentTimeMillis()); | |
| 799 | + Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), "viaTagPos" + tm, "fromTagPos" + tm, null); | |
| 800 | + | |
| 801 | + transmitRequest(device, request, errorEvent); | |
| 802 | + | |
| 803 | + } catch (SipException | ParseException | InvalidArgumentException e) { | |
| 804 | + e.printStackTrace(); | |
| 805 | + return false; | |
| 806 | + } | |
| 807 | + return true; | |
| 808 | + } | |
| 809 | + | |
| 810 | + /** | |
| 811 | + * 订阅、取消订阅移动位置 | |
| 812 | + * | |
| 813 | + * @param device 视频设备 | |
| 814 | + * @param expires 订阅超时时间 | |
| 815 | + * @param interval 上报时间间隔 | |
| 816 | + */ | |
| 817 | + public boolean mobilePositionSubscribe(Device device, int expires, int interval) { | |
| 818 | + try { | |
| 819 | + StringBuffer subscribePostitionXml = new StringBuffer(200); | |
| 820 | + subscribePostitionXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n"); | |
| 821 | + subscribePostitionXml.append("<Query>\r\n"); | |
| 822 | + subscribePostitionXml.append("<CmdType>MobilePosition</CmdType>\r\n"); | |
| 823 | + subscribePostitionXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n"); | |
| 824 | + subscribePostitionXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n"); | |
| 825 | + if (expires > 0) { | |
| 826 | + subscribePostitionXml.append("<Interval>" + String.valueOf(interval) + "</Interval>\r\n"); | |
| 827 | + } | |
| 828 | + subscribePostitionXml.append("</Query>\r\n"); | |
| 829 | + | |
| 830 | + String tm = Long.toString(System.currentTimeMillis()); | |
| 831 | + Request request = headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), "viaTagPos" + tm, "fromTagPos" + tm, null, expires, "Position;id=" + tm.substring(tm.length() - 4)); | |
| 832 | + transmitRequest(device, request); | |
| 833 | + | |
| 834 | + return true; | |
| 835 | + | |
| 836 | + } catch ( NumberFormatException | ParseException | InvalidArgumentException | SipException e) { | |
| 837 | + e.printStackTrace(); | |
| 838 | + return false; | |
| 839 | + } | |
| 783 | 840 | } |
| 784 | 841 | |
| 842 | + | |
| 785 | 843 | private ClientTransaction transmitRequest(Device device, Request request) throws SipException { |
| 786 | 844 | return transmitRequest(device, request, null, null); |
| 787 | 845 | } | ... | ... |