怎样在EVC4.0下编程实现音频和视频文件的的播放

来源:互联网 发布:win10网络唤醒关闭 编辑:程序博客网 时间:2024/05/20 03:46

// TODO: Add your control notification handler code here
 IGraphBuilder *pGraph; 
 // 指向Filter Graph的指针
 IMediaControl *pMediaControl;
 // 指向MediaControl对象的指针
 IMediaEvent   *pMediaEvent;

 CString filePath="//Program Files//eMuseum//Socket//test.mp3";
 // 初始化,使用com第一步,程序启动时执行一次即可
 HRESULT hr =  CoInitializeEx(NULL, COINIT_MULTITHREADED);
 if (FAILED(hr))
 {
  // Add error-handling code here. (Omitted for clarity.)
  AfxMessageBox(_T("Failed to CoInitialize"));
 }
 // 以下程序每次播放MP3(或其他格式)文件时调用 
 // 创建一个Filter Graph manager
 if (SUCCEEDED(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
  IID_IGraphBuilder, (void **)&pGraph)))
 { 
  pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl); ;
  // 连接播放指定文件所需的filter
  pGraph->QueryInterface(IID_IMediaEvent, (void **)&pMediaEvent);

  hr=(pGraph->RenderFile(filePath, 0));
  if(FAILED(hr))
  {
   AfxMessageBox(_T("RenderFile Failed"));
   return;
  }
  else
  {
   //CClientDC dc(0);
   //CDC dcAudio;   
   // 开始播放指定的文件
   hr = pMediaControl->Run();
   // 文件的播放在DirectShow中独立线程中进行,此处等待
   if(SUCCEEDED(hr))
   {
    long evCode = 0;
    pMediaEvent->WaitForCompletion(INFINITE, &evCode);
   }

   // MessageBox(NULL, L"点击[OK]结束播放", L"Play MP3", MB_OK); 
   // pMediaControl->Stop();
   // 停止播放
   else
   {
    AfxMessageBox(_T("Run Failed")); 
    return;
   }
  }  

  pMediaControl->Release();
  // 释放对象
  pMediaEvent->Release();
  pGraph->Release();

  // 程序结束时调用
  CoUninitialize();
 }
 else
  AfxMessageBox(_T("Failed"));

 

小弟最近开始做WINCE下的一个项目,现在需要编程播放音频和视频文件,在网上找资料发现主要的方法有以下3种:
        1、DirectShow:这个需要自己写filter比较复杂;
        2、调用Media Player控件:在对话框内嵌入一个Media Player控件,在PC机上可以很容易的运行,但是相同的方法用EVC编写的程序要在PPC上运行却老是提示找不到某个组件;
        3、通过SHELLEXECUTEINFO直接调用Media Player,主要代码如下:
                      SHELLEXECUTEINFO sei;

 ZeroMemory(&sei,sizeof(sei));
 sei.cbSize = sizeof(SHELLEXECUTEINFO);
 sei.hwnd = this->m_hWnd;
 sei.lpFile = _T("//Windows//wmplayer.exe");  
 sei.lpVerb = _T("open");
 sei.lpParameters=_T("//Program Files//Windows Media Player//test.mp3");
 sei.nShow = SW_SHOWNORMAL;
 sei.fMask = SEE_MASK_NOCLOSEPROCESS;
 ShellExecuteEx(&sei);

原创粉丝点击