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

📄 wmp4playerview.cpp

📁 网络MPEG4IP流媒体开发源代码
💻 CPP
字号:
// wmp4playerView.cpp : implementation of the CWmp4playerView class//#include "stdafx.h"#include "wmp4player.h"#include "wmp4playerDoc.h"#include "wmp4playerView.h"#include "our_config_file.h"#include <SDL.h>#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CWmp4playerViewIMPLEMENT_DYNCREATE(CWmp4playerView, CFormView)BEGIN_MESSAGE_MAP(CWmp4playerView, CFormView)	//{{AFX_MSG_MAP(CWmp4playerView)	ON_BN_CLICKED(IDC_BROWSE_BUTTON, OnBrowseButton)	ON_CBN_DROPDOWN(IDC_COMBO1, OnDropdownCombo1)	ON_CBN_DBLCLK(IDC_COMBO1, OnDblclkCombo1)	ON_COMMAND(ID_ENTER, OnEnter)	ON_CBN_SETFOCUS(IDC_COMBO1, OnSetfocusCombo1)	ON_CBN_KILLFOCUS(IDC_COMBO1, OnKillfocusCombo1)	ON_CBN_SELENDOK(IDC_COMBO1, OnSelendokCombo1)	ON_BN_CLICKED(IDC_PLAY_BUTTON, OnPlayButton)	ON_BN_CLICKED(IDC_PAUSE_BUTTON, OnPauseButton)	ON_BN_CLICKED(IDC_STOP_BUTTON, OnStopButton)	ON_WM_TIMER()	ON_COMMAND(ID_AUDIO_MUTE, OnAudioMute)	//}}AFX_MSG_MAP	ON_WM_HSCROLL()	ON_MESSAGE(WM_SDL_KEY, OnSdlKey)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CWmp4playerView construction/destructionCWmp4playerView::CWmp4playerView()	: CFormView(CWmp4playerView::IDD){	//{{AFX_DATA_INIT(CWmp4playerView)	//}}AFX_DATA_INIT	// TODO: add construction code here	m_nTimer = 0;	m_timer_slider_selected = 0;}CWmp4playerView::~CWmp4playerView(){	theApp.StopSession(1);}void CWmp4playerView::DoDataExchange(CDataExchange* pDX){	CFormView::DoDataExchange(pDX);	//{{AFX_DATA_MAP(CWmp4playerView)	DDX_Control(pDX, IDC_SLIDER2, m_volume_slider);	DDX_Control(pDX, IDC_STOP_BUTTON, m_stop_button);	DDX_Control(pDX, IDC_PAUSE_BUTTON, m_pause_button);	DDX_Control(pDX, IDC_PLAY_BUTTON, m_play_button);	DDX_Control(pDX, IDC_SLIDER1, m_time_slider);	DDX_Control(pDX, IDC_COMBO1, m_combobox);	//}}AFX_DATA_MAP}BOOL CWmp4playerView::PreCreateWindow(CREATESTRUCT& cs){	// TODO: Modify the Window class or styles here by modifying	//  the CREATESTRUCT cs	m_play_button.LoadBitmaps("PLAY_BUTTONU", "PLAY_BUTTOND",							  NULL, "PLAY_BUTTON_DIS");	m_pause_button.LoadBitmaps("PAUSE_BUTTONU", "PAUSE_BUTTOND",							   NULL, "PAUSE_BUTTON_DIS");	m_stop_button.LoadBitmaps("STOP_BUTTONU", "STOP_BUTTOND",							  NULL, "STOP_BUTTON_DIS");	return CFormView::PreCreateWindow(cs);}void CWmp4playerView::OnInitialUpdate(){	CFormView::OnInitialUpdate();	GetParentFrame()->RecalcLayout();	ResizeParentToFit();	m_time_slider.SetRange(0, 100);#if 0	m_play_button.EnableWindow(FALSE);	m_pause_button.EnableWindow(FALSE);	m_stop_button.EnableWindow(FALSE);	m_time_slider.EnableWindow(FALSE);#endif}void CWmp4playerView::OnUpdate (CView* pSender, LPARAM lHint, CObject* pHint){	CFormView::OnUpdate(pSender, lHint, pHint);	int seekable = 0;	int timer_on = 0;	int volume = 0;	if (theApp.m_mp4if != NULL) {		OutputDebugString("On update and have app\n");		seekable = theApp.m_mp4if->is_seekable();		int state = theApp.m_mp4if->get_state();		TRACE1("State is %d", state);		if (state == MP4IF_STATE_PLAY) {			// Playing			m_play_button.SetState(TRUE);			m_pause_button.SetState(FALSE);			m_stop_button.SetState(FALSE);			m_pause_button.EnableWindow(TRUE);			m_stop_button.EnableWindow(TRUE);			timer_on = 1;		} else {			// Stopped or paused			m_play_button.SetState(FALSE);			m_pause_button.SetState(state == MP4IF_STATE_PAUSE);			m_stop_button.SetState(state == MP4IF_STATE_STOP);			m_play_button.EnableWindow(TRUE);			m_pause_button.EnableWindow(FALSE);			m_stop_button.EnableWindow(FALSE);		}		if (theApp.m_mp4if->has_audio()) {			volume = 1;		}	} else {		m_pause_button.SetState(FALSE);		m_play_button.SetState(FALSE);		m_stop_button.SetState(FALSE);		m_play_button.EnableWindow(FALSE);		m_pause_button.EnableWindow(FALSE);		m_stop_button.EnableWindow(FALSE);	}	m_volume_slider.SetPos(config.get_config_value(CONFIG_VOLUME));	if (volume == 0) {		m_volume_slider.EnableWindow(FALSE);	} else {		m_volume_slider.EnableWindow(TRUE);	}	m_time_slider.EnableWindow(seekable);	if (seekable == 0)	   m_time_slider.SetPos(0);	if (timer_on) {		m_nTimer = SetTimer(1, 500, NULL);	} else {		if (m_nTimer != 0) {			KillTimer(m_nTimer);			m_nTimer = 0;		}	}	}/////////////////////////////////////////////////////////////////////////////// CWmp4playerView diagnostics#ifdef _DEBUGvoid CWmp4playerView::AssertValid() const{	CFormView::AssertValid();}void CWmp4playerView::Dump(CDumpContext& dc) const{	CFormView::Dump(dc);}CWmp4playerDoc* CWmp4playerView::GetDocument() // non-debug version is inline{	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CWmp4playerDoc)));	return (CWmp4playerDoc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////// CWmp4playerView message handlersvoid CWmp4playerView::OnBrowseButton() {	// TODO: Add your control notification handler code here	theApp.OnFileOpen();}void CWmp4playerView::OnDropdownCombo1() {	// TODO: Add your control notification handler code here   m_combobox.ResetContent();   POSITION pos;   pos = theApp.m_played.GetTailPosition();    if (pos == NULL) {   } else {	   while (pos != NULL)	   {		   CString val = theApp.m_played.GetPrev(pos);		   int retval = m_combobox.AddString(val);	   }	   }   }void CWmp4playerView::OnDblclkCombo1() {	// TODO: Add your control notification handler code here	}void CWmp4playerView::OnEnter() {	// TODO: Add your command handler code here	CString result;	OutputDebugString("Captured enter\n");	int sel = m_combobox.GetCurSel();	if (sel == CB_ERR) {		m_combobox.GetWindowText(result);		} else {		m_combobox.GetLBText(sel, result);	}	if (!result.IsEmpty()) {	   theApp.StartSession(result);	}}void CWmp4playerView::OnSetfocusCombo1() {	// TODO: Add your control notification handler code here	OutputDebugString("Set focus combo 1\n");}void CWmp4playerView::OnKillfocusCombo1() {	OutputDebugString("kill focus Combo1\n");	// TODO: Add your control notification handler code here	}void CWmp4playerView::OnSelendokCombo1() {	// TODO: Add your control notification handler code here	CString result;	int sel = m_combobox.GetCurSel();	if (sel != CB_ERR) {		m_combobox.GetLBText(sel, result);		if (!result.IsEmpty()) {			theApp.StartSession(result);		}	}}void CWmp4playerView::OnHScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar ){	if (pScrollBar->GetDlgCtrlID() == IDC_SLIDER1) {		switch (nSBCode) {		case TB_LINEUP:		case TB_LINEDOWN:		case TB_PAGEUP:		case TB_PAGEDOWN:		case TB_THUMBPOSITION:		case TB_THUMBTRACK:		case TB_TOP:		case TB_BOTTOM:			m_timer_slider_selected = 1;			break;		case TB_ENDTRACK: 			m_timer_slider_selected = 0;			if (theApp.m_mp4if == NULL ||				theApp.m_mp4if->is_seekable() == 0) {				m_time_slider.SetPos(0);				break;			}			double seek_time = theApp.m_mp4if->get_max_time();			nPos = m_time_slider.GetPos();			TRACE1("Pos is %d\n", nPos);			seek_time *= nPos;			seek_time /= 100.0;			theApp.m_mp4if->seek_to(seek_time);			break;		}	} else if (pScrollBar->GetDlgCtrlID() == IDC_SLIDER2) {		if (nSBCode == TB_ENDTRACK) {			config.set_config_value(CONFIG_VOLUME, 								    m_volume_slider.GetPos());			TRACE1("Volume to %d\n", m_volume_slider.GetPos());			if (theApp.m_mp4if &&				theApp.m_mp4if->has_audio()) {				theApp.m_mp4if->client_read_config();			}		}	}}void CWmp4playerView::OnPlayButton() {	if (theApp.m_mp4if && 		theApp.m_mp4if->get_state() != MP4IF_STATE_PLAY) {		theApp.m_mp4if->play();	}	OnUpdate(NULL, 0, NULL);}void CWmp4playerView::OnPauseButton() {	if (theApp.m_mp4if && 		theApp.m_mp4if->get_state() == MP4IF_STATE_PLAY) {		theApp.m_mp4if->pause();	}	OnUpdate(NULL, 0, NULL);	}void CWmp4playerView::OnStopButton() {	if (theApp.m_mp4if && 		theApp.m_mp4if->get_state() == MP4IF_STATE_PLAY) {		theApp.m_mp4if->stop();	}	OnUpdate(NULL, 0, NULL);}void CWmp4playerView::OnTimer(UINT nIDEvent) {	// TODO: Add your message handler code here and/or call default	//	TRACE1("OnTimer %d\n", nIDEvent);	if (m_timer_slider_selected == 0) {		uint64_t curr_time;		double max_time;		max_time = theApp.m_mp4if->get_max_time();		if (max_time != 0.0) {			if (theApp.m_mp4if->get_current_time(&curr_time)) {				uint64_t time = (uint64_t)(max_time * 1000.0);				curr_time *= 100;				curr_time /= time;				m_time_slider.SetPos(curr_time);			}		}	}	CFormView::OnTimer(nIDEvent);}void CWmp4playerView::OnAudioMute() {	// TODO: Add your command handler code here	theApp.OnAudioMute();	OnUpdate(NULL, 0, NULL);}void CWmp4playerView::OnCloseSession(void){	OutputDebugString("Got window close\n");}afx_msg LRESULT CWmp4playerView::OnSdlKey(WPARAM key, LPARAM mod){	TRACE2("SDL key %x %x\n", key, mod);	int screen_size;	int volume;	CMP4If *mp4if = theApp.m_mp4if;	if (mp4if == NULL) return 0;		switch (key) {	case SDLK_c:		if ((mod & (KMOD_LCTRL | KMOD_RCTRL)) != 0) {			theApp.StopSession();		}		break;	case SDLK_x:		if ((mod & (KMOD_LCTRL | KMOD_RCTRL)) != 0) {			// don't know how to do this yet...		}		break;	case SDLK_UP:		volume = mp4if->get_audio_volume();		volume += 10;		if (volume > 100) volume = 100;		config.set_config_value(CONFIG_VOLUME, volume);		mp4if->set_audio_volume(volume);		break;	case SDLK_DOWN:		volume = mp4if->get_audio_volume();		volume -= 10;		if (volume < 0) volume = 0;		config.set_config_value(CONFIG_VOLUME, volume);		mp4if->set_audio_volume(volume);		break;	case SDLK_SPACE:		if (mp4if->get_state() == MP4IF_STATE_PLAY) {			mp4if->pause();		} else {			mp4if->play();		}		break;	case SDLK_END:		// They want the end - just close, or go on to the next playlist.		theApp.StopSession();		break;	case SDLK_HOME:		mp4if->seek_to(0.0);		break;	case SDLK_RIGHT:		if (mp4if->is_seekable()) {			uint64_t play_time;						if (mp4if->get_current_time(&play_time) == FALSE) return 0;			double ptime, maxtime;			play_time += 10 * M_LLU;			ptime = (double)#ifdef _WIN32				(int64_t)#endif				play_time;			ptime /= 1000.0;			maxtime = mp4if->get_max_time();			if (ptime < maxtime) {				mp4if->seek_to(ptime);			}		}		break;	case SDLK_LEFT:		if (mp4if->is_seekable()) {			uint64_t play_time;						if (mp4if->get_current_time(&play_time) == FALSE) return 0;			double ptime;			if (play_time > 10 * M_LLU) {				play_time -= 10 * M_LLU;				ptime = (double)#ifdef _WIN32					(int64_t)#endif					play_time;				ptime /= 1000.0;			} else ptime = 0.0;			mp4if->seek_to(ptime);		}		break;	case SDLK_PAGEUP:		screen_size = mp4if->get_screen_size();		if (screen_size < 2 && mp4if->get_fullscreen_state() == FALSE) {			screen_size++;			theApp.OnMediaVideo(screen_size + ID_MEDIA_VIDEO_50);		}		break;	case SDLK_PAGEDOWN:		screen_size = mp4if->get_screen_size();		if (screen_size >= 1 && mp4if->get_fullscreen_state() == 0) {			screen_size--;			theApp.OnMediaVideo(screen_size + ID_MEDIA_VIDEO_50);		}		break;	case SDLK_RETURN:		if ((mod & (KMOD_LALT | KMOD_RALT)) != 0) {			mp4if->set_fullscreen_state(TRUE);		}		break;	case SDLK_ESCAPE:		mp4if->set_fullscreen_state(FALSE);		break;	default:		break;	}		return 0;}

⌨️ 快捷键说明

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