我在at91sam9261-EK评估板上试验视频播放,系统是WINCE 6.0 ,无论系统自带的播放器还是DSHOW开发的,都能够播放出wmv格式的文件,但是都不流畅,效果很不好,有哪位大哥做过这个吗,指点指点该怎么做,谢谢了。要求是只要能流畅播放出视频就行了。
------解决方案--------------------
上网找一下开源的TCPMP,播放的很流畅
------解决方案--------------------
/******************************************************************************
* 定义宏模块 *
******************************************************************************/
#define MEDIAPLAYDLL_API _declspec(dllexport)
/******************************************************************************
* 头文件加载模块(头文件的加载顺序不能改变) *
******************************************************************************/
#include "stdafx.h "
#include <streams.h>
#include <commdlg.h>
#include <assert.h>
#include "MediaPlay.h "
#include "macdefine.h "
/******************************************************************************
* 全局变量定义模块 *
******************************************************************************/
// 当前播放状态
enum PLAYSTATE { psRUNNING, psPAUSED, psSTOPPED};
// Filter Graph组件接口
IGraphBuilder* ipGraBuilder = NULL;
// 播放控制接口
IMediaControl* ipMedControl = NULL;
// 随机定位接口
IMediaEventEx* ipMedEventEx = NULL;
// 视频相关接口
IVideoWindow* ipVidWindow = NULL;
IBasicVideo* ipBasVideo = NULL;
// 音频相关接口
IBasicAudio* ipBasAudio = NULL;
// IMediaEventEx接口,让应用程序及时处理Filter Graph Manager发出的事件
IMediaSeeking* ipMedSeeking = NULL;
// 播放的媒体文件是否仅有音频,初始化为否
bool g_bAudioOnly = false;
// 当前媒体文件的播放状态,初始化为 "停止 "
PLAYSTATE g_psCurrent=psSTOPPED;
// 增加 减少 音量时的基准音量,初始化为最大音量
int g_iBenchSound = MAX_SOUND;
/******************************************************************************
* 主函数实现模块 *
******************************************************************************/
/******************************************************************************
* 函数名称: DllMain() *
* 功能描述: 动态链接库的入口函数 *
* 输入参数: hModule 动态链接库的句柄 *
* ul_reason_for_call 动态链接库被调用的原因 *
* lpReserved 动态链接库初始化和释放的标记 *
* 输出参数: 无 *
* 返 回 值: true 成功 *
* false 失败 *
******************************************************************************/
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
{
// 初始化COM库
if(FAILED(CoInitializeEx(NULL, COINIT_MULTITHREADED)))
{
RETAILMSG(1, (TEXT( "CoInitialize Failed!\r\n ")));
return false;
}
}
if (ul_reason_for_call == DLL_PROCESS_DETACH)
{