视频监控解决方案(BS架构,支持window、linux、linux arm)

开源流媒体服务器(m7s)+ webrtc

优势:跨平台,低延时,低配置可跑多路视频流,低CPU,使用浏览器硬解,前端就够完成开发

流媒体:https://m7s.live/

播放器:http://jessibuca.monibuca.com/

github:https://github.com/langhuihui/monibuca

文档:http://docs.monibuca.com/

普通功能

1. 通过ffmpeg向m7s进行推流

 ffmpeg -i **** rtsp://localhost/live/test

bat文件

:loop
  D:\StreamingMedia\ZLMRelease\ffmpeg\bin\ffmpeg.exe -re -i D:\StreamingMedia\MP4\dock1.mp4 -strict -2 -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://192.168.0.113/live/test1
goto loop

2. 拉流转发

3. GB28181 api接口

3.1  获取在线设备

http://localhost:8081/api/gb28181/list

[{
"ID": "34020000001110000107",
"Name": "Network Video Recorder",
"Manufacturer": "HIKVISION",
"Model": "DS-7816N-R2",
"Owner": "",
"RegisterTime": "2022-05-05T09:49:37.2410515+08:00",
"UpdateTime": "2022-05-05T09:56:31.5065763+08:00",
"LastKeepaliveAt": "2022-05-05T09:56:31.5065763+08:00",
"Status": "ONLINE",
"Channels": [{
"DeviceID": "34020000001320000011",
"ParentID": "",
"Name": "Camera 01",
"Manufacturer": "Manufacturer",
"Model": "Camera",
"Owner": "Owner",
"CivilCode": "CivilCode",
"Address": "192.168.0.11",
"Parental": 0,
"SafetyWay": 0,
"RegisterWay": 1,
"Secrecy": 0,
"Status": "OFF",
"RecordPublisher": null,
"LivePublisher": null,
"LiveSubSP": "",
"Records": null,
"RecordStartTime": "",
"RecordEndTime": ""
}],
"Addr": "192.168.0.104:5060",
"SipIP": "192.168.0.113"
}, {
"ID": "34020000001320000020",
"Name": "IPC-HFW2433DM-LED",
"Manufacturer": "Dahua",
"Model": "IPC-HFW2433DM-LED",
"Owner": "",
"RegisterTime": "2022-05-05T09:49:34.9500624+08:00",
"UpdateTime": "2022-05-05T09:56:34.9891245+08:00",
"LastKeepaliveAt": "2022-05-05T09:56:34.9893935+08:00",
"Status": "ONLINE",
"Channels": [{
"DeviceID": "34020000001320000020",
"ParentID": "34020000001320000020",
"Name": "IPC",
"Manufacturer": "Dahua",
"Model": "IPC-HFW2433DM-LED",
"Owner": "0",
"CivilCode": "340200",
"Address": "axy",
"Parental": 0,
"SafetyWay": 0,
"RegisterWay": 1,
"Secrecy": 0,
"Status": "ON",
"RecordPublisher": null,
"LivePublisher": {
"URL": "",
"StreamPath": "34020000001320000020/34020000001320000020",
"Type": "GB28181 Live",
"StartTime": "2022-05-05T09:49:35.0313162+08:00",
"Subscribers": null,
"VideoTracks": {
"h264": {
"CodecID": 7,
"PacketCount": 11169,
"BPS": 540346,
"SPSInfo": {
"ProfileIdc": 77,
"LevelIdc": 40,
"MbWidth": 120,
"MbHeight": 68,
"CropLeft": 0,
"CropRight": 0,
"CropTop": 0,
"CropBottom": 4,
"Width": 1920,
"Height": 1080
},
"GOP": 50,
"UsingDonlField": false
}
},
"AudioTracks": {},
"DataTracks": {},
"AutoCloseAfter": -1,
"Transcoding": null,
"ExtraProp": null,
"AppName": "34020000001320000020",
"StreamName": "34020000001320000020"
},
"LiveSubSP": "",
"Records": null,
"RecordStartTime": "",
"RecordEndTime": ""
}],
"Addr": "192.168.0.20:5060",
"SipIP": "192.168.0.113"
}, {
"ID": "34020000001320000013",
"Name": "IP DOME",
"Manufacturer": "Hikvision",
"Model": "DS-2DE2204IW-D3/W/XM",
"Owner": "",
"RegisterTime": "2022-05-05T09:49:48.42196+08:00",
"UpdateTime": "2022-05-05T09:56:54.2722771+08:00",
"LastKeepaliveAt": "2022-05-05T09:56:54.2722771+08:00",
"Status": "ONLINE",
"Channels": [{
"DeviceID": "34020000001320000013",
"ParentID": "34020000002000000001",
"Name": "IPdome",
"Manufacturer": "Hikvision",
"Model": "IP Camera",
"Owner": "Owner",
"CivilCode": "3402000000",
"Address": "Address",
"Parental": 0,
"SafetyWay": 0,
"RegisterWay": 1,
"Secrecy": 0,
"Status": "ON",
"RecordPublisher": null,
"LivePublisher": {
"URL": "",
"StreamPath": "34020000001320000013/34020000001320000013",
"Type": "GB28181 Live",
"StartTime": "2022-05-05T09:49:53.4551083+08:00",
"Subscribers": null,
"VideoTracks": {
"h264": {
"CodecID": 7,
"PacketCount": 10726,
"BPS": 461026,
"SPSInfo": {
"ProfileIdc": 77,
"LevelIdc": 42,
"MbWidth": 120,
"MbHeight": 68,
"CropLeft": 0,
"CropRight": 0,
"CropTop": 0,
"CropBottom": 4,
"Width": 1920,
"Height": 1080
},
"GOP": 50,
"UsingDonlField": false
}
},
"AudioTracks": {
"pcma": {
"CodecID": 7,
"PacketCount": 10709,
"BPS": 8000,
"SoundRate": 8000,
"SoundSize": 16,
"Channels": 1
}
},
"DataTracks": {},
"AutoCloseAfter": -1,
"Transcoding": null,
"ExtraProp": null,
"AppName": "34020000001320000013",
"StreamName": "34020000001320000013"
},
"LiveSubSP": "",
"Records": null,
"RecordStartTime": "",
"RecordEndTime": ""
}],
"Addr": "192.168.0.13:5060",
"SipIP": "192.168.0.113"
}, {
"ID": "34020000001320000012",
"Name": "IP CAMERA",
"Manufacturer": "Hikvision",
"Model": "DS-2CD3T27DWD-L",
"Owner": "",
"RegisterTime": "2022-05-05T09:49:36.9636585+08:00",
"UpdateTime": "2022-05-05T09:56:38.7406656+08:00",
"LastKeepaliveAt": "2022-05-05T09:56:38.741325+08:00",
"Status": "ONLINE",
"Channels": [{
"DeviceID": "34020000001320000012",
"ParentID": "34020000001320000012",
"Name": "Camera 01",
"Manufacturer": "Hikvision",
"Model": "IP Camera",
"Owner": "Owner",
"CivilCode": "CivilCode",
"Address": "Address",
"Parental": 0,
"SafetyWay": 0,
"RegisterWay": 1,
"Secrecy": 0,
"Status": "ON",
"RecordPublisher": null,
"LivePublisher": {
"URL": "",
"StreamPath": "34020000001320000012/34020000001320000012",
"Type": "GB28181 Live",
"StartTime": "2022-05-05T09:49:37.8322787+08:00",
"Subscribers": null,
"VideoTracks": {
"h264": {
"CodecID": 7,
"PacketCount": 11087,
"BPS": 377280,
"SPSInfo": {
"ProfileIdc": 77,
"LevelIdc": 42,
"MbWidth": 120,
"MbHeight": 68,
"CropLeft": 0,
"CropRight": 0,
"CropTop": 0,
"CropBottom": 4,
"Width": 1920,
"Height": 1080
},
"GOP": 50,
"UsingDonlField": false
}
},
"AudioTracks": {},
"DataTracks": {},
"AutoCloseAfter": -1,
"Transcoding": null,
"ExtraProp": null,
"AppName": "34020000001320000012",
"StreamName": "34020000001320000012"
},
"LiveSubSP": "",
"Records": null,
"RecordStartTime": "",
"RecordEndTime": ""
}],
"Addr": "192.168.0.12:5060",
"SipIP": "192.168.0.113"
}]

3.2 PTZ控制(参考国标协议组装ptz命令-方向、光圈、焦点、预置点)

http://192.168.0.113:8081/api/gb28181/control?id=34020000001320000013&channel=34020000001320000013&ptzcmd=A50F0108007D003A (向上速度5)

3. 录像回放(1650780387 2022-04-24 14:06:27 )

3.1 回放申请

http://localhost:8081/api/gb28181/invite?id=34020000001110000107&channel=34020000001320000011&startTime=1650780600&endTime=1650780720

3.2 在线回放 ws://localhost:8081/jessica/34020000001110000107/34020000001320000011/1650780600-1650780720 (使用MSE-demo.html)

4. webrtc在线播放视频流

http://localhost:8081/api/webrtc/play?streamPath=34020000001320000020/34020000001320000020

{
"type": "offer",
"sdp": "v=0\r\no=- 228882373012133062 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 123 119 35 36 37 38 39 40 114 115 116 117 118 41\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:5asH\r\na=ice-pwd:RVEEbZjdKU9FBLv8RtdyAI6b\r\na=ice-options:trickle\r\na=fingerprint:sha-256 F4:7D:A9:A1:CB:9F:14:C5:F5:0F:07:6D:90:A5:27:6B:4D:E4:F4:BC:8D:AB:A0:E3:7F:D7:8F:49:EB:D8:02:4D\r\na=setup:actpass\r\na=mid:0\r\na=extmap:1 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 urn:3gpp:video-orientation\r\na=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\na=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=recvonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=fmtp:98 profile-id=0\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 VP9/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 profile-id=2\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:102 VP9/90000\r\na=rtcp-fb:102 goog-remb\r\na=rtcp-fb:102 transport-cc\r\na=rtcp-fb:102 ccm fir\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=fmtp:102 profile-id=1\r\na=rtpmap:122 rtx/90000\r\na=fmtp:122 apt=102\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:121 rtx/90000\r\na=fmtp:121 apt=127\r\na=rtpmap:125 H264/90000\r\na=rtcp-fb:125 goog-remb\r\na=rtcp-fb:125 transport-cc\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:107 rtx/90000\r\na=fmtp:107 apt=125\r\na=rtpmap:108 H264/90000\r\na=rtcp-fb:108 goog-remb\r\na=rtcp-fb:108 transport-cc\r\na=rtcp-fb:108 ccm fir\r\na=rtcp-fb:108 nack\r\na=rtcp-fb:108 nack pli\r\na=fmtp:108 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:109 rtx/90000\r\na=fmtp:109 apt=108\r\na=rtpmap:124 H264/90000\r\na=rtcp-fb:124 goog-remb\r\na=rtcp-fb:124 transport-cc\r\na=rtcp-fb:124 ccm fir\r\na=rtcp-fb:124 nack\r\na=rtcp-fb:124 nack pli\r\na=fmtp:124 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:120 rtx/90000\r\na=fmtp:120 apt=124\r\na=rtpmap:123 H264/90000\r\na=rtcp-fb:123 goog-remb\r\na=rtcp-fb:123 transport-cc\r\na=rtcp-fb:123 ccm fir\r\na=rtcp-fb:123 nack\r\na=rtcp-fb:123 nack pli\r\na=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f\r\na=rtpmap:119 rtx/90000\r\na=fmtp:119 apt=123\r\na=rtpmap:35 H264/90000\r\na=rtcp-fb:35 goog-remb\r\na=rtcp-fb:35 transport-cc\r\na=rtcp-fb:35 ccm fir\r\na=rtcp-fb:35 nack\r\na=rtcp-fb:35 nack pli\r\na=fmtp:35 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=4d001f\r\na=rtpmap:36 rtx/90000\r\na=fmtp:36 apt=35\r\na=rtpmap:37 H264/90000\r\na=rtcp-fb:37 goog-remb\r\na=rtcp-fb:37 transport-cc\r\na=rtcp-fb:37 ccm fir\r\na=rtcp-fb:37 nack\r\na=rtcp-fb:37 nack pli\r\na=fmtp:37 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=f4001f\r\na=rtpmap:38 rtx/90000\r\na=fmtp:38 apt=37\r\na=rtpmap:39 H264/90000\r\na=rtcp-fb:39 goog-remb\r\na=rtcp-fb:39 transport-cc\r\na=rtcp-fb:39 ccm fir\r\na=rtcp-fb:39 nack\r\na=rtcp-fb:39 nack pli\r\na=fmtp:39 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=f4001f\r\na=rtpmap:40 rtx/90000\r\na=fmtp:40 apt=39\r\na=rtpmap:114 H264/90000\r\na=rtcp-fb:114 goog-remb\r\na=rtcp-fb:114 transport-cc\r\na=rtcp-fb:114 ccm fir\r\na=rtcp-fb:114 nack\r\na=rtcp-fb:114 nack pli\r\na=fmtp:114 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f\r\na=rtpmap:115 rtx/90000\r\na=fmtp:115 apt=114\r\na=rtpmap:116 red/90000\r\na=rtpmap:117 rtx/90000\r\na=fmtp:117 apt=116\r\na=rtpmap:118 ulpfec/90000\r\na=rtpmap:41 flexfec-03/90000\r\na=rtcp-fb:41 goog-remb\r\na=rtcp-fb:41 transport-cc\r\na=fmtp:41 repair-window=10000000\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:5asH\r\na=ice-pwd:RVEEbZjdKU9FBLv8RtdyAI6b\r\na=ice-options:trickle\r\na=fingerprint:sha-256 F4:7D:A9:A1:CB:9F:14:C5:F5:0F:07:6D:90:A5:27:6B:4D:E4:F4:BC:8D:AB:A0:E3:7F:D7:8F:49:EB:D8:02:4D\r\na=setup:actpass\r\na=mid:1\r\na=extmap:14 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:63 red/48000/2\r\na=fmtp:63 111/111\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:112 telephone-event/32000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\n"
}

备注:webrtc比jessibuca播放器更低延时(200-300ms),推荐使用

5. 直播功能(手机端或者web端pull视频流,用webrtc播放)

客户机用Chrome访问服务端,提示TypeError: Cannot read property 'getUserMedia' of undefined ,解决方案

chrome://flags/#unsafely-treat-insecure-origin-as-secure

重启Chrome

6. webrtc断网重连、截图、录像

player-via-3x3.html

qq:505645074

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值