該篇博文主要用來講明EasyNVR硬件錄像回放版本的相關接口說明和調用的demo;
方便用戶的二次開發和集成。javascript
軟件根目錄會包含接口文檔的,所以,本文主要是對一些特定接口的說明和接口實現功能的講解以及部分demo的展現說明;css
因爲獲取NVR錄像機的相關功能是經過SDK來實現功能的,所以,沒法想EasyNVR配置攝像機同樣,走一個標準的協議去完成相應的所有功能,所以,咱們 都是 經過不一樣的 SDK來實現對應品牌的錄像機的接入,咱們 沒法作到,知足所有的錄像機接入,可是能夠作到支持市面大多數主流錄像機的接入。所以咱們 也經過接口返回目前支持的攝像機的類型,方便用戶後續的對應的功能的獲取;html
實現接口java
接口:/api/v1/gethwnvrsupportlistajax
返回:200 OKapi
{ "EasyDarwin": { "Body": { "DeviceCount": "1", "Devices": [ { "Id": 1, "Name": "HIK_IPC_NVR" } ] }, "Header": { "CSeq": "1", "ErrorNum": "200", "ErrorString": "Success OK", "MessageType": "MSG_DS_HWNVR_GET_SUPPORTLIST_ACK", "Version": "v1" } } }
目前只是支持海康錄像機,隨着需求的變化,後續會不斷增長的;markdown
就接觸到的客戶反饋而言,大多數的客戶都是直接了當的說明,只是但願獲取到對應的時間段的錄像信息,對於這種明明白白的需求,咱們是必需要簡簡單單的實現的;網絡
實現接口app
名稱 | 含義 | 備註 |
id | 設備號 | NVR對應的設備號 |
channel | 通道號 | NVR對應的通道號 |
starttime | 開始播放時間 | 精確到秒:20180328000000 |
endtime | 結束播放時間 | 精確到秒:20180328235959 |
返回:async
{ "EasyDarwin": { "Body": { "HLS": "/hls/nvr1_channel1_98960064/nvr1_channel1_98960064.m3u8", "Handle": "98960064", "RTMP": "rtmp://127.0.0.1:10935/hls/nvr1_channel1_98960064" }, "Header": { "CSeq": "1", "ErrorNum": "200", "ErrorString": "Success OK", "MessageType": "MSG_DS_HWNVR_START_RECORD_PLAY_ACK", "Version": "v1" } }
調用demo
/* *param:當前播放通道號 */
function recordPlayer(param){
var rtmpport;//rtmp端口
$.ajax(_url + "/hwrecordplaystart",{
async : false,
data : {
id : deviceId,
channel : param,
starttime:recordDay+"000000",
endtime:recordDay+"235959"
}
}).then(function(data){
var ret = JSON.parse(data);
handle = ret.EasyDarwin.Body.Handle;
if(handle != 0){
$("#playerPrompt").html("當前播放錄像文件爲:<div><span style='color:green'>通道號</span>:通道"+param+"</br>"+"<span style='color:green'>日 期</span>:"+recordDay+"</div>")
$(".channel-title ul li span").remove();
$(".see"+param).append(" <span style='color:green'><i class='fa fa-eye'></i></span>")
RecordTouch = setInterval(function() {
$.get(_url + "/hwrecordplaytouch", {
id: deviceId,
handle: handle
}, function(data) {
console.log(data);
})
}, 30000);
}
$.ajax({
url:_url + "/getbaseconfig",
async:false,
success : function(data){
var ret = JSON.parse(data);
rtmpport = ret.EasyDarwin.Body.NginxRTMPPort;
}
})
// rtmp://127.0.0.1:10935/hls/nvr1_channel1_123045152//流地址 格式
// /hls/nvr1_channel1_123045152/nvr1_channel1_123045152_live.m3u8//流地址 格式
var IP = location.hostname;
var urlid = "nvr"+deviceId+"_channel"+param+"_"+handle;
var rtmpurl = "rtmp://"+IP+":"+rtmpport+"/hls/"+urlid;//rtmp地址
var hlsurl = location.protocol + "//" + location.host+"/hls/"+urlid+"/"+urlid+"_live.m3u8";//hls地址
playerStream(rtmpurl)
})
}
注意:
成功調用改接口會放回一個RTMP流地址,可是並不完整,咱們 須要 根據EasyNVR自身的rtmp端口,拼接出一個完整的RTMP;同時也會生成HLS流地址,根據自身需求,播放對應的地址來達到對應時間端錄像的回放;
相信你們也注意到,在調用這個獲取錄像流地址時,我還一直在循環調用一個 「/api/v1/hwrecordplaytouch」接口,這是咱們我來保證咱們的流一直有人觀看而設置的接口,默認是沒30秒調用一次,若是沒有調用,設備默認沒有用戶觀看錄像,將中止錄像播放。這樣有效的避免了用戶直接關閉網頁致使沒有發送中止流播放接口而機器一直在輸出流的尷尬行爲,有效的節省消耗。
備註:
對應其餘接口的使用,根據接口文檔來就能夠,須要注意的在上文也有所說明了;若是有什麼具體的疑惑,能夠直接聯繫相關人員;
EasyNVR可以經過簡單的網絡攝像機通道配置,將傳統監控行業裏面的高清網絡攝像機IP Camera、NVR等具備RTSP協議輸出的設備接入到EasyNVR,EasyNVR可以將這些視頻源的音視頻數據進行拉取,轉換爲RTMP/HLS,進行全平臺終端H5直播(Web、Android、iOS),而且EasyNVR可以將視頻源的直播數據對接到第三方CDN網絡,實現互聯網級別的直播分發;
點擊連接加入羣【EasyNVR解決方案】:383501345