From 8b90fade9eb3a62b428f23f2306cb1911c98d355 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 02 四月 2024 00:05:09 +0800 Subject: [PATCH] 支持使用abl接收国标流 --- 数据库/abl/初始化-mysql-2.7.0.sql | 4 src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java | 197 ---- src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java | 2 数据库/abl/更新-mysql-2.7.0.sql | 9 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java | 6 src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 18 src/main/java/com/genersoft/iot/vmp/media/event/hook/HookSubscribe.java | 4 src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java | 23 src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java | 12 src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaServer高性能流媒体服务器使用说明.txt | 1743 +++++++++++++++++++++++++++++++++++++++++++++++ 数据库/abl/初始化-postgresql-kingbase-2.7.0.sql | 4 src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaServerStatusManger.java | 13 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java | 4 src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java | 16 数据库/abl/更新-postgresql-kingbase-2.7.0.sql | 11 src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java | 18 src/main/java/com/genersoft/iot/vmp/media/abl/bean/hook/ABLHookParam.java | 6 src/main/java/com/genersoft/iot/vmp/media/bean/MediaServer.java | 48 + src/main/java/com/genersoft/iot/vmp/media/bean/MediaInfo.java | 19 src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java | 4 src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java | 8 src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java | 2 22 files changed, 1,967 insertions(+), 204 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java b/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java index b8d5f18..f477439 100644 --- a/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java +++ b/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java @@ -195,8 +195,7 @@ } } - public void setFlv(String host, int port, int sslPort, String app, String stream, String callIdParam) { - String file = String.format("%s/%s.live.flv%s", app, stream, callIdParam); + public void setFlv(String host, int port, int sslPort, String file) { if (port > 0) { this.flv = new StreamURL("http", host, port, file); } @@ -207,6 +206,15 @@ } } + public void setWsFlv(String host, int port, int sslPort, String file) { + if (port > 0) { + this.ws_flv = new StreamURL("ws", host, port, file); + } + if (sslPort > 0) { + this.wss_flv = new StreamURL("wss", host, sslPort, file); + } + } + public void setFmp4(String host, int port, int sslPort, String app, String stream, String callIdParam) { String file = String.format("%s/%s.live.mp4%s", app, stream, callIdParam); if (port > 0) { diff --git a/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java index a61154f..0dc1ba9 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java @@ -42,11 +42,23 @@ @Value("${media.stream-ip:${media.ip}}") private String streamIp; - @Value("${media.http-port}") + @Value("${media.http-port:0}") private Integer httpPort; + + @Value("${media.flv-port:0}") + private Integer flvPort = 0; + + @Value("${media.ws-flv-port:0}") + private Integer wsFlvPort = 0; @Value("${media.http-ssl-port:0}") private Integer httpSSlPort = 0; + + @Value("${media.flv-ssl-port:0}") + private Integer flvSSlPort = 0; + + @Value("${media.ws-flv-ssl-port:0}") + private Integer wsFlvSSlPort = 0; @Value("${media.rtmp-port:0}") private Integer rtmpPort = 0; @@ -208,7 +220,11 @@ mediaServerItem.setSdpIp(getSdpIp()); mediaServerItem.setStreamIp(getStreamIp()); mediaServerItem.setHttpPort(httpPort); + mediaServerItem.setFlvPort(flvPort); + mediaServerItem.setWsFlvPort(wsFlvPort); mediaServerItem.setHttpSSlPort(httpSSlPort); + mediaServerItem.setFlvSSLPort(flvSSlPort); + mediaServerItem.setWsFlvSSLPort(wsFlvSSlPort); mediaServerItem.setRtmpPort(rtmpPort); mediaServerItem.setRtmpSSlPort(rtmpSSlPort); mediaServerItem.setRtpProxyPort(getRtpProxyPort()); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java index c3e5b59..88fffba 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java @@ -500,7 +500,7 @@ String startTimeStr = DateUtil.urlFormatter.format(start); String endTimeStr = DateUtil.urlFormatter.format(end); String stream = device.getDeviceId() + "_" + channelId + "_" + startTimeStr + "_" + endTimeStr; - SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, stream, null, device.isSsrcCheck(), true, 0,false, false, device.getStreamModeForParam()); + SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, stream, null, device.isSsrcCheck(), true, 0,false,!channel.isHasAudio(), false, device.getStreamModeForParam()); sendRtpItem.setStream(stream); // 鍐欏叆redis锛� 瓒呮椂鏃跺洖澶� redisCatchStorage.updateSendRTPSever(sendRtpItem); @@ -530,7 +530,7 @@ } sendRtpItem.setPlayType(InviteStreamType.DOWNLOAD); - SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, null, null, device.isSsrcCheck(), true, 0, false, false, device.getStreamModeForParam()); + SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, null, null, device.isSsrcCheck(), true, 0, false,!channel.isHasAudio(), false, device.getStreamModeForParam()); sendRtpItem.setStream(ssrcInfo.getStream()); // 鍐欏叆redis锛� 瓒呮椂鏃跺洖澶� redisCatchStorage.updateSendRTPSever(sendRtpItem); diff --git a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java index aaa72dd..644be24 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaNodeServerService.java @@ -6,6 +6,7 @@ import com.genersoft.iot.vmp.media.service.IMediaNodeServerService; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @@ -14,9 +15,12 @@ @Service("abl") public class ABLMediaNodeServerService implements IMediaNodeServerService { + @Autowired + private ABLRESTfulUtils ablresTfulUtils; + @Override - public int createRTPServer(MediaServer mediaServerItem, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode) { - return 0; + public int createRTPServer(MediaServer mediaServer, String stream, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode) { + return ablresTfulUtils.openRtpServer(mediaServer, "rtp", stream, 96, port, tcpMode, disableAudio?1:0); } @Override diff --git a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaServerStatusManger.java b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaServerStatusManger.java index 5895ce2..cb55695 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaServerStatusManger.java +++ b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaServerStatusManger.java @@ -212,15 +212,24 @@ // if (mediaServerItem.getHttpSSlPort() == 0) { // mediaServerItem.setHttpSSlPort(ablServerConfig.getHttpSSLport()); // } - if (mediaServerItem.getRtmpPort() == 0) { + if (mediaServerItem.getRtmpPort() == 0 && ablServerConfig.getRtmpPort() != null) { mediaServerItem.setRtmpPort(ablServerConfig.getRtmpPort()); } // if (mediaServerItem.getRtmpSSlPort() == 0) { // mediaServerItem.setRtmpSSlPort(ablServerConfig.getRtmpSslPort()); // } - if (mediaServerItem.getRtspPort() == 0) { + if (mediaServerItem.getRtspPort() == 0 && ablServerConfig.getRtspPort() != null) { mediaServerItem.setRtspPort(ablServerConfig.getRtspPort()); } + if (mediaServerItem.getFlvPort() == 0 && ablServerConfig.getHttpFlvPort() != null) { + mediaServerItem.setFlvPort(ablServerConfig.getHttpFlvPort()); + } + if (mediaServerItem.getWsFlvPort() == 0 && ablServerConfig.getWsPort() != null) { + mediaServerItem.setWsFlvPort(ablServerConfig.getWsPort()); + } + if (mediaServerItem.getRtpProxyPort() == 0 && ablServerConfig.getPsTsRecvPort() != null) { + mediaServerItem.setRtpProxyPort(ablServerConfig.getPsTsRecvPort()); + } // if (mediaServerItem.getRtspSSLPort() == 0) { // mediaServerItem.setRtspSSLPort(ablServerConfig.getRtspSSlport()); // } diff --git "a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaServer\351\253\230\346\200\247\350\203\275\346\265\201\345\252\222\344\275\223\346\234\215\345\212\241\345\231\250\344\275\277\347\224\250\350\257\264\346\230\216.txt" "b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaServer\351\253\230\346\200\247\350\203\275\346\265\201\345\252\222\344\275\223\346\234\215\345\212\241\345\231\250\344\275\277\347\224\250\350\257\264\346\230\216.txt" new file mode 100644 index 0000000..9cffc98 --- /dev/null +++ "b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaServer\351\253\230\346\200\247\350\203\275\346\265\201\345\252\222\344\275\223\346\234\215\345\212\241\345\231\250\344\275\277\347\224\250\350\257\264\346\230\216.txt" @@ -0,0 +1,1743 @@ +涓�銆佸姛鑳借鏄� + ABLMediaServer楂樻�ц兘娴佸獟浣撴湇鍔″櫒锛寃indows骞冲彴閲囩敤楂樻�ц兘鐨勫畬鎴愮鍙g綉缁滄ā鍨嬨�丩inux涓嬮噰鐢╡poll锛屽姞涓婄嚎绋嬫睜杩涜濯掍綋鏁版嵁 + 鐨勬帴鏀躲�佽浆鎹€�佸彂閫併�傛湇鍔″櫒鐨勬�ц兘寮哄姴銆佽繍琛岀ǔ瀹氾紝鍧氬纾愮煶銆傜粡杩囧帇鍔涙祴璇曟瘮杈冿紝杞彂鎬ц兘銆丆PU鍗犳湁鐜囥�佽繍琛岀ǔ瀹氭�т紭鍔挎槑鏄� 銆傚彲 + 浠ラ�氳繃ffmpeg鍛戒护鎴栬�呭叾浠栨爣鍑嗙殑rtsp銆乺tmp鎺ㄦ祦鍑芥暟寰�ABLMediaServer鎺ㄩ�乺tsp娴併�乺tmp娴侊紝璇锋眰鏈嶅姟鍣ㄤ唬鐞嗘媺娴侊紝璇锋眰鏈嶅姟鍣ㄦ帴鏀跺浗 + 鏍嘒B28181銆傛湇鍔″櫒閫氳繃杞崲锛岃緭鍑烘爣鍑嗙殑rtsp鐮佹祦銆乺tmp鐮佹祦銆乭ttp-flv銆亀s-flv 鐮佹祦锛堟敮鎸丠265瑙嗛杈撳嚭锛夈�乭ttp-mp4(瑙嗛鏀寔H264銆� + H265锛岄煶棰戞敮鎸丄AC)銆乭ls鐮佹祦杈撳嚭锛堣棰戞敮鎸丠264銆丠265锛岄煶棰戞敮鎸丄AC锛夈�丟B28181鐮佹祦(鍥芥爣PS娴� )杈撳嚭銆� + 娴佸獟浣撴湇鍔″櫒鏀寔褰曞儚銆佹敮鎸佹櫤鑳藉綍鍍忓垹闄ゃ�佸綍鍍忔煡璇€�佸綍鍍忔枃浠剁偣鎾�佸綍鍍忔枃浠舵瀬閫熶笅杞姐�俬ttp-flv銆亀s-flv銆乭ttp-mp4 鍗忚鐐规挱鏃� + 鏀寔鏆傚仠缁х画銆佹敮鎸佹嫋鍔ㄦ挱鏀俱�俽tsp鐐规挱褰曞儚鏂囦欢鏃舵敮鎸佹參鏀撅紙1/16銆�1/8銆�1/4銆�1/2锛�,蹇斁锛�2銆�4銆�8銆�16 锛夈�佹甯搁�熷害銆佹敮鎸佹嫋鍔ㄦ挱鏀俱�� + 娴佸獟浣撴湇鍔″櫒鏀绾�(鍩烘湰涓�1绉掍互鍐�)鍥剧墖鎶撴媿锛屾敮鎸佸鎶撴媿鐨勫浘鐗囪繘琛屾煡鎵撅紝鏀寔鎶撴媿鍥剧墖浠ttp鍗忚涓嬭浇銆� + 鏈嶅姟鍣ㄦ敮鎸丠265杞爜涓篐264锛岃浆鐮佽緭鍑鸿棰戞敮鎸佹寚瀹氬垎杈ㄧ巼銆佸楂樸�佺爜鐜囧ぇ灏忕瓑绛夊弬鏁般�俉indows骞冲彴鏀寔鑻变紵杈炬樉鍗$‖浠跺姞閫熻浆鐮併�傚疄 + 娴媗inux 骞冲彴鑳芥渶澶у苟鍙戣浆鐮�40璺疕265锛堢‖浠剁幆澧� 鑷冲己 E5 2650 V3锛夛紝瀹炴祴windows 骞冲彴鑳芥渶澶у苟鍙戣浆鐮�35璺疕265锛坕9 + 鑻变紵杈� RTX 2080锛� + Linux 鏂板鏀寔鑻变紵杈句笓涓氭樉鍗�,鏀寔纭欢瑙g爜銆佺‖浠剁紪鐮侊紝鏀寔澶氫釜鏄惧崱鍚屾椂杩涜杞爜銆備袱寮犵壒鏂媺T4锛�16G锛夋樉鍗″彲浠ュ悓鏃舵妸80璺�1080P + 鐨凥265瑙嗛杞爜涓� 1280 x 720 鐨凥264锛岃浆鐮佸欢鏃朵綆浜�10姣锛屽鏋滈渶瑕佹洿寮虹殑杞爜鍔熻兘鍙互澶氭彃鍑犲紶鏄惧崱鎴栬�呴泦缇� 銆� + 鏈嶅姟鍣ㄦ敮鎸佽浆鐮佸嚭鏉ョ殑瑙嗛鎵撳叆鑷畾涔夋按鍗帮紝鏀寔姘村嵃鐨勫瓧绗﹀唴瀹广�佸瓧浣撳ぇ灏忋�� 瀛椾綋棰滆壊銆佸瓧浣撲綅缃兘鍙互鍦ㄩ厤缃枃浠朵腑閰嶇疆銆� + 闈炲父鎰熻阿ZLMediaKit鍜孧edia-Server 涓や釜宸ョ▼椤圭洰鐨勪綔鑰咃紝ABLMediaSever鍙傝�冨鐢ㄤ簡ZLMediaKit鐨刪ttp璇锋眰鍑芥暟鐨勫弬鏁拌〃(璇锋眰鐨刄RL + 鍙婅姹傜殑鍙傛暟鍚嶅強涓�浜涘垵濮嬪��)浠ュ強鏁翠釜妗嗘灦鐨勪竴浜涜璁℃�濇兂銆傜洿鎺ヨ皟鐢ㄤ簡Media-Server 宸ョ▼鐨� rtmp銆乫lv銆乭ls銆乫mp4 澶嶇敤涓庤В澶嶇敤绛夌瓑銆� + 闈炲父宕囨嫓涓庢劅璋袱浣嶅ぇ浣负涓浗鐨勫紑婧愭祦濯掍綋鍔姏涓庝粯鍑猴紝鍐嶆鎰熻阿銆� + + 銆愭杩庡姞鍏ラ珮鎬ц兘娴佸獟浣撴湇鍔Q缇� 873666268 銆� + +浜屻�丄BLMediaServer涓昏鍔熻兘 + + 缃戠粶鍗忚濯掍綋杈撳叆 + rtsp銆乺tmp澶栭儴涓诲姩鎺ㄦ祦杈撳叆 + 1銆乺tsp澶栭儴涓诲姩鎺ㄦ祦 (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC銆丟711A銆丟711U) + 2銆乺tmp澶栭儴涓诲姩鎺ㄦ祦 (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC) + 3銆佸浗鏍嘒B28181杈撳叆 (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC銆丟711A銆丟711U) + 4銆佷氦閫氳繍杈撻儴jtt1078 (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC銆丟711A銆丟711U) + + rtsp銆乺tmp銆乭ttp-flv銆佹湰鍦癿p4鏂囦欢 鎷夋祦杈撳叆锛� + 1銆乺tsp 鎷夋祦 (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC銆丟711A銆丟711U) + 2銆乺tmp 鎷夋祦 (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC) + 3銆乭ttp-flv 鎷夋祦 (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC) + 4銆佹湰鍦癿p4 鎷夋祦 (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC銆丟711A銆丟711U) + + websock鏂瑰紡绉佹湁鍗忚鍙戦�丳CM鏁版嵁杩涘叆娴佸獟浣撴湇鍔″櫒(鍙互鍦ㄦ祻瑙堝櫒褰曢煶閫氳繃websocket浠ヤ笅闈㈢殑绉佹湁鍗忚鎶婅闊虫帴鍏ユ祦濯掍綋鏈嶅姟鍣ㄦ柟渚垮浗鏍囧璁层�佹垨鑰呭叾浠栧簲鐢ㄦ瘮濡傝闊冲箍鎾�) + 1銆佹暟鎹寘鏍煎紡 + 鍖呭ご銆�+銆�鏁版嵁绫诲瀷銆�+銆�闀垮害銆�+銆�鏁版嵁鍖� + 鍖呭ご4涓瓧鑺� 0xAB 0xCD 0xEF 0xAB + 鏁版嵁绫诲瀷銆� 1 涓瓧鑺� 锛孾 0x01 鎺ㄦ祦闊抽娉ㄥ唽 ] [0x02 鍙戦�� PCM 闊抽鏁版嵁鍖匽 [0x03 鏂紑闊抽鎺ㄦ祦 ] + 闀垮害 銆� 2 涓瓧鑺� 锛岀綉缁滃瓧鑺傞『搴忥紙澶х锛� + 鏁版嵁鍖� 闊抽娉ㄥ唽鍖呫�乸cm闊抽鏁版嵁鍖呫�佹敞閿�鍖� + + 2銆佹暟鎹寘绫诲瀷 + 1)銆侀煶棰戞敞鍐屽寘 ,json 鏍煎紡 + {"method":"register","app":"talk","stream":"xian_1","audioCodec":"pcm","channels":1,"sampleRate":16000,"targetAudioCodec":"g711a"} + + 鏍蜂緥锛氬彂閫侀煶棰戞敞鍐� + websocket 鍙杩炴帴涓婃潵锛屽氨棣栧厛鍙戦�� 闊抽娉ㄥ唽鍖� + (0xAB 0xCD 0xEF 0xAB) + 0x01 + strlen(闊抽娉ㄥ唽鍖�) + {"method":"register","app":"talk","stream":"xian_1","audioCodec":"pcm","channels":1,"sampleRate":16000,"targetAudioCodec":"g711a"} + + 2) 銆侀煶棰戞暟鎹寘 鍙敮鎸� 16浣嶉噰鏍风簿搴︾殑pcm 锛屽崟閫氶亾銆佸弻閫氶亾銆佸父瑙佺殑閲囨牱棰戠巼閮芥敮鎸侊紙8000銆�16000銆�32000銆�48000锛� + 鏍蜂緥锛氱幇鍦ㄥ彧鍙戦�佺函pcm闊抽鏁版嵁 + (0xAB 0xCD 0xEF 0xAB) + 0x02 + strlen(pcm绾煶棰戞暟鎹�) + pcm绾煶棰戞暟鎹� + + 3)銆佹敞閿�鍖� + {"method":"destruction"} + + 鏍蜂緥锛氬彂閫佹敞閿�鍖� + (0xAB 0xCD 0xEF 0xAB) + 0x03 + strlen({"method":"destruction"} ) + {"method":"destruction"} + + 鏀寔鐢╢fmpeg鎺ㄧ函闊抽娴佹帴鍏ユ祦濯掍綋鏈嶅姟鍣紝鏀寔鐨勯煶棰戞牸寮忔湁(g711A銆丟711U銆丄AC銆丮P3) + 1銆佷互rtsp鍗忚鎺ㄦ湰鍦癮ac鏂囦欢鎺ュ叆娴佸獟浣� + ffmpeg -re -stream_loop -1 -i F:\music\xxx.aac -c:a aac -rtsp_transport tcp -f rtsp rtsp://190.15.240.11:554/music/aac1 + + 2銆佷互rtmp鍗忚鎺ㄦ湰鍦癮ac鏂囦欢鎺ュ叆娴佸獟浣� + ffmpeg -re -stream_loop -1 -i F:\music\xxx.aac -c:a aac -f flv rtmp://190.15.240.11:1935/music/aac2 + + 3銆佷互rtsp鍗忚鎺ㄦ湰鍦癿p3鏂囦欢鎺ュ叆娴佸獟浣� + ffmpeg -re -stream_loop -1 -i F:\music\xxx.mp3 -c:a mp3 -rtsp_transport tcp -f rtsp rtsp://190.15.240.11:554/music/aac3 + + 4銆佷互rtmp鍗忚鎺ㄦ湰鍦癿p3鏂囦欢鎺ュ叆娴佸獟浣� + ffmpeg -re -stream_loop -1 -i F:\music\xxx.mp3 -c:a mp3 -f flv rtmp://190.15.240.11:1935/music/aac4 + + 5銆佷互rtsp鍗忚鎺ㄦ湰鍦癿p4鏂囦欢涓殑绾煶棰戞祦鎺ュ叆鏈嶅姟鍣� + 1) 姣斿鎺ㄤ竴涓棰戞牸寮忎负h264锛岄煶棰戜负aac鐨刴p4鏂囦欢涓殑闊抽娴佽繘鍏ユ湇鍔″櫒锛岄偅涔堟湇鍔″櫒鎺ユ敹鍒扮殑闊抽娴佷负aac ,瑙嗛涓嶅仛鎺ㄩ�� + ffmpeg -re -stream_loop -1 -i F:\video\H264_AAC_2021-02-10_1080P.mp4 -vn -acodec copy -rtsp_transport tcp -f rtsp rtsp://44.35.33.39:554/music/aac5 + + 2) 姣斿鎺ㄤ竴涓棰戞牸寮忎负h264锛岄煶棰戜负g711A鐨刴p4鏂囦欢涓殑闊抽娴佽繘鍏ユ湇鍔″櫒锛岄偅涔堟湇鍔″櫒鎺ユ敹鍒扮殑闊抽娴佷负g711A ,瑙嗛涓嶅仛鎺ㄩ�� + ffmpeg -re -stream_loop -1 -i F:\video\H264-G711A-92017.mp4 -vn -acodec copy -rtsp_transport tcp -f rtsp rtsp://44.35.33.39:554/music/aac6 + + 3) 姣斿鎺ㄤ竴涓棰戞牸寮忎负h264锛岄煶棰戜负g711U鐨刴p4鏂囦欢涓殑闊抽娴佽繘鍏ユ湇鍔″櫒锛岄偅涔堟湇鍔″櫒鎺ユ敹鍒扮殑闊抽娴佷负g711U ,瑙嗛涓嶅仛鎺ㄩ�� + ffmpeg -re -stream_loop -1 -i F:\video\H264-G711U-56434.mp4 -vn -acodec copy -rtsp_transport tcp -f rtsp rtsp://44.35.33.39:554/music/aac7 + + 缃戠粶鍗忚濯掍綋 杈撳嚭锛� + 琚姩鎷夋祦杈撳嚭 + 1銆乺tsp (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC銆丟711A銆丟711U) + 2銆乺tmp (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC) + 3銆丟B28181鐮佹祦 (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC銆丟711A銆丟711U) + 4銆乭ttp-flv (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC) + 5銆乭ttp-hls (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC) + 6銆乭ttp-mp4 (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC) + 7銆亀ebsocket-flv (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC) + 8銆亀ebrtc (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細G711A銆丟711U銆丱PUS) + 9銆佷氦閫氳繍杈撻儴jtt1078 (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC銆丟711A銆丟711U) + + rtsp銆乺tmp銆乬b28181銆乯tt1078 涓诲姩鎺ㄦ祦杈撳嚭锛� + 1銆乺tsp鎺ㄦ祦 (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC銆丟711A銆丟711U) + 2銆乺tmp鎺ㄦ祦 (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC) + 3銆丟B28181鎺ㄦ祦 (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC銆丟711A銆丟711U) + 4銆佷氦閫氳繍杈撻儴jtt1078 (鏀寔 瑙嗛锛欻264銆丠265 锛岄煶棰戯細AAC銆丟711A銆丟711U) + + +涓夈�佺畝鏄庝娇鐢ㄤ緥瀛� + 1锛� 棣栧厛瑕侀厤缃� ABLMediaServer.ini 閲岄潰鐨� 鏈満鐨処P鍦板潃 localipAddress 銆乺ecordPath 椤广�� + + 1 鏈満鐨処P鍦板潃锛屾渶濂介渶瑕侀厤缃噯纭紙濡傛灉涓嶉厤缃▼搴忎細鑷姩鑾峰彇涓�涓湴鍧�浠f浛锛屽鏋滄湰鏈烘湁澶氫釜鍦板潃鍙兘浼氫笉鍑嗙‘锛屽鏋滈厤缃垯浣跨敤閰嶇疆鐨処P鍦板潃锛岃繖鏍峰氨鍑嗙‘锛夛紝 + 鍥犱负璋冪敤 getMediaList 鑾峰彇鍙敤濯掍綋婧愮殑json涓紝浼氫娇鐢ㄥ埌鏈満鐨処P鍦板潃鏉ユ嫾鎺� rtsp銆乺tmp銆乭ttp-flv銆亀s-flv銆乭ls銆乭ttp-mp4 鐨勬挱鏀緐rl 銆� + 璋冪敤 getMediaList 杩斿洖鐨刯son涓蹭腑鏈夊涓媢rl瀛愰」锛� + "url": { + "rtsp": "rtsp://10.0.0.239:554/Media/Camera_00001", + "rtmp": "rtmp://10.0.0.239:1935/Media/Camera_00001", + "http-flv": "http://10.0.0.239:8088/Media/Camera_00001.flv", + "ws-flv": "ws://10.0.0.239:6088/Media/Camera_00001.flv", + "http-mp4": "http://10.0.0.239:5088/Media/Camera_00001.mp4", + "http-hls": "http://10.0.0.239:9088/Media/Camera_00001.m3u8" + } + + 鍏朵腑鐨� 10.0.0.239 灏辨槸鍙互浠� localipAddress 閰嶇疆椤� 绮剧‘鑾峰彇 銆� + + 2銆佸綍鍍忚矾寰勯厤缃� recordPath锛屽鏋滀笉闇�瑕佸綍鍍忥紝鍙互蹇界暐褰曞儚璺緞閰嶇疆 + # 褰曞儚鏂囦欢淇濆瓨璺緞,濡傛灉涓嶉厤缃綍鍍忔枃浠朵繚瀛樺湪搴旂敤绋嬪簭鎵�鍦ㄧ殑璺緞涓嬬殑record瀛愯矾寰勶紝濡傛灉閰嶇疆璺緞鍒欎繚瀛樺湪閰嶇疆鐨勮矾寰勭殑record閲岄潰 + # 娉ㄦ剰锛氬鏋滈渶瑕佸綍鍍忓瓨鍌紝瀛樺偍鐨勭‖鐩樺崈涓囦笉瑕佸垎鍖猴紝鏁翠釜纭洏浣滀负涓�涓尯锛屽洜涓烘湇鍔″櫒娌℃湁鎵ц涓や釜浠ヤ笂鐨勭洏绗︽搷浣溿�� + # 褰曞儚淇濆瓨璺緞閰嶇疆 windows骞冲彴鐨勮矾寰勯厤缃� 姣斿 D:\video ,Linux 骞冲彴閰嶇疆 /home/video + # 褰曞儚璺緞浣跨敤浜嗛粯璁よ矾寰勶紝灏变竴鐩翠娇鐢ㄩ粯璁よ矾寰勶紝濡傛灉浣跨敤浜嗛厤缃矾寰勫氨涓�鐩翠娇鐢ㄩ厤缃矾寰勶紝纭繚浣跨敤鐨勮矾寰勭殑纭洏绌洪棿涓烘渶澶х殑锛屽鏋滈渶瑕佹洿鎹㈣矾寰勶紝瑕佹妸鍘熸潵鐨勫綍鍍忚矾寰勭殑瑙嗛鍏ㄩ儴鍒犻櫎銆� + # 1璺珮娓�5M鐨勬憚鍍忓ご锛屽鏋滃綍鍍忕殑璇濓紝姣忓皬鏃朵骇鐢�2G澶у皬宸﹀彸鐨勫綍鍍忔枃浠躲�傚彲浠ユ牴鎹繖涓潵璁$畻闇�瑕佽喘涔板澶х殑纭洏锛屾帴鍏ュ灏戣矾鎽勫儚澶达紝闇�瑕佽缃綍鍍忔枃浠舵渶澶х殑淇濆瓨鏃堕棿 + + 2锛夈�� 濯掍綋杈撳嚭瑙勫垯锛� [network protocol]://[ip]:[port]/[app]/[stream][.extend] + + 銆愭敞锛氬鏋滆嚜宸变笉鎯虫嫾鎺ユ挱鏀緐rl 锛屽彲浠ヨ皟鐢╤ttp鍑芥暟 /index/api/getMediaList锛岃繑鍥炲彲鎾斁濯� + 浣撴簮涓湁鍚勭鎾斁鍗忚鐨剈rl, 璇﹁涓嬮潰鐨勫嚱鏁� /index/api/getMediaList 銆� + + 璇存槑锛� + [network protocol] 鏈� rtsp銆乺tmp銆乭ttp銆亀s + [ip] 灏辨槸鏈嶅姟鍣ㄦ墍鍦ㄧ殑IP鍦板潃 + [port] 鍚勪釜缃戠粶鍗忚鍒嗕韩鏃惰缃殑绔彛鍙凤紝璇﹁ ABLMediaServer.ini 鐨勯厤缃枃浠讹紝閲岄潰鏈夌浉搴旂殑缃戠粶鍗忚閰嶇疆绔彛 + [app] 鍚勭缃戠粶鍗忚鍙戦�佽繃鏉ヨ缃殑涓�绾у悕瀛� + [stream] 鍚勭缃戠粶鍗忚鍙戦�佽繃鏉ヨ缃殑浜岀骇鍚嶅瓧 + [.extend] 鎵╁睍鍚嶅瓧锛屼富瑕佷负涓轰簡璁块棶鏈嶅姟鍣ㄦ椂锛屾湇鍔″櫒闇�瑕佽瘑鍒綉缁滃崗璁渶瑕佸鎴风鍙戦�佽繃鏉ョ殑鎵╁睍鍚嶃�� + rtsp銆乺tmp 涓嶉渶瑕佹墿灞曞悕锛� + http-flv 銆亀s-flv 鎵╁睍鍚嶄负 .flv + hls 鏂瑰紡璁块棶鏃讹紝 鎵╁睍鍚嶄负 .m3u8 + http-mp4璁块棶鏃� 鎵╁睍鍚嶄负 .mp4 + + 姣斿鏈嶅姟鍣↖P涓� 190.15.240.11 锛宎pp 涓� Media ,stream 涓� Camera_00001 ,鍋囧畾绔彛閮芥槸榛樿 锛岄偅涔堝悇绉嶇綉缁滆闂畊rl濡備笅锛� + rtsp: + rtsp://190.15.240.11:554/Media/Camera_00001 + + rtmp: + rtmp://190.15.240.11:1935/Media/Camera_00001 + + http-flv: + http://190.15.240.11:8088/Media/Camera_00001.flv + + http-mp4: + http://190.15.240.11:5088/Media/Camera_00001.mp4 + + websocket-flv: + ws://190.15.240.11:6088/Media/Camera_00001.flv + + http-hls: + http://190.15.240.11:9088/Media/Camera_00001.m3u8 + + 3锛夈�佷娇鐢╢fmpeg寰� ABLMediaServer 鎺ㄩ�乺tsp 鐮佹祦 銆愬亣瀹� 婧愭憚鍍忔満rtsp RUL涓� rtsp://admin:abldyjh2020@192.168.1.120:554 , ABLMediaServer 鎵�鍦ㄦ湇鍔″櫒鍦板潃涓� 190.15.240.11 銆� + 銆愭帹閫乺tsp鏂瑰紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC銆丟711A銆丟711U 銆� + + ffmpeg -rtsp_transport tcp -i rtsp://admin:abldyjh2020@192.168.1.120:554 -vcodec copy -acodec copy -f rtsp -rtsp_transport tcp rtsp://190.15.240.11:554/Media/Camera_00001 + + 濯掍綋杈撳嚭锛� + rtsp: 銆恟tsp杈撳嚭鏍煎紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC銆丟711A銆丟711U 銆� + rtsp://190.15.240.11:554/Media/Camera_00001 + + rtmp: 銆恟tmp杈撳嚭鏍煎紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC 銆� + rtmp://190.15.240.11:1935/Media/Camera_00001 + + http-flv: 銆恏ttp-flv杈撳嚭鏍煎紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC 銆� + http://190.15.240.11:8088/Media/Camera_00001.flv + + ws-flv: 銆恏ttp-flv杈撳嚭鏍煎紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC 銆� + ws://190.15.240.11:6088/Media/Camera_00001.flv + + http-hls: 銆恏ttp-hls杈撳嚭鏍煎紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC 銆� + http://190.15.240.11:9088/Media/Camera_00001.m3u8 + + 4锛夈�佷娇鐢╢fmpeg寰� ABLMediaServer 鎺ㄩ�乺tmp 鐮佹祦 銆愬亣瀹� 婧愭憚鍍忔満rtsp RUL涓� rtsp://admin:abldyjh2020@192.168.1.120:554 , ABLMediaServer 鎵�鍦ㄦ湇鍔″櫒鍦板潃涓� 190.15.240.11 銆� + 銆愭帹閫乺tmp鏂瑰紡璇存槑锛氳棰戞敮鎸� H264 ,闊抽鏀寔AAC 銆� + + ffmpeg -rtsp_transport tcp -i rtsp://admin:abldyjh2020@192.168.1.120:554 -acodec copy -vcodec copy -f flv rtmp://190.15.240.11:1935/Media/Camera_00001 + + rtsp: 銆恟tsp杈撳嚭鏍煎紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC銆丟711A銆丟711U 銆� + rtsp://190.15.240.11:554/Media/Camera_00001 + + rtmp: 銆恟tmp杈撳嚭鏍煎紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC 銆� + rtmp://190.15.240.11:1935/Media/Camera_00001 + + http-flv: 銆恏ttp-flv杈撳嚭鏍煎紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC 銆� + http://190.15.240.11:8088/Media/Camera_00001.flv + + ws-flv: 銆恏ttp-flv杈撳嚭鏍煎紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC 銆� + ws://190.15.240.11:6088/Media/Camera_00001.flv + + http-hls: 銆恏ttp-hls杈撳嚭鏍煎紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC 銆� + http://190.15.240.11:9088/Media/Camera_00001.m3u8 + + 5锛夈�佷娇鐢╢fmpeg寰� ABLMediaServer 鎺ㄩ�乺tsp鐨勬枃浠剁爜娴� 銆愬亣瀹氬獟浣撴枃浠朵负锛欶:\video\MP4鏈夊0闊砛H264_AAC_2021-02-10_1080P.mp4 , ABLMediaServer 鎵�鍦ㄦ湇鍔″櫒鍦板潃涓� 190.15.240.11 銆� + 銆愭帹閫乺tsp鏂瑰紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC銆丟711A銆丟711U 銆� + + ffmpeg -re -stream_loop -1 -i F:\video\MP4鏈夊0闊砛H264_AAC_2021-02-10_1080P.mp4 -vcodec copy -acodec copy -rtsp_transport tcp -f rtsp rtsp://190.15.240.11:554/Media/Camera_00001 + + 濯掍綋杈撳嚭锛� + rtsp: 銆恟tsp杈撳嚭鏍煎紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC銆丟711A銆丟711U 銆� + rtsp://190.15.240.11:554/Media/Camera_00001 + + rtmp: 銆恟tmp杈撳嚭鏍煎紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC 銆� + rtmp://190.15.240.11:1935/Media/Camera_00001 + + http-flv: 銆恏ttp-flv杈撳嚭鏍煎紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC 銆� + http://190.15.240.11:8088/Media/Camera_00001.flv + + ws-flv: 銆恏ttp-flv杈撳嚭鏍煎紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC 銆� + ws://190.15.240.11:6088/Media/Camera_00001.flv + + http-hls: 銆恏ttp-hls杈撳嚭鏍煎紡璇存槑锛氳棰戞敮鎸� H264銆丠265 ,闊抽鏀寔AAC 銆� + http://190.15.240.11:9088/Media/Camera_00001.m3u8 + + 銆愮壒鍒敞鏄庯細鍙互寰�10000 鐨剈dp绔彛鎺ㄩ�乀S鐮佹祦锛屾帹閫佹垚鍔熷悗锛屽彲浠ヨ皟鐢� http鍑芥暟getMediaList鏉ヨ幏鍙栨帴鍏ョ殑rtp鐮佹祦 銆� + ffmpeg.exe -re -stream_loop -1 -i F:\video\H264_20191021094432.mp4 -vcodec copy -f rtp_mpegts rtp://127.0.0.1:100000 + + + 6锛夈�佹祦濯掍綋杈撳嚭鎾斁楠岃瘉 + 濡傛灉瑙嗛鏄痳tsp鏂瑰紡锛屽彲浠ラ噰鐢╒LC杩涜鎾斁楠岃瘉銆� +銆�銆�銆�銆� 濡傛灉rtmp銆乭ttp-flv 鍗忚锛岃棰戜负h264 ,鍙互閲囩敤VLC鎾斁楠岃瘉銆佹垨鑰匓绔欑殑 flv.js 鎾斁鍣ㄩ獙璇� + 濡傛灉rtmp銆乭ttp-flv 鍗忚锛岃棰戜负h265 ,鍙互閲囩敤EasyPlayer.js 鎾斁鍣ㄩ獙璇侊紝銆愭敞锛歏LC 銆乫lv.js 涓嶆敮鎸丷tmp鐨凥265瑙嗛銆佷篃涓嶆敮鎸乭ttp-flv鐨�265瑙嗛 銆� + + 7锛夈�佺敵璇蜂唬鐞唕tsp銆乺tmp銆乫lv 鎷夋祦 銆佹湰鍦癿p4鏂囦欢 锛岀敵璇峰垹闄や唬鐞嗘媺娴� + 1) 鐢宠浠g悊rtsp銆乺tmp銆乫lv 鎷夋祦銆佹湰鍦癿p4鏂囦欢 + + URL: /index/api/addStreamProxy + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc + vhost 姣斿 _defaultVhost_ + app 搴旂敤鍚� 姣斿 Media + stream 濯掍綋娴佸悕 姣斿 Camera_00001 銆�/app/stream 缁勫悎璧锋潵涓嶈兘閲嶅銆� + url 浠g悊鎷夋祦url 姣斿 rtsp://admin:abldyjh2020@192.168.1.120:554 鎴栬�� + rtmp://190.15.240.36:1935/Media/Camera_00001 鎴栬�� + http://190.15.240.36:8088/Media/Camera_00001.flv 鎴栬�� + d:\\video\\xxxx.mp4 (windows骞冲彴) + /home/video/xxxx.mp4 (Linux骞冲彴) + isRtspRecordURL 浠g悊鎷夋祦鐨剈rl鏄惁鏄痳tsp褰曞儚鍥炴斁鐨剈rl 榛樿0 锛�1 鏄�愬彲閫夊弬鏁般�戯紝濡傛灉鏄痳tsp褰曞儚鍥炴斁鐨剈rl锛屽彲浠ヨ繘琛屾帶鍒朵唬鐞嗘媺娴侊紝姣斿 鏆傚仠銆佺户缁�佹帶鍒跺�嶉�熸挱鏀撅紝鎷栧姩鎾斁绛夌瓑 锛屽弬鑰� + 鍑芥暟 /index/api/controlStreamProxy + optionsHeartbeat options蹇冭烦 options 鍛戒护浣滀负蹇冭烦鍖� 銆愬彲閫夊弬鏁般�� 浠g悊rtsp鎷夋祦鎴愬悗锛屾槸鍚﹀紑鍚彂閫� 0 涓嶅紑鍚紝 1 寮�鍚� 锛岄粯璁や笉寮�鍚紝濡傛灉浠� ZLMediaKit 鎷夊彇rtsp娴侊紝寤鸿璁剧疆涓� 1 + enable_mp4 鏄惁褰曞儚 1 褰曞儚锛�0 涓嶅綍鍍� 銆愬彲閫夊弬鏁般�� + enable_hls 鏄惁hls鍒囩墖 1 杩涜hls 鍒囩墖 锛�0 涓嶅垏鐗� 銆愬彲閫夊弬鏁般�� + convertOutWidth 杞爜瀹� 杞爜杈撳嚭瀹� 濡傛灉鎸囧畾瀹姐�侀珮 銆愬彲閫夊弬鏁般�慬1920 x 1080, 1280 x 720 ,960 x 640 ,800 x 480 ,720 x 576 , 720 x 480 ,640 x 480 ,352 x 288 ] 灏辫鏄� H265 杩涜杞爜涓� H264 + convertOutHeight 杞爜楂� 杞爜杈撳嚭楂� 濡傛灉鎸囧畾瀹姐�侀珮 銆愬彲閫夊弬鏁般�慬1920 x 1080, 1280 x 720 ,960 x 640 ,800 x 480 ,720 x 576 , 720 x 480 ,640 x 480 ,352 x 288 ] 灏辫鏄� H265 杩涜杞爜涓� H264 + H264DecodeEncode_enable H264鏄惁瑙g爜 H264鍒嗚鲸鐜囬珮鍐嶇紪鐮侀檷鍒嗚鲸鐜囷紝銆愬彲閫夊弬鏁般�戞湁鏃跺�欓渶瑕丠264瑙嗛杩涜鍏堣В鐮佸啀閲嶆柊缂栫爜闄嶄綆鍒嗚鲸鐜囷紝鍙互璁剧疆 H264DecodeEncode_enable 涓� 1 锛岄檷涓嬫潵鐨勫垎杈ㄧ巼涓� convertOutWidth 銆� convertOutHeight + disableVideo 鏄惁杩囨护鎺夎棰� 0 涓嶈繃婊� 锛�1 杩囨护瑙嗛 銆愬彲閫夊弬鏁般�� 榛樿 0 涓嶈繃婊よ棰戯紝鍥藉鐢电綉鍗忚涓渶瑕佹憚鍍忓ご鍜屾憚鍍忓ご鐩存帴闇�瑕佸鎺ワ紝鎽勫儚澶存帹涓婃潵鐨勫獟浣撴祦涓繃婊ゆ帀瑙嗛锛坉isableVideo=1锛夊啀鍙戠粰瀵规柟鎵嶈兘瀹屾垚瀵硅 + disableAudio 鏄惁杩囨护鎺夐煶棰� 0 涓嶈繃婊� 锛�1 杩囨护闊抽 銆愬彲閫夊弬鏁般�� 榛樿 0 涓嶈繃婊ら煶棰戯紝鏈夋椂鍊欎笉闇�瑕侀煶棰戙�佹垨鑰呯敱浜庢晱鎰熷師鍥犵姝㈡敹鍚煶棰戯紝鍙互杩囨护鎺夐煶棰戞祦鎺ュ叆娴佸獟浣撴湇鍔″櫒锛屽彧闇�瑕佽缃� disableAudio = 1鍗冲彲杩囨护闊抽 + + http GET 鏂瑰紡 + 1 璇锋眰rtsp鎷夋祦鏍蜂緥 + http://190.15.240.11:7088/index/api/addStreamProxy?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&vhost=_defaultVhost_&app=Media&stream=Camera_00001&url=rtsp://admin:abldyjh2020@192.168.1.120:554&enable_mp4=0 + + http POST 鏂瑰紡 + 1 璇锋眰rtsp鎷夋祦鏍蜂緥 + http璇锋眰 url 鏍蜂緥 + http://190.15.240.11:7088/index/api/addStreamProxy + body 鍙傛暟 , json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","vhost":"_defaultVhost_","app":"Media","stream":"Camera_00001","url":"rtsp://admin:abldyjh2020@192.168.1.120:554","enable_mp4":0} + + 杩斿洖Body锛� + { + "code": 0, # 0涓烘搷浣滄垚鍔燂紝鍏朵粬鍊间负鎿嶄綔澶辫触 + "memo": "success", # success 涓烘垚鍔� + "key": 93 # 鎴愬姛鏃惰繑鍥炲ぇ浜�0鐨勫�硷紝涓轰唬鐞嗘媺娴佺殑Key ,鍒犻櫎浠g悊鎷夋祦鏃堕渶瑕佺敤鐨� + } + + 2) 鎺у埗浠g悊鎷夋祦锛屾瘮濡� 鏆傚仠銆佺户缁�佹帶鍒跺�嶉�熸挱鏀撅紝鎷栧姩鎾斁绛夌瓑 + URL: /index/api/controlStreamProxy + + 鍙傛暟锛� + secret 鏈嶅姟鍣ㄥ瘑鐮� 锛屾瘮濡� 035c73f7-bb6b-4889-a715-d9eb2d1925cc + key 姣斿 93 锛岃皟鐢� addStreamProxy 杩斿洖鐨� key 鐨勫�� + command 姣斿 pause銆乺esume銆乻eek銆乻cale 瀵逛簬瀵瑰簲鎰忔�濓細鏆傚仠銆佺户缁�佹嫋鍔ㄦ挱鏀俱�佸�嶉�熸挱鏀� + value (瀛楃涓�) 姣斿 1銆�2銆�4銆�8銆�16(鍊嶉�熸挱鏀�) 锛宯pt鏂瑰紡锛�360銆�1800銆�3600锛堟嫋鍔ㄦ挱鏀撅級锛宑lock鏂瑰紡锛歝lock=20230625T113000Z-19700101T000001Z锛堟嫋鍔ㄥ埌锛�2023-06-25 11:30:00鎵ц鎾斁锛� + value 涓哄彲閫夊弬鏁帮紝褰� command 涓� pause,resume 鏃讹紝value 涓嶇敤 锛屽綋 command 涓簊eek,sacale + 鏄紝闇�瑕佸~鍐檝alue鐨勫�� + 鍛戒护銆佸�兼牱渚嬪垪琛� + command value 娉ㄩ噴 + pause 涓嶉渶瑕� 鏆傚仠鍥炴斁 + resume 涓嶉渶瑕� 缁х画鍥炴斁 + scale 2 2鍊嶉�熷洖鏀� + seek 360 鎷栨嫿浠庡紑濮嬬偣璁$畻璧峰埌360绉掑鍐嶅洖鏀� 銆恘tp鏂瑰紡鎷栨嫿 锛屼唬琛� 鍗庝负 VCN\3800 銆� + seek clock=20230625T113000Z-19700101T000001Z 鎷栨嫿鍒�20230625T113000Z澶勫啀鍥炴斁 銆恈lock鏂瑰紡鎷栨嫿 锛屼唬琛� 娴峰悍NVR 銆� + + http GET 鏂瑰紡 + http://190.15.240.11:7088/index/api/controlStreamProxy?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=93&command=pause 鏆傚仠 + http://190.15.240.11:7088/index/api/controlStreamProxy?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=93&command=resume 缁х画 + http://190.15.240.11:7088/index/api/controlStreamProxy?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=93&command=scale&value=2 2鍊嶉�熷洖鏀� + http://190.15.240.11:7088/index/api/controlStreamProxy?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=93&command=seek&value=360 鎷栨嫿鍒�360绉掑缁х画鍥炴斁 + http://190.15.240.11:7088/index/api/controlStreamProxy?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=93&command=seek&value=clock=20230625T113000Z-19700101T000001Z + + http POST 鏂瑰紡 + http URL : + http://190.15.240.11:7088/index/api/controlStreamProxy + + body 鍙傛暟 Json鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","key":93,"command":"pause"} + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","key":93,"command":"resume"} + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","key":93,"command":"sacale","value":"2"} + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","key":93,"command":"seek","value":"360"} + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","key":93,"command":"seek","value":"clock=20230625T113000Z-19700101T000001Z"} + + 杩斿洖Body锛� + { + "code": 0, # 0涓烘搷浣滄垚鍔燂紝鍏朵粬鍊间负鎿嶄綔澶辫触 + "memo": "success", # success 涓烘垚鍔� ,濡傛灉澶辫触鏄叾浠栧�� + } + + 銆愭敞锛氬彂閫乭ttp璇锋眰 鍙互浣跨敤curl銆乸ostman銆佹垨鑰呭叾浠栨爣鍑嗙殑http宸ュ叿 銆� + + + 3) 鐢宠鍒犻櫎浠g悊rtsp銆乺tmp銆乫lv 鎷夋祦 + URL: /index/api/delStreamProxy + + 鍙傛暟锛� + secret 鏈嶅姟鍣ㄥ瘑鐮� 锛屾瘮濡� 035c73f7-bb6b-4889-a715-d9eb2d1925cc + key 姣斿 93 锛岃皟鐢� addStreamProxy 杩斿洖鐨� key 鐨勫�� + + http GET 鏂瑰紡 + http://190.15.240.11:7088/index/api/delStreamProxy?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=93 + + http POST 鏂瑰紡 + http URL : + http://190.15.240.11:7088/index/api/delStreamProxy + + body 鍙傛暟 Json鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","key":93} + + 杩斿洖Body锛� + { + "code": 0, # 0涓烘搷浣滄垚鍔燂紝鍏朵粬鍊间负鎿嶄綔澶辫触 + "memo": "success", # success 涓烘垚鍔� ,濡傛灉澶辫触鏄叾浠栧�� + } + + 銆愭敞锛氬彂閫乭ttp璇锋眰 鍙互浣跨敤curl銆乸ostman銆佹垨鑰呭叾浠栨爣鍑嗙殑http宸ュ叿 銆� + + + + 8锛夈�佺敵璇蜂唬鐞唕tsp銆乺tmp銆佹帹娴� 銆佺敵璇峰垹闄や唬鐞嗘媺娴� + 1) 鐢宠浠g悊rtsp銆乺tmp 鎺ㄦ祦锛堟敞鎰忥細涓嶆槸鍥芥爣GB28181鎺ㄦ祦锛� + + URL: /index/api/addPushProxy + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 锛� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc + vhost 姣斿 _defaultVhost_ + app 搴旂敤鍚� 姣斿 Media + stream 濯掍綋娴佸悕 姣斿 Camera_00001 + url 浠g悊鎺ㄦ祦url 姣斿 rtsp://190.15.240.36:554/Media/Camera_00001 鎴栬�� rtmp://190.15.240.36:1935/Media/Camera_00001 + disableVideo 鏄惁杩囨护鎺夎棰� 0 涓嶈繃婊� 锛�1 杩囨护瑙嗛 銆愬彲閫夊弬鏁般�� 榛樿 0 涓嶈繃婊よ棰戯紝鍥藉鐢电綉鍗忚涓渶瑕佹憚鍍忓ご鍜屾憚鍍忓ご鐩存帴闇�瑕佸鎺ワ紝鎽勫儚澶存帹涓婃潵鐨勫獟浣撴祦涓繃婊ゆ帀瑙嗛锛坉isableVideo=1锛夊啀鍙戠粰瀵规柟鎵嶈兘瀹屾垚瀵硅 + disableAudio 鏄惁杩囨护鎺夐煶棰� 0 涓嶈繃婊� 锛�1 杩囨护闊抽 銆愬彲閫夊弬鏁般�� 榛樿 0 涓嶈繃婊ら煶棰戯紝鏈夋椂鍊欎笉闇�瑕侀煶棰戙�佹垨鑰呯敱浜庢晱鎰熷師鍥犵姝㈡敹鍚煶棰戯紝鍙互杩囨护鎺夐煶棰戞祦鎺ュ叆娴佸獟浣撴湇鍔″櫒锛屽彧闇�瑕佽缃� disableAudio = 1鍗冲彲杩囨护闊抽 + + http GET 鏂瑰紡 + http://190.15.240.11:7088/index/api/addPushProxy?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&vhost=_defaultVhost_&app=Media&stream=Camera_00001&url=rtsp://190.15.240.36:554/Media/Camera_00001 + + http POST 鏂瑰紡 + http URL + http://190.15.240.11:7088/index/api/addPushProxy + + http Body 鍙傛暟 (json鏍煎紡) + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","vhost":"_defaultVhost_","app":"Media","stream":"Camera_00001","url":"rtsp://190.15.240.36:554/Media/Camera_00001"} + + 杩斿洖Body锛� + { + "code": 0, # 0涓烘搷浣滄垚鍔燂紝鍏朵粬鍊间负鎿嶄綔澶辫触 + "memo": "success", # success 涓烘垚鍔� + "key": 93 # 鎴愬姛鏃惰繑鍥炲ぇ浜�0鐨勫�硷紝涓轰唬鐞嗘帹娴佺殑Key ,鍒犻櫎浠g悊鎺ㄦ祦鏃堕渶瑕佺敤鐨� + } + + 2) 鐢宠鍒犻櫎浠g悊rtsp銆乺tmp 鎺ㄦ祦 + URL: /index/api/delPushProxy + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 锛� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc + key 涓婚敭ID 姣斿 93 锛岃皟鐢� /index/api/addPushProxy 杩斿洖鐨� key 鐨勫�� + + http GET 鏂瑰紡 + http://190.15.240.11:7088/index/api/delPushProxy?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=93 + + http POST 鏂瑰紡 + http URL + http://190.15.240.11:7088/index/api/delPushProxy + + http Body json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","key":93} + + 杩斿洖Body锛� + { + "code": 0, # 0涓烘搷浣滄垚鍔燂紝鍏朵粬鍊间负鎿嶄綔澶辫触 + "memo": "success", # success 涓烘垚鍔� ,濡傛灉澶辫触鏄叾浠栧�� + } + + 9锛夈�佸垱寤篏B28181\Jtt1078鎺ユ敹绔彛銆佸垹闄B28181\Jtt1078鎺ユ敹绔彛銆佸浗鏍囨殏鍋溿�佺户缁� + + 1 鍒涘缓GB28181\Jtt1078鎺ユ敹绔彛 + + URL: /index/api/openRtpServer + 鍔熻兘锛� + 鍒涘缓GB28181\Jtt1078鎺ユ敹绔彛锛屽鏋滆绔彛鎺ユ敹瓒呮椂锛屼細鑷姩鍥炴敹锛屼笉鐢ㄨ皟鐢� /index/api/closeRtpServer + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc + vhost 姣斿 _defaultVhost_ + app 搴旂敤鍚� 姣斿 gb28181 銆乺tp 绛夌瓑 (鎺ュ叆) + stream_id 濯掍綋娴佸悕 姣斿 44030012343220234234 锛堟渶濂芥槸鍥芥爣缂栧彿锛�( 鎺ュ叆 ) + payload PS璐熻浇鍊� 鍥芥爣SDP閲岄潰PS璐熻浇鍊笺��锛屾瘮濡� 96,98 ,108 ,涓�瀹氳浠庡浗鏍嘢DP閲岄潰鑾峰彇 + port 绔彛鍙� 0 锛岀敱鏈嶅姟鍣ㄨ嚜鍔ㄥ垎閰嶏紝鍒殑鍊� 姣斿 26324 涓烘寚瀹氱鍙� + enable_tcp 鏄惁涓簍cp 0 涓� udp , 1 涓簍cp琚姩鏂瑰紡 锛�2 涓簍cp涓诲姩杩炴帴鏂瑰紡 + dst_url 鐩爣IP 鐩爣IP鍦板潃 銆愬彲閫夊弬鏁� 锛屽綋 enable_tcp 涓� 2 鏃跺繀椤诲~鍐� 銆� + dst_port 鐩爣绔彛 鐩爣绔彛 銆愬彲閫夊弬鏁� 锛屽綋 enable_tcp 涓� 2 鏃跺繀椤诲~鍐欍�� + + enable_mp4 鏄惁褰曞儚 1 褰曞儚锛�0 涓嶅綍鍍� 銆愬彲閫夊弬鏁般�� + enable_hls 鏄惁hls鍒囩墖 1 杩涜hls 鍒囩墖 锛�0 涓嶅垏鐗� 銆愬彲閫夊弬鏁般�� + convertOutWidth 杞爜瀹� 杞爜杈撳嚭瀹� 濡傛灉鎸囧畾瀹姐�侀珮 銆愬彲閫夊弬鏁般�慬1920 x 1080, 1280 x 720 ,960 x 640 ,800 x 480 ,720 x 576 , 720 x 480 ,640 x 480 ,352 x 288 ] 灏辫鏄� H265 杩涜杞爜涓� H264 + convertOutHeight 杞爜楂� 杞爜杈撳嚭楂� 濡傛灉鎸囧畾瀹姐�侀珮 銆愬彲閫夊弬鏁般�慬1920 x 1080, 1280 x 720 ,960 x 640 ,800 x 480 ,720 x 576 , 720 x 480 ,640 x 480 ,352 x 288 ] 灏辫鏄� H265 杩涜杞爜涓� H264 + H264DecodeEncode_enable H264鏄惁瑙g爜 H264鍒嗚鲸鐜囬珮鍐嶇紪鐮侀檷鍒嗚鲸鐜囷紝銆愬彲閫夊弬鏁般�戞湁鏃跺�欓渶瑕丠264瑙嗛杩涜鍏堣В鐮佸啀閲嶆柊缂栫爜闄嶄綆鍒嗚鲸鐜囷紝鍙互璁剧疆 H264DecodeEncode_enable 涓� 1 锛岄檷涓嬫潵鐨勫垎杈ㄧ巼涓� convertOutWidth 銆� convertOutHeight + RtpPayloadDataType rtp鎵撳寘鏁版嵁鏍煎紡 rtp鎵撳寘鏁版嵁鏍煎紡 銆愬彲閫夊弬鏁� 锛岄粯璁� 1 銆� [1 PS 鍥芥爣gb28181 ]銆乕 2 ES 瑙嗛鏀寔 H246\H265锛岄煶棰戝彧鏀寔G711A銆丟711U ]銆乕3 XHB (涓�瀹跺叕鍙哥殑鎵撳寘鏍煎紡) 鍙敮鎸佽棰戯紝闊抽涓嶈兘鍔犲叆鎵撳寘 ] [ 4 銆丣t1078锛�2016鐗堟湰锛夌爜娴佹帴鍏� ] + disableVideo 鏄惁杩囨护鎺夎棰� 0 涓嶈繃婊� 锛�1 杩囨护瑙嗛 銆愬彲閫夊弬鏁般�� 榛樿 0 涓嶈繃婊よ棰戯紝鍥藉鐢电綉鍗忚涓渶瑕佹憚鍍忓ご鍜屾憚鍍忓ご鐩存帴闇�瑕佸鎺ワ紝鎽勫儚澶存帹涓婃潵鐨勫獟浣撴祦涓繃婊ゆ帀瑙嗛锛坉isableVideo=1锛夊啀鍙戠粰瀵规柟鎵嶈兘瀹屾垚瀵硅 + disableAudio 鏄惁杩囨护鎺夐煶棰� 0 涓嶈繃婊� 锛�1 杩囨护闊抽 銆愬彲閫夊弬鏁般�� 榛樿 0 涓嶈繃婊ら煶棰戯紝鏈夋椂鍊欎笉闇�瑕侀煶棰戙�佹垨鑰呯敱浜庢晱鎰熷師鍥犵姝㈡敹鍚煶棰戯紝鍙互杩囨护鎺夐煶棰戞祦鎺ュ叆娴佸獟浣撴湇鍔″櫒锛屽彧闇�瑕佽缃� disableAudio = 1鍗冲彲杩囨护闊抽 + jtt1078_version 鎸囧畾1078鐗堟湰鍙� 2013銆�2016銆�2019 銆愬彲閫夊弬鏁般�� 2013 鎸囧畾涓� 2013鐗堟湰 銆�2016 鎸囧畾涓� 2016鐗堟湰銆� 2019 鎸囧畾涓� 2019 鐗堟湰 + + send_app 搴旂敤鍚� 姣斿 gb28181 銆乺tp 绛夌瓑 銆愬彲閫夊弬鏁般�� 鐢ㄤ簬鎶婃湰鏈嶅姟鍣ㄧ殑鐮佹祦锛坰end_app/send_stream_id锛夊洖澶嶇粰鍙戦�佺 + send_stream_id 濯掍綋娴佸悕 姣斿 44030012343220234234 銆愬彲閫夊弬鏁般�� 鐢ㄤ簬鎶婃湰鏈嶅姟鍣ㄧ殑鐮佹祦锛坰end_app/send_stream_id锛夊洖澶嶇粰鍙戦�佺 + send_disableVideo 鏄惁杩囨护鎺夎棰� 0 涓嶈繃婊� 锛�1 杩囨护瑙嗛 銆愬彲閫夊弬鏁般�� 榛樿 0 涓嶈繃婊よ棰戯紝鍥藉鐢电綉鍗忚涓渶瑕佹憚鍍忓ご鍜屾憚鍍忓ご鐩存帴闇�瑕佸鎺ワ紝鎽勫儚澶存帹涓婃潵鐨勫獟浣撴祦涓繃婊ゆ帀瑙嗛锛坉isableVideo=1锛夊啀鍙戠粰瀵规柟鎵嶈兘瀹屾垚瀵硅 + send_disableAudio 鏄惁杩囨护鎺夐煶棰� 0 涓嶈繃婊� 锛�1 杩囨护闊抽 銆愬彲閫夊弬鏁般�� 榛樿 0 涓嶈繃婊ら煶棰戯紝鏈夋椂鍊欎笉闇�瑕侀煶棰戙�佹垨鑰呯敱浜庢晱鎰熷師鍥犵姝㈡敹鍚煶棰戯紝鍙互杩囨护鎺夐煶棰戞祦鎺ュ叆娴佸獟浣撴湇鍔″櫒锛屽彧闇�瑕佽缃� disableAudio = 1鍗冲彲杩囨护闊抽 + detectSendAppStream 鏄惁妫�娴嬪彂閫佹祦ID 0 涓嶆娴� 锛�1 妫�娴� 銆愬彲閫夊弬鏁般�� 榛樿 1 鍦ㄩ渶瑕佸洖浼犵爜娴佹椂锛屼簨鍏堟娴� send_app銆乻end_stream_id 鏄惁瀛樺湪銆�0 涓嶆娴嬶紝鍏堟墦寮�鎺ユ敹鎴愬姛鍚庯紝绋嶅悗鍐嶆妸send_app銆乻end_stream_id鎺ュ叆娴佸獟浣擄紝openRtpServer鍑芥暟鑷姩鍥炲缁欎笅绾ф祦濯掍綋銆� + + http GET 鏂瑰紡 + http://190.15.240.11:7088/index/api/openRtpServer?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&vhost=_defaultVhost_&app=gb28181&stream_id=44030012343220234234&payload=96&port=0&enable_tcp=0&enable_mp4=0 + + http POST 鏂瑰紡 + http URL + http://190.15.240.11:7088/index/api/openRtpServer + + http 鍙傛暟鍊� + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","vhost":"_defaultVhost_","app":"Media","stream_id":"Camera_00001","payload":96,"port":0,"enable_tcp":0,"enable_mp4":0} + + 杩斿洖Body锛� + { + "code": 0, # 0涓烘搷浣滄垚鍔燂紝鍏朵粬鍊间负鎿嶄綔澶辫触 + "port": 8356, # 绔彛鍙� + "memo": "success", # success 涓烘垚鍔� + "key": 93 # 鎴愬姛鏃惰繑鍥炲ぇ浜�0鐨勫�硷紝GB28181鎺ユ敹瀹炰緥key ,鍏抽棴鏃堕渶瑕� + } + + 2 鍒犻櫎 GB28181\Jtt1078鎺ユ敹绔彛 + URL: /index/api/closeRtpServer + 鍔熻兘锛� + 鍒犻櫎GB28181\Jtt1078鎺ユ敹绔彛 + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc + key 涓婚敭鍊糏D 姣斿 93 锛� 璋冪敤 /index/api/openRtpServer 杩斿洖鐨� key 鐨勫�� + + http GET 鏂瑰紡 + http://190.15.240.11:7088/index/api/closeRtpServer?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=93 + + http POST 鏂瑰紡 + http URL + http://190.15.240.11:7088/index/api/closeRtpServer + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","key":93} + + 杩斿洖Body锛� + { + "code": 0, # 0涓烘搷浣滄垚鍔燂紝鍏朵粬鍊间负鎿嶄綔澶辫触 + "memo": "success", # success 涓烘垚鍔� ,濡傛灉澶辫触鏄叾浠栧�� + } + + 3 鏆傚仠 GB28181\Jtt1078鎺ユ敹绔彛锛屽彧鏄笉妫�娴嬫帴鏀剁鍙f槸鍚︽湁鐮佹祦杩涘叆銆� + URL: /index/api/pauseRtpServer + 鍔熻兘锛� + 鏆傚仠GB28181\Jtt1078鎺ユ敹 + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc + key 涓婚敭鍊糏D 姣斿 93 锛� 璋冪敤 /index/api/openRtpServer 杩斿洖鐨� key 鐨勫�� + + http GET 鏂瑰紡 + http://44.35.33.249:7088/index/api/pauseRtpServer?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=588 + + http POST 鏂瑰紡 + http URL + http://44.35.33.249:7088/index/api/pauseRtpServer + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","key":588} + + 杩斿洖Body锛� + { + "code": 0, # 0涓烘搷浣滄垚鍔燂紝鍏朵粬鍊间负鎿嶄綔澶辫触 + "memo": "success", # success 涓烘垚鍔� ,濡傛灉澶辫触鏄叾浠栧�� + } + + 4 缁х画 GB28181\Jtt1078鎺ユ敹绔彛锛屽紑鍚娴嬬鍙f槸鍚︽湁鐮佹祦鍒拌揪锛屽鏋滄椂闀垮埌杈炬渶澶ц秴鏃舵病鏈夌爜娴佽繘鍏ヤ細绔嬪嵆鍒犻櫎鎺ユ敹绔彛 + URL: /index/api/resumeRtpServer + 鍔熻兘锛� + 缁х画GB28181\Jtt1078鎺ユ敹 + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc + key 涓婚敭鍊糏D 姣斿 93 锛� 璋冪敤 /index/api/openRtpServer 杩斿洖鐨� key 鐨勫�� + + http GET 鏂瑰紡 + http://44.35.33.249:7088/index/api/resumeRtpServer?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=588 + + http POST 鏂瑰紡 + http URL + http://44.35.33.249:7088/index/api/resumeRtpServer + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","key":588} + + 杩斿洖Body锛� + { + "code": 0, # 0涓烘搷浣滄垚鍔燂紝鍏朵粬鍊间负鎿嶄綔澶辫触 + "memo": "success", # success 涓烘垚鍔� ,濡傛灉澶辫触鏄叾浠栧�� + } + + 10锛夈�佸垱寤篏B28181\Jtt1078 鍙戦�佺鍙c�佸垹闄B28181\Jtt1078鍙戦�佺鍙� + + 1 鍒涘缓GB28181\Jtt1078鍙戦�佺鍙� + + URL: /index/api/startSendRtp + 鍔熻兘锛� + 鍒涘缓GB28181\Jtt1078鍙戦�佺鍙o紝濡傛灉璇ュ彂閫佺绔彛娌℃湁鏁版嵁鍙戦�侊紝浼氳嚜鍔ㄥ洖鏀讹紝涓嶇敤璋冪敤 /index/api/stopSendRtp + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc + vhost 姣斿 _defaultVhost_ + app 搴旂敤鍚� 姣斿 gb28181 銆乺tp 绛夌瓑 (鍙戦�佸嚭鍘�) + stream 濯掍綋娴佸悕 姣斿 44030012343220234234 锛堝彂閫佸嚭鍘伙級 + payload PS璐熻浇鍊� 鍥芥爣SDP閲岄潰PS璐熻浇鍊笺��锛屾瘮濡� 96,98 ,108 ,rtp鎵撳寘鏃堕渶瑕� + ssrc 鍚屾婧� ssrc + src_port 鍙戦�佺缁戝畾鐨勭鍙e彿 鎸囧畾鏈嶅姟鍣ㄥ湪鍙戦�佸浗鏍囨祦鏃剁粦瀹氱殑绔彛鍙凤紝濡傛灉涓� 0 锛岀敱鏈嶅姟鍣ㄨ嚜鍔ㄥ垎閰嶏紝鍒殑鍊� 姣斿 26324 涓烘寚瀹氱鍙� + dst_url 鐩爣IP 鐩爣IP鍦板潃 + dst_port 鐩爣绔彛 鐩爣绔彛 + is_udp 鏄惁璁剧疆udp 0 TCP涓诲姩鏂瑰紡锛�1 udp 鏂瑰紡 锛�2 涓� TCP 琚姩鏂瑰紡 + RtpPayloadDataType rtp鎵撳寘鏁版嵁鏍煎紡 銆愬彲閫夊弬鏁� 锛岄粯璁� 1 銆� [ 1 PS 鍥芥爣gb28181 ]銆乕 2 ES 瑙嗛鏀寔 H246\H265锛岄煶棰戝彧鏀寔G711A銆丟711U ]銆乕3 XHB (涓�瀹跺叕鍙哥殑鎵撳寘鏍煎紡) 鍙敮鎸佽棰戯紝闊抽涓嶈兘鍔犲叆鎵撳寘 ] [ 4 銆丣t1078锛�2016鐗堟湰锛夌爜娴佸彂閫� ] + disableVideo 鏄惁杩囨护鎺夎棰� 0 涓嶈繃婊� 锛�1 杩囨护瑙嗛 銆愬彲閫夊弬鏁般�� 榛樿 0 涓嶈繃婊よ棰戯紝鍥藉鐢电綉鍗忚涓渶瑕佹憚鍍忓ご鍜屾憚鍍忓ご鐩存帴闇�瑕佸鎺ワ紝鎽勫儚澶存帹涓婃潵鐨勫獟浣撴祦涓繃婊ゆ帀瑙嗛锛坉isableVideo=1锛夊啀鍙戠粰瀵规柟鎵嶈兘瀹屾垚瀵硅 + disableAudio 鏄惁杩囨护鎺夐煶棰� 0 涓嶈繃婊� 锛�1 杩囨护闊抽 銆愬彲閫夊弬鏁般�� 榛樿 0 涓嶈繃婊ら煶棰戯紝鏈夋椂鍊欎笉闇�瑕侀煶棰戙�佹垨鑰呯敱浜庢晱鎰熷師鍥犵姝㈡敹鍚煶棰戯紝鍙互杩囨护鎺夐煶棰戞祦鎺ュ叆娴佸獟浣撴湇鍔″櫒锛屽彧闇�瑕佽缃� disableAudio = 1鍗冲彲杩囨护闊抽 + jtt1078_version 鎸囧畾1078鐗堟湰鍙� 2013銆�2016銆�2019 銆愬彲閫夊弬鏁般�� 2013 鎸囧畾涓� 2013鐗堟湰 銆�2016 鎸囧畾涓� 2016鐗堟湰銆� 2019 鎸囧畾涓� 2019 鐗堟湰 + + recv_app 搴旂敤鍚� 姣斿 gb28181 銆乺tp 绛夌瓑 銆愬彲閫夊弬鏁般�� 鎺ュ叆杩涙潵 閫氳繃鍦ㄥ彂閫佺殑杩炴帴涓帴鏀惰繘鏉ョ殑鐮佹祦 + recv_stream 濯掍綋娴佸悕 姣斿 44030012343220234234 銆愬彲閫夊弬鏁般�� 鎺ュ叆杩涙潵 閫氳繃鍦ㄥ彂閫佺殑杩炴帴涓帴鏀惰繘鏉ョ殑鐮佹祦 + recv_disableVideo 鏄惁杩囨护鎺夎棰� 0 涓嶈繃婊� 锛�1 杩囨护瑙嗛 銆愬彲閫夊弬鏁般�� 榛樿 0 涓嶈繃婊よ棰戯紝鍥藉鐢电綉鍗忚涓渶瑕佹憚鍍忓ご鍜屾憚鍍忓ご鐩存帴闇�瑕佸鎺ワ紝鎽勫儚澶存帹涓婃潵鐨勫獟浣撴祦涓繃婊ゆ帀瑙嗛锛坉isableVideo=1锛夊啀鍙戠粰瀵规柟鎵嶈兘瀹屾垚瀵硅 + recv_disableAudio 鏄惁杩囨护鎺夐煶棰� 0 涓嶈繃婊� 锛�1 杩囨护闊抽 銆愬彲閫夊弬鏁般�� 榛樿 0 涓嶈繃婊ら煶棰戯紝鏈夋椂鍊欎笉闇�瑕侀煶棰戙�佹垨鑰呯敱浜庢晱鎰熷師鍥犵姝㈡敹鍚煶棰戯紝鍙互杩囨护鎺夐煶棰戞祦鎺ュ叆娴佸獟浣撴湇鍔″櫒锛屽彧闇�瑕佽缃� disableAudio = 1鍗冲彲杩囨护闊抽 + + http GET 鏂瑰紡 + http://190.15.240.11:7088/index/api/startSendRtp?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&vhost=_defaultVhost_&app=gb28181&stream=44030012343220234234&payload=96&ssrc=5224&src_port=26324&dst_url=190.15.240.11&dst_port=9824&is_udp=1 + + http POST 鏂瑰紡 + http URL + http://190.15.240.11:7088/index/api/startSendRtp + + http 鍙傛暟鍊� + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","vhost":"_defaultVhost_","app":"Media","stream":"Camera_00001","payload":96,"ssrc":2432,"src_port":26324,"dst_url":"190.15.240.11","dst_port":9824,"is_udp":1} + + 杩斿洖Body锛� + { + "code": 0, # 0涓烘搷浣滄垚鍔燂紝鍏朵粬鍊间负鎿嶄綔澶辫触 + "port": 8356, # 绔彛鍙� + "memo": "success", # success 涓烘垚鍔� + "key": 93 # 鎴愬姛鏃惰繑鍥炲ぇ浜�0鐨勫�硷紝GB28181鍙戦�佺爜娴佸疄渚媖ey ,鍏抽棴鏃堕渶瑕� + } + + 2 鍒犻櫎 GB28181\Jtt1078鍙戦�佺鍙� + URL: /index/api/stopSendRtp + 鍔熻兘锛� + 鍒犻櫎GB28181\Jtt1078鍙戦�佺鍙� + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc + key 涓婚敭鍊糏D 姣斿 93 锛� 璋冪敤 /index/api/startSendRtp 杩斿洖鐨� key 鐨勫�� + + http GET 鏂瑰紡 + http://190.15.240.11:7088/index/api/stopSendRtp?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=93 + + http POST 鏂瑰紡 + http URL + http://190.15.240.11:7088/index/api/stopSendRtp + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","key":93} + + 杩斿洖Body锛� + { + "code": 0, # 0涓烘搷浣滄垚鍔燂紝鍏朵粬鍊间负鎿嶄綔澶辫触 + "memo": "success", # success 涓烘垚鍔� ,濡傛灉澶辫触鏄叾浠栧�� + } + + 11锛夈�佽幏鍙栨祦濯掍綋鏈嶅姟鍣ㄦ墍鏈夊彲鐢ㄧ殑濯掍綋婧� + URL: /index/api/getMediaList + + 鍔熻兘锛� + 鑾峰彇娴佸獟浣撴湇鍔″櫒鎵�鏈夊獟浣撴簮 + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc 銆愬繀濉弬鏁般�� + app 搴旂敤鍚� 姣斿 rtp銆乬b28181銆丮edia 绛夌瓑 锛岃嚜宸辫捣鐨勫悕瀛� 銆愬彲閫夊弬鏁般�� + stream 濯掍綋娴佸悕 姣斿 Camera_00001銆�44303403343034243200234 绛夌瓑 銆愬彲閫夊弬鏁般�� + + 鍙傛暟濉啓鏍蜂緥璇存槑锛� + 鏍蜂緥1锛坅pp銆乻tream 閮戒笉濉啓锛� + secret 035c73f7-bb6b-4889-a715-d9eb2d1925cc + + 杩斿洖鎵�鏈夊湪绾跨殑濯掍綋婧� + + 鏍蜂緥2 锛堝彧濉啓 app 锛� + secret 035c73f7-bb6b-4889-a715-d9eb2d1925cc + app rtp + 杩斿洖 app 绛変簬 rtp 鐨勬墍鏈夊獟浣撴簮 + + 鏍蜂緥3 锛堝~鍐� app = rtp , stream = 44303403343034243200234锛� + secret 035c73f7-bb6b-4889-a715-d9eb2d1925cc + app rtp + stream 44303403343034243200234 + 杩斿洖 app 绛変簬 rtp銆佸苟涓� stream 绛変簬 44303403343034243200234 鐨勬墍鏈夊獟浣撴簮 + + 鏍蜂緥4 锛堝~鍐� stream = 44303403343034243200234锛� + secret 035c73f7-bb6b-4889-a715-d9eb2d1925cc + stream 44303403343034243200234 + 杩斿洖 stream 绛変簬 44303403343034243200234 鐨勬墍鏈夊獟浣撴簮 + + http GET 鏂瑰紡 + http://127.0.0.1:7088/index/api/getMediaList?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc + + http POST 鏂瑰紡 + http URL + http://190.15.240.11:7088/index/api/getMediaList + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc"} + + 杩斿洖Body锛� + { + "code": 0, + "memo": "success", + "mediaList": [ + { + "key": 34, + "app": "Media", + "stream": "Camera_00001", + "sim": "123456789123", 銆�1078鐮佹祦鎺ュ叆杩欎釜瀛楁鐨勫�间笉浼氫负绌猴紝浠h〃璁惧鐨剆im鍗$紪鐮� 銆� + "status": false , 銆� false 灏氭湭褰曞儚锛宼rue 姝e湪褰曞儚 銆� + "enable_hls": false, 銆� false 灏氭湭鍚敤锛宼rue 鍚敤hls鍥炴斁 銆� + "transcodingStatus": false, 銆� false 灏氭湭杞爜锛宼rue 姝e湪杞爜 銆� + "sourceURL": "rtsp://10.0.0.239:554/Media/Camera_00001", + "sourceType": 23, + "readerCount": 0, + "videoCodec": "H264", + "width": 1920, + "height": 1080, + "networkType": 24, + "audioCodec": "AAC", + "audioChannels": 1, + "audioSampleRate": 16000, + "url": { + "rtsp": "rtsp://10.0.0.239:554/Media/Camera_00001", + "rtmp": "rtmp://10.0.0.239:1935/Media/Camera_00001", + "http-flv": "http://10.0.0.239:8088/Media/Camera_00001.flv", + "ws-flv": "ws://10.0.0.239:6088/Media/Camera_00001.flv", + "http-mp4": "http://10.0.0.239:5088/Media/Camera_00001.mp4", + "http-hls": "http://10.0.0.239:9088/Media/Camera_00001.m3u8", + "webrtc":"http://10.0.0.239:8892/webrtc-streamer.html?video=/Media/Camera_00001" + } + } + ] + } + + 銆愭敞閲婏細鍙互鏍规嵁 "networkType": 24, 杩欎釜瀛楁鍊煎尯鍒� 濯掍綋鎺ュ叆鐨勭被鍨� 锛屽叿浣撹瑙佺綉缁滅被鍨嬬殑瀵圭収琛� 銆� + + 12) 鍒犻櫎 鏌愪竴涓獟浣撴簮 + URL: /index/api/delMediaStream + 鍔熻兘锛� + 鏌愪竴涓獟浣撴簮锛岃繖濯掍綋婧愶紝鍙互鏄痳tp鎺ㄦ祦銆乺tmp鎺ㄦ祦锛屽悇绉嶆柟寮忎唬鐞嗘媺娴佹帴鍏ョ殑锛屽浗鏍囨帴鍏� 绛夌瓑銆� + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc + key 涓婚敭鍊糏D 姣斿 93 锛� 璋冪敤 /index/api/getMediaList 杩斿洖鐨� key 鐨勫�� + + http GET 鏂瑰紡 + http://190.15.240.11:7088/index/api/delMediaStream?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=93 + + http POST 鏂瑰紡 + http URL + http://190.15.240.11:7088/index/api/delMediaStream + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","key":93} + + 杩斿洖Body锛� + { + "code": 0, # 0涓烘搷浣滄垚鍔燂紝鍏朵粬鍊间负鎿嶄綔澶辫触 + "memo": "success", # success 涓烘垚鍔� ,濡傛灉澶辫触鏄叾浠栧�� + } + + 13锛夈�佽幏鍙栨祦濯掍綋鏈嶅姟鍣ㄦ墍鏈夊線澶栭儴杈撳嚭鐮佹祦鍒楄〃锛屽寘鎷閮ㄨ姹傜殑rtsp銆乺tmp銆乭ttp-flv銆亀s-flv銆乭ls 鍒楄〃 + 涔熷寘鎷湇鍔″櫒浠g悊rtsp鎺ㄦ祦銆乺tmp鎺ㄦ祦鍒楄〃 + 涔熷寘鎷湇鍔″櫒浠ュ浗鏍囨柟寮忓線涓婄骇鎺╮tp娴佸垪琛� + 銆愬繀瑕佹椂鍙互璋冪敤 /index/api/delOutList 鎺ュ彛鍒犻櫎鏌愪竴涓垪琛ㄥ璞★紝姣斿鍒犻櫎鏌愪竴璺浗鏍囨帹娴併�佸垹闄ゆ煇涓�璺痳tsp鎺ㄦ祦銆� 鍒犻櫎鏌愪竴璺痳tmp鎺ㄦ祦銆� + URL: /index/api/getOutList + + 鍔熻兘锛� + 鑾峰彇娴佸獟浣撴湇鍔″櫒鎵�鏈夎緭鍑烘祦鍒楄〃 + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc + + http GET 鏂瑰紡 + http://44.35.33.239:7088/index/api/getOutList?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc + + http POST 鏂瑰紡 + http URL + http://44.35.33.239:7088/index/api/getOutList + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc"} + + 杩斿洖Body锛� + { + "code": 0, + "memo": "success", + "outList": [ + { + "key": 103, 銆愯姹傚鎴风鐨勬爣璇咺D 锛屽彲浠ヨ皟鐢� /index/api/delOutList 鍒犻櫎 璇ヨ姹傘�� + "app": "Media", + "stream": "Camera_00001", + "sourceURL": "rtsp://44.35.33.239:554/Media/Camera_00001", 銆愯〃绀哄鐣屼互rtsp鏂瑰紡鍚戞湇鍔″櫒璇锋眰鐮佹祦銆� + "videoCodec": "H264", + "audioCodec": "AAC", + "audioChannels": 1, + "audioSampleRate": 16000, + "networkType": 24, 銆愮綉缁滅被鍨嬩负24 锛屾爣璇嗕负rtsp 鏂瑰紡銆� + "dst_url": "44.35.33.39", 銆� 璇锋眰鐮佹祦瀹㈡埛绔疘P 銆� + "dst_port": 43801 銆� 璇锋眰鐮佹祦瀹㈡埛绔鍙� 銆� + }, + { + "key": 85, 銆愯姹傚鎴风鐨勬爣璇咺D 锛屽彲浠ヨ皟鐢� /index/api/delOutList 鍒犻櫎 璇ヨ姹傘�� + "app": "Media", + "stream": "Camera_00001", + "sourceURL": "http://localhost:8088/Media/Camera_00001.flv",銆愯〃绀哄鐣屼互 http-flv 鏂瑰紡鍚戞湇鍔″櫒璇锋眰鐮佹祦銆� + "videoCodec": "H264", + "audioCodec": "AAC", + "audioChannels": 1, + "audioSampleRate": 16000, + "networkType": 25, 銆愮綉缁滅被鍨嬩负25 锛屾爣璇嗕负 http-flv 鏂瑰紡銆� + "dst_url": "44.35.33.39", 銆� 璇锋眰鐮佹祦瀹㈡埛绔疘P 銆� + "dst_port": 43806 銆� 璇锋眰鐮佹祦瀹㈡埛绔鍙� 銆� + } + ] + } + + 銆愭敞閲婏細鍙互鏍规嵁 "networkType": 24, 杩欎釜瀛楁鍊煎尯鍒� 濯掍綋杈撳嚭鐨勭被鍨� 锛屽叿浣撹瑙佺綉缁滅被鍨嬬殑瀵圭収琛� 銆� + + 14) 鍒犻櫎 鏌愪竴涓湇鍔″櫒鎵�鏈夊線澶栭儴杈撳嚭鐮佹祦鍒楄〃 + URL: /index/api/delOutList + 鍔熻兘锛� + 鍒犻櫎鏌愪竴涓祦濯掍綋鏈嶅姟鍣ㄦ墍鏈夊線澶栭儴杈撳嚭鐮佹祦鍒楄〃锛屽寘鎷閮ㄨ姹傜殑rtsp銆乺tmp銆乭ttp-flv銆亀s-flv銆乭ls 鐐规挱 銆傚浗鏍囨帹娴併�乺tsp鎺ㄦ祦銆乺tmp 鎺ㄦ祦 绛夌瓑 + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc + key 涓婚敭鍊糏D 姣斿 93 锛� 璋冪敤 /index/api/getOutList 杩斿洖鐨� key 鐨勫�� + + http GET 鏂瑰紡 + http://190.15.240.11:7088/index/api/delOutList?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=93 + + http POST 鏂瑰紡 + http URL + http://190.15.240.11:7088/index/api/delOutList + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","key":93} + + 杩斿洖Body锛� + { + "code": 0, # 0涓烘搷浣滄垚鍔燂紝鍏朵粬鍊间负鎿嶄綔澶辫触 + "memo": "success", # success 涓烘垚鍔� ,濡傛灉澶辫触鏄叾浠栧�� + } + + 15锛夋牴鎹潯浠剁粍鍚堬紝鍒犻櫎浠绘剰涓�涓垨涓�缁勬垨鑰呭叏閮ㄥ獟浣撹緭鍏ュ垪琛� + URL: /index/api/close_streams + + 鍔熻兘 + 鍒犻櫎浠绘剰涓�涓垨涓�缁勬垨鑰呭叏閮ㄥ獟浣撹緭鍏ュ垪琛� + + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc 銆愬繀濉弬鏁般�� + vhost 姣斿 _defaultVhost_ 銆愬彲閫夊弬鏁般�� + app 搴旂敤鍚� 姣斿 gb28181 銆乺tp 绛夌瓑 銆愬彲閫夊弬鏁般�� + stream 濯掍綋娴佸悕 姣斿 Camera_00001銆乨safdsafassdafadsfas銆佺瓑绛� 銆愬彲閫夊弬鏁般�� + force 鏄惁寮哄埗鍏抽棴 1 寮哄埗鍏抽棴锛屼笉绠℃槸鍚︽湁浜哄湪瑙傜湅銆�0 闈炲己鍒跺叧闂紝褰撴湁浜鸿鐪嬫椂涓嶅叧闂�� 銆愬繀濉弬鏁般�� + + http GET 鏂瑰紡 + 绀轰緥1锛� http://190.168.24.112:7088/index/api/close_streams?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&app=live&force=1 + 銆愯〃绀哄己琛屽叧闂� app 绛変簬 live 鐨勭爜娴佹帴鍏ャ�� + 绀轰緥2锛� http://190.168.24.112:7088/index/api/close_streams?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&app=live&stream=Camera_00001&force=1 + 銆愯〃绀哄己琛屽叧闂� app 绛変簬 live, 骞朵笖 stream 绛変簬 Camera_00001 鐨勭爜娴佹帴鍏� 銆� + 绀轰緥3锛� http://190.168.24.112:7088/index/api/close_streams?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&force=1 + 銆愯〃绀哄己琛屽叧闂� 鎵�鏈夌爜娴侊紙app鍏ㄩ儴銆乻tream鍏ㄩ儴锛� 鎺ュ叆 銆� + + http pos 鏂瑰紡 + 绀轰緥1锛� http URL: + http://190.168.24.112:7088/index/api/close_streams + body: + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","app":"live","force":1} + + 銆愯〃绀哄己琛屽叧闂� app 绛変簬 live 鐨勭爜娴佹帴鍏ャ�� + + 绀轰緥2锛� http URL: + http://190.168.24.112:7088/index/api/close_streams + body: + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","app":"live","stream":"Camera_00001","force":1} + + 銆愯〃绀哄己琛屽叧闂� app 绛変簬 live, 骞朵笖 stream 绛変簬 Camera_00001 鐨勭爜娴佹帴鍏� 銆� + + 绀轰緥3锛� http URL: + http://190.168.24.112:7088/index/api/close_streams + body: + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","force":1} + + 銆� 琛ㄧず寮鸿鍏抽棴 鎵�鏈夌爜娴侊紙app鍏ㄩ儴銆乻tream鍏ㄩ儴锛� 鎺ュ叆 銆� + + 16锛夈�� 寮�濮嬪綍鍍忋�佸仠姝㈠綍鍍� + 1) 鐢宠寮�濮嬪綍鍍� + + URL: /index/api/startRecord + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 锛屾瘮濡� 035c73f7-bb6b-4889-a715-d9eb2d1925cc + vhost 姣斿 _defaultVhost_ + app 搴旂敤鍚� 姣斿 Media + stream 濯掍綋娴佸悕 姣斿 Camera_00001 + + http GET 鏂瑰紡 + http://190.15.240.11:7088/index/api/startRecord?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&vhost=_defaultVhost_&app=Media&stream=Camera_00001 + + http POST 鏂瑰紡 + http URL + http://190.15.240.11:7088/index/api/startRecord + + http Body 鍙傛暟 (json鏍煎紡) + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","vhost":"_defaultVhost_","app":"Media","stream":"Camera_00001"} + + 杩斿洖Body锛� + { + "code": 0, # 0涓烘搷浣滄垚鍔燂紝鍏朵粬鍊间负鎿嶄綔澶辫触 + "memo": "MediaSource: /Media/Camera_00001 start Record", # "code": 0 涓烘垚鍔� + } + + 2) 鐢宠鍋滄褰曞儚 + URL: /index/api/stopRecord + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 锛屾瘮濡� 035c73f7-bb6b-4889-a715-d9eb2d1925cc + vhost 姣斿 _defaultVhost_ + app 搴旂敤鍚� 姣斿 Media + stream 濯掍綋娴佸悕 姣斿 Camera_00001 + + http GET 鏂瑰紡 + http://190.15.240.11:7088/index/api/stopRecord?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&vhost=_defaultVhost_&app=Media&stream=Camera_00001 + + http POST 鏂瑰紡 + http URL + http://190.15.240.11:7088/index/api/stopRecord + + http Body 鍙傛暟 (json鏍煎紡) + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","vhost":"_defaultVhost_","app":"Media","stream":"Camera_00001"} + + 杩斿洖Body锛� + { + "code": 0, # 0涓烘搷浣滄垚鍔燂紝鍏朵粬鍊间负鎿嶄綔澶辫触 + "memo": "success", # success 涓烘垚鍔� + } + + 17 鑾峰彇绯荤粺閰嶇疆鍙傛暟 + URL: /index/api/getServerConfig + 鍔熻兘锛� + 鑾峰彇鏈嶅姟鍣ㄧ殑閰嶇疆鍙傛暟 + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc + + http GET 鏂瑰紡 + http://190.15.240.11:7088/index/api/getServerConfig?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc + + http POST 鏂瑰紡 + http URL + http://190.15.240.11:7088/index/api/getServerConfig + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc"} + + 杩斿洖Body锛� + { + "code": 0, + "params": [ + + { + "secret": "035c73f7-bb6b-4889-a715-d9eb2d1925cc", + "memo": "server password", + }, + { + "ServerIP": "44.35.33.239", + "memo": "ABLMediaServer ip address" + }, + { + "rtc.listening-ip": "192.168.2.5", + "memo": "Total number of video playback threads ." + }, + { + "mediaServerID": "ABLMediaServer_00001", + "memo": "media Server ID " + }, + { + "hook_enable": 0, + "memo": "hook_enable = 1 open notice , hook_enable = 0 close notice " + }, + { + "enable_audio": 1, + "memo": "enable_audio = 1 open Audio , enable_audio = 0 Close Audio " + }, + { + "httpServerPort": 7088, + "memo": "http api port " + }, + { + "rtspPort": 554, + "memo": "rtsp port " + }, + { + "rtmpPort": 1935, + "memo": "rtmp port " + }, + { + "httpFlvPort": 8088, + "memo": "http-flv port " + }, + { + "hls_enable": 0, + "memo": "hls whether enable " + }, + { + "hlsPort": 9088, + "memo": "hls port" + }, + { + "wsPort": 6088, + "memo": "websocket flv port" + }, + { + "mp4Port": 5088, + "memo": "http mp4 port" + }, + { + "ps_tsRecvPort": 10000, + "memo": "recv ts , ps Stream port " + }, + { + "hlsCutType": 2, + "memo": "hlsCutType = 1 hls cut to Harddisk,hlsCutType = 2 hls cut Media to memory" + }, + { + "h265CutType": 1, + "memo": " 1 h265 cut TS , 2 cut fmp4 " + }, + { + "RecvThreadCount": 128, + "memo": " RecvThreadCount " + }, + { + "SendThreadCount": 128, + "memo": "SendThreadCount" + }, + { + "GB28181RtpTCPHeadType": 2, + "memo": "rtp Length Type" + }, + { + "ReConnectingCount": 40320, + "memo": "Try reconnections times ." + }, + { + "maxTimeNoOneWatch": 9999999, + "memo": "maxTimeNoOneWatch ." + }, + { + "pushEnable_mp4": 0, + "memo": "pushEnable_mp4 ." + }, + { + "fileSecond": 180, + "memo": "fileSecond ." + }, + { + "fileKeepMaxTime": 1, + "memo": "fileKeepMaxTime ." + }, + { + "httpDownloadSpeed": 6, + "memo": "httpDownloadSpeed ." + }, + { + "RecordReplayThread": 32, + "memo": "Total number of video playback threads ." + } + ] + } + + 18锛夈�佹煡璇㈠綍鍍忓垪琛� + URL: /index/api/queryRecordList + + 鍔熻兘锛� + 鏌ヨ鏌愪竴璺緭鍏ユ簮鐨勫綍鍍忓垪琛�(鍙互鏌ヨ浠g悊鎷夋祦杈撳叆銆佹帹娴佽緭鍏ャ�佸浗鏍囪緭鍏ョ瓑绛� ) + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc 銆愬繀濉弬鏁般�� + vhost 姣斿 _defaultVhost_ 銆愬彲閫夊弬鏁般�� + app 搴旂敤鍚� 姣斿 rtp銆乬b28181銆丮edia 绛夌瓑 锛岃嚜宸辫捣鐨勫悕瀛� 銆愬繀濉弬鏁般�� + stream 濯掍綋娴佸悕 姣斿 Camera_00001銆�44303403343034243200234 绛夌瓑 銆愬繀濉弬鏁般�� + starttime 寮�濮嬫椂闂� 姣斿 20220116154810 骞存湀鏃ユ椂鍒嗙 銆愬繀濉弬鏁般�� + endtime 缁撴潫鏃堕棿 姣斿 20220116155115 骞存湀鏃ユ椂鍒嗙 銆愬繀濉弬鏁般�� + + 銆愭敞鎰忥細1銆佸紑濮嬫椂闂村繀椤诲皬浜� 褰撳墠鏃堕棿鍑忓幓鍒囩墖鏃堕暱鐨勬椂闂� 2銆佷粠 寮�濮嬫椂闂� 鑷� 缁撴潫鏃堕棿 涓嶈兘瓒呰繃3澶┿�� + + http GET 鏂瑰紡 + http://10.0.0.239:7088/index/api/queryRecordList?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&app=Media&stream=Camera_00001&starttime=20220116154810&endtime=20220116155115 + + http POST 鏂瑰紡 + http URL + http://190.15.240.11:7088/index/api/queryRecordList + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","vhost":"_defaultVhost_","app":"Media","stream":"Camera_00001","starttime":"20220116154810","endtime":"20220116155115"} + + 杩斿洖Body锛� + { + "code": 0, + "app": "Media", + "stream": "Camera_00001", + "starttime": "20220116154810", + "endtime": "20220116155115", + "recordFileList": [ + { + "file": "20220116154810.mp4", + "duration": 300, 褰撳墠褰曞儚鏃堕棿闀垮害锛屽崟浣� 绉� + "url": { + "rtsp": "rtsp://10.0.0.239:554/Media/Camera_00001__ReplayFMP4RecordFile__20220116154810", + "rtmp": "rtmp://10.0.0.239:1935/Media/Camera_00001__ReplayFMP4RecordFile__20220116154810", + "http-flv": "http://10.0.0.239:8088/Media/Camera_00001__ReplayFMP4RecordFile__20220116154810.flv", + "ws-flv": "ws://10.0.0.239:6088/Media/Camera_00001__ReplayFMP4RecordFile__20220116154810.flv", + "http-mp4": "http://10.0.0.239:5088/Media/Camera_00001__ReplayFMP4RecordFile__20220116154810.mp4?download_speed=1", + "download": "http://10.0.0.239:5088/Media/Camera_00001__ReplayFMP4RecordFile__20220116154810.mp4?download_speed=6" + } + }, + { + "file": "20220116155110.mp4", + "duration": 256, 褰撳墠褰曞儚鏃堕棿闀垮害锛屽崟浣� 绉� + "url": { + "rtsp": "rtsp://10.0.0.239:554/Media/Camera_00001__ReplayFMP4RecordFile__20220116155110", + "rtmp": "rtmp://10.0.0.239:1935/Media/Camera_00001__ReplayFMP4RecordFile__20220116155110", + "http-flv": "http://10.0.0.239:8088/Media/Camera_00001__ReplayFMP4RecordFile__20220116155110.flv", + "ws-flv": "ws://10.0.0.239:6088/Media/Camera_00001__ReplayFMP4RecordFile__20220116155110.flv", + "http-mp4": "http://10.0.0.239:5088/Media/Camera_00001__ReplayFMP4RecordFile__20220116155110.mp4?download_speed=1", + "download": "http://10.0.0.239:5088/Media/Camera_00001__ReplayFMP4RecordFile__20220116155110.mp4?download_speed=6" + } + } + ] + } + 19锛夈�佹秷鎭�氱煡浣跨敤 + 鍔熻兘璇存槑锛氭秷鎭�氱煡鏄祦濯掍綋鏈嶅姟鍣ㄧ殑涓�浜涙秷鎭瘮濡傛棤浜鸿鐪嬨�乫mp4褰曞儚鍒囩墖瀹屾垚銆佹挱鏀炬椂娴佸湴鍧�涓嶅瓨鍦ㄧ瓑绛変俊鎭兘鍙婃椂鐨勯�氱煡鍒板彟澶栦竴涓猦ttp鏈嶅姟鍣ㄤ笂锛岄渶瑕佹鍔熻兘 + 娑堟伅閫氱煡鍔熻兘鐢ㄥ湪浠�涔堝湴鏂癸紝姣斿璇存棤浜鸿鐪嬫秷鎭�氱煡锛屽綋鏀跺埌鏃犱汉瑙傜湅娑堟伅鏃讹紝鍥芥爣鏈嶅姟鍣ㄥ彲浠ュ叧闂浗鏍囧彂娴侊紝鏂紑浠g悊鎷夋祦锛屾柇寮�鎺ㄦ祦绛夌瓑鎿嶄綔 + 瑕佷娇鐢ㄦ鍔熻兘鎶婇厤缃枃浠剁殑鍙傛暟hook_enable 鍊艰缃负 1锛屽悓鏃堕�氱煡鐨刪ttp鏈嶅姟鍣ㄥ湴鍧�銆佺鍙e彿涓�瀹氳璁剧疆瀵癸紝涓嬮潰鍒椾妇鍑洪厤缃枃浠朵腑鐨勭浉鍏冲弬鏁� + + hook_enable=1 #浜嬩欢閫氱煡閮ㄥ垎,褰� hook_enable=1 鏃讹紝寮�鍚簨浠堕�氱煡锛宧ook_enable=0鏃跺叧闂簨浠堕�氱煡 + on_stream_arrive=http://10.0.0.238:7088/index/hook/on_stream_arrive #褰撴煇涓�璺殑鐮佹祦杈惧埌鏃朵細閫氱煡涓�娆� + on_stream_none_reader=http://10.0.0.238:8080/index/hook/on_stream_none_reader #褰撴煇涓�璺祦鏃犱汉瑙傜湅鏃讹紝浼氳Е鍙戣閫氱煡浜嬩欢锛屾帴鏀剁鏀跺埌鍚庡彲浠ヨ繘琛屾柇娴佹搷浣� + on_stream_disconnect=http://10.0.0.238:7088/index/hook/on_stream_disconnect #褰撴煇涓�璺爜娴佹柇寮�鏃朵細閫氱煡涓�娆� + on_stream_not_found=http://10.0.0.238:8080/index/hook/on_stream_not_found #鎾斁鏃讹紝鎵句笉鍒版挱鏀剧殑鐮佹祦锛岄�氳繃閰嶅悎on_stream_none_reader浜嬩欢鍙互瀹屾垚鎸夐渶鎷夋祦 + on_record_mp4=http://10.0.0.238:8080/index/hook/on_record_mp4 #褰曞埗瀹屾瘯涓�娈祄p4鏂囦欢閫氱煡 + + 銆愭敞锛歨ttp url鐨� IP锛岀鍙� 鏄唬琛ㄦ秷鎭帴鏀舵湇鍔″櫒鐨処P锛岀鍙o紝涓�瀹氳濉啓姝g‘锛寀rl 鍦板潃瑕佸悎娉曪紝涓嶈鏈夌┖鏍� 銆� + 1銆佸綋鏌愪竴璺爜娴佸埌杈炬椂浼氬彂閫侀�氱煡锛� + POST /index/hook/on_stream_arrive HTTP/1.1 # 鏍规嵁 /index/hook/on_stream_arrive 杩欎釜鍙互鍒ゆ柇鏄煇涓�璺爜娴佸埌杈� + Accept: */* + Accept-Language: zh-CN,zh;q=0.8 + Connection: keep-alive + Content-Length: 105 + Content-Type: application/json + Host: 127.0.0.1 + Tools: ABLMediaServer-5.2.9(2022-03-28) + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 + + { + "app":"Media", # app + "stream":"Camera_00001", # stream + "mediaServerId":"ABLMediaServer_00001", # 娴佸獟浣撴湇鍔″櫒缂栧彿 锛屽湪閰嶇疆鏂囦欢鍙互閰嶇疆锛屽鏋滈泦缇ゆ祦濯掍綋鏈嶅姟鍣ㄦ椂锛屽彲浠ョ粰姣忓彴娴佸獟浣撴湇鍔″櫒璧蜂釜缂栧彿 + "networkType":23, # 濯掍綋娴佹潵婧愮綉缁滅紪鍙凤紝鍙弬鑰冮檮琛� + "key":130, # 濯掍綋娴佹潵婧愮紪鍙凤紝鍙互鏍规嵁杩欎釜key杩涜鍏抽棴娴佸獟浣� 鍙互璋冪敤delMediaStream鎴朿lose_streams 鍑芥暟杩涜鍏抽棴 + "status":true, + "enable_hls":false, + "transcodingStatus":false, + "sourceURL":"rtsp://admin:abldyjh2020@44.35.33.248:554", + "readerCount":0, + "noneReaderDuration":0, + "videoCodec":"H265", + "videoFrameSpeed":25, + "width":1920, + "height":1080, + "videoBitrate":0, + "audioCodec":"AAC", + "audioChannels":1, + "audioSampleRate":8000, + "audioBitrate":0, + "url": + { + "rtsp":"rtsp://44.35.33.249:554/Media/Camera_00001", + "rtmp":"rtmp://44.35.33.249:1935/Media/Camera_00001", + "http-flv":"http://44.35.33.249:8088/Media/Camera_00001.flv", + "ws-flv":"ws://44.35.33.249:6088/Media/Camera_00001.flv", + "http-mp4":"http://44.35.33.249:5088/Media/Camera_00001.mp4", + "http-hls":"http://44.35.33.249:9088/Media/Camera_00001.m3u8" + } + } + + 2銆佹棤浜鸿鐪嬫秷鎭�氱煡鏍蜂緥锛� + POST /index/hook/on_stream_none_reader HTTP/1.1 # 鏍规嵁 /index/hook/on_stream_none_reader 杩欎釜鍙互鍒ゆ柇鏄棤浜鸿鐪嬫秷鎭�氱煡 + Accept: */* + Accept-Language: zh-CN,zh;q=0.8 + Connection: keep-alive + Content-Length: 105 + Content-Type: application/json + Host: 127.0.0.1 + Tools: ABLMediaServer-5.2.9(2022-03-28) + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 + + { + "app":"Media", # app + "stream":"Camera_00001", # stream + "mediaServerId":"ABLMediaServer_00001", # 娴佸獟浣撴湇鍔″櫒缂栧彿 锛屽湪閰嶇疆鏂囦欢鍙互閰嶇疆锛屽鏋滈泦缇ゆ祦濯掍綋鏈嶅姟鍣ㄦ椂锛屽彲浠ョ粰姣忓彴娴佸獟浣撴湇鍔″櫒璧蜂釜缂栧彿 + "networkType":23, # 濯掍綋娴佹潵婧愮綉缁滅紪鍙凤紝鍙弬鑰冮檮琛� + "key":130 # 濯掍綋娴佹潵婧愮紪鍙凤紝鍙互鏍规嵁杩欎釜key杩涜鍏抽棴娴佸獟浣� 鍙互璋冪敤delMediaStream鎴朿lose_streams 鍑芥暟杩涜鍏抽棴 + } + + 3銆� fmp4褰曞儚鍒囩墖褰曞儚瀹屾垚涓�涓枃浠舵椂浼氬彂閫佷竴涓秷鎭�氱煡 + POST /index/hook/on_record_mp4 HTTP/1.1 # 鏍规嵁 /index/hook/on_record_mp4 杩欎釜鍙互鍒ゆ柇鏄痬p4褰曞儚鍒囩墖瀹屾瘯涓�涓�氱煡 + Accept: */* + Accept-Language: zh-CN,zh;q=0.8 + Connection: keep-alive + Content-Length: 127 + Content-Type: application/json + Host: 127.0.0.1 + Tools: ABLMediaServer-5.2.9(2022-03-28) + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 + + { + "app":"Media", # app + "stream":"Camera_00001", # stream + "mediaServerId":"ABLMediaServer_00001", # 娴佸獟浣撴湇鍔″櫒缂栧彿 锛屽湪閰嶇疆鏂囦欢鍙互閰嶇疆锛屽鏋滈泦缇ゆ祦濯掍綋鏈嶅姟鍣ㄦ椂锛屽彲浠ョ粰姣忓彴娴佸獟浣撴湇鍔″櫒璧蜂釜缂栧彿 + "networkType":70, # 濯掍綋娴佹潵婧愮綉缁滅紪鍙凤紝鍙弬鑰冮檮琛� + "fileName":"20220312212546.mp4" # 褰曞儚鍒囩墖瀹屾垚鐨勬枃浠跺悕瀛� + } + + 4銆佸綋鏌愪竴璺爜娴佹柇寮�鏃朵細鍙戦�侀�氱煡锛� + POST /index/hook/on_stream_disconnect HTTP/1.1 # 鏍规嵁 /index/hook/on_stream_disconnect 杩欎釜鍙互鍒ゆ柇鏄煇涓�璺爜娴佹柇寮� + Accept: */* + Accept-Language: zh-CN,zh;q=0.8 + Connection: keep-alive + Content-Length: 105 + Content-Type: application/json + Host: 127.0.0.1 + Tools: ABLMediaServer-5.2.9(2022-03-28) + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 + + { + "app":"Media", # app + "stream":"Camera_00001", # stream + "mediaServerId":"ABLMediaServer_00001", # 娴佸獟浣撴湇鍔″櫒缂栧彿 锛屽湪閰嶇疆鏂囦欢鍙互閰嶇疆锛屽鏋滈泦缇ゆ祦濯掍綋鏈嶅姟鍣ㄦ椂锛屽彲浠ョ粰姣忓彴娴佸獟浣撴湇鍔″櫒璧蜂釜缂栧彿 + "networkType":23, # 濯掍綋娴佹潵婧愮綉缁滅紪鍙凤紝鍙弬鑰冮檮琛� + "key":130 # 濯掍綋娴佹潵婧愮紪鍙凤紝鍙互鏍规嵁杩欎釜key杩涜鍏抽棴娴佸獟浣� 鍙互璋冪敤delMediaStream鎴朿lose_streams 鍑芥暟杩涜鍏抽棴 + } + + 5銆� 褰撴挱鏀句竴涓猽rl锛屽鏋滀笉瀛樺湪鏃讹紝浼氬彂鍑轰竴涓秷鎭�氱煡 + POST /index/hook/on_stream_not_found HTTP/1.1 # 鏍规嵁 /index/hook/on_stream_not_found 锛孒ttp鎺ユ敹鏈嶅姟鍣ㄥ緱鐭ユ祦涓嶄笉瀛樺湪 + Accept: */* + Accept-Language: zh-CN,zh;q=0.8 + Connection: keep-alive + Content-Length: 127 + Content-Type: application/json + Host: 127.0.0.1 + Tools: ABLMediaServer-5.2.9(2022-03-28) + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 + + { + "app":"Media", # app 涓嶅瓨鍦ㄧ殑app + "stream":"Camera_00001", # stream 涓嶅瓨鍦ㄧ殑stream + "mediaServerId":"ABLMediaServer_00001" # 娴佸獟浣撴湇鍔″櫒缂栧彿 锛屽湪閰嶇疆鏂囦欢鍙互閰嶇疆锛屽鏋滈泦缇ゆ祦濯掍綋鏈嶅姟鍣ㄦ椂锛屽彲浠ョ粰姣忓彴娴佸獟浣撴湇鍔″櫒璧蜂釜缂栧彿 + } + 6銆丄BLMediaServer鍚姩鏃朵細鍙戦�佷笂绾块�氱煡 + POST /index/hook/on_server_started HTTP/1.1 + Accept: */* + Accept-Language: zh-CN,zh;q=0.8 + Connection: keep-alive + Content-Length: 105 + Content-Type: application/json + Host: 127.0.0.1 + Tools: ABLMediaServer-6.3.5(2023-04-30) + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 + + {"localipAddress":"44.35.33.249","mediaServerId":"ABLMediaServer_00001","datetime":"2023-04-18 10:04:37"} + + 7銆佹煇涓�涓爜娴佹帴鍏ユ祦濯掍綋鏈嶅姟鍣ㄦ椂浼氫骇鐢� 鍙戝竷 浜嬩欢閫氱煡 + POST /index/hook/on_publish HTTP/1.1 + Accept: */* + Accept-Language: zh-CN,zh;q=0.8 + Connection: keep-alive + Content-Length: 149 + Content-Type: application/json + Host: 127.0.0.1 + Tools: ABLMediaServer-6.3.5(2023-04-30) + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 + + {"app":"Media","stream":"Camera_00001","mediaServerId":"ABLMediaServer_00001","networkType":50,"key":470,"ip":"44.35.33.248" ,"port":554,"params":""} + + 8銆佸綋鎾斁娴佸獟浣撴湇鍔″櫒閲岄潰鏌愪竴涓爜娴佹椂锛屼細瑙﹀彂 鎾斁浜嬩欢 锛屽彲浠ラ�氱煡 parmas 鍙傛暟鍊艰繘琛屾挱鏀鹃壌鏉� + POST /index/hook/on_play HTTP/1.1 + Accept: */* + Accept-Language: zh-CN,zh;q=0.8 + Connection: keep-alive + Content-Length: 135 + Content-Type: application/json + Host: 127.0.0.1 + Tools: ABLMediaServer-6.3.5(2023-04-30) + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 + + {"app":"Media","stream":"Camera_00001","mediaServerId":"ABLMediaServer_00001","networkType":30,"key":472,"ip":"" ,"port":0,"params":"user=admin&password=safsa234234&token=@#$@#$@#ASDFasfdsa@#$23"} + + 9銆佸鏋滄煇涓�涓爜娴佽繘琛孧P4褰曞儚锛坋nable_mp4=1锛夛紝浼氳Е鍙戝綍鍍忚繘搴﹂�氱煡浜嬩欢 + POST /index/hook/on_record_progress HTTP/1.1 + Accept: */* + Accept-Language: zh-CN,zh;q=0.8 + Connection: keep-alive + Content-Length: 204 + Content-Type: application/json + Host: 127.0.0.1 + Tools: ABLMediaServer-6.3.5(2023-04-30) + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 + + {"app":"Media","stream":"Camera_00001","mediaServerId":"ABLMediaServer_00001","networkType":472,"key":470,"fileName":"20230418100440.mp4","currentFileDuration":49,"TotalVideoDuration":49} + + 10銆佸鏋滄煇涓�涓爜娴佸紑鍚痟ls锛坋nable_hls=1锛夊苟涓旇缃负鍒囩墖鍒扮‖鐩橈紙hlsCutType=1 鍦ㄩ厤缃枃浠朵腑锛� 锛屾瘡褰撳垏鐗囧畬鎴愪竴涓猼s鏂囦欢浼氳Е鍙戣浜嬩欢 + POST /index/hook/on_record_ts HTTP/1.1 + Accept: */* + Accept-Language: zh-CN,zh;q=0.8 + Connection: keep-alive + Content-Length: 246 + Content-Type: application/json + Host: 127.0.0.1 + Tools: ABLMediaServer-6.3.5(2023-04-30) + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 + + {"app":"Media","stream":"Camera_00001","mediaServerId":"ABLMediaServer_00001","networkType":30,"key":470,"createDateTime":"2023-04-18 10:05:47","currentFileDuration":3,"fileName":"D:\WorkDir\ABLMediaServer\x64\Debug\www\Media\Camera_00001\23.ts"} + + 11銆佹祦濯掍綋鏈嶅姟鍣ㄦ瘡闅�60绉掍細瑙﹀彂蹇冭烦浜嬩欢閫氱煡 + POST /index/hook/on_server_keepalive HTTP/1.1 + Accept: */* + Accept-Language: zh-CN,zh;q=0.8 + Connection: keep-alive + Content-Length: 105 + Content-Type: application/json + Host: 127.0.0.1 + Tools: ABLMediaServer-6.3.5(2023-04-30) + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 + + {"localipAddress":"44.35.33.249","mediaServerId":"ABLMediaServer_00001","datetime":"2023-04-18 10:25:40"} + + 12銆佸綋浠g悊鎷夋祦銆佸浗鏍囨帴鍏ョ瓑绛� 鐮佹祦涓嶅埌杈炬椂浼氬彂鍑� 鐮佹祦涓嶅埌杈剧殑浜嬩欢閫氱煡 + POST /index/hook/on_stream_not_arrive HTTP/1.1 + Accept: */* + Accept-Language: zh-CN,zh;q=0.8 + Connection: keep-alive + Content-Length: 155 + Content-Type: application/json + Host: 127.0.0.1 + Tools: ABLMediaServer-6.3.5(2023-04-30) + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 + + {"mediaServerId":"ABLMediaServer_00001","app":"gb28181","stream":"440300123432202342349","networkType":60,"key":470} + + 13銆佸鏋滄煇涓�涓爜娴佽繘琛孧P4褰曞儚锛坋nable_mp4=1锛夛紝褰撴煇涓狹P4鏂囦欢琚垹闄や細瑙﹀彂璇ヤ簨浠堕�氱煡 + POST /index/hook/on_delete_record_mp4 HTTP/1.1 + Accept: */* + Accept-Language: zh-CN,zh;q=0.8 + Connection: keep-alive + Content-Length: 204 + Content-Type: application/json + Host: 127.0.0.1 + Tools: ABLMediaServer-6.3.5(2023-04-30) + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 + + {"app":"Media","stream":"Camera_00001","mediaServerId":"ABLMediaServer_00001","fileName":"20230418100440.mp4"} + + + + 20) 鍥剧墖鎶撴媿 + URL: /index/api/getSnap + + 鍔熻兘锛� + 鏌ヨ鏌愪竴鎺ュ叆鐨勫獟浣撴簮杩涜鎶撴媿 + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc 銆愬繀濉弬鏁般�� + vhost 姣斿 _defaultVhost_ 銆愬彲閫夊弬鏁般�� + app 搴旂敤鍚� 姣斿 rtp銆乬b28181銆丮edia 绛夌瓑 锛岃嚜宸辫捣鐨勫悕瀛� 銆愬繀濉弬鏁般�� + stream 濯掍綋娴佸悕 姣斿 Camera_00001銆�44303403343034243200234 绛夌瓑 銆愬繀濉弬鏁般�� + timeout_sec 瓒呮椂鏃堕暱 10 鍗虫湰娆℃姄鎷嶆渶澶ц秴鏃舵椂闀� 鍗曚綅 绉� 銆愬繀濉弬鏁般�� + + http GET 鏂瑰紡 + http://127.0.0.1:7088/index/api/getSnap?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&vhost=_defaultVhost_&app=Media&stream=Camera_00001&timeout_sec=10 + + http POST 鏂瑰紡 + http URL + http://190.15.240.11:7088/index/api/getSnap + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","vhost":"_defaultVhost_","app":"Media","stream":"Camera_00001","timeout_sec":10} + + 鎶撴媿鎴愬姛杩斿洖锛� + { + "code": 0, + "memo": "success , Catpuring takes time 219 millisecond .", + "url": "http://10.0.0.239:7088/Media/Camera_00001/2022031910034501.jpg" + } + + 21锛夊浘鐗囧垪琛ㄦ煡璇� + URL: /index/api/queryPictureList + + 鍔熻兘锛� + 鏌ヨ鏌愪竴璺緭鍏ユ簮鐨勬姄鎷嶅浘鐗囧垪琛� + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc 銆愬繀濉弬鏁般�� + vhost 姣斿 _defaultVhost_ 銆愬彲閫夊弬鏁般�� + app 搴旂敤鍚� 姣斿 rtp銆乬b28181銆丮edia 绛夌瓑 锛岃嚜宸辫捣鐨勫悕瀛� 銆愬繀濉弬鏁般�� + stream 濯掍綋娴佸悕 姣斿 Camera_00001銆�44303403343034243200234 绛夌瓑 銆愬繀濉弬鏁般�� + starttime 寮�濮嬫椂闂� 姣斿 20220317081201 骞存湀鏃ユ椂鍒嗙 銆愬繀濉弬鏁般�� + endtime 缁撴潫鏃堕棿 姣斿 20220319231201 骞存湀鏃ユ椂鍒嗙 銆愬繀濉弬鏁般�� + + 銆愭敞鎰忥細1銆佸紑濮嬫椂闂村繀椤诲皬浜� 褰撳墠鏃堕棿鍑忓幓鍒囩墖鏃堕暱鐨勬椂闂� 2銆佷粠 寮�濮嬫椂闂� 鑷� 缁撴潫鏃堕棿 涓嶈兘瓒呰繃7澶┿�� + + http GET 鏂瑰紡 + http://10.0.0.239:7088/index/api/queryPictureList?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&app=Media&stream=Camera_00001&starttime=20220317081201&endtime=20220319231201 + + http POST 鏂瑰紡 + http URL + http://190.15.240.11:7088/index/api/queryPictureList + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","vhost":"_defaultVhost_","app":"Media","stream":"Camera_00001","starttime":"20220317081201","endtime":"20220319231201"} + + 鎴愬姛杩斿洖Body鍊� + { + "code": 0, + "app": "Media", + "stream": "Camera_00001", + "starttime": "20220317081201", + "endtime": "20220319231201", + "PictureFileList": [ + { + "file": "2022031816153857.jpg", + "url": "http://10.0.0.239:7088/Media/Camera_00001/2022031816153857.jpg" + }, + { + "file": "2022031816153958.jpg", + "url": "http://10.0.0.239:7088/Media/Camera_00001/2022031816153958.jpg" + }, + { + "file": "2022031816154059.jpg", + "url": "http://10.0.0.239:7088/Media/Camera_00001/2022031816154059.jpg" + }, + ] + } + + 22銆佷慨鏀规煇涓�璺殑姘村嵃鐩稿叧鍙傛暟 + + URL: index/api/setTransFilter + + 鍔熻兘锛� + 淇敼鏌愪竴璺殑姘村嵃鐩稿叧鍙傛暟锛屾瘮姘村嵃鐨勫唴瀹广�侀鑹层�佸瓧浣撳ぇ灏忋�佸瓧浣撲綅缃�佸瓧浣撻�忔槑搴� + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc 銆愬繀濉弬鏁般�� + vhost 姣斿 _defaultVhost_ 銆愬彲閫夊弬鏁般�� + app 搴旂敤鍚� 姣斿 rtp銆乬b28181銆丮edia 绛夌瓑 锛岃嚜宸辫捣鐨勫悕瀛� 銆愬繀濉弬鏁般�� + stream 濯掍綋娴佸悕 姣斿 Camera_00001銆�44303403343034243200234 绛夌瓑 銆愬繀濉弬鏁般�� + text 姘村嵃鍐呭 姣斿 鏌愭煇甯傛煇鏌愬叕瀹夊眬 銆愬繀濉弬鏁般�� + size 瀛椾綋澶у皬 20銆�30 銆�40 銆�50 銆愬繀濉弬鏁般�� + color 瀛椾綋棰滆壊 red,green,blue,white,black, + alpha 閫忔槑搴� 0.1 ~ 0.9 , + left 姘村嵃x鍧愭爣 姣斿 5 銆� 10 銆�20 + top 姘村嵃y鍧愭爣 姣斿 5 銆� 10 銆� 20 + trans 鏄惁杞崲 鍥哄畾涓� 1 + + http POST 鏂瑰紡 + http://127.0.0.1:7088/index/api/setTransFilter + + Body 鍙傛暟鍐呭涓� + { + "secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc", + "app" : "live", + "stream" : "test", + "text" : "ABL", + "size" : 60, + "color" : "red", + "alpha" : 0.8, + "left" : 40, + "top" : 40, + "trans" : 1 + } + + 23銆佷负浜嗗姛鑳芥洿鏂扮殑闇�瑕侊紝澧炲姞璁剧疆鍙傛暟鍊肩殑鎺ュ彛锛屽彲浠ュ崟鐙缃� ABLMediaServer.ini 鐨勬煇涓�涓�硷紝骞朵笖鏈嶅姟鍣ㄤ笉鐢ㄩ噸鍚紝绔嬪嵆璧锋晥 + + URL: index/api/setConfigParamValue + + 鍔熻兘锛� + 涓轰簡鍔熻兘鏇存柊鐨勯渶瑕侊紝澧炲姞璁剧疆鍙傛暟鍊肩殑鎺ュ彛锛屽彲浠ュ崟鐙缃� ABLMediaServer.ini 鐨勬煇涓�涓�硷紝骞朵笖鏈嶅姟鍣ㄤ笉鐢ㄩ噸鍚紝绔嬪嵆璧锋晥 + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc 銆愬繀濉弬鏁般�� + vhost 姣斿 _defaultVhost_ 銆愬彲閫夊弬鏁般�� + key 鍙傛暟鍚� 姣斿 saveGB28181Rtp 锛堜繚瀛樻帴鍏ョ殑鍥芥爣PS娴侊級銆� saveProxyRtspRtp 锛堜繚瀛榬tsp浠g悊鎷夋祦鐨剅tp娴侊級 + 杩樻湁 ABLMediaServer.ini 閲岄潰鐨勯厤缃弬鏁帮紝濡傛灉鍙傛暟鍊间笉濉氨璁剧疆绌猴紝涓嶆槸绌烘牸 + mediaServerID = ABLMediaServer_00001 + secret = 035c73f7-bb6b-4889-a715-d9eb2d1925cc + localipAddress = + maxTimeNoOneWatch = 9999999 + recordPath = + picturePath = + maxSameTimeSnap = 16 + snapOutPictureWidth = 0 + snapOutPictureHeight = 0 + snapObjectDestroy = 1 + snapObjectDuration = 120 + captureReplayType = 1 + pictureMaxCount = 30 + pushEnable_mp4 = 0 + fileSecond = 300 + videoFileFormat = 1 + fileKeepMaxTime = 3 + httpDownloadSpeed = 6 + fileRepeat = 0 + H265ConvertH264_enable = 0 + H265DecodeCpuGpuType = 0 + H264DecodeEncode_enable = 0 + filterVideo_enable = 0 + filterVideo_text = ABL姘村嵃娴嬭瘯123 + FilterFontSize = 30 + FilterFontColor = red + FilterFontLeft = 5 + FilterFontTop = 5 + FilterFontAlpha = 0.6 + convertOutWidth = 720 + convertOutHeight = 480 + convertMaxObject = 26 + convertOutBitrate = 1024 + hook_enable = 0 + noneReaderDuration = 15 + on_server_started = http://10.0.0.238:4088/index/hook/on_server_started + on_server_keepalive = http://10.0.0.238:4088/index/hook/on_server_keepalive + on_stream_arrive = http://10.0.0.238:4088/index/hook/on_stream_arrive + on_stream_not_arrive = http://10.0.0.238:4088/index/hook/on_stream_not_arrive + on_stream_none_reader = http://10.0.0.238:4088/index/hook/on_stream_none_reader + on_stream_disconnect = http://10.0.0.238:4088/index/hook/on_stream_disconnect + on_stream_not_found = + on_record_mp4 = http://10.0.0.238:4088/index/hook/on_record_mp4 + on_delete_record_mp4 = http://10.0.0.238:4088/index/hook/on_delete_record_mp4 + on_record_progress = http://10.0.0.238:4088/index/hook/on_record_progress + on_record_ts = http://10.0.0.238:4088/index/hook/on_record_ts + httpServerPort = 7088 + rtspPort = 554 + rtmpPort = 1935 + httpMp4Port = 5088 + wsFlvPort = 6088 + httpFlvPort = 8088 + ps_tsRecvPort = 10000 + hls_enable = 0 + hlsPort = 9088 + hlsCutTime = 3 + hlsCutType = 2 + h265CutType = 1 + enable_audio = 1 + G711ConvertAAC = 0 + IOContentNumber = 16 + ThreadCountOfIOContent = 8 + RecvThreadCount = 128 + SendThreadCount = 128 + RecordReplayThread = 32 + GB28181RtpTCPHeadType = 2 + ReConnectingCount = 40320 + MaxDiconnectTimeoutSecond = 36 + ForceSendingIFrame = 1 + value 鍙傛暟鍊� 璇﹁ ABLMediaServer.ini 鐨勫弬鏁板�煎強鍙傛暟鍊艰鏄� + + http GET 鏂瑰紡 + 銆� 姣斿锛� + 鎵撳紑淇濆瓨鍥芥爣PS鏍囧織 + 銆�銆� http://44.35.33.239:7088/index/api/setConfigParamValue?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=saveGB28181Rtp&value=1 + 鍏抽棴瀛樺浗鏍嘝S鏍囧織 + 銆�銆� http://44.35.33.239:7088/index/api/setConfigParamValue?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=saveGB28181Rtp&value=0 + + 鎵撳紑淇濆瓨浠g悊鎷夛綊锝旓綋锝愭祦鏍囧織 + 銆�銆� http://44.35.33.239:7088/index/api/setConfigParamValue?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=saveProxyRtspRtp&value=1 + 鍏抽棴淇濆瓨浠g悊鎷夛綊锝旓綋锝愭祦鏍囧織 + 銆�銆� http://44.35.33.239:7088/index/api/setConfigParamValue?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&key=saveProxyRtspRtp&value=0 + + 24锛夊畨鍏ㄥ仠姝㈡湇鍔″櫒 + URL: /index/api/shutdownServer + + 鍔熻兘锛� + 瀹夊叏鍋滄鏈嶅姟鍣紝濡傛灉鏈嶅姟鍣ㄦ鍦ㄥ綍鍍忋�佹姄鎷嶇瓑绛夋搷浣滐紝闇�瑕佽皟鐢ㄨ鍑芥暟瀹夊叏鍋滄鏈嶅姟鍣紝杩欐牱褰曞埗鐨刴p4鎵嶈兘姝e父鎾斁 + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc 銆愬繀濉弬鏁般�� + + http GET 鏂瑰紡 + http://127.0.0.1:7088/index/api/shutdownServer?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc + + http POST 鏂瑰紡 + http URL + http://127.0.0.1:7088/index/api/shutdownServer + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc"} + + 杩斿洖Body锛� + { + "code": 0, + "memo": "ABLMediaServer shutdown Successed !" + } + + 25锛夐噸鏂板惎鍔ㄦ湇鍔″櫒 + URL: /index/api/restartServer + + 鍔熻兘锛� + 瀹夊叏閲嶅惎鏈嶅姟鍣紝濡傛灉鏈嶅姟鍣ㄦ鍦ㄥ綍鍍忋�佹姄鎷嶇瓑绛夋搷浣滐紝闇�瑕佽皟鐢ㄨ鍑芥暟瀹夊叏閲嶅惎鏈嶅姟鍣紝杩欐牱褰曞埗鐨刴p4鎵嶈兘姝e父鎾斁 + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc 銆愬繀濉弬鏁般�� + + http GET 鏂瑰紡 + http://127.0.0.1:7088/index/api/restartServer?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc + + http POST 鏂瑰紡 + http URL + http://127.0.0.1:7088/index/api/restartServer + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc"} + + 杩斿洖Body锛� + { + "code": 0, + "memo": "ABLMediaServer restartServer Successed ! " + } + + 26锛夎幏鍙栧綋鍓嶈浆鐮佺殑鏁伴噺 + URL: /index/api/getTranscodingCount + + 鍔熻兘锛� + 鑾峰彇褰撳墠姝e湪杞爜鐨勬暟閲� + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc 銆愬繀濉弬鏁般�� + + http GET 鏂瑰紡 + http://127.0.0.1:7088/index/api/getTranscodingCount?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc + + http POST 鏂瑰紡 + http URL + http://127.0.0.1:7088/index/api/getTranscodingCount + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc"} + + 杩斿洖Body锛� + { + "code": 0, + "currentTranscodingCount": 2 + } + + 27锛夈�佸垪涓炬祦濯掍綋鏈嶅姟鍣ㄦ墍鏈夊崰鐢ㄧ鍙� + URL: /index/api/listServerPort + + 鍔熻兘锛� + 鍒椾妇娴佸獟浣撴湇鍔″櫒鎵�鏈夊崰鐢ㄧ鍙� + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc 銆愬繀濉弬鏁般�� + app 搴旂敤鍚� 姣斿 rtp銆乬b28181銆丮edia 绛夌瓑 锛岃嚜宸辫捣鐨勫悕瀛� 銆愬彲閫夊弬鏁般�� + stream 濯掍綋娴佸悕 姣斿 Camera_00001銆�44303403343034243200234 绛夌瓑 銆愬彲閫夊弬鏁般�� + + 鍙傛暟濉啓鏍蜂緥璇存槑锛� + 鏍蜂緥1锛坅pp銆乻tream 閮戒笉濉啓锛� + secret 035c73f7-bb6b-4889-a715-d9eb2d1925cc + + 杩斿洖鎵�鏈夊湪绾跨殑濯掍綋婧� + + 鏍蜂緥2 锛堝彧濉啓 app 锛� + secret 035c73f7-bb6b-4889-a715-d9eb2d1925cc + app rtp + 杩斿洖 app 绛変簬 rtp 鐨勬墍鏈夊獟浣撴簮 + + 鏍蜂緥3 锛堝~鍐� app = rtp , stream = 44303403343034243200234锛� + secret 035c73f7-bb6b-4889-a715-d9eb2d1925cc + app rtp + stream 44303403343034243200234 + 杩斿洖 app 绛変簬 rtp銆佸苟涓� stream 绛変簬 44303403343034243200234 鐨勬墍鏈夊獟浣撴簮 + + 鏍蜂緥4 锛堝~鍐� stream = 44303403343034243200234锛� + secret 035c73f7-bb6b-4889-a715-d9eb2d1925cc + stream 44303403343034243200234 + 杩斿洖 stream 绛変簬 44303403343034243200234 鐨勬墍鏈夊獟浣撴簮 + + http GET 鏂瑰紡 + http://127.0.0.1:7088/index/api/listServerPort?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc + + http POST 鏂瑰紡 + http URL + http://127.0.0.1:7088/index/api/listServerPort + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc"} + + 杩斿洖Body锛� + { + "code": 0, + "memo": "success", + "data": [ + { + "key": 478, + "app": "Media", + "stream": "Camera_00003", + "networkType": 23, + "port": 34988 + }, + { + "key": 477, + "app": "Media", + "stream": "Camera_00002", + "networkType": 23, + "port": 34986 + }, + { + "key": 476, + "app": "Media", + "stream": "Camera_00001", + "networkType": 23, + "port": 34984 + }, + { + "key": 456, + "app": "", + "stream": "", + "networkType": 68, + "port": 10000 + } + ] + } + + 銆愭敞閲婏細鍙互鏍规嵁 "networkType": 23, 杩欎釜瀛楁鏍囪瘑瀵硅薄鐨勭綉缁滅被鍨� 锛屽叿浣撹瑙佺綉缁滅被鍨嬬殑瀵圭収琛� 銆� + + 28锛夈�佹壒閲忚缃湇鍔″櫒鐨勯厤缃弬鏁� + URL: /index/api/setServerConfig + + 鍔熻兘锛� + 鎵归噺璁剧疆鏈嶅姟鍣ㄧ殑閰嶇疆鍙傛暟 + + 鍙傛暟锛� 鍙傛暟璇存槑 鍙傛暟鍙傝�冨�� + secret 鏈嶅姟鍣ㄥ瘑鐮� 姣斿 035c73f7-bb6b-4889-a715-d9eb2d1925cc 銆愬繀濉弬鏁般�� + noneReaderDuration 澶氬皯绉掓棤浜鸿鐪嬮�氱煡涓�娆� 20 銆愬彲閫夊弬鏁般�� + on_server_started 鏈嶅姟鍣ㄥ惎鍔ㄩ�氱煡 http://10.0.0.238:4088/index/hook/on_server_started 銆愬彲閫夊弬鏁般�� + iframeArriveNoticCount i甯ц揪鍒伴�氱煡鎬绘暟 30 銆愬彲閫夊弬鏁般�� + + http GET 鏂瑰紡 + http://127.0.0.1:7088/index/api/setServerConfig?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc&noneReaderDuration=20&on_server_started=http://10.0.0.238:4088/index/hook/on_server_started&iframeArriveNoticCount=30 + + http POST 鏂瑰紡 + http URL + http://127.0.0.1:7088/index/api/setServerConfig + + http Body 鍙傛暟 json 鏍煎紡 + {"secret":"035c73f7-bb6b-4889-a715-d9eb2d1925cc","noneReaderDuration":20,"iframeArriveNoticCount":30,"on_server_started":"http://10.0.0.238:4088/index/hook/on_server_started"} + + 29锛� 涓轰簡鏂逛究鏌愪簺鐗规畩鍦哄悎锛屾湇鍔″櫒鏀寔udp鐨�10000 绔彛鎺ュ叆鍥芥爣PS鐮佹祦锛屽氨鏄汉浠父璇寸殑鍗曠鍙fā寮忥紝url鐨勫懡鍚嶈鍒欎负 /rtp/ssrc ,鍏朵腑ssrc涓轰笅绾tp鎵撳寘 + 鐨�16杩涘埗鐨勫�艰浆鎹负澶у皬鐨勫瓧绗︿覆锛屽嵆鍙痵printf(url,"rtp/%X",ssrc) ,鍏蜂綋鎺ュ叆鐨剈rl鍚嶅瓧鍙互璋冪敤 getMediaList 鏌ヨ鍑烘帴鍏ョ殑鍥芥爣娴� 銆傞渶瑕佹敞鎰忕殑鏄� + 涓嬬骇 rtp 鎵撳寘鏃舵瘡璺棰戠殑rtp涓殑ssrc涓嶈兘鐩稿悓銆� + + + 30锛� 缃戠粶绫诲瀷鐨勫鐓ц〃 + 1 濯掍綋杈撳叆缃戠粶绫诲瀷瀵圭収琛� + + 鏁村舰鍊� 浠h〃鎰忎箟 + 21 浠tmp鏂瑰紡鎺ㄩ�佹帴鍏ユ祦濯掍綋鏈嶅姟鍣� + 23 浠tsp鏂瑰紡鎺ㄩ�佹帴鍏ユ祦濯掍綋鏈嶅姟鍣� + 30 鏈嶅姟鍣ㄤ互rtsp鏂瑰紡涓诲姩鎷夋祦鎺ュ叆 + 31 鏈嶅姟鍣ㄤ互rtmp鏂瑰紡涓诲姩鎷夋祦鎺ュ叆 + 32 鏈嶅姟鍣ㄤ互flv鏂瑰紡涓诲姩鎷夋祦鎺ュ叆 + 33 鏈嶅姟鍣ㄤ互hls鏂瑰紡涓诲姩鎷夋祦鎺ュ叆 + 50 浠g悊鎷夋祦鎺ュ叆鏈嶅姟鍣� + 60 鏈嶅姟鍣ㄤ互鍥芥爣28181鐨刄DP鏂瑰紡鎺ュ叆 + 61 鏈嶅姟鍣ㄤ互鍥芥爣28181鐨凾CP鏂瑰紡鎺ュ叆 + + 80 鏈嶅姟鍣ㄥ綍鍍忔枃浠剁偣鎾互璇诲彇fmp4鏂囦欢杈撳叆 + 81 鏈嶅姟鍣ㄥ綍鍍忔枃浠剁偣鎾互璇诲彇TS鏂囦欢杈撳叆 + 82 鏈嶅姟鍣ㄥ綍鍍忔枃浠剁偣鎾互璇诲彇PS鏂囦欢杈撳叆 + 83 鏈嶅姟鍣ㄥ綍鍍忔枃浠剁偣鎾互璇诲彇FLV鏂囦欢杈撳叆 + + 2 濯掍綋杈撳嚭缃戠粶绫诲瀷瀵圭収琛� + 鏁村舰鍊� 浠h〃鎰忎箟 + 22 鏈嶅姟鍣ㄤ互rtsp琚姩鏂瑰紡寰�澶栧彂閫佺爜娴� 锛屽嵆甯歌鐨剉lc鐐规挱 + 24 鏈嶅姟鍣ㄤ互rtmp琚姩鏂瑰紡寰�澶栧彂閫佺爜娴� 锛屽嵆甯歌鐨剉lc鐐规挱 + 25 鏈嶅姟鍣ㄤ互flv琚姩鏂瑰紡寰�澶栧彂閫佺爜娴� 锛屽嵆甯歌鐨剉lc鐐规挱 銆佹祻瑙堝櫒鎾斁 + 26 鏈嶅姟鍣ㄤ互hls琚姩鏂瑰紡寰�澶栧彂閫佺爜娴� 锛屽嵆甯歌鐨剉lc鐐规挱 銆佹祻瑙堝櫒鎾斁 + 27 鏈嶅姟鍣ㄤ互ws-flv琚姩鏂瑰紡寰�澶栧彂閫佺爜娴� ,EasyPlayer.js鎻掍欢鎾斁銆佹祻瑙堝櫒鎾斁 + 28 鏈嶅姟鍣ㄤ互http-mp4琚姩鏂瑰紡寰�澶栧彂閫佺爜娴� 锛屽嵆甯歌鐨剉lc鐐规挱 銆佹祻瑙堝櫒鎾斁 + + 40 鏈嶅姟鍣ㄤ互rtsp涓诲姩鏂瑰紡寰�澶栧彂閫佺爜娴� 锛屽嵆甯歌鐨剅tsp鎺ㄦ祦 + 41 鏈嶅姟鍣ㄤ互rtmp涓诲姩鏂瑰紡寰�澶栧彂閫佺爜娴� 锛屽嵆甯歌鐨剅tmp鎺ㄦ祦 + 65 鏈嶅姟鍣ㄤ互鍥芥爣GB28181涓诲姩UDP鏂瑰紡寰�澶栧彂閫佺爜娴� 锛屽嵆甯歌鐨勫浗鏍囦互UDP鏂瑰紡寰�涓婄骇鎺ㄦ祦 + 66 鏈嶅姟鍣ㄤ互鍥芥爣GB28181涓诲姩TCP鏂瑰紡寰�澶栧彂閫佺爜娴� 锛屽嵆甯歌鐨勫浗鏍囦互TCP鏂瑰紡寰�涓婄骇鎺ㄦ祦 + \ No newline at end of file diff --git a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java index b2f3602..5eca3bf 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java +++ b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java @@ -270,126 +270,29 @@ } } - public JSONObject getMediaList(MediaServer mediaServerItem, String app, String stream, String schema, RequestCallback callback){ + + public Integer openRtpServer(MediaServer mediaServer, String app, String stream, int payload, Integer port, Integer tcpMode, Integer disableAudio) { Map<String, Object> param = new HashMap<>(); - if (app != null) { - param.put("app",app); - } - if (stream != null) { - param.put("stream",stream); - } - if (schema != null) { - param.put("schema",schema); - } - param.put("vhost","__defaultVhost__"); - return sendPost(mediaServerItem, "getMediaList",param, callback); - } - - public JSONObject getMediaList(MediaServer mediaServerItem, String app, String stream){ - return getMediaList(mediaServerItem, app, stream,null, null); - } - - public JSONObject getMediaList(MediaServer mediaServerItem, RequestCallback callback){ - return sendPost(mediaServerItem, "getMediaList",null, callback); - } - - public JSONObject getMediaInfo(MediaServer mediaServerItem, String app, String schema, String stream){ - Map<String, Object> param = new HashMap<>(); - param.put("app",app); - param.put("schema",schema); - param.put("stream",stream); - param.put("vhost","__defaultVhost__"); - return sendPost(mediaServerItem, "getMediaInfo",param, null); - } - - public JSONObject getRtpInfo(MediaServer mediaServerItem, String stream_id){ - Map<String, Object> param = new HashMap<>(); - param.put("stream_id",stream_id); - return sendPost(mediaServerItem, "getRtpInfo",param, null); - } - - public JSONObject addFFmpegSource(MediaServer mediaServerItem, String src_url, String dst_url, Integer timeout_ms, - boolean enable_audio, boolean enable_mp4, String ffmpeg_cmd_key){ - logger.info(src_url); - logger.info(dst_url); - Map<String, Object> param = new HashMap<>(); - param.put("src_url", src_url); - param.put("dst_url", dst_url); - param.put("timeout_ms", timeout_ms); - param.put("enable_mp4", enable_mp4); - param.put("ffmpeg_cmd_key", ffmpeg_cmd_key); - return sendPost(mediaServerItem, "addFFmpegSource",param, null); - } - - public JSONObject delFFmpegSource(MediaServer mediaServerItem, String key){ - Map<String, Object> param = new HashMap<>(); - param.put("key", key); - return sendPost(mediaServerItem, "delFFmpegSource",param, null); - } - - public JSONObject delStreamProxy(MediaServer mediaServerItem, String key){ - Map<String, Object> param = new HashMap<>(); - param.put("key", key); - return sendPost(mediaServerItem, "delStreamProxy",param, null); - } - - public JSONObject getServerConfig(MediaServer mediaServerItem){ - return sendPost(mediaServerItem, "getServerConfig",null, null); - } - - public JSONObject setConfigParamValue(MediaServer mediaServerItem, String key, Object value){ - Map<String, Object> param = new HashMap<>(); - param.put("key", key); - param.put("value", value); - return sendGet(mediaServerItem,"setConfigParamValue", param); - } - - public JSONObject openRtpServer(MediaServer mediaServerItem, Map<String, Object> param){ - return sendPost(mediaServerItem, "openRtpServer",param, null); - } - - public JSONObject closeRtpServer(MediaServer mediaServerItem, Map<String, Object> param) { - return sendPost(mediaServerItem, "closeRtpServer",param, null); - } - - public void closeRtpServer(MediaServer mediaServerItem, Map<String, Object> param, RequestCallback callback) { - sendPost(mediaServerItem, "closeRtpServer",param, callback); - } - - public JSONObject listRtpServer(MediaServer mediaServerItem) { - return sendPost(mediaServerItem, "listRtpServer",null, null); - } - - public JSONObject startSendRtp(MediaServer mediaServerItem, Map<String, Object> param) { - return sendPost(mediaServerItem, "startSendRtp",param, null); - } - - public JSONObject startSendRtpPassive(MediaServer mediaServerItem, Map<String, Object> param) { - return sendPost(mediaServerItem, "startSendRtpPassive",param, null); - } - - public JSONObject startSendRtpPassive(MediaServer mediaServerItem, Map<String, Object> param, RequestCallback callback) { - return sendPost(mediaServerItem, "startSendRtpPassive",param, callback); - } - - public JSONObject stopSendRtp(MediaServer mediaServerItem, Map<String, Object> param) { - return sendPost(mediaServerItem, "stopSendRtp",param, null); - } - - public JSONObject restartServer(MediaServer mediaServerItem) { - return sendPost(mediaServerItem, "restartServer",null, null); - } - - public JSONObject addStreamProxy(MediaServer mediaServerItem, String app, String stream, String url, boolean enable_audio, boolean enable_mp4, String rtp_type) { - Map<String, Object> param = new HashMap<>(); - param.put("vhost", "__defaultVhost__"); + param.put("vhost", "_defaultVhost_"); param.put("app", app); - param.put("stream", stream); - param.put("url", url); - param.put("enable_mp4", enable_mp4?1:0); - param.put("enable_audio", enable_audio?1:0); - param.put("rtp_type", rtp_type); - return sendPost(mediaServerItem, "addStreamProxy",param, null, 20); + param.put("stream_id", stream); + param.put("payload", payload); + if (port != null) { + param.put("port", port); + } + if (tcpMode != null) { + param.put("enable_tcp", tcpMode); + } + if (disableAudio != null) { + param.put("disableAudio", disableAudio); + } + + JSONObject jsonObject = sendPost(mediaServer, "openRtpServer", param, null); + if (jsonObject.getInteger("code") == 0) { + return jsonObject.getInteger("port"); + }else { + return 0; + } } public JSONObject closeStreams(MediaServer mediaServerItem, String app, String stream) { @@ -401,58 +304,14 @@ return sendPost(mediaServerItem, "close_streams",param, null); } - public JSONObject getAllSession(MediaServer mediaServerItem) { - return sendPost(mediaServerItem, "getAllSession",null, null); + public JSONObject getServerConfig(MediaServer mediaServerItem){ + return sendPost(mediaServerItem, "getServerConfig",null, null); } - public void kickSessions(MediaServer mediaServerItem, String localPortSStr) { - Map<String, Object> param = new HashMap<>(); - param.put("local_port", localPortSStr); - sendPost(mediaServerItem, "kick_sessions",param, null); - } - - public void getSnap(MediaServer mediaServerItem, String streamUrl, int timeout_sec, int expire_sec, String targetPath, String fileName) { - Map<String, Object> param = new HashMap<>(3); - param.put("url", streamUrl); - param.put("timeout_sec", timeout_sec); - param.put("expire_sec", expire_sec); - sendGetForImg(mediaServerItem, "getSnap", param, targetPath, fileName); - } - - public JSONObject pauseRtpCheck(MediaServer mediaServerItem, String streamId) { - Map<String, Object> param = new HashMap<>(1); - param.put("stream_id", streamId); - return sendPost(mediaServerItem, "pauseRtpCheck",param, null); - } - - public JSONObject resumeRtpCheck(MediaServer mediaServerItem, String streamId) { - Map<String, Object> param = new HashMap<>(1); - param.put("stream_id", streamId); - return sendPost(mediaServerItem, "resumeRtpCheck",param, null); - } - - public JSONObject connectRtpServer(MediaServer mediaServerItem, String dst_url, int dst_port, String stream_id) { - Map<String, Object> param = new HashMap<>(1); - param.put("dst_url", dst_url); - param.put("dst_port", dst_port); - param.put("stream_id", stream_id); - return sendPost(mediaServerItem, "connectRtpServer",param, null); - } - - public JSONObject updateRtpServerSSRC(MediaServer mediaServerItem, String streamId, String ssrc) { - Map<String, Object> param = new HashMap<>(1); - param.put("ssrc", ssrc); - param.put("stream_id", streamId); - return sendPost(mediaServerItem, "updateRtpServerSSRC",param, null); - } - - public JSONObject deleteRecordDirectory(MediaServer mediaServerItem, String app, String stream, String date, String fileName) { - Map<String, Object> param = new HashMap<>(1); - param.put("vhost", "__defaultVhost__"); - param.put("app", app); - param.put("stream", stream); - param.put("period", date); - param.put("name", fileName); - return sendPost(mediaServerItem, "deleteRecordDirectory",param, null); + public JSONObject setConfigParamValue(MediaServer mediaServerItem, String key, Object value){ + Map<String, Object> param = new HashMap<>(); + param.put("key", key); + param.put("value", value); + return sendGet(mediaServerItem,"setConfigParamValue", param); } } diff --git a/src/main/java/com/genersoft/iot/vmp/media/abl/bean/hook/ABLHookParam.java b/src/main/java/com/genersoft/iot/vmp/media/abl/bean/hook/ABLHookParam.java index 8662085..796935e 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/abl/bean/hook/ABLHookParam.java +++ b/src/main/java/com/genersoft/iot/vmp/media/abl/bean/hook/ABLHookParam.java @@ -21,7 +21,7 @@ /** * 濯掍綋娴佹潵婧愮綉缁滅紪鍙凤紝鍙弬鑰冮檮琛� */ - private String networkType; + private Integer networkType; public String getMediaServerId() { return mediaServerId; @@ -55,11 +55,11 @@ this.key = key; } - public String getNetworkType() { + public Integer getNetworkType() { return networkType; } - public void setNetworkType(String networkType) { + public void setNetworkType(Integer networkType) { this.networkType = networkType; } } diff --git a/src/main/java/com/genersoft/iot/vmp/media/bean/MediaInfo.java b/src/main/java/com/genersoft/iot/vmp/media/bean/MediaInfo.java index 2853cd2..8ee0eaf 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/bean/MediaInfo.java +++ b/src/main/java/com/genersoft/iot/vmp/media/bean/MediaInfo.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSONObject; import com.genersoft.iot.vmp.media.abl.bean.hook.OnStreamArriveABLHookParam; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; +import com.genersoft.iot.vmp.media.zlm.dto.hook.OriginType; import io.swagger.v3.oas.annotations.media.Schema; import java.util.List; @@ -186,6 +187,24 @@ mediaInfo.setReaderCount(param.getReaderCount()); mediaInfo.setOnline(true); mediaInfo.setVideoCodec(param.getVideoCodec()); + switch (param.getNetworkType()) { + case 21: + mediaInfo.setOriginType(OriginType.RTMP_PUSH.ordinal()); + break; + case 23: + mediaInfo.setOriginType(OriginType.RTSP_PUSH.ordinal()); + break; + case 30: + case 31: + case 32: + case 33: + mediaInfo.setOriginType(OriginType.PULL.ordinal()); + break; + default: + mediaInfo.setOriginType(OriginType.UNKNOWN.ordinal()); + break; + + } mediaInfo.setWidth(param.getWidth()); mediaInfo.setHeight(param.getHeight()); mediaInfo.setAudioCodec(param.getAudioCodec()); diff --git a/src/main/java/com/genersoft/iot/vmp/media/bean/MediaServer.java b/src/main/java/com/genersoft/iot/vmp/media/bean/MediaServer.java index 5c32ea7..decbd4e 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/bean/MediaServer.java +++ b/src/main/java/com/genersoft/iot/vmp/media/bean/MediaServer.java @@ -32,6 +32,18 @@ @Schema(description = "RTMP绔彛") private int rtmpPort; + @Schema(description = "flv绔彛") + private int flvPort; + + @Schema(description = "https-flv绔彛") + private int flvSSLPort; + + @Schema(description = "ws-flv绔彛") + private int wsFlvPort; + + @Schema(description = "wss-flv绔彛") + private int wsFlvSSLPort; + @Schema(description = "RTMPS绔彛") private int rtmpSSlPort; @@ -98,7 +110,11 @@ sdpIp = ObjectUtils.isEmpty(zlmServerConfig.getSdpIp())? zlmServerConfig.getIp(): zlmServerConfig.getSdpIp(); streamIp = ObjectUtils.isEmpty(zlmServerConfig.getStreamIp())? zlmServerConfig.getIp(): zlmServerConfig.getStreamIp(); httpPort = zlmServerConfig.getHttpPort(); + flvPort = zlmServerConfig.getHttpPort(); + wsFlvPort = zlmServerConfig.getHttpPort(); httpSSlPort = zlmServerConfig.getHttpSSLport(); + flvSSLPort = zlmServerConfig.getHttpSSLport(); + wsFlvSSLPort = zlmServerConfig.getHttpSSLport(); rtmpPort = zlmServerConfig.getRtmpPort(); rtmpSSlPort = zlmServerConfig.getRtmpSslPort(); rtpProxyPort = zlmServerConfig.getRtpProxyPort(); @@ -328,4 +344,36 @@ public void setType(String type) { this.type = type; } + + public int getFlvPort() { + return flvPort; + } + + public void setFlvPort(int flvPort) { + this.flvPort = flvPort; + } + + public int getFlvSSLPort() { + return flvSSLPort; + } + + public void setFlvSSLPort(int flvSSLPort) { + this.flvSSLPort = flvSSLPort; + } + + public int getWsFlvPort() { + return wsFlvPort; + } + + public void setWsFlvPort(int wsFlvPort) { + this.wsFlvPort = wsFlvPort; + } + + public int getWsFlvSSLPort() { + return wsFlvSSLPort; + } + + public void setWsFlvSSLPort(int wsFlvSSLPort) { + this.wsFlvSSLPort = wsFlvSSLPort; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/media/event/hook/HookSubscribe.java b/src/main/java/com/genersoft/iot/vmp/media/event/hook/HookSubscribe.java index 345cc48..3353656 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/event/hook/HookSubscribe.java +++ b/src/main/java/com/genersoft/iot/vmp/media/event/hook/HookSubscribe.java @@ -35,7 +35,7 @@ @Async("taskExecutor") @EventListener public void onApplicationEvent(MediaArrivalEvent event) { - if ("rtsp".equals(event.getSchema())) { + if (event.getSchema() == null || "rtsp".equals(event.getSchema())) { sendNotify(HookType.on_media_arrival, event); } @@ -47,7 +47,7 @@ @Async("taskExecutor") @EventListener public void onApplicationEvent(MediaDepartureEvent event) { - if ("rtsp".equals(event.getSchema())) { + if (event.getSchema() == null || "rtsp".equals(event.getSchema())) { sendNotify(HookType.on_media_departure, event); } diff --git a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java index 3977045..4b6b221 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaNodeServerService.java @@ -10,7 +10,7 @@ import java.util.Map; public interface IMediaNodeServerService { - int createRTPServer(MediaServer mediaServer, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode); + int createRTPServer(MediaServer mediaServer, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode); void closeRtpServer(MediaServer mediaServer, String streamId); diff --git a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java index 2b11c03..2a72eb4 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/service/IMediaServerService.java @@ -33,9 +33,7 @@ void updateVmServer(List<MediaServer> mediaServerItemList); SSRCInfo openRTPServer(MediaServer mediaServerItem, String streamId, String presetSsrc, boolean ssrcCheck, - boolean isPlayback, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode); - - SSRCInfo openRTPServer(MediaServer mediaServerItem, String streamId, String ssrc, boolean ssrcCheck, boolean isPlayback, Integer port, Boolean onlyAuto); + boolean isPlayback, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode); void closeRTPServer(MediaServer mediaServerItem, String streamId); diff --git a/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java index add9d94..1b5d109 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java @@ -132,7 +132,7 @@ @Override public SSRCInfo openRTPServer(MediaServer mediaServer, String streamId, String presetSsrc, boolean ssrcCheck, - boolean isPlayback, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode) { + boolean isPlayback, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode) { if (mediaServer == null || mediaServer.getId() == null) { logger.info("[openRTPServer] 澶辫触, mediaServer == null || mediaServer.getId() == null"); return null; @@ -163,18 +163,12 @@ logger.info("[openRTPServer] 澶辫触, mediaServer鐨勭被鍨嬶細 {}锛屾湭鎵惧埌瀵瑰簲鐨勫疄鐜扮被", mediaServer.getType()); return null; } - rtpServerPort = mediaNodeServerService.createRTPServer(mediaServer, streamId, ssrcCheck ? Long.parseLong(ssrc) : 0, port, onlyAuto, reUsePort, tcpMode); + rtpServerPort = mediaNodeServerService.createRTPServer(mediaServer, streamId, ssrcCheck ? Long.parseLong(ssrc) : 0, port, onlyAuto, disableAudio, reUsePort, tcpMode); } else { rtpServerPort = mediaServer.getRtpProxyPort(); } return new SSRCInfo(rtpServerPort, ssrc, streamId); } - - @Override - public SSRCInfo openRTPServer(MediaServer mediaServer, String streamId, String ssrc, boolean ssrcCheck, boolean isPlayback, Integer port, Boolean onlyAuto) { - return openRTPServer(mediaServer, streamId, ssrc, ssrcCheck, isPlayback, port, onlyAuto, null, 0); - } - @Override public void closeRTPServer(MediaServer mediaServer, String streamId) { @@ -770,7 +764,18 @@ String callIdParam = ObjectUtils.isEmpty(callId)?"":"?callId=" + callId; streamInfoResult.setRtmp(addr, mediaServer.getRtmpPort(),mediaServer.getRtmpSSlPort(), app, stream, callIdParam); streamInfoResult.setRtsp(addr, mediaServer.getRtspPort(),mediaServer.getRtspSSLPort(), app, stream, callIdParam); - streamInfoResult.setFlv(addr, mediaServer.getHttpPort(),mediaServer.getHttpSSlPort(), app, stream, callIdParam); + + + if ("abl".equals(mediaServer.getType())) { + String flvFile = String.format("%s/%s.flv%s", app, stream, callIdParam); + streamInfoResult.setFlv(addr, mediaServer.getFlvPort(),mediaServer.getFlvSSLPort(), flvFile); + streamInfoResult.setWsFlv(addr, mediaServer.getWsFlvPort(),mediaServer.getWsFlvSSLPort(), flvFile); + }else { + String flvFile = String.format("%s/%s.live.flv%s", app, stream, callIdParam); + streamInfoResult.setFlv(addr, mediaServer.getFlvPort(),mediaServer.getFlvSSLPort(), flvFile); + streamInfoResult.setWsFlv(addr, mediaServer.getWsFlvPort(),mediaServer.getWsFlvSSLPort(), flvFile); + } + streamInfoResult.setFmp4(addr, mediaServer.getHttpPort(),mediaServer.getHttpSSlPort(), app, stream, callIdParam); streamInfoResult.setHls(addr, mediaServer.getHttpPort(),mediaServer.getHttpSSlPort(), app, stream, callIdParam); streamInfoResult.setTs(addr, mediaServer.getHttpPort(),mediaServer.getHttpSSlPort(), app, stream, callIdParam); diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java index 5b566d8..8fbe530 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java @@ -39,7 +39,7 @@ private String sipIp; @Override - public int createRTPServer(MediaServer mediaServer, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean reUsePort, Integer tcpMode) { + public int createRTPServer(MediaServer mediaServer, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode) { return zlmServerFactory.createRTPServer(mediaServer, streamId, ssrc, port, onlyAuto, reUsePort, tcpMode); } @@ -178,7 +178,9 @@ String callIdParam = ObjectUtils.isEmpty(callId)?"":"?callId=" + callId; streamInfoResult.setRtmp(addr, mediaServer.getRtmpPort(),mediaServer.getRtmpSSlPort(), app, stream, callIdParam); streamInfoResult.setRtsp(addr, mediaServer.getRtspPort(),mediaServer.getRtspSSLPort(), app, stream, callIdParam); - streamInfoResult.setFlv(addr, mediaServer.getHttpPort(),mediaServer.getHttpSSlPort(), app, stream, callIdParam); + String flvFile = String.format("%s/%s.live.flv%s", app, stream, callIdParam); + streamInfoResult.setFlv(addr, mediaServer.getHttpPort(),mediaServer.getHttpSSlPort(), flvFile); + streamInfoResult.setWsFlv(addr, mediaServer.getHttpPort(),mediaServer.getHttpSSlPort(), flvFile); streamInfoResult.setFmp4(addr, mediaServer.getHttpPort(),mediaServer.getHttpSSlPort(), app, stream, callIdParam); streamInfoResult.setHls(addr, mediaServer.getHttpPort(),mediaServer.getHttpSSlPort(), app, stream, callIdParam); streamInfoResult.setTs(addr, mediaServer.getHttpPort(),mediaServer.getHttpSSlPort(), app, stream, callIdParam); diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java index 2cc4f49..e4ddb12 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java @@ -542,7 +542,7 @@ } else { tcpMode = 0; } - SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId, null, ssrcCheck, false, null, true, false, tcpMode); + SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId, null, ssrcCheck, false, null, true, false, false, tcpMode); if (ssrcInfo == null || ssrcInfo.getPort() < 0) { logger.info("[鍥芥爣绾ц仈] 鍙戣捣璇煶鍠婅瘽 寮�鍚鍙g洃鍚け璐ワ紝 platform: {}, channel锛� {}", platform.getServerGBId(), channelId); SipSubscribe.EventResult<Object> eventResult = new SipSubscribe.EventResult<>(); diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java index c8d6f86..5c6bca2 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java @@ -259,7 +259,7 @@ ); SSRCInfo ssrcInfo = mediaServerService.openRTPServer(event.getMediaServer(), event.getStream(), null, - device.isSsrcCheck(), true, 0, false, false, device.getStreamModeForParam()); + device.isSsrcCheck(), true, 0, false, !deviceChannel.isHasAudio(), false, device.getStreamModeForParam()); playBack(event.getMediaServer(), ssrcInfo, deviceId, channelId, startTime, endTime, null); } } @@ -321,7 +321,7 @@ } } String streamId = String.format("%s_%s", device.getDeviceId(), channelId); - SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId, ssrc, device.isSsrcCheck(), false, 0, false, false, device.getStreamModeForParam()); + SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId, ssrc, device.isSsrcCheck(), false, 0, false, !channel.isHasAudio(), false, device.getStreamModeForParam()); if (ssrcInfo == null) { callback.run(InviteErrorCode.ERROR_FOR_RESOURCE_EXHAUSTION.getCode(), InviteErrorCode.ERROR_FOR_RESOURCE_EXHAUSTION.getMsg(), null); inviteStreamService.call(InviteSessionType.PLAY, device.getDeviceId(), channelId, null, @@ -762,6 +762,12 @@ throw new ControllerException(ErrorCode.ERROR100.getCode(), "鏈壘鍒拌澶囷細" + deviceId); } + DeviceChannel channel = channelService.getOne(deviceId, channelId); + if (channel == null) { + logger.warn("[褰曞儚鍥炴斁] 鏈壘鍒伴�氶亾 deviceId: {},channelId:{}", deviceId, channelId); + throw new ControllerException(ErrorCode.ERROR100.getCode(), "鏈壘鍒伴�氶亾锛�" + channelId); + } + MediaServer newMediaServerItem = getNewMediaServerItem(device); if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE") && ! newMediaServerItem.isRtpEnable()) { logger.warn("[褰曞儚鍥炴斁] 鍗曠鍙f敹娴佹椂涓嶆敮鎸乀CP涓诲姩鏂瑰紡鏀舵祦 deviceId: {},channelId:{}", deviceId, channelId); @@ -774,7 +780,7 @@ .replace(":", "") .replace(" ", ""); String stream = deviceId + "_" + channelId + "_" + startTimeStr + "_" + endTimeTimeStr; - SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, stream, null, device.isSsrcCheck(), true, 0, false, false, device.getStreamModeForParam()); + SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, stream, null, device.isSsrcCheck(), true, 0, false, !channel.isHasAudio(), false, device.getStreamModeForParam()); playBack(newMediaServerItem, ssrcInfo, deviceId, channelId, startTime, endTime, callback); } @@ -959,6 +965,10 @@ if (device == null) { return; } + DeviceChannel channel = channelService.getOne(deviceId, channelId); + if (channel == null) { + return; + } MediaServer newMediaServerItem = this.getNewMediaServerItem(device); if (newMediaServerItem == null) { callback.run(InviteErrorCode.ERROR_FOR_ASSIST_NOT_READY.getCode(), @@ -967,7 +977,7 @@ return; } // 褰曞儚涓嬭浇涓嶄娇鐢ㄥ浐瀹氭祦鍦板潃锛屽浐瀹氭祦鍦板潃浼氬鑷村鏋滃紑濮嬫椂闂翠笌缁撴潫鏃堕棿涓�鑷存椂鏂囦欢閿欒鐨勫彔鍔犲湪涓�璧� - SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, null, null, device.isSsrcCheck(), true, 0, false,false, device.getStreamModeForParam()); + SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, null, null, device.isSsrcCheck(), true, 0, false,!channel.isHasAudio(), false, device.getStreamModeForParam()); download(newMediaServerItem, ssrcInfo, deviceId, channelId, startTime, endTime, downloadSpeed, callback); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java index 1ea2254..6473c42 100755 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java @@ -24,6 +24,10 @@ "rtmp_ssl_port,"+ "rtp_proxy_port,"+ "rtsp_port,"+ + "flv_port," + + "flv_ssl_port," + + "ws_flv_port," + + "ws_flv_ssl__port," + "rtsp_ssl_port,"+ "auto_config,"+ "secret,"+ @@ -51,6 +55,10 @@ "#{rtmpSSlPort}, " + "#{rtpProxyPort}, " + "#{rtspPort}, " + + "#{flvPort}, " + + "#{flvSSLPort}, " + + "#{wsFlvPort}, " + + "#{wsFlvSSLPort}, " + "#{rtspSSLPort}, " + "#{autoConfig}, " + "#{secret}, " + @@ -81,6 +89,10 @@ "<if test=\"rtpProxyPort != null\">, rtp_proxy_port=#{rtpProxyPort}</if>" + "<if test=\"rtspPort != null\">, rtsp_port=#{rtspPort}</if>" + "<if test=\"rtspSSLPort != null\">, rtsp_ssl_port=#{rtspSSLPort}</if>" + + "<if test=\"flvPort != null\">, flv_port=#{flvPort}</if>" + + "<if test=\"flvSSLPort != null\">, flv_ssl_port=#{flvSSLPort}</if>" + + "<if test=\"wsFlvPort != null\">, ws_flv_port=#{wsFlvPort}</if>" + + "<if test=\"wsFlvSSLPort != null\">, ws_flv_ssl_port=#{wsFlvSSLPort}</if>" + "<if test=\"autoConfig != null\">, auto_config=#{autoConfig}</if>" + "<if test=\"rtpEnable != null\">, rtp_enable=#{rtpEnable}</if>" + "<if test=\"rtpPortRange != null\">, rtp_port_range=#{rtpPortRange}</if>" + @@ -108,6 +120,10 @@ "<if test=\"rtpProxyPort != null\">, rtp_proxy_port=#{rtpProxyPort}</if>" + "<if test=\"rtspPort != null\">, rtsp_port=#{rtspPort}</if>" + "<if test=\"rtspSSLPort != null\">, rtsp_ssl_port=#{rtspSSLPort}</if>" + + "<if test=\"flvPort != null\">, flv_port=#{flvPort}</if>" + + "<if test=\"flvSSLPort != null\">, flv_ssl_port=#{flvSSLPort}</if>" + + "<if test=\"wsFlvPort != null\">, ws_flv_port=#{wsFlvPort}</if>" + + "<if test=\"wsFlvSSLPort != null\">, ws_flv_ssl_port=#{wsFlvSSLPort}</if>" + "<if test=\"autoConfig != null\">, auto_config=#{autoConfig}</if>" + "<if test=\"rtpEnable != null\">, rtp_enable=#{rtpEnable}</if>" + "<if test=\"rtpPortRange != null\">, rtp_port_range=#{rtpPortRange}</if>" + diff --git "a/\346\225\260\346\215\256\345\272\223/abl/\345\210\235\345\247\213\345\214\226-mysql-2.7.0.sql" "b/\346\225\260\346\215\256\345\272\223/abl/\345\210\235\345\247\213\345\214\226-mysql-2.7.0.sql" index 7fece76..0290a06 100644 --- "a/\346\225\260\346\215\256\345\272\223/abl/\345\210\235\345\247\213\345\214\226-mysql-2.7.0.sql" +++ "b/\346\225\260\346\215\256\345\272\223/abl/\345\210\235\345\247\213\345\214\226-mysql-2.7.0.sql" @@ -155,6 +155,10 @@ rtp_proxy_port integer, rtsp_port integer, rtsp_ssl_port integer, + flv_port integer, + flv_ssl_port integer, + ws_flv_port integer, + ws_flv_ssl_port integer, auto_config bool default false, secret character varying(50), type character varying(50) default 'zlm', diff --git "a/\346\225\260\346\215\256\345\272\223/abl/\345\210\235\345\247\213\345\214\226-postgresql-kingbase-2.7.0.sql" "b/\346\225\260\346\215\256\345\272\223/abl/\345\210\235\345\247\213\345\214\226-postgresql-kingbase-2.7.0.sql" index 656f7a0..b2fbea5 100644 --- "a/\346\225\260\346\215\256\345\272\223/abl/\345\210\235\345\247\213\345\214\226-postgresql-kingbase-2.7.0.sql" +++ "b/\346\225\260\346\215\256\345\272\223/abl/\345\210\235\345\247\213\345\214\226-postgresql-kingbase-2.7.0.sql" @@ -155,6 +155,10 @@ rtp_proxy_port integer, rtsp_port integer, rtsp_ssl_port integer, + flv_port integer, + flv_ssl_port integer, + ws_flv_port integer, + ws_flv_ssl_port integer, auto_config bool default false, secret character varying(50), type character varying(50) default 'zlm', diff --git "a/\346\225\260\346\215\256\345\272\223/abl/\346\233\264\346\226\260-mysql-2.7.0.sql" "b/\346\225\260\346\215\256\345\272\223/abl/\346\233\264\346\226\260-mysql-2.7.0.sql" index de92cb2..8513658 100644 --- "a/\346\225\260\346\215\256\345\272\223/abl/\346\233\264\346\226\260-mysql-2.7.0.sql" +++ "b/\346\225\260\346\215\256\345\272\223/abl/\346\233\264\346\226\260-mysql-2.7.0.sql" @@ -1,2 +1,11 @@ alter table wvp_media_server add type character varying(50) default 'zlm'; + +alter table wvp_media_server + add flv_port integer; +alter table wvp_media_server + add flv_ssl_port integer; +alter table wvp_media_server + add ws_flv_port integer; +alter table wvp_media_server + add ws_flv_ssl_port integer; diff --git "a/\346\225\260\346\215\256\345\272\223/abl/\346\233\264\346\226\260-postgresql-kingbase-2.7.0.sql" "b/\346\225\260\346\215\256\345\272\223/abl/\346\233\264\346\226\260-postgresql-kingbase-2.7.0.sql" index 45f6959..9a527cb 100644 --- "a/\346\225\260\346\215\256\345\272\223/abl/\346\233\264\346\226\260-postgresql-kingbase-2.7.0.sql" +++ "b/\346\225\260\346\215\256\345\272\223/abl/\346\233\264\346\226\260-postgresql-kingbase-2.7.0.sql" @@ -1,2 +1,11 @@ alter table wvp_media_server - add type character varying(50) default 'zlm',; \ No newline at end of file + add type character varying(50) default 'zlm'; + +alter table wvp_media_server + add flv_port integer; +alter table wvp_media_server + add flv_ssl_port integer; +alter table wvp_media_server + add ws_flv_port integer; +alter table wvp_media_server + add ws_flv_ssl_port integer; \ No newline at end of file -- Gitblit v1.8.0