CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

高分求avi播放器源代码(不使用控件)

楼主lirb()2002-06-02 20:43:25 在 VC/MFC / 基础类 提问

rt 问题点数:100、回复次数:13Top

1 楼lirb()回复于 2002-06-03 11:56:12 得分 0

可以另外给多100-200分Top

2 楼westboy(雨中漫步)回复于 2002-06-09 14:05:57 得分 0

有个开放源码的MPEG4播放软件  
   
  名字忘了Top

3 楼madmanahong(疯子阿虹)回复于 2002-06-09 14:10:24 得分 0

madmanahong@163.comTop

4 楼madmanahong(疯子阿虹)回复于 2002-06-09 14:11:39 得分 0

madmanahong@163.comTop

5 楼qxj82()回复于 2002-06-09 14:24:36 得分 0

qxj@ccermail.netTop

6 楼rbxhome(阿龙)回复于 2002-06-09 20:34:09 得分 20

有MCI比较容易实现的,我用COM技术结合MCI做了一个比较好的,我现在对MCI比较了解,如果有问题可与我联系:QQ:22487534Top

7 楼xunknown(爱你是我一生中理想)回复于 2002-06-09 20:38:46 得分 0

VC编程资源光盘有一个mp3的,全部源文件.我编译过,可以播放!  
  但是我没有细看,恩,粗看时没有看到有用控件的.  
  Top

8 楼huqiming(Super)回复于 2002-06-09 20:38:56 得分 10

参考一下msdn中的例子aviview  
  或者用Directxsdk里的dshow  
   
  比较简单的Top

9 楼xunknown(爱你是我一生中理想)回复于 2002-06-09 20:42:04 得分 0

VC编程资源大全光盘有一个mp3的全部源文件.我编译过,ok!  
  我没有细看,粗看时没有看到有用控件的.Top

10 楼goldolphin(心向天空)回复于 2002-06-09 20:50:33 得分 0

用MCI,那用低级设备函数也可以了。Top

11 楼eastrock(东方之石)回复于 2002-06-09 22:37:47 得分 0

没错。用mci,如果要,我这儿有一个classTop

12 楼summerw()回复于 2002-06-10 09:51:57 得分 70

//   DigitalVideo.cpp:   implementation   of   the   CDigitalvideo   class.  
  //  
  //////////////////////////////////////////////////////////////////////  
  #include   "stdafx.h"  
  //#include   "VideoPlayer.h"  
  #include   "Digitalvideo.h"  
   
  #ifdef   _DEBUG  
  #undef   THIS_FILE  
  static   char   THIS_FILE[]=__FILE__;  
  #define   new   DEBUG_NEW  
  #endif  
   
  //////////////////////////////////////////////////////////////////////  
  //   Construction/Destruction  
  //////////////////////////////////////////////////////////////////////  
   
  CDigitalvideo::CDigitalvideo()  
  {  
  //   初始化成员变量  
  m_Open   =   m_Pause   =   m_Playing   =   FALSE;  
  m_DeviceID   =   0;  
  }  
   
  CDigitalvideo::~CDigitalvideo()  
  {  
  Close   ();  
  }  
  BOOL   CDigitalvideo::GetPause   ()//是否暂停  
  {  
  return   m_Pause;  
  }  
  BOOL   CDigitalvideo::Open   (CString   Filename,   CWnd   *pWnd,   int   left,   int   top,int   width,int   height)  
  {  
  if   (!m_Open){//如果m_Open=false,没有打开设备  
  //   初始化成员变量  
  m_Open   =   m_Pause   =   m_Playing   =   FALSE;  
  m_DeviceID   =   0;  
  //   文件是否存在  
  CFileStatus   Status;  
  if   (!CFile::GetStatus   (Filename,   Status))  
  return   FALSE;  
  //   打开设备  
  MCI_DGV_OPEN_PARMS   MCIOpen;  
  MCIOpen.lpstrDeviceType   =   "avivideo";//设置播放设备为视频播放设备  
  MCIOpen.lpstrElementName   =   (LPSTR)   Filename.GetBuffer   (0);//文件名  
  MCIOpen.wDeviceID   =   NULL;  
  MCIOpen.hWndParent   =   pWnd->m_hWnd;//可播放视频文件窗口指针  
  MCIOpen.dwStyle   =   WS_CHILD   |   WS_VISIBLE;  
  if   (mciSendCommand   (NULL,   MCI_OPEN,   MCI_WAIT   |   MCI_OPEN_TYPE   |  
  MCI_OPEN_ELEMENT   |   MCI_DGV_OPEN_PARENT   |   MCI_DGV_OPEN_WS,   (DWORD)(LPVOID)   &MCIOpen))  
  return   FALSE;  
  m_DeviceID   =   MCIOpen.wDeviceID;  
  m_Open   =   TRUE;  
  //   将文件长度设置为帧  
  MCI_DGV_SET_PARMS   MCISet;  
  MCISet.dwTimeFormat   =   MCI_FORMAT_FRAMES;  
  if   (mciSendCommand   (m_DeviceID,   MCI_SET,   MCI_SET_TIME_FORMAT,   (DWORD)(LPVOID)   &MCISet)){  
  Close   ();  
  return   FALSE;  
  }  
  //   找到视频文件的开始位置  
  mciSendCommand   (m_DeviceID,   MCI_SEEK,   MCI_SEEK_TO_START,   NULL);  
  //将播放画面置于主窗口之中  
  MCI_DGV_PUT_PARMS   MCIPut;  
  MCIPut.rc.left   =   left;  
  MCIPut.rc.top     =   top;  
  MCIPut.rc.right   =   width;  
  MCIPut.rc.bottom   =   height;  
  if   (mciSendCommand   (m_DeviceID,   MCI_PUT,   MCI_WAIT   |   MCI_DGV_PUT_CLIENT   |  
  MCI_DGV_PUT_WINDOW   |   MCI_DGV_RECT,   (DWORD)(LPVOID)   &MCIPut)){  
  Close   ();  
  return   FALSE;  
  }  
  }  
  return   TRUE;  
  }  
  void   CDigitalvideo::Close   (void)  
  {  
  if   (m_Open){//   停止播放并关闭设备  
  if   (m_Playing   ||   m_Pause)  
  mciSendCommand   (m_DeviceID,   MCI_STOP,   NULL,   NULL);  
  mciSendCommand   (m_DeviceID,   MCI_CLOSE,   NULL,   NULL);  
  //   清空成员变量  
  m_Open   =   m_Pause   =   m_Playing   =   FALSE;  
  m_DeviceID   =   NULL;  
  }  
  }  
  //获得视频文件窗口的宽度  
  int   CDigitalvideo::GetWidth   (void)  
  {  
  if   (m_Open){  
  MCI_DGV_WHERE_PARMS   MCIWhere;  
  if   (mciSendCommand   (m_DeviceID,   MCI_WHERE,   MCI_DGV_WHERE_SOURCE,  
  (DWORD)(LPVOID)   &MCIWhere)){  
  return   0;  
  }  
  return   (int)   MCIWhere.rc.right;  
  }  
  return   0;  
  }  
  //获得视频文件窗口的高度  
  int   CDigitalvideo::GetHeight   (void)  
  {  
  if   (m_Open){  
  MCI_DGV_WHERE_PARMS   MCIWhere;  
  if   (mciSendCommand   (m_DeviceID,   MCI_WHERE,   MCI_DGV_WHERE_SOURCE,    
  (DWORD)(LPVOID)   &MCIWhere)){  
  return   0;  
  }  
  return   (int)   MCIWhere.rc.bottom;  
  }  
  return   0;  
  }  
  BOOL   CDigitalvideo::Play   (BOOL   bLoop,   BOOL   bFullScreen)  
  {  
  if   (m_Open){  
  //   如果是视频的尾部则重新开始播放  
  if   (GetFrame   ()   >=   GetFrames   ())  
  mciSendCommand   (m_DeviceID,   MCI_SEEK,   MCI_SEEK_TO_START,   NULL);  
  //   播放  
  MCI_DGV_PLAY_PARMS   MCIPlay;  
  MCIPlay.dwCallback   =   NULL;  
  MCIPlay.dwFrom   =   GetFrame   ();  
  DWORD   dwFlags   =   MCI_FROM;  
  if   (bLoop)  
  dwFlags   |=   MCI_DGV_PLAY_REPEAT;  
  if   (bFullScreen)  
  dwFlags   |=   MCI_MCIAVI_PLAY_FULLSCREEN;  
  if   (mciSendCommand   (m_DeviceID,   MCI_PLAY,   dwFlags,   (DWORD)(LPVOID)   &MCIPlay))  
  return   FALSE;  
  m_Pause   =   FALSE;  
  m_Playing   =   TRUE;  
  return   TRUE;  
  }  
  return   FALSE;  
  }  
  void   CDigitalvideo::Stop   (void)  
  {  
  if   (m_Open   &&   m_Playing){  
  mciSendCommand   (m_DeviceID,   MCI_STOP,   NULL,   NULL);  
  mciSendCommand   (m_DeviceID,   MCI_SEEK,   MCI_SEEK_TO_START,   NULL);  
  m_Playing   =   FALSE;  
  m_Pause   =   TRUE;  
  }  
  }  
  void   CDigitalvideo::Pause(   void   )  
  {  
  if   (m_Open   ){  
  MCI_DGV_PAUSE_PARMS   MCIPause;  
  if   (mciSendCommand   (m_DeviceID,   MCI_PAUSE,   0,   (DWORD)(LPVOID)   &MCIPause))  
  return;  
  m_Pause   =   TRUE;  
  }  
  }  
  int   CDigitalvideo::GetFrames   (void)  
  {  
  if   (m_Open){  
  MCI_DGV_STATUS_PARMS   MCIStatus;  
  MCIStatus.dwItem   =   MCI_STATUS_LENGTH;  
  if   (mciSendCommand   (m_DeviceID,   MCI_STATUS,   MCI_WAIT   |  
  MCI_STATUS_ITEM,   (DWORD)(LPVOID)   &MCIStatus))  
  return   0;  
  return   (int)   MCIStatus.dwReturn;  
  }  
  return   0;  
  }  
  int   CDigitalvideo::GetFrame   (void)  
  {  
  if   (m_Open){  
  MCI_DGV_STATUS_PARMS   MCIStatus;  
  MCIStatus.dwItem   =   MCI_STATUS_POSITION;  
  if   (mciSendCommand   (m_DeviceID,   MCI_STATUS,   MCI_WAIT   |  
  MCI_STATUS_ITEM,   (DWORD)(LPVOID)   &MCIStatus))  
  return   -1;  
  return   (int)   MCIStatus.dwReturn;  
  }  
  return   -1;  
  }  
  BOOL   CDigitalvideo::IsPlaying   ()  
  {  
  if   (m_Open)  
  {  
  MCI_DGV_STATUS_PARMS   MCIStatus;  
  MCIStatus.dwItem   =   MCI_STATUS_MODE;  
  if   (mciSendCommand   (m_DeviceID,   MCI_STATUS,   MCI_WAIT   |  
  MCI_STATUS_ITEM,   (DWORD)(LPVOID)   &MCIStatus))  
  return   FALSE;  
  if   (MCIStatus.dwReturn   ==   MCI_MODE_PLAY)  
  {  
  m_Playing   =   TRUE;  
  m_Pause   =   FALSE;  
  return   TRUE;  
  }  
  else   if   (MCIStatus.dwReturn   ==   MCI_MODE_PAUSE)  
  {  
  m_Playing   =   TRUE;  
  m_Pause   =   FALSE;  
  return   TRUE;  
  }  
  else  
  {  
  m_Playing   =   FALSE;  
  m_Pause   =   FALSE;  
  return   FALSE;  
  }  
  }  
  return   FALSE;  
  }  
  BOOL   CDigitalvideo::SeekTo   (int   nFrame)  
  {  
  if   (m_Open){  
  MCI_SEEK_PARMS   MCISeek;  
  MCISeek.dwTo   =   nFrame;  
  if   (m_Playing   &&   !m_Pause)  
  mciSendCommand   (m_DeviceID,   MCI_PAUSE,   0,   NULL);  
  if   (mciSendCommand   (m_DeviceID,   MCI_SEEK,   MCI_TO   |    
  MCI_WAIT,   (DWORD)(LPVOID)   &MCISeek))  
  return   FALSE;  
  if   (m_Playing   &&   !m_Pause)  
  Play   ();  
  return   TRUE;  
  }  
  return   FALSE;  
  }  
  void   CDigitalvideo::Forward   (int   nFrames)  
  {  
  if   (m_Open){  
  if   (m_Playing   &&   !m_Pause)  
  Pause   ();  
  MCI_DGV_STEP_PARMS   MCIStep;  
  MCIStep.dwFrames   =   nFrames;  
  mciSendCommand   (m_DeviceID,   MCI_STEP,   MCI_DGV_STEP_FRAMES,    
  (DWORD)(LPVOID)   &MCIStep);  
  }  
  }  
  void   CDigitalvideo::Backward   (int   nFrames)  
  {  
  if   (m_Open){  
  if   (m_Playing   &&   !m_Pause)  
  Pause   ();  
  MCI_DGV_STEP_PARMS   MCIStep;  
  MCIStep.dwFrames   =   nFrames;  
  mciSendCommand   (m_DeviceID,   MCI_STEP,   MCI_DGV_STEP_REVERSE   |  
  MCI_DGV_STEP_FRAMES,   (DWORD)(LPVOID)   &MCIStep);  
  }  
  }  
  int   CDigitalvideo::GetSpeed   (void)  
  {  
  if   (m_Open){  
  MCI_DGV_STATUS_PARMS   MCIStatus;  
  MCIStatus.dwItem   =   MCI_DGV_STATUS_SPEED;  
  if   (mciSendCommand   (m_DeviceID,   MCI_STATUS,   MCI_WAIT   |  
  MCI_STATUS_ITEM,   (DWORD)(LPVOID)   &MCIStatus))  
  return   -1;  
  return   (int)   MCIStatus.dwReturn;  
  }  
  return   -1;  
  }  
  void   CDigitalvideo::SetSpeed   (int   nSpeed)  
  {  
  if   (m_Open){  
  MCI_DGV_SET_PARMS   MCISet;  
  MCISet.dwSpeed   =   nSpeed;  
  mciSendCommand   (m_DeviceID,   MCI_SET,   MCI_WAIT   |  
  MCI_DGV_SET_SPEED,   (DWORD)(LPVOID)   &MCISet);  
  }  
  }Top

13 楼summerw()回复于 2002-06-10 09:52:17 得分 0

#if   !defined(AFX_VIDEO_H__B35A40D1_7DB7_11D3_860F_F6E44D6C9F3C__INCLUDED_)  
  #define   AFX_VIDEO_H__B35A40D1_7DB7_11D3_860F_F6E44D6C9F3C__INCLUDED_  
   
  #if   _MSC_VER   >   1000  
  #pragma   once  
  #endif   //   _MSC_VER   >   1000  
   
   
  #include   <afxwin.h>  
  #include   <mmsystem.h>  
  #include   <mciavi.h>  
  #include   <digitalv.h>  
   
  class   CDigitalvideo     //处理视频类  
  {  
  public:  
  CDigitalvideo();//构造函数  
  virtual   ~CDigitalvideo();//构析函  
  //视频操作函数  
  //函数功能-打开视频文件,pWnd--将要包含视频播放窗口的主窗口,  
  //left、top-视频播放窗口在主窗口中的左上角坐标  
  BOOL   Open   (CString,   CWnd   *pWnd,   int   left   =   0,   //函数功能-打开视频文件  
  int   top   =   0,int   width   =   20,int   height   =   20);  
  void   Close   (void);//关闭视频文件  
  BOOL   Play   (BOOL   bLoop   =   FALSE,   BOOL   bFullScreen   =   FALSE);//函数功能-播放视频文件  
  void   Stop   (void);       //停止播放  
  void   Pause   (void);     //暂停播放  
  void   Forward   (int);//快进  
  void   Backward   (int);//后退  
  BOOL   SeekTo   (int);//跳到某一位置,处于暂停状态  
  //视频状态还回函数  
  int   GetWidth   (void);//得到视频宽度  
  int   GetHeight   (void);//获得视频高度  
  int   GetFrames   (void);//获得视频总帧数  
  int   GetFrame   (void);//获得当前帧  
  BOOL   IsPlaying   ();//是否正在播放  
  int   GetSpeed   (void);//获得播放速度  
  void   SetSpeed   (int);//设置播放速度  
  BOOL   GetPause   (void);//是否暂停  
  private://数据成员  
  BOOL   m_Open;//是否有媒体文件打开  
  BOOL   m_Pause;//是否暂停  
  BOOL   m_Playing;//是否正在播放  
  WORD   m_DeviceID;//播放设备ID  
  };  
   
  #endif   //   !defined(AFX_VIDEO_H__B35A40D1_7DB7_11D3_860F_F6E44D6C9F3C__INCLUDED_)  
  Top

14 楼summerw()回复于 2002-06-10 09:54:36 得分 0

用这个类的时候别忘了连接winmm.libTop

相关问题

  • 那里下载媒体播放器的源代码?(*.mpg,*.dat,*.avi)
  • mp3播放器的源代码
  • 如何查看控件的源代码?
  • 如何查看控件的源代码?
  • 求Asp.NetPage控件分页的源代码
  • 轻松得分:mp3播放器的源代码
  • 求java写的mp3播放器(带源代码)
  • 新手要找mp3播放器的源代码
  • 编译MPEG4IP播放器源代码时报错
  • 媒体播放器控件???

关键词

  • mp3
  • 控件
  • cdigitalvideo
  • mci
  • pause
  • open
  • include

得分解答快速导航

  • 帖主:lirb
  • rbxhome
  • huqiming
  • summerw

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo