如何给Windows Media Player写插件支持自己定义的音频格式 请问如何给Windows Media Player写插件,支持自己定义的音频格式?使其能够播放?需要哪些步骤,哪些SDK,以及哪些工具。谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 写相关的解码的filter并注册。DirectShow.可以参考陆其明的DirectShow和Windows Media的书。 因为没有使用过DirectShow,希望得到指点。我现在如果已经写好了,扩展名为filter.ax,请问如何使用?让MediaPlayer能够使用?比如我想让所有扩展名为abc的文件都由MediaPlayer来播放,其中codec在filter.ax中。该如何操作? regsvr32 filter.ax 进行注册。 写SourceFilter,在DllRegisterServer中的AMovieDllRegisterServer2前 RegisterSourceFilter( CLSID_AsyncReader, MEDIASUBTYPE_RealMedia, _T("0,4,,2E524D46"), _T(".rm"), _T(".rmvb"), _T(".ram"), NULL);void RegisterSourceFilter(const CLSID& clsid, const GUID& subtype2, LPCTSTR chkbytes, LPCTSTR ext = NULL, ...){ CString null = CStringFromGUID(GUID_NULL); CString majortype = CStringFromGUID(MEDIATYPE_Stream); CString subtype = CStringFromGUID(subtype2);/* SetRegKeyValue(_T("Media Type\\") + null, subtype, _T("0"), chkbytes); SetRegKeyValue(_T("Media Type\\") + null, subtype, _T("Source Filter"), CStringFromGUID(clsid));*/ SetRegKeyValue(_T("Media Type\\") + majortype, subtype, _T("0"), chkbytes); SetRegKeyValue(_T("Media Type\\") + majortype, subtype, _T("Source Filter"), CStringFromGUID(CLSID_AsyncReader)); DeleteRegKey(_T("Media Type\\") + null, subtype); va_list er; va_start(er, ext); for(; ext; ext = va_arg(er, LPCTSTR)) DeleteRegKey(_T("Media Type\\Extensions"), ext); va_end(er);} 我安装了DirectX9.0 SDK。在VC的Tools/Option/Directory里的Include面加入<DX90SDKInstallFolder>\Include, <DX90SDKInstallFolder>\Samples\C++\Common<DX90SDKInstallFolder>\Samples\C++\DirectShow\Common<DX90SDKInstallFolder>\Samples\C++\DirectShow\BaseClasses在Library中加入<DX90SDKInstallFolder>\lib<DX90SDKInstallFolder>\Samples\C++\DirectShow\BaseClasses\Debug修改Project Setting/Link/Output file name为Debug/MyFilter.ax修改Project Setting/Link/Object Modules为strmbasd.lib msvcrtd.lib quartz.lib vfw32.lib winmm.lib kernel32.lib advapi32.lib version.lib largeint.lib user32.lib gdi32.lib comctl32.lib ole32.lib olepro32.lib oleaut32.lib uuid.lib选上"Ignore all default libraries.随后,我build成功了<DX90SDKInstallFolder>\Samples\C++\DirectShow\BaseClasses,生成了Debug目录中的strmbasd.lib主文件代码如下:#include "stdafx.h"#include <streams.h>STDAPI DllRegisterServer(){ return AMovieDllRegisterServer2(TRUE);}STDAPI DllUnregisterServer(){ return AMovieDllRegisterServer2(FALSE);}extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID); BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ return DllEntryPoint((HINSTANCE) hModule, (ULONG) ul_reason_for_call, lpReserved);}但是链接会出错:Compiling...StdAfx.cppCompiling...myFilter.cppLinking... Creating library Debug/MyFilter.lib and object Debug/MyFilter.expstrmbasd.lib(dllsetup.obj) : error LNK2001: unresolved external symbol "class CFactoryTemplate * g_Templates" (?g_Templates@@3PAVCFactoryTemplate@@A)strmbasd.lib(dllentry.obj) : error LNK2001: unresolved external symbol "class CFactoryTemplate * g_Templates" (?g_Templates@@3PAVCFactoryTemplate@@A)strmbasd.lib(dllsetup.obj) : error LNK2001: unresolved external symbol "int g_cTemplates" (?g_cTemplates@@3HA)strmbasd.lib(dllentry.obj) : error LNK2001: unresolved external symbol "int g_cTemplates" (?g_cTemplates@@3HA)Debug/MyFilter.ax : fatal error LNK1120: 2 unresolved externalsError executing link.exe.MyFilter.ax - 5 error(s), 0 warning(s)然后我生成一个Simple Dll Project.MyFilter.def文件如下:LIBRARY MyFilter.ax EXPORTSDllMain PRIVATEDllGetClassObject PRIVATEDllCanUnloadNow PRIVATEDllRegisterServer PRIVATEDllUnregisterServer PRIVATE VC中多文档时,怎么添加菜单和菜单响应? 有语法错误“error C2001: newline in constant”----一个MFC初学者的问题 我在使用多媒体定时器的时候出现以下错误,请问时什么原因呢? 如何响应中文输入法 如何实现只更新对话框的其中一个CEdit控件?? 为什么有的工程打开时,ClassView,ResourceView或FileView打不开? 请问再哪里能够得到 2001.7月版的msdn? VC做一个零售界面的前台,各位有什么意见(up 有分) 到过Tencent面试过VC的进来 请教关于证书链的解析?? 类初始化问题??? 有点菜菜的问题
我现在如果已经写好了,扩展名为filter.ax,请问如何使用?让MediaPlayer能够使用?
比如我想让所有扩展名为abc的文件都由MediaPlayer来播放,其中codec在filter.ax中。
该如何操作?
RegisterSourceFilter(
CLSID_AsyncReader,
MEDIASUBTYPE_RealMedia,
_T("0,4,,2E524D46"),
_T(".rm"), _T(".rmvb"), _T(".ram"), NULL);void RegisterSourceFilter(const CLSID& clsid, const GUID& subtype2, LPCTSTR chkbytes, LPCTSTR ext = NULL, ...)
{
CString null = CStringFromGUID(GUID_NULL);
CString majortype = CStringFromGUID(MEDIATYPE_Stream);
CString subtype = CStringFromGUID(subtype2);
/*
SetRegKeyValue(_T("Media Type\\") + null, subtype, _T("0"), chkbytes);
SetRegKeyValue(_T("Media Type\\") + null, subtype, _T("Source Filter"), CStringFromGUID(clsid));
*/
SetRegKeyValue(_T("Media Type\\") + majortype, subtype, _T("0"), chkbytes);
SetRegKeyValue(_T("Media Type\\") + majortype, subtype, _T("Source Filter"), CStringFromGUID(CLSID_AsyncReader)); DeleteRegKey(_T("Media Type\\") + null, subtype); va_list er;
va_start(er, ext);
for(; ext; ext = va_arg(er, LPCTSTR))
DeleteRegKey(_T("Media Type\\Extensions"), ext);
va_end(er);
}
<DX90SDKInstallFolder>\Samples\C++\Common
<DX90SDKInstallFolder>\Samples\C++\DirectShow\Common
<DX90SDKInstallFolder>\Samples\C++\DirectShow\BaseClasses在Library中加入
<DX90SDKInstallFolder>\lib
<DX90SDKInstallFolder>\Samples\C++\DirectShow\BaseClasses\Debug修改Project Setting/Link/Output file name为Debug/MyFilter.ax修改Project Setting/Link/Object Modules为
strmbasd.lib msvcrtd.lib quartz.lib vfw32.lib winmm.lib kernel32.lib advapi32.lib version.lib largeint.lib user32.lib gdi32.lib comctl32.lib ole32.lib olepro32.lib oleaut32.lib uuid.lib选上"Ignore all default libraries.随后,我build成功了
<DX90SDKInstallFolder>\Samples\C++\DirectShow\BaseClasses,
生成了Debug目录中的strmbasd.lib主文件代码如下:
#include "stdafx.h"
#include <streams.h>STDAPI DllRegisterServer()
{
return AMovieDllRegisterServer2(TRUE);
}STDAPI DllUnregisterServer()
{
return AMovieDllRegisterServer2(FALSE);
}extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return DllEntryPoint((HINSTANCE) hModule, (ULONG) ul_reason_for_call, lpReserved);
}
但是链接会出错:
Compiling...
StdAfx.cpp
Compiling...
myFilter.cpp
Linking...
Creating library Debug/MyFilter.lib and object Debug/MyFilter.exp
strmbasd.lib(dllsetup.obj) : error LNK2001: unresolved external symbol "class CFactoryTemplate * g_Templates" (?g_Templates@@3PAVCFactoryTemplate@@A)
strmbasd.lib(dllentry.obj) : error LNK2001: unresolved external symbol "class CFactoryTemplate * g_Templates" (?g_Templates@@3PAVCFactoryTemplate@@A)
strmbasd.lib(dllsetup.obj) : error LNK2001: unresolved external symbol "int g_cTemplates" (?g_cTemplates@@3HA)
strmbasd.lib(dllentry.obj) : error LNK2001: unresolved external symbol "int g_cTemplates" (?g_cTemplates@@3HA)
Debug/MyFilter.ax : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.MyFilter.ax - 5 error(s), 0 warning(s)
然后我生成一个Simple Dll Project.
MyFilter.def文件如下:
LIBRARY MyFilter.ax
EXPORTS
DllMain PRIVATE
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE