﻿

{"id":15587,"date":"2023-10-07T11:11:47","date_gmt":"2023-10-07T02:11:47","guid":{"rendered":"https:\/\/www.bitstrong.com\/jp\/?p=15587"},"modified":"2023-12-13T10:38:28","modified_gmt":"2023-12-13T01:38:28","slug":"general-starting-live-view-2","status":"publish","type":"post","link":"https:\/\/www.bitstrong.com\/jp\/general-starting-live-view-2\/","title":{"rendered":"\u3010General\u3011Starting Live View-2"},"content":{"rendered":"<p><strong><span style=\"font-size: 18pt;\">\u30b5\u30f3\u30d7\u30eb\u30d7\u30ed\u30b0\u30e9\u30e0<\/span><\/strong><\/p>\n<div>\/\/<\/div>\n<div>\/\/ Device Network SDK (General)<\/div>\n<div>\/\/ Sample Code of Starting Live View<\/div>\n<div>\/\/ Decode and Display via PlayCtrl Library (for API named by the prefix &#8220;PlayM4_&#8221;,<\/div>\n<div>\/\/ refer to User Manual of Cross-Platform PlayCtrl Library SDK)<\/div>\n<div>\/\/<\/div>\n<div>#include &lt;stdio.h&gt;<\/div>\n<div>#include &lt;iostream&gt;<\/div>\n<div>#include &#8220;Windows.h&#8221;<\/div>\n<div>#include &#8220;HCNetSDK.h&#8221;<\/div>\n<div>#include &lt;time.h&gt;<\/div>\n<p>using namespace std;<\/p>\n<div>typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();<\/div>\n<p>PROCGETCONSOLEWINDOW GetConsoleWindowAPI;<\/p>\n<div>void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser)<\/div>\n<div>{<\/div>\n<div>\u00a0 \u00a0 char tempbuf[256] = {0};<\/div>\n<div>\u00a0 \u00a0 switch(dwType)<\/div>\n<div>\u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 case EXCEPTION_RECONNECT:\u00a0 \u00a0 \/\/Reconnect during live view<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 printf(&#8220;&#8212;&#8212;&#8212;-reconnect&#8212;&#8212;&#8211;%d\\n&#8221;, time(NULL));<\/div>\n<div>\u00a0 \u00a0 break;<\/div>\n<div>default:<\/div>\n<div>\u00a0 \u00a0 break;<\/div>\n<div>\u00a0 \u00a0 }<\/div>\n<p>}<\/p>\n<div>void main() {<\/div>\n<div>\u00a0 \/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/div>\n<div>\u00a0 \/\/ Initialize<\/div>\n<div>\u00a0 NET_DVR_Init();<\/div>\n<div>\u00a0 \/\/Set connection time and reconnection time<\/div>\n<div>\u00a0 NET_DVR_SetConnectTime(2000, 1);<\/div>\n<p>NET_DVR_SetReconnect(10000, true);<\/p>\n<div>\u00a0 \/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/div>\n<div>\u00a0 \/\/Set callback function for exceptional message<\/div>\n<p>NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL);<\/p>\n<div>\u00a0 \/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/div>\n<div>\u00a0 \/\/ Get the window handle<\/div>\n<div>\u00a0 HMODULE hKernel32 = GetModuleHandle(&#8220;kernel32&#8221;);<\/div>\n<p>GetConsoleWindowAPI = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,&#8221;GetConsoleWindow&#8221;);<\/p>\n<div>\u00a0 \/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/div>\n<div>\u00a0 \/\/ Log in to device<\/div>\n<p>LONG lUserID;<\/p>\n<div>\u00a0 \/\/Login parameters, including device IP address, user name, password, and so on.<\/div>\n<div>\u00a0 NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};<\/div>\n<div>\u00a0 struLoginInfo.bUseAsynLogin = 0; \/\/Synchronous login mode<\/div>\n<div>\u00a0 strcpy(struLoginInfo.sDeviceAddress, &#8220;10.13.35.229&#8221;); \/\/Device IP address<\/div>\n<div>\u00a0 struLoginInfo.wPort = 8000; \/\/Service port No.<\/div>\n<div>\u00a0 strcpy(struLoginInfo.sUserName, &#8220;admin&#8221;); \/\/User name<\/div>\n<p>strcpy(struLoginInfo.sPassword, &#8220;abcd1234&#8221;); \/\/Password<\/p>\n<div>\u00a0 \/\/Device information, output parameter<\/div>\n<div>\u00a0 NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};<\/div>\n<p>lUserID = NET_DVR_Login_V40(&amp;struLoginInfo, &amp;struDeviceInfoV40);<\/p>\n<div>\u00a0 if (lUserID &lt; 0)<\/div>\n<div>\u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 printf(&#8220;Login failed, error code: %d\\n&#8221;, NET_DVR_GetLastError());<\/div>\n<div>\u00a0 \u00a0 \u00a0 NET_DVR_Cleanup();<\/div>\n<div>\u00a0 \u00a0 \u00a0 return;<\/div>\n<p>}<\/p>\n<div>\u00a0 \/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/div>\n<div>\u00a0 \/\/Start live view and set stream callback function<\/div>\n<div>\u00a0 LONG lRealPlayHandle;<\/div>\n<div>\u00a0 HWND hWnd = GetConsoleWindowAPI();\u00a0 \u00a0 \u00a0\/\/Get window handle<\/div>\n<div>\u00a0 NET_DVR_PREVIEWINFO struPlayInfo = {0};<\/div>\n<div>\u00a0 struPlayInfo.hPlayWnd = hWnd;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/Set the handle as valid for SDK decoding; set the handle as null for streaming only<\/div>\n<div>\u00a0 struPlayInfo.lChannel\u00a0 \u00a0 \u00a0= 1;\u00a0 \u00a0 \u00a0 \u00a0\/\/Live view channel No.<\/div>\n<div>\u00a0 struPlayInfo.dwStreamType = 0;\u00a0 \u00a0 \u00a0 \u00a0\/\/0-Main Stream, 1-Sub Stream, 2-Stream 3, 3-Stream 4, and so on<\/div>\n<div>\u00a0 struPlayInfo.dwLinkMode\u00a0 \u00a0= 0;\u00a0 \u00a0 \u00a0 \u00a0\/\/0- TCP Mode, 1- UDP Mode, 2- Multicast Mode, 3- RTP Mode, 4-RTP\/RTSP, 5-RSTP\/HTTP<\/div>\n<p>struPlayInfo.bBlocked\u00a0 \u00a0 \u00a0= 1;\u00a0 \u00a0 \u00a0 \u00a0\/\/0- Non-blocking Streaming, 1- Blocking Streaming<\/p>\n<div>\u00a0 lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &amp;struPlayInfo, NULL, NULL);<\/div>\n<div>\u00a0 if (lRealPlayHandle &lt; 0)<\/div>\n<div>\u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 printf(&#8220;NET_DVR_RealPlay_V40 error\\n&#8221;);<\/div>\n<div>\u00a0 \u00a0 \u00a0 NET_DVR_Logout(lUserID);<\/div>\n<div>\u00a0 \u00a0 \u00a0 NET_DVR_Cleanup();<\/div>\n<div>\u00a0 \u00a0 \u00a0 return;<\/div>\n<p>}<\/p>\n<div>\u00a0 Sleep(10000);<\/div>\n<div>\u00a0 \/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/div>\n<div>\u00a0 \/\/Stop live view<\/div>\n<div>\u00a0 NET_DVR_StopRealPlay(lRealPlayHandle);<\/div>\n<div>\u00a0 \/\/Log out<\/div>\n<div>\u00a0 NET_DVR_Logout(lUserID);<\/div>\n<div>\u00a0 \/\/Release SDK resource<\/div>\n<div>\u00a0 NET_DVR_Cleanup();<\/div>\n<div>\u00a0 return;<\/div>\n<p>}<\/p>\n<div>Decode and Display via PlayCtrl Library (for API named by the prefix &#8220;PlayM4_&#8221;, refer to User Manual of Cross-Platform PlayCtrl Library SDK)<\/div>\n<div>#include &lt;stdio.h&gt;<\/div>\n<div>#include &lt;iostream&gt;<\/div>\n<div>#include &#8220;Windows.h&#8221;<\/div>\n<div>#include &#8220;HCNetSDK.h&#8221;<\/div>\n<div>#include &#8220;plaympeg4.h&#8221;<\/div>\n<div>#include &lt;time.h&gt;<\/div>\n<p>using namespace std;<\/p>\n<div>typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();<\/div>\n<div>PROCGETCONSOLEWINDOW GetConsoleWindowAPI;<\/div>\n<p>LONG lPort; \/\/Port No. of global player SDK<\/p>\n<div>void CALLBACK g_RealDataCallBack_V30(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void* dwUser)<\/div>\n<div>{<\/div>\n<div>\u00a0 \u00a0 HWND hWnd=GetConsoleWindowAPI();<\/div>\n<div>switch (dwDataType)<\/div>\n<div>{<\/div>\n<p>case NET_DVR_SYSHEAD: \/\/System header<\/p>\n<div>if (m_lPort &gt;= 0)<\/div>\n<div>{<\/div>\n<div>break;\u00a0 \/\/The handle of this channel is areadly obtained before streaming. There is no need to call it in the following.<\/div>\n<p>}<\/p>\n<div>if (!PlayM4_GetPort(&amp;lPort))\u00a0 \/\/Get unused channel No. of player<\/div>\n<div>{<\/div>\n<div>break;<\/div>\n<div>}<\/div>\n<p>\/\/m_iPort = lPort; \/\/The firstly called back is system header. The ontained player SDK port No. will be assigned to global port No. for next time play.<\/p>\n<div>if (dwBufSize &gt; 0)<\/div>\n<div>{<\/div>\n<div>if (!PlayM4_SetStreamOpenMode(lPort, STREAME_REALTIME))\u00a0 \/\/Set play mode of real-time stream<\/div>\n<div>{<\/div>\n<div>break;<\/div>\n<p>}<\/p>\n<div>if (!PlayM4_OpenStream(lPort, pBuffer, dwBufSize, 1024*1024)) \/\/Open stream API<\/div>\n<div>{<\/div>\n<div>break;<\/div>\n<p>}<\/p>\n<div>if (!PlayM4_Play(lPort, hWnd)) \/\/Start playing<\/div>\n<div>{<\/div>\n<div>break;<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 break;<\/div>\n<div>case NET_DVR_STREAMDATA:\u00a0 \u00a0\/\/Stream data<\/div>\n<div>if (dwBufSize &gt; 0 &amp;&amp; lPort != -1)<\/div>\n<div>{<\/div>\n<div>if (!PlayM4_InputData(lPort, pBuffer, dwBufSize))<\/div>\n<div>{<\/div>\n<div>break;<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 break;<\/div>\n<div>\u00a0 \u00a0 default: \/\/Other data<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 if (dwBufSize &gt; 0 &amp;&amp; lPort != -1)<\/div>\n<div>{<\/div>\n<div>if (!PlayM4_InputData(lPort, pBuffer, dwBufSize))<\/div>\n<div>{<\/div>\n<div>break;<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 break;<\/div>\n<div>}<\/div>\n<p>}<\/p>\n<div>void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser)<\/div>\n<div>{<\/div>\n<div>\u00a0 \u00a0 char tempbuf[256] = {0};<\/div>\n<div>\u00a0 \u00a0 switch(dwType)<\/div>\n<div>\u00a0 \u00a0 {<\/div>\n<div>\u00a0 \u00a0 case EXCEPTION_RECONNECT:\u00a0 \u00a0 \/\/Reconnect during live view<\/div>\n<div>\u00a0 \u00a0 printf(&#8220;&#8212;&#8212;&#8212;-reconnect&#8212;&#8212;&#8211;%d\\n&#8221;, time(NULL));<\/div>\n<div>\u00a0 \u00a0 break;<\/div>\n<div>default:<\/div>\n<div>\u00a0 \u00a0 break;<\/div>\n<div>\u00a0 \u00a0 }<\/div>\n<p>}<\/p>\n<div>void main() {<\/div>\n<div>\u00a0 \/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/div>\n<div>\u00a0 \/\/ Initialize<\/div>\n<div>\u00a0 NET_DVR_Init();<\/div>\n<div>\u00a0 \/\/Set connection time and reconnection time<\/div>\n<div>\u00a0 NET_DVR_SetConnectTime(2000, 1);<\/div>\n<p>NET_DVR_SetReconnect(10000, true);<\/p>\n<div>\u00a0 \/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/div>\n<div>\u00a0 \/\/Set callback function for exceptional message<\/div>\n<p>NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL);<\/p>\n<div>\u00a0 \/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/div>\n<div>\u00a0 \/\/ Get the window handle<\/div>\n<div>\u00a0 HMODULE hKernel32 = GetModuleHandle(&#8220;kernel32&#8221;);<\/div>\n<p>GetConsoleWindowAPI = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,&#8221;GetConsoleWindow&#8221;);<\/p>\n<div>\u00a0 \/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/div>\n<div>\u00a0 \/\/ Log in to device<\/div>\n<p>LONG lUserID;<\/p>\n<div>\u00a0 \/\/Login parameters, including device IP address, user name, password, and so on.<\/div>\n<div>\u00a0 NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};<\/div>\n<div>\u00a0 struLoginInfo.bUseAsynLogin = 0; \/\/Synchronous login mode<\/div>\n<div>\u00a0 strcpy(struLoginInfo.sDeviceAddress, &#8220;10.13.35.229&#8221;); \/\/Device IP address<\/div>\n<div>\u00a0 struLoginInfo.wPort = 8000; \/\/Service port No.<\/div>\n<div>\u00a0 strcpy(struLoginInfo.sUserName, &#8220;admin&#8221;); \/\/User name<\/div>\n<p>strcpy(struLoginInfo.sPassword, &#8220;abcd1234&#8221;); \/\/Password<\/p>\n<div>\u00a0 \/\/Device information, output parameter<\/div>\n<p>NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};<\/p>\n<div>\u00a0 lUserID = NET_DVR_Login_V40(&amp;struLoginInfo, &amp;struDeviceInfoV40);<\/div>\n<div>\u00a0 if (lUserID &lt; 0)<\/div>\n<div>\u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 printf(&#8220;Login failed, error code: %d\\n&#8221;, NET_DVR_GetLastError());<\/div>\n<div>\u00a0 \u00a0 \u00a0 NET_DVR_Cleanup();<\/div>\n<div>\u00a0 \u00a0 \u00a0 return;<\/div>\n<p>}<\/p>\n<div>\u00a0 \/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/div>\n<div>\u00a0 \/\/Start live view and set stream callback function<\/div>\n<div>\u00a0 LONG lRealPlayHandle;<\/div>\n<div>\u00a0 NET_DVR_PREVIEWINFO struPlayInfo = {0};<\/div>\n<div>\u00a0 struPlayInfo.hPlayWnd\u00a0 \u00a0 \u00a0= NULL;\u00a0 \u00a0 \/\/Set the handle as valid for SDK decoding; set the handle as null for streaming only<\/div>\n<div>\u00a0 struPlayInfo.lChannel\u00a0 \u00a0 \u00a0= 1;\u00a0 \u00a0 \u00a0 \u00a0\/\/Live view channel No.<\/div>\n<div>\u00a0 struPlayInfo.dwStreamType = 0;\u00a0 \u00a0 \u00a0 \u00a0\/\/0-Main Stream, 1-Sub Stream, 2-Stream 3, 3-Stream 4, and so on<\/div>\n<div>\u00a0 struPlayInfo.dwLinkMode\u00a0 \u00a0= 0;\u00a0 \u00a0 \u00a0 \u00a0\/\/0- TCP Mode, 1- UDP Mode, 2- Multicast Mode, 3- RTP Mode, 4-RTP\/RTSP, 5-RSTP\/HTTP<\/div>\n<div>\u00a0 struPlayInfo.bBlocked\u00a0 \u00a0 \u00a0= 1;\u00a0 \u00a0 \u00a0 \u00a0\/\/0- Non-blocking Streaming, 1- Blocking Streaming<\/div>\n<p>lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &amp;struPlayInfo, g_RealDataCallBack_V30, NULL);<\/p>\n<div>\u00a0 if (lRealPlayHandle &lt; 0)<\/div>\n<div>\u00a0 {<\/div>\n<div>\u00a0 \u00a0 \u00a0 printf(&#8220;NET_DVR_RealPlay_V40 error, %d\\n&#8221;, NET_DVR_GetLastError());<\/div>\n<div>\u00a0 \u00a0 \u00a0 NET_DVR_Logout(lUserID);<\/div>\n<div>\u00a0 \u00a0 \u00a0 NET_DVR_Cleanup();<\/div>\n<div>\u00a0 \u00a0 \u00a0 return;<\/div>\n<p>}<\/p>\n<div>\u00a0 Sleep(10000);<\/div>\n<div>\u00a0 \/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/div>\n<div>\u00a0 \/\/Stop live view<\/div>\n<p>NET_DVR_StopRealPlay(lRealPlayHandle);<\/p>\n<div>\u00a0 \/\/Release player SDK resources<\/div>\n<div>\u00a0 PlayM4_Stop(lPort);<\/div>\n<div>\u00a0 PlayM4_CloseStream(lPort);<\/div>\n<p>PlayM4_FreePort(lPort);<\/p>\n<div>\u00a0 \/\/Log out<\/div>\n<div>\u00a0 NET_DVR_Logout(lUserID);<\/div>\n<div>\u00a0 NET_DVR_Cleanup();<\/div>\n<div>\u00a0 return;<\/div>\n<div>}<\/div>\n","protected":false},"excerpt":{"rendered":"\u30b5\u30f3\u30d7\u30eb\u30d7\u30ed\u30b0\u30e9\u30e0 \/\/ \/\/ Device Network SDK (General) \/\/ Sample Code of Starting Live View \/\/ Decode and Display via PlayCtrl Library (for API named by the prefix ...","protected":false},"author":2,"featured_media":15936,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","footnotes":""},"categories":[107],"tags":[],"class_list":["post-15587","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-camera-connection"],"_links":{"self":[{"href":"https:\/\/www.bitstrong.com\/jp\/wp-json\/wp\/v2\/posts\/15587","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bitstrong.com\/jp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bitstrong.com\/jp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bitstrong.com\/jp\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bitstrong.com\/jp\/wp-json\/wp\/v2\/comments?post=15587"}],"version-history":[{"count":7,"href":"https:\/\/www.bitstrong.com\/jp\/wp-json\/wp\/v2\/posts\/15587\/revisions"}],"predecessor-version":[{"id":15888,"href":"https:\/\/www.bitstrong.com\/jp\/wp-json\/wp\/v2\/posts\/15587\/revisions\/15888"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bitstrong.com\/jp\/wp-json\/wp\/v2\/media\/15936"}],"wp:attachment":[{"href":"https:\/\/www.bitstrong.com\/jp\/wp-json\/wp\/v2\/media?parent=15587"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bitstrong.com\/jp\/wp-json\/wp\/v2\/categories?post=15587"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bitstrong.com\/jp\/wp-json\/wp\/v2\/tags?post=15587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}