500 likes | 636 Views
NetRecorder SDK. 詹嘉文 ccw@nfic.com.tw M2CA, NFIC. 簡介. NetRecorder 系統架構 基本操作 透過遠端: NetRecorder 網頁 主機: GetVideo 資料庫結構簡介 系統、錄影設定 存檔記錄 其他. 簡介 ( cont.). 背景知識 網頁設計 NetRecorder 系統與錄影設定 新增、修改、刪除 變更通知 動態產生網頁. 簡介 ( cont.). 網頁設計 查詢存檔影像 撥放影像 瀏覽即時影像 登入、登出系統. 簡介 ( cont.).
E N D
NetRecorder SDK 詹嘉文 ccw@nfic.com.tw M2CA, NFIC
簡介 • NetRecorder 系統架構 • 基本操作 • 透過遠端: NetRecorder 網頁 • 主機: GetVideo • 資料庫結構簡介 • 系統、錄影設定 • 存檔記錄 • 其他 NetRecorder SDK
簡介 (cont.) • 背景知識 • 網頁設計 • NetRecorder 系統與錄影設定 • 新增、修改、刪除 • 變更通知 • 動態產生網頁 NetRecorder SDK
簡介 (cont.) • 網頁設計 • 查詢存檔影像 • 撥放影像 • 瀏覽即時影像 • 登入、登出系統 NetRecorder SDK
簡介 (cont.) • 如何節省錄影空間? • 定時備份 • 定時刪除檔案 • 空間不足自動刪除檔案 • 範例 • 結論 NetRecorder SDK
IIS nfgvocxa NetRecorder 系統架構 瀏覽器 伺服器 撥放影像 NFXVRDER ISAPI RDS 新增、修改、 查詢資料 db 變更通知 Remote Scripting GetVideo NetRecorder SDK
系統設定 系統參數 PARAMETER 安全容量、頻寬、保留天數 存檔路徑 DIRECTORY 編號、路徑、自動刪除 即時影像 LIVEVIDEO_CFG 名稱、IP、帳號 錄影設定 定時錄影 REGULAR_VIDEO 時間、IP、帳號 警報錄影 EVENT IP、GPI、錄影時間 定時擷取 SNAPSHOT 時間、IP、帳號、檔名 資料庫簡介 NetRecorder SDK
存檔記錄 RECORDED_FILE 時間、IP、檔名、錄影時間、檔案長度、路徑編號 資料庫簡介 NetRecorder SDK
其他 使用者密碼 USER 帳號、密碼、IP、操作員 管理者密碼 ADMINISTRATOR 帳號、密碼 登錄記錄 LOGIN_LOG 時間、帳號密碼、IP 變更記錄 UPDATE_LOG 時間、帳號、IP、變更內容 Add、Delete、Modify 定時備份 AUTOBACKUP 時間、類別、天數、路徑、是否刪除 資料庫簡介 NetRecorder SDK
背景知識 • HTML • Scripting Language: • Java Script • VB Script • Active Server Pages • Remote Data Service • Remote Scripting NetRecorder SDK
網頁設計 - 系統與錄影設定 NetRecorder SDK
網頁設計 - 系統與錄影設定 <BODY onLoad="OpenDB()"> <TABLE DATASRC=#RDS1 Border=1> <THEAD> <TR><TD>ADM NO</TD><TD>ID</TD><TD>PASSWORD</TD></TR> </THEAD> <TBODY><TR> <TD><Input NAME='ADM NO' Type=Text DATAFLD='ADM NO'></TD> <TD><Input NAME='ID' Type=Text DATAFLD='ID'></TD> <td><Input name=’password' type=text datafld='PASSWORD'></td> </TR></TBODY></TABLE> <Input Type=Button Value="AddNew" onClick="AddNewRecord()"> <Input Type=Button Value="Update" onClick="SubmitChange()"> <Input Type=Button Value="Delete” onClick=“DeleteRecord()”> NetRecorder SDK
網頁設計 - 系統與錄影設定 <OBJECT ID="RDS1" ClassID="ClsID:BD96C556-65A3-11D0-983A-00C04FC29E33"> </OBJECT> <SCRIPT Language=VBScript> Sub OpenDB() RDS1.Server = "http://my_netrecorder" RDS1.Connect = "driver={Microsoft Access Driver (*.mdb)}" & _ ";dbq=C:\Inetpub\wwwroot\NetRecorder\GetVideo\NetRecorder.mdb" RDS1.SQL = "Select * From ADMINISTRATOR “ & _ “Order by [ADM NO] ASC" RDS1.Refresh End Sub </SCRIPT> NetRecorder SDK
網頁設計 - 新增 Sub AddNewRecord() On Error Resume Next Set rs = RDS1.Recordset rs.MoveLast intIndex=rs("ADM NO") rs.AddNew rs.Update rs("ADM NO") = intIndex+1 MsgBox "新增一筆完成" RDS1.SubmitChanges Location.Reload() End Sub NetRecorder SDK
網頁設計 - 更改 Sub SubmitChange() On Error Resume Next RDS1.SubmitChanges If Err.Number <> 0 Then Location.Reload() MsgBox "無法更新資料" Else MsgBox "更新資料完成" End If End Sub NetRecorder SDK
網頁設計 - 刪除 Sub DeleteRecord() DialogRet = showModalDialog ( "dlg.asp?Table=Administrator&Key=ADM NO”) Set rs = RDS1.Recordset rs.MoveFirst Do While Not rs.eof If CLng(rs("ADM NO")) = CLng(DialogRet) Then rs.delete rs.MoveLast Else rs.MoveNext End If Loop RDS1.SubmitChanges End Sub NetRecorder SDK
網頁設計 - 刪除 document.writeln( '<HTML><BODY>' ); document.writeln( "正在從administrator中刪除一筆資料"); document.writeln(' <SELECT NAME="SelectMenu" onChange="jumpPage(this.form)">'); for (var i = 1; i <= CamId.length; i++) document.writeln("<OPTION>" + CamId[i]); document.writeln('</SELECT>'); document.writeln('<Input Type=Button Value = "取消" onClick="top.window.close()">'); function jumpPage(form) { i = form.SelectMenu.selectedIndex; if (i == 0) return; returnValue=CamId[i+1]; top.window.close(); } NetRecorder SDK
網頁設計 - 刪除 • 使用Active Server Pages動態產生資料 <!-- 檔案名稱: myasp.ASP --> ASP Data = " <% max_data = 5 For counter = 1 to max_data %> <%=counter%>, <% Next %> " 輸出結果: ASP Data = " 1, 2, 3, 4, 5, " NetRecorder SDK
網頁設計 - 刪除 <% DBPath=Server.MapPath("../GetVideo/NetRecorder.mdb") Set conn = Server.CreateObject("ADODB.Connection") conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" &_ DBPath sql = "Select * From Administrator” Set rs = Server.CreateObject("ADODB.Recordset") rs.Open sql, conn, 3, 3 %> NetRecorder SDK
網頁設計 - 刪除 <SCRIPT LANGUAGE = "JavaScript"> function MakeArray() { this.length = MakeArray.arguments.length; for (var i = 0; i < this.length; i++) this[i+1] = MakeArray.arguments[i]; } // var CamId = new MakeArray(“選擇”, 1,2,3….); var CamId = new MakeArray("選擇任一筆資料", <%DO WHILE Not rs.eof %> "<%=rs.Fields("ADM NO").Value%>", <% rs.MoveNext LOOP %> ""); </SCRIPT> NetRecorder SDK
網頁設計 - 變更通知 • 目的 • 資料庫內容變動時主動通知GetVideo • 方法 • 透過Remote Scripting 及中介軟體nfxgvocxa通知GetVideo • 時機 • 資料庫內容變更時:更新、刪除 NetRecorder SDK
網頁設計 - 變更通知 • Client Script Sub DoNoticeOCX() If StrComp("<%=vTable%>" , "regular_video") = 0 Then handleRSExecute("DoSchRecConfigUpdate") ElseIf StrComp("<%=vTable%>", ”save_dir") = 0 Then handleRSExecute("DoSaveDirConfigUpdate") End If End Sub NetRecorder SDK
網頁設計 - 變更通知 <script language="JavaScript" src="rs.htm"></script> <script language="JavaScript"> RSEnableRemoteScripting("../mynet");</script> <SCRIPT Language="JavaScript"> function handleRSExecute(Method) { var co = RSExecute("sm1.asp", Method); } </SCRIPT> NetRecorder SDK
網頁設計 - 變更通知 • Server Script • Filename: SM1.ASP • Notifications • DoSchRecConfigUpdate • DoEvTrigRecConfigUpdate • DoSchSnapShotConfigUpdate • DoAutoBackupConfigUpdate • DoParameterConfigUpdate • DoSaveDirConfigUpdate NetRecorder SDK
網頁設計 - 動態產生網頁(ASP) 1. Usage: dynapage.asp?table=ADMINISTRATOR&key=ADM NO 2. dynapage.asp vTable = Request("table") vKey = Request("key") vSQL="Select * From "& vTable &" Order By ["&vKey&"] ASC” Set conn = Server.CreateObject("ADODB.Connection") conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & vDbq Set rs = Server.CreateObject("ADODB.Recordset") rs.Open vSQL, conn, 3, 3 Response.Write "<table DATASRC=#RDS1><thead><tr>" For i = 0 to rs.Fields.Count - 1 Response.Write "<td>" & rs.Fields(i).Name & "</td>" Next Response.Write ”</tr></thead>" NetRecorder SDK
網頁設計 - 動態產生網頁(ASP) Response.Write "<TBODY><TR>” For i = 0 to rs.Fields.Count - 1 vName = rs.Fields(i).Name If rs.Fields(i).Type = vbBoolean Then Response.Write "<td><Input Type=CheckBox datafld='" & vName & "'>" Else Response.Write "<td><Input Type=Text datafld='" & vName & "'>” End If Next Response.Write "</TR></TBODY></TABLE>" NetRecorder SDK
網頁設計 -查詢存檔影像 NetRecorder SDK
網頁設計 -查詢存檔影像 Response.Write "<TBODY><TR>” For i = 0 to rs.Fields.Count - 1 vName = rs.Fields(i).Name If StrComp(vName, "FILENAME") = 0 Then Response.Write "<TD><Input NAME=PBFile Type=Text ID=PBFileID DATAFLD='" & vName & "' "></TD>" ElseIf StrComp(rs.Fields(i).Name, "PATH ID") = 0 Then Response.Write "<TD><Input NAME='"&vName & "' TYPE=HIDDEN DATAFLD='" & vName & "'></TD>" ElseIf rs.Fields(i).Type = vbBoolean Then Response.Write "<TD><DIV NAME='" & vName & "' Type=CheckBox DATAFLD='" & vName & "'></TD>" Else Response.Write "<TD><DIV NAME='" & vName & "' DATAFLD='" & vName & "' Size=" & LenB(vName) & "></TD>" NetRecorder SDK
網頁設計 -查詢存檔影像 Response.Write "</TR></TBODY></TABLE>” Response.Write "<INPUT Type=Button Value=Prev OnClick=""MYTABLE.previousPage()"">" Response.Write "<INPUT Type=Button Value=Next OnClick=""MYTABLE.nextPage()"">" NetRecorder SDK
網頁設計 -查詢存檔影像 <SCRIPT FOR=PBFileID EVENT=onclick LANGUAGE="JScript"> var idx = window.event.srcElement.sourceIndex; var fn = document.all(idx).value if (fn.length > 0) window.open("pb.asp?IP=<%=vServerIP%>&FileName=" + fn+"&dir_id="+document.all(idx+2).value); </SCRIPT> NetRecorder SDK
網頁設計 - 撥放影像 NetRecorder SDK
網頁設計 - 撥放影像 <SCRIPT LANGUAGE="VBScript"> function document_onstop() LV263a.Close() end function </SCRIPT> <OBJECT ID="LV263a" WIDTH=320 HEIGHT=280 CLASSID="CLSID:894C310D-6FD7-11D3-BEE7-0000E8CEC6C9" CODEBASE="../CabFiles/nfx263.cab#version=1,0,0,2"> <PARAM NAME="ControlType" VALUE="1"> <PARAM NAME="ISAPI_PATH" VALUE="NetRecorder/Exec"> <PARAM NAME="URL" VALUE="http://<%=Request("IP")%>"> <param name="SaveFileName" value="<%=Request("FileName")%>"> <PARAM NAME="DIR_ID" VALUE="<%=Request("DIR_ID")%>"> </OBJECT> NetRecorder SDK
網頁設計 -瀏覽即時影像 <% vIP = Request("IP") vID = Request("ID") vNAME = Request("NAME") vPWD = Request("PWD") %> <HTML> <BODY> <EMBED type="video/x-nficwmh263" src="http://<%=vIP%>/pushall.htm;<%=vID%>? zzx=<%=vNAME%>&zzy=<%=vPWD%>&zzz=1& noinput=1" WIDTH="320" HEIGHT="240"> </BODY> </HTML> NetRecorder SDK
網頁設計 - 登入、登出系統 NetRecorder SDK
網頁設計 - 登入、登出系統 • 使用方法 <-- filename: myasp.asp --> <!--#include file="pwd.asp" --> <HTML> <body> ……. </body> </HTML> NetRecorder SDK
網頁設計 - 登入、登出系統 <% ID = Request("ID") Pwd = Request("Pwd") If IsEmpty(Session("AdmPassed")) Then Session("AdmPassed") = False If ID = "" Or Pwd = "" Then Head = "請輸入您的認證資料" ElseIf CheckAdmPwd( ID, Pwd ) Then Session("AdmPassed") = True Else Head = "『使用者名稱』或『密碼』錯誤" End If If Not Session("AdmPassed") Then %> NetRecorder SDK
網頁設計 - 登入、登出系統 <HTML> <%=Head%> <FORM Action=<%=Request.ServerVariables("path_info")%>? <%=Request.ServerVariables("query_string")%> Method=post> 使用者名稱: <Input Type=Text Name=ID Size=12 Value=<%=ID%>> 密碼: <Input Type=Password Name=Pwd Size=12 value=<%=Pwd%>> <Input Type=Submit Value=" 確 定 "> </FORM></BODY></HTML> <% Response.End End If %> NetRecorder SDK
網頁設計 - 登入、登出系統 Function CheckAdmPwd( ID, Pwd ) …. sql = "Select * From ADMINISTRATOR Where id='" & id & "' And PASSWORD = '" & Pwd & "'" Set rs = conn.Execute( sql ) If rs.EOF Then CheckAdmPwd = False Else CheckAdmPwd = True End If End Function NetRecorder SDK
如何節省錄影空間 • 定時備份 • 手動備份:GVBackup • 自動備份 NetRecorder SDK
如何節省錄影空間 • 定時刪除檔案 • 每天凌晨1:00 自動刪除存檔錄影 • 系統參數的「錄影保留」 NetRecorder SDK
如何節省錄影空間 • 自動刪除檔案 • 目錄空間不足時刪除其他舊檔 • 設定存檔路徑的「自動刪除」 NetRecorder SDK
範例 • 登入 - Pwd.asp NetRecorder SDK
範例 • 首頁 - Home.asp NetRecorder SDK
範例 • 即時影像 - Live.asp NetRecorder SDK
範例 • 定時錄影設定 - SetRec.asp NetRecorder SDK
範例 • 刪除一筆資料 - Dlg.asp NetRecorder SDK
範例 • 查詢存檔影像 - Query.asp NetRecorder SDK
範例 • 瀏覽存檔影像 - Play.asp NetRecorder SDK
範例 • 登出系統 • Logout.asp • Remote Scripting • sm1.asp • rs.asp, rs.htm, rsproxy.class NetRecorder SDK
結論 • 軟體元件 • Internet Information Server • GetVideo, GVBackup, nfxgvocxa, nfxvrder, LV263a/LVJPG • 基礎技術 • HTML, Java/VB Script, ASP, RDS, Remote Scripting • ISAPI, ActiveX Control NetRecorder SDK