⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtspplayer.cpp

📁 神龙卡 SDK_84xx_DShow_145_02.zip 这个是 windows 上二个是linux
💻 CPP
📖 第 1 页 / 共 2 页
字号:

	GetPrivateProfileString("FILE_PATH", "path", "", m_szPlayFilePath, sizeof(m_szPlayFilePath), m_szIniFile);
	GetPrivateProfileString("IP_ADDRESS", "ip", "", m_szIpAddr, sizeof(m_szIpAddr), m_szIniFile);
	GetPrivateProfileString("SERVER_TYPE", "server", "", buffer, sizeof(buffer), m_szIniFile);
	if (strcmp(buffer, "OVS") == 0)
		m_iServerType = OVS;
	else if (strcmp(buffer, "SGI") == 0)
		m_iServerType = SGI;
}

/////////////////////////////////////////////////////////////////////////////////////////

void RtspPlayer::SetFileName(char *szFile)
{
	strcpy(m_szPlayFileName, szFile);
	wsprintf(m_szPlayFileFullPath, "rtsp://%s%s%s", m_szIpAddr, m_szPlayFilePath, m_szPlayFileName);
}

/////////////////////////////////////////////////////////////////////////////////////////

void RtspPlayer::SetIniFilePath(char *szFile)
{
	strcpy(m_szIniFile, szFile);
}

/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////

void BrowseFiles()
{
	OPENFILENAME fileName;
	HGLOBAL	hFile, hFileTitle;			// Capture filename handles
	TCHAR 	*lpFile;
	TCHAR 	*lpFileTitle;

	hFile = GlobalAlloc(GHND, 256);		// Allocate global memory
	if (!hFile)							// if unsuccessful, print error message
	{
		MessageBox (g_hWnd, "Unable to get file name", NULL, MB_OK);
		return;
	}

	hFileTitle = GlobalAlloc(GHND, 256);
	if (!hFileTitle)
	{
		GlobalFree(hFile);
		MessageBox (g_hWnd, "Unable to get file name", NULL, MB_OK);
		return;
	}

	lpFile = (TCHAR *)GlobalLock(hFile);	// Lock allocated memory
	lpFileTitle = (TCHAR *)GlobalLock(hFileTitle);

	memset(&fileName, 0, sizeof(fileName));
	fileName.lStructSize = sizeof(fileName);
	fileName.Flags = OFN_HIDEREADONLY;
	fileName.hInstance = g_hInstance;
	fileName.hwndOwner = g_hWnd;
	fileName.lpstrFile = lpFile;
	fileName.nMaxFile = 256;
	fileName.lpstrFileTitle = lpFileTitle;
	fileName.nMaxFileTitle = 256;
	fileName.lpstrFilter = INI_FILE_EXTENSION;

	char cPath[_MAX_PATH] = "";
	char cDrive[_MAX_DRIVE] = "";
	char cDir[_MAX_DIR] = "";
	char cFName[_MAX_FNAME] = "";
	fileName.lpstrInitialDir = cPath;

	fileName.lpstrFilter = INI_FILE_EXTENSION;
	if (GetOpenFileName (&fileName))
		strcpy(g_szIniFile, fileName.lpstrFile);

	GlobalUnlock(hFile);
	GlobalUnlock(hFileTitle);
	GlobalFree(hFile);
	GlobalFree(hFileTitle);
}

/////////////////////////////////////////////////////////////////////////////////////////
/****f* DirectshDvr/WndProc
 * USAGE
 *	long CALLBACK WndProc (HWND hwnd, UINT message, UINT wParam, LONG lParam)
 * DESCRIPTION
 *	The main window procedure to handle the user inputs.
 * PARAMETERS
 *	HWND hwnd - Handle to the main window
 *	UINT message - Current passing message
 *	UINT wParam - 
 *	LONG lParam - 
 * RETURN VALUE
/**********************************************************************/
long CALLBACK WndProc (HWND hwnd, UINT message, UINT wParam, LONG lParam)
{
	HDC hdc;				// handle to device context 
	PAINTSTRUCT ps;

	switch (message)
	{
		case WM_CREATE:
			g_pPlayer = new RtspPlayer(hwnd);
			CreateDialog(g_hInstance, "PLAY_FILE", hwnd, (DLGPROC)PlayFileDlgProc);
			break;

		case WM_PAINT :
			hdc = BeginPaint(hwnd, &ps);		// prepares the window for painting
			EndPaint(hwnd, &ps);	//marks the end of painting for the window
			break;

		case WM_KEYDOWN:
		case WM_LBUTTONDBLCLK:
			if (wParam == VK_ESCAPE || message == WM_LBUTTONDBLCLK)
			{
				if (g_uiWindowStatus == SW_HIDE)
				{
					ShowWindow(hwnd, SW_SHOWNORMAL);
					UpdateWindow(hwnd);
					g_uiWindowStatus = SW_SHOWNORMAL;
					g_pPlayer->SetFullScreen(OAFALSE);
				}
				else if (g_uiWindowStatus == SW_SHOWNORMAL)
				{
					ShowWindow(hwnd, SW_HIDE);
					UpdateWindow(hwnd);
					g_uiWindowStatus = SW_HIDE;
					g_pPlayer->SetFullScreen(OATRUE);
				}
				g_pPlayer->UpdateWindowPos(hwnd);
			}
			break;

		case WM_MOVE:
		case WM_SIZE:
			g_pPlayer->UpdateWindowPos(hwnd);
			break;

		case WM_GRAPHNOTIFY:
			LONG evCode, evParam1, evParam2;
			while (SUCCEEDED(g_pPlayer->GetMediaEvent(&evCode, &evParam1, &evParam2, 0)))
			{
				g_pPlayer->FreeMediaEventParams(evCode, evParam1, evParam2);
				switch (evCode)
				{
					case EC_COMPLETE:
					case EC_USERABORT:			// 2
						if (!g_bLoop)
						{						
							g_pPlayer->Uninitialize();							
							return 0;
						}
						else
						{
							g_pPlayer->Stop();
							Sleep(100);
//							g_pPlayer->Uninitialize();
//							g_pPlayer->Initialize();
							g_pPlayer->Play();
							break;
						}
					case EC_NEED_RESTART:		// 20
					case EC_ERROR_STILLPLAYING:	// 8
					case EC_STARVATION:			// 23
					case EC_STREAM_ERROR_STOPPED:		// 6
					case EC_STREAM_ERROR_STILLPLAYING:	// 7
						break;
				}
			}
			break;

		case WM_DESTROY :
			g_pPlayer->Uninitialize();
			delete g_pPlayer;
			PostQuitMessage(0);
			break;
	}
	return DefWindowProc (hwnd, message, wParam, lParam) ;
}

/////////////////////////////////////////////////////////////////////

void DisplayTime(HWND hwnd)
{
	DWORD dwTime = (timeGetTime() - g_dwStartTime) / 1000;

	char szTemp[25];
	wsprintf(szTemp, "%02d:%02d:%02d", 	dwTime / 3600, (dwTime / 60) % 60, dwTime % 60);
	SetDlgItemText(hwnd, IDC_TIME, szTemp);
}

/////////////////////////////////////////////////////////////////////

BOOL CALLBACK PlayFileDlgProc(HWND hDlg, WORD wMsg, WPARAM wParam, LONG lParam)
{
	PAINTSTRUCT		ps;
	HDC				hdc;
	char str[256];

	switch (wMsg)
	{
		case WM_INITDIALOG:
			g_hDlg = hDlg;
			g_pPlayer->GetINIInfo(hDlg);
			CheckDlgButton(hDlg, IDC_TV_VGA, BST_CHECKED);
			CheckDlgButton(hDlg, IDC_LOOP, BST_CHECKED);
			CheckDlgButton(hDlg, IDC_FULL_SCREEN, BST_CHECKED);

			RegisterHotKey(hDlg, 1, MOD_CONTROL, 0x46);   // VK_F, full screen
			RegisterHotKey(hDlg, 2, MOD_CONTROL, 0x50);   // VK_P, play
			RegisterHotKey(hDlg, 3, MOD_CONTROL, 0x53);   // VK_S, stop
			RegisterHotKey(hDlg, 4, MOD_CONTROL, 0x43);   // VK_C, close app
			RegisterHotKey(hDlg, 5, MOD_CONTROL, 0x54);   // VK-T, tv/vga switch
			RegisterHotKey(hDlg, 6, MOD_CONTROL, VK_TAB);
			break;

		case WM_PAINT:
			hdc = BeginPaint(hDlg, &ps);
			EndPaint(hDlg, &ps);
			break;

		case WM_TIMER:
			DisplayTime(hDlg);
			break;
		case WM_HOTKEY:
			switch(LOWORD(lParam))
			{
				case MOD_CONTROL:
					switch(HIWORD(lParam))
					{
						case 'C':
							SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
							break;
						case 'F':
							SendMessage(GetParent(hDlg), WM_KEYDOWN, VK_ESCAPE, 0L);
							if (IsDlgButtonChecked(hDlg, IDC_FULL_SCREEN) == BST_CHECKED)
							{
								g_bFullScreen = FALSE;
								CheckDlgButton(hDlg, IDC_FULL_SCREEN, BST_UNCHECKED);
							}
							else
							{
								g_bFullScreen = TRUE;
								CheckDlgButton(hDlg, IDC_FULL_SCREEN, BST_CHECKED);
							}
							g_pPlayer->SetFullScreen(g_bFullScreen);
							break;
						case 'P':
							SendMessage(hDlg, WM_COMMAND, ID_PLAY, 0L);
							break;
						case 'S':
							SendMessage(hDlg, WM_COMMAND, ID_STOP, 0L);
							break;
						case 'T':
							if (IsDlgButtonChecked(hDlg, IDC_TV_VGA) == BST_CHECKED)
							{
								g_bTvOut = FALSE;
								CheckDlgButton(hDlg, IDC_TV_VGA, BST_UNCHECKED);
							}
							else
							{
								g_bTvOut = TRUE;
								CheckDlgButton(hDlg, IDC_TV_VGA, BST_CHECKED);
							}
							g_pPlayer->SetTvOut(g_bTvOut);
							break;
						case VK_TAB:
							SetFocus(GetDlgItem(hDlg, IDC_COMBO_PLAYFILE));
							break;
					}
			}
			break;
		case WM_COMMAND:
			switch (wParam)
			{
				case IDOK:
				case ID_PLAY:
					GetDlgItemText(hDlg, IDC_COMBO_PLAYFILE, str, sizeof(str));	// Get selected file name
					g_pPlayer->SetFileName(str);
					g_pPlayer->Uninitialize();
					if (g_pPlayer->Initialize())
					{
						g_pPlayer->Play();
						g_dwStartTime = timeGetTime();
						SetTimer(hDlg, 0, 1000, NULL);
						EnableWindow (GetDlgItem(hDlg, ID_PLAY), FALSE);
					}
					else
						MessageBox(g_hWnd, "Unable to initialize hardware", NULL, MB_OK);
					break;
				case ID_STOP:
					KillTimer(hDlg, 0);
					g_pPlayer->Uninitialize();							
					EnableWindow (GetDlgItem(hDlg, ID_PLAY), TRUE);
					break;
				case ID_BROWSE:
					BrowseFiles();
					g_pPlayer->SetIniFilePath(g_szIniFile);
					g_pPlayer->GetINIInfo(hDlg);
					break;
				case IDC_TV_VGA:
					if (IsDlgButtonChecked(hDlg, IDC_TV_VGA) == BST_CHECKED)
						g_bTvOut = TRUE;
					else
						g_bTvOut = FALSE;
					g_pPlayer->SetTvOut(g_bTvOut);
					break;
				case IDC_LOOP:
					if (IsDlgButtonChecked(hDlg, IDC_LOOP) == BST_CHECKED)
						g_bLoop = TRUE;
					else
						g_bLoop = FALSE;
					break;
				case IDC_FULL_SCREEN:
					if (IsDlgButtonChecked(hDlg, IDC_FULL_SCREEN) == BST_CHECKED)
						g_bFullScreen = TRUE;
					else
						g_bFullScreen = FALSE;
					g_pPlayer->SetFullScreen(g_bFullScreen);
					break;
				case IDCANCEL:
					SendMessage(hDlg, WM_COMMAND, ID_STOP, 0L);
					SendMessage(GetParent(hDlg), WM_CLOSE, 0, 0L);
					break;
			}
			break;

		default:
			return FALSE;
	}
	return TRUE;
}

/////////////////////////////////////////////////////////////////////

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
					LPSTR lpszCmdParam, int nCmdShow)
{
	MSG msg;
	WNDCLASS wndclass;

	g_hInstance = hInstance;

	if (!hPrevInstance)
	{
		wndclass.style         = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
		wndclass.lpfnWndProc   = WndProc;
		wndclass.cbClsExtra    = 0;
		wndclass.cbWndExtra    = 0;
		wndclass.hInstance     = hInstance ;
		wndclass.hIcon         = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON1));
		wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW);
		wndclass.hbrBackground = CreateSolidBrush(g_KeyColor);
		wndclass.lpszMenuName  = 0;
		wndclass.lpszClassName = g_szAppName;

		RegisterClass (&wndclass);
	}

	int x= 0;
	int y = 0;
	int w = 640;
	int h = 480;

	CoInitialize(NULL);

	g_hWnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW, g_szAppName, g_szAppName, WS_OVERLAPPEDWINDOW,
		      x, y, w, h, NULL, NULL, hInstance, NULL);

	if (g_hWnd)
	{
		while (GetMessage (&msg, NULL, 0, 0))
		{
			TranslateMessage (&msg) ;
			DispatchMessage (&msg) ;
		}
	}

	CoUninitialize();
	return msg.wParam ;
}

////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -