游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1112|回复: 0

求助:各位大哥帮我改改下面这段视频播放的程序,好吗

[复制链接]

37

主题

67

帖子

73

积分

注册会员

Rank: 2

积分
73
发表于 2007-7-24 18:06:00 | 显示全部楼层 |阅读模式
//播放所有wave,mps,和视频文件
class CVideo
{
private:
        /// direct show
        IGraphBuilder*                                m_pGraph;                        // Filter对象
        IMediaControl*                                m_pMediaControl;        // 流媒体播放器
        IMediaPosition*                                m_pMediaPosition;        // 播放位置
        IMediaEvent*                                m_pEvent;                        // 流媒体触发事件
        IVideoWindow*                                m_pViewWin;                        // 播放视频的窗口
        HWND                                                m_hWnd;                                // 窗口句柄
        BOOL                                                m_isLoop;                        // 是否循环播放
       
        /// direct sound
        LPDIRECTSOUND8                                m_pSound;                        // 声音硬件指针
        LPDIRECTSOUNDBUFFER                        m_pSBuffer;                        // 声音缓冲
        DSBUFFERDESC                                m_dsdesc;


//初始化流媒体播放
        HRESULT InitStream();

//初始音效播放
        HRESULT InitSound();


//载入指定文件名的音乐,视频文件
       
public:
        bool readfile( LPSTR pFileName );
        EnumVideo        m_Id;
//构造函数,初始化各接口,为播放作准备
        CVideo( HWND hWnd = NULL );

        virtual ~CVideo();

//播放Mp3音乐
        bool Play( LPSTR pFileName , EnumVideo Id, BOOL isLoop = false );
};


#include "..\\H\\Video.h"


//初始化各接口,为播放作准备
CVideo::CVideo( HWND hWnd )
{
        /// direct show
        // 先赋空值,在初始化
        m_pGraph                        = NULL;                        // 流过滤器
        m_pMediaControl                = NULL;                        // 流媒体播放器
        m_pMediaPosition        = NULL;                        // 播放位置
        m_pEvent                        = NULL;                        // 流媒体触发事件
        m_pViewWin                        = NULL;
        m_hWnd                                = hWnd;                // 播放视频的窗口

        /// direct sound
        // 赋空
        m_pSound                        = NULL;                        // 音效的硬件指针
        m_pSBuffer                        = NULL;

        InitSound();
        // 初始化流媒体播放
        InitStream();
}

//初始化流媒体播放
HRESULT CVideo::InitStream()
{
        // 创建过滤器
         CoInitialize( NULL );
        CoCreateInstance(CLSID_FilterGraph, NULL,
                     CLSCTX_INPROC, IID_IGraphBuilder, (void**)&m_pGraph);

        // 创建控制器
        m_pGraph->QueryInterface( IID_IMediaControl, ( void** )&m_pMediaControl );

        // 创建播放位置
        m_pGraph->QueryInterface( IID_IMediaPosition, ( void** )&m_pMediaPosition );

        // 创建事件响应接口
        m_pGraph->QueryInterface( IID_IMediaEvent, ( void** )&m_pEvent );

        // 创建播放窗口
        m_pGraph->QueryInterface( IID_IVideoWindow, ( void** )&m_pViewWin );
       

        return S_OK;
}



//载入指定文件名的音乐,视频文件
bool CVideo::readfile( LPSTR pFileName )
{
        WCHAR wstrSoundPath[MAX_PATH];
        CHAR strSoundPath[MAX_PATH];
        static HWND hDrain = 0;

        switch( m_Id )
        {
                case VIDEO_MOVING:
                        // 得到sound文件夹名
                        GetCurrentDirectory(MAX_PATH, strSoundPath);
                        strcat(strSoundPath, "\\");
                        strcat(strSoundPath, pFileName);

                        //变为宽字节,防止中文路径有错误
                        MultiByteToWideChar(CP_ACP, 0, strSoundPath, -1, wstrSoundPath, MAX_PATH);
                        if(S_OK!= m_pGraph->RenderFile(wstrSoundPath, NULL))        //MustBe NULL
                                return false;
                       
                        break;
                case VIDEO_MP3:
                        // 得到sound文件夹名
                        GetCurrentDirectory(MAX_PATH, strSoundPath);
                        strcat(strSoundPath, "\\");
                        strcat(strSoundPath, pFileName);

                        //变为宽字节,防止中文路径有错误
                        MultiByteToWideChar(CP_ACP, 0, strSoundPath, -1, wstrSoundPath, MAX_PATH);
                       
                        // 渲染文件
                        m_pGraph->RenderFile(wstrSoundPath, NULL);
                break;
        }

        return true;
}


//播放VIDEO音乐
bool CVideo:lay( LPSTR pFileName, EnumVideo Id, BOOL isLoop )
{
        m_Id                = Id;
        m_isLoop        = isLoop;
        // 载入
        if( !readfile( pFileName ) )
        {
                return false;
        }

        switch( Id )
        {
        case VIDEO_MOVING:
                //设置当前位置
                m_pMediaPosition->put_CurrentPosition(0);
                if(m_pViewWin != NULL )
                        m_pViewWin->put_Owner((OAHWND)m_hWnd);
                m_pViewWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS| WS_CLIPCHILDREN);
       
                RECT rect;
               
                GetClientRect(m_hWnd,&rect);
                m_pViewWin->SetWindowPosition(rect.left, rect.top, rect.right, rect.bottom);
                m_pViewWin->put_Visible(OATRUE);

//                g_pVideoWindow->put_FullScreenMode(OATRUE);
                if(m_pViewWin != NULL )
                        m_pViewWin->put_MessageDrain((OAHWND)m_hWnd);
                m_pMediaControl->Run();
                break;
        }
        return true;

       
}

请教:
这个程序是播放就是全屏的

我希望 avi 是多大多大,和播放多大

如果我希望是全屏,就可以播放全屏


各位大哥,可以帮我改一下,好吗?

谢谢!

[em20] [em19] [em18] [em17] [em16]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 16:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表