科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件WinCE中基于Media Player的多媒体开发

WinCE中基于Media Player的多媒体开发

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在过去的10年里,移动技术已经取得了令人难以置信的进步和成就。应用Windows CE系统的移动设备也在应用和编程方面变得更加灵活和方便。

作者:维维编译 来源:天极开发 2007年11月21日

关键字: WinCE Media Player 多媒体开发

  • 评论
  • 分享微博
  • 分享邮件
在过去的10年里,移动技术已经取得了令人难以置信的进步和成就。应用Windows CE系统的移动设备也在应用和编程方面变得更加灵活和方便。最新的Windows CE设备中加入了Windows Media Player 10 Mobile,它提供了和PC上的WMP控件一样强大的功能。你可以为你的移动设备增加多媒体能力,包括播放视频、音频文件,展示图片等等。你可以在文后所附的段落中找到可用的SDK和资源等相关信息
下面我们简单介绍WMP的一些实现技术。

  慨述

  WMP SDK提供了很多的接口,但不是所有都能应用到Windows Mobile平台上来。下面列出可用的一些并进行解释:

接口 描述
IWMPCore WMP对象模型的根接口。你可以由此获取其他接口的指针并且通过它访问其他空间的基本特性。
IWMPControls 允许一个应用程序访问Windows Media Player控件;如它的播放,停止和暂停按钮。
IWMPError 提供错误信息。
IWMPEvents 把由Windows Media Player控件产生的事件提供给一个可以反馈的嵌入式程序。
IWMPMedia,IWMPMediaCollection 管理媒体项的属性。
IWMPNetwork 设置和获取Windows Media Player所使用的网络连接
IWMPPlayer 控制Windows Media Player空间的用户接口的行为。

IWMPPlaylist,
IWMPPlaylistArray,
IWMPPlaylistCollection

播放列表操作。
IWMPSettings 设置或者获取Windows Media Player的设置。

  创建第一个应用程序

  下面由一个简单的ATL应用程序开始,你将创建一个空间容器窗口。下面的代码段使用了一个标准的ATL技术来展示Windows Media Player控件:

LRESULT CWMPHost::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
 AtlAxWinInit();
 CComPtr<IAxWinHostWindow> spHost;
 CComPtr<IConnectionPointContainer> spConnectionContainer;
 CComWMPEventDispatch *pEventListener = NULL;
 CComPtr<IWMPEvents> spEventListener;
 HRESULT hr;
 RECT rcClient;
 m_dwAdviseCookie = 0;
 ...
 // 创建窗口
 GetClientRect(&rcClient);
 m_wndView.Create(m_hWnd, rcClient, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
 if (NULL == m_wndView.m_hWnd) goto FAILURE;
 // 在窗口中装载OCX
 hr = m_wndView.QueryHost(&spHost);
 if (FAILMSG(hr)) goto FAILURE;
 hr = spHost->CreateControl(CComBSTR(_T("WMPlayer.OCX")), m_wndView, 0);
 if (FAILMSG(hr)) goto FAILURE;
 hr = m_wndView.QueryControl(&m_spWMPPlayer);
 if (FAILMSG(hr)) goto FAILURE;
 // 开始监听事件
 hr = CComWMPEventDispatch::CreateInstance(&pEventListener);
 spEventListener = pEventListener;
 if (FAILMSG(hr)) goto FAILURE;
 hr = m_spWMPPlayer->QueryInterface(__uuidof(IConnectionPointContainer), (void**)&spConnectionContainer); if (FAILMSG(hr)) goto FAILURE;
 // 看OCX 是否支持IWMPEvents接口
 hr = spConnectionContainer->FindConnectionPoint(__uuidof(IWMPEvents), &m_spConnectionPoint);
 if (FAILMSG(hr)) goto FAILURE;
 hr = m_spConnectionPoint->Advise(spEventListener, &m_dwAdviseCookie);
 if (FAILMSG(hr)) goto FAILURE;
 return 0;FAILURE: ::PostQuitMessage(0);
 return 0;
}

  你所要做的只是创建一个控件窗口,包含一个IWMPPlayer接口指针,并且对WMP事件进行响应。ATL可以用比MFC更加简便的方式来完成这些任务,当然你也可以使用MFC。你的程序现在就可以播放Windows媒体文件,比如WMA和WMV。


  WMP控件也允许程序员来控制它的行为,比如你可以这样开始播放一个媒体文件:

LRESULT CWMPHost::OnFileOpen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
 CFileOpenDlg dlgOpen;
 HRESULT hr;
 if (dlgOpen.DoModal(m_hWnd) == IDOK)
 {
  hr = m_spWMPPlayer->put_URL(dlgOpen.m_bstrName);
  if (FAILMSG(hr))
   return 0;
 }
 return 0;
}

  Windows Mobile Player 10的移动范例提供了一系列的控件使用范例。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章