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

📄 wmp4player.cpp

📁 网络MPEG4IP流媒体开发源代码
💻 CPP
字号:
// wmp4player.cpp : Defines the class behaviors for the application.//#include "stdafx.h"#include <afxadv.h>#include "wmp4player.h"#include "MainFrm.h"#include "wmp4playerDoc.h"#include "wmp4playerView.h"#include "our_config_file.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CWmp4playerAppBEGIN_MESSAGE_MAP(CWmp4playerApp, CWinApp)	//{{AFX_MSG_MAP(CWmp4playerApp)	ON_COMMAND(ID_APP_ABOUT, OnAppAbout)	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)	ON_COMMAND_RANGE(ID_FILE_MRU_FILE1,ID_FILE_MRU_LAST, OnOpenRecentFile)	ON_COMMAND(ID_VIDEO_FULLSCREEN, OnVideoFullscreen)	ON_UPDATE_COMMAND_UI(ID_DEBUG_MPEG4ISOONLY, OnUpdateDebugMpeg4isoonly)	ON_COMMAND(ID_DEBUG_MPEG4ISOONLY, OnDebugMpeg4isoonly)	ON_UPDATE_COMMAND_UI(ID_AUDIO_MUTE, OnUpdateAudioMute)	ON_COMMAND(ID_AUDIO_MUTE, OnAudioMute)	ON_COMMAND(ID_RTP_OVER_RTSP, OnRtpOverRtsp)	ON_UPDATE_COMMAND_UI(ID_RTP_OVER_RTSP, OnUpdateRtpOverRtsp)	//}}AFX_MSG_MAP	// Standard file based document commands	ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)	ON_UPDATE_COMMAND_UI_RANGE(ID_MEDIA_VIDEO_50, ID_MEDIA_VIDEO_200, OnUpdateMediaVideo)	ON_COMMAND_RANGE(ID_MEDIA_VIDEO_50, ID_MEDIA_VIDEO_200, OnMediaVideo)	ON_UPDATE_COMMAND_UI_RANGE(ID_RTP_DEBUG_EMERG, ID_RTP_DEBUG_DEBUG, OnUpdateDebugRtp)	ON_COMMAND_RANGE(ID_RTP_DEBUG_EMERG, ID_RTP_DEBUG_DEBUG, OnDebugRtp)	ON_UPDATE_COMMAND_UI_RANGE(ID_HTTP_EMERG, ID_HTTP_DEBUG, OnUpdateDebugHttp)	ON_COMMAND_RANGE(ID_HTTP_EMERG, ID_HTTP_DEBUG, OnDebugHttp)	ON_UPDATE_COMMAND_UI_RANGE(ID_RTSP_EMERG, ID_RTSP_DEBUG, OnUpdateDebugRtsp)	ON_COMMAND_RANGE(ID_RTSP_EMERG, ID_RTSP_DEBUG, OnDebugRtsp)	ON_UPDATE_COMMAND_UI_RANGE(ID_SDP_EMERG, ID_SDP_DEBUG, OnUpdateDebugSdp)	ON_COMMAND_RANGE(ID_SDP_EMERG, ID_SDP_DEBUG, OnDebugSdp)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CWmp4playerApp constructionCWmp4playerApp::CWmp4playerApp(){	// TODO: add construction code here,	// Place all significant initialization in InitInstance	m_mp4if = NULL;	m_video_size = 1;	m_session_died = 0;}/////////////////////////////////////////////////////////////////////////////// The one and only CWmp4playerApp objectCWmp4playerApp theApp;/////////////////////////////////////////////////////////////////////////////// CWmp4playerApp initializationBOOL CWmp4playerApp::InitInstance(){	AfxEnableControlContainer();	// Standard initialization	// If you are not using these features and wish to reduce the size	//  of your final executable, you should remove from the following	//  the specific initialization routines you do not need.#ifdef _AFXDLL	Enable3dControls();			// Call this when using MFC in a shared DLL#else	Enable3dControlsStatic();	// Call this when linking to MFC statically#endif	// Change the registry key under which our settings are stored.	// TODO: You should modify this string to be something appropriate	// such as the name of your company or organization.	SetRegistryKey(_T("Mpeg4ip"));	LoadStdProfileSettings();  // Load standard INI file options (including MRU)	const char *str;	config.read_config_file("Software\\Mpeg4ip", "Config");	str = config.get_config_string(CONFIG_PREV_FILE_0);	if (str != NULL) {		m_played.AddTail(str);	}	str = config.get_config_string(CONFIG_PREV_FILE_1);	if (str != NULL) {		m_played.AddTail(str);	}	str = config.get_config_string(CONFIG_PREV_FILE_2);	if (str != NULL) {		m_played.AddTail(str);	}	str = config.get_config_string(CONFIG_PREV_FILE_3);	if (str != NULL) {		m_played.AddTail(str);	}	// Register the application's document templates.  Document templates	//  serve as the connection between documents, frame windows and views.	CSingleDocTemplate* pDocTemplate;	pDocTemplate = new CSingleDocTemplate(		IDR_MAINFRAME,		RUNTIME_CLASS(CWmp4playerDoc),		RUNTIME_CLASS(CMainFrame),       // main SDI frame window		RUNTIME_CLASS(CWmp4playerView));	AddDocTemplate(pDocTemplate);	// Parse command line for standard shell commands, DDE, file open	CCommandLineInfo cmdInfo;	ParseCommandLine(cmdInfo);	// Dispatch commands specified on the command line	if (!ProcessShellCommand(cmdInfo))		return FALSE;	// The one and only window has been initialized, so show and update it.	m_pMainWnd->ShowWindow(SW_SHOW);	m_pMainWnd->UpdateWindow();	return TRUE;}/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:	CAboutDlg();// Dialog Data	//{{AFX_DATA(CAboutDlg)	enum { IDD = IDD_ABOUTBOX };	CString	m_version;	//}}AFX_DATA	// ClassWizard generated virtual function overrides	//{{AFX_VIRTUAL(CAboutDlg)	protected:	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support	//}}AFX_VIRTUAL// Implementationprotected:	//{{AFX_MSG(CAboutDlg)		// No message handlers	//}}AFX_MSG	DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){	//{{AFX_DATA_INIT(CAboutDlg)	m_version.Format("%s - %s", AfxGetAppName(), VERSION);	//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){	CDialog::DoDataExchange(pDX);	//{{AFX_DATA_MAP(CAboutDlg)	DDX_Text(pDX, IDC_VERSION_STRING, m_version);	//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)	//{{AFX_MSG_MAP(CAboutDlg)		// No message handlers	//}}AFX_MSG_MAPEND_MESSAGE_MAP()// App command to run the dialogvoid CWmp4playerApp::OnAppAbout(){	CAboutDlg aboutDlg;	aboutDlg.DoModal();}/////////////////////////////////////////////////////////////////////////////// CWmp4playerApp message handlersvoid CWmp4playerApp::OnFileOpen() {	// TODO: Add your command handler code here	OutputDebugString("\nApp - OnFileOpen()\n");	int recent_files;	CString file_name = "";		recent_files = m_pRecentFileList->GetSize();	if (recent_files > 0) {		if (m_pRecentFileList->GetDisplayName(file_name, 											  0,											  NULL, 0, FALSE)) {		} else file_name = "";	} 	CFileDialog fd(TRUE, 				   NULL, 				   file_name, 				   OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR, 				   NULL, NULL);	if (fd.DoModal() == IDOK) {		StartSession(fd.GetPathName());	}	//CWinApp::AddToRecentFileList}BOOL CWmp4playerApp::OnOpenRecentFile(UINT nID){	int nIndex = nID - ID_FILE_MRU_FILE1;	StartSession((*m_pRecentFileList)[nIndex]);	OutputDebugString((*m_pRecentFileList)[nIndex]);	OutputDebugString("\n");	//if (OpenDocumentFile((*m_pRecentFileList)[nIndex]) == NULL)	//	m_pRecentFileList->Remove(nIndex);	return TRUE;}void CWmp4playerApp::StartSession (CString &name){	int added_to_list = 0;	BeginWaitCursor();	if (config.changed()) {		config.write_config_file("Software\\Mpeg4ip", "Config");	}	if (m_mp4if != NULL) {		StopSession();	}	m_current_playing = name;	if (m_played.Find(name) == NULL) {		added_to_list = 1;		m_played.AddHead(name);	}	//m_pRecentFileList->Add(name);	m_mp4if = new CMP4If(name);	if (m_mp4if->is_valid() == FALSE) {		OutputDebugString("Could not create mp4if\n");		delete m_mp4if;		m_mp4if = NULL;		EndWaitCursor();		AfxMessageBox("Could not create valid Client");		return;	}	CString errmsg;	int err = m_mp4if->get_initial_response(errmsg);	if (err < 0) {		OutputDebugString("mp4if response is false\n");		OutputDebugString(errmsg);		OutputDebugString("\n");		delete m_mp4if;		m_mp4if = NULL;		EndWaitCursor();		AfxMessageBox(errmsg);		return;	} else {		if (err > 0) {			AfxMessageBox(errmsg);		}		if (m_video_size != 1) {			m_mp4if->set_screen_size(m_video_size);		}		if (added_to_list == 1) {			config.move_config_strings(CONFIG_PREV_FILE_3, CONFIG_PREV_FILE_2);			config.move_config_strings(CONFIG_PREV_FILE_2, CONFIG_PREV_FILE_1);			config.move_config_strings(CONFIG_PREV_FILE_1, CONFIG_PREV_FILE_0);			config.set_config_string(CONFIG_PREV_FILE_0, strdup(name));		}		//m_played.AddTail(name);	}	OnFileNew();				EndWaitCursor();	//OpenDocumentFile(name);	//GetDocument()->SetPathName(name, FALSE);	//OpenDocumentFile(name);}void CWmp4playerApp::StopSession (int terminating){	OutputDebugString("Stopping Session\n");	if (m_mp4if != NULL) {		delete m_mp4if;		m_mp4if = NULL;	}	if (terminating != 1)		OnFileNew();	OutputDebugString("Stopped Session\n");	return;}void CWmp4playerApp::SessionDied (void){	if (m_session_died == 0) {		m_session_died = 1;		AfxMessageBox("Client Session Crashed");		StopSession();		m_session_died = 0;	}}void CWmp4playerApp::RemoveLast (void){	m_pRecentFileList->Remove(0);}void CWmp4playerApp::OnVideoFullscreen() {	// TODO: Add your command handler code here	OutputDebugString("OnVIdeoFullScreen\n");	}void CWmp4playerApp::OnUpdateMediaVideo(CCmdUI* pCmdUI) {	int id = pCmdUI->m_nID - ID_MEDIA_VIDEO_50;	// TODO: Add your command update UI handler code here	pCmdUI->Enable();	pCmdUI->SetRadio(m_video_size == id);	}void CWmp4playerApp::OnMediaVideo(UINT id) {	id -= ID_MEDIA_VIDEO_50;	// TODO: Add your command handler code here	m_video_size = id;	if (m_mp4if)		m_mp4if->set_screen_size(m_video_size);}void CWmp4playerApp::OnUpdateDebugRtp (CCmdUI* pCmdUI){	int id = pCmdUI->m_nID - ID_RTP_DEBUG_EMERG;	pCmdUI->Enable();	pCmdUI->SetRadio(config.get_config_value(CONFIG_RTP_DEBUG) == id);}void CWmp4playerApp::OnDebugRtp (UINT id){	id -= ID_RTP_DEBUG_EMERG;	config.set_config_value(CONFIG_RTP_DEBUG, id);	UpdateClientConfig();}void CWmp4playerApp::OnUpdateDebugHttp (CCmdUI* pCmdUI){	int id = pCmdUI->m_nID - ID_HTTP_EMERG;	pCmdUI->Enable();	pCmdUI->SetRadio(config.get_config_value(CONFIG_HTTP_DEBUG) == id);}void CWmp4playerApp::OnDebugHttp (UINT id){	id -= ID_HTTP_EMERG;	config.set_config_value(CONFIG_HTTP_DEBUG, id);	UpdateClientConfig();}void CWmp4playerApp::OnUpdateDebugRtsp (CCmdUI* pCmdUI){	int id = pCmdUI->m_nID - ID_RTSP_EMERG;	pCmdUI->Enable();	pCmdUI->SetRadio(config.get_config_value(CONFIG_RTSP_DEBUG) == id);}void CWmp4playerApp::OnDebugRtsp (UINT id){	id -= ID_RTSP_EMERG;	config.set_config_value(CONFIG_RTSP_DEBUG, id);	UpdateClientConfig();}void CWmp4playerApp::OnUpdateDebugSdp (CCmdUI* pCmdUI){	int id = pCmdUI->m_nID - ID_SDP_EMERG;	pCmdUI->Enable();	pCmdUI->SetRadio(config.get_config_value(CONFIG_SDP_DEBUG) == id);}void CWmp4playerApp::OnDebugSdp (UINT id){	id -= ID_SDP_EMERG;	config.set_config_value(CONFIG_SDP_DEBUG, id);	UpdateClientConfig();}int CWmp4playerApp::ExitInstance() {	if (config.changed()) {		config.write_config_file("Software\\Mpeg4ip", "Config");	}	return CWinApp::ExitInstance();}void CWmp4playerApp::OnUpdateDebugMpeg4isoonly(CCmdUI* pCmdUI) {	// TODO: Add your command update UI handler code here	pCmdUI->Enable();	pCmdUI->SetCheck(config.get_config_value(CONFIG_USE_MPEG4_ISO_ONLY));	}void CWmp4playerApp::OnDebugMpeg4isoonly() {	// TODO: Add your command handler code here	int value;	value = config.get_config_value(CONFIG_USE_MPEG4_ISO_ONLY);	value = (value == 0) ? 1 : 0;	config.set_config_value(CONFIG_USE_MPEG4_ISO_ONLY, value);	}void CWmp4playerApp::UpdateClientConfig (void){	if (m_mp4if) {		m_mp4if->client_read_config();	}}void CWmp4playerApp::OnUpdateAudioMute(CCmdUI* pCmdUI) {	// TODO: Add your command update UI handler code here	if (m_mp4if != NULL && m_mp4if->has_audio()) {		pCmdUI->Enable();		pCmdUI->SetCheck(m_mp4if->get_mute());	} else		pCmdUI->Enable(FALSE);}void CWmp4playerApp::OnAudioMute() {	if (m_mp4if != NULL) {	    m_mp4if->toggle_mute();	}}	void CWmp4playerApp::OnRtpOverRtsp() {	int value;	value = config.get_config_value(CONFIG_USE_RTP_OVER_RTSP);	value = (value == 0) ? 1 : 0;	config.set_config_value(CONFIG_USE_RTP_OVER_RTSP, value);	}void CWmp4playerApp::OnUpdateRtpOverRtsp(CCmdUI* pCmdUI) {	pCmdUI->Enable();	pCmdUI->SetCheck(config.get_config_value(CONFIG_USE_RTP_OVER_RTSP));		}

⌨️ 快捷键说明

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