本人现在做一个这样项目,大致需求是这样的:客户想通过浏览器插件获得网络电台的URL,获得URL后,通过此URL获得媒体流并用自己的软件完成对媒体流的控制.现在项目的难点是怎么获得网络电台的URL. 我的思路是这样的:通过重载IInternetProtocol的START方法.判断每一次连接的MINE类型.如果类型是MP3/WAV/ASF等音频类型.就调用函数pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );获得类型.但在测试的时候,发现MP3类型文件都能获得.ASF的文件能够部分获得,WAV格式的文件根本获得不了,有懂这方面的高手吗?请不吝赐教::,谢谢
部分主要的代码如下:
STDMETHODIMP CGeturl::Start(LPCWSTR szUrl,IInternetProtocolSink *pOIProtSink,IInternetBindInfo *pOIBindInfo,DWORD grfPI,DWORD dwReserved)
{
USES_CONVERSION;
char *str=strlwr(OLE2A(szUrl));

  if(strlen(str) > 4)//.mp3 and .wmv
  {
  char *wav=str+strlen(str)-4;//get the last four word 
  if((_strnicmp(wav,".wma",4)==0)||(_strnicmp(wav,".wmv",4)==0)||(_strnicmp(wav,".wmx",4)==0)||(_strnicmp(wav,".wax",4)==0)||(_strnicmp(wav,".wax",4)==0)||(_strnicmp(wav,".wvx",4)==0))//.mp3 ,.wma
  {
  
  LPOLESTR pwzUrl;            
  ULONG uElFetched;
  LPCTSTR showurl;
  pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );
  showurl=OLE2T(pwzUrl);
  //::MessageBox(NULL,showurl,_T("Forbidden!"),MB_ICONSTOP);
  //pass the parameter of URL to the interface DLL
  return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
  }
  char *mp3=str+strlen(str)-4;//get the last four word 
  if((_strnicmp(mp3,".mp3",4)==0))//.mp3 ,.wma
  {
  LPOLESTR pwzUrl;            
  ULONG uElFetched;
  LPCTSTR showurl;
  pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );
  showurl=OLE2T(pwzUrl);
  //::MessageBox(NULL,showurl,_T("Forbidden!"),MB_ICONSTOP);
  //pass the parameter of URL to the interface DLL
  return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
  }
  char *asf=str+strlen(str)-4;//get the last four word 
  if((_strnicmp(asf,".asx",4)==0)||(_strnicmp(asf,".rif",4)==0))//.mp3 ,.wma
  {
  LPOLESTR pwzUrl;            
  ULONG uElFetched;
  LPCTSTR showurl;
  pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );
  showurl=OLE2T(pwzUrl);
  //::MessageBox(NULL,showurl,_T("Forbidden!"),MB_ICONSTOP);
  //pass the parameter of URL to the interface DLL
  return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
  }
  char *ram=str+strlen(str)-4;//get the last four word 
  if((_strnicmp(ram,".ram",4)==0)||(_strnicmp(ram,".rpm",4)==0))//.mp3 ,.wma
  {
  LPOLESTR pwzUrl;            
  ULONG uElFetched;
  LPCTSTR showurl;
  pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );
  showurl=OLE2T(pwzUrl);
  //::MessageBox(NULL,showurl,_T("Forbidden!"),MB_ICONSTOP);
  //pass the parameter of URL to the interface DLL
  return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
  }
  
  
  }
  if (strlen(str) >3)
  {
  char *rm=str+strlen(str)-3;         //
  if((_strnicmp(rm,".rm",3)==0))//RM
  {
  LPOLESTR pwzUrl;            
  ULONG uElFetched;
  LPCTSTR showurl;
  pOIBindInfo->GetBindString(BINDSTRING_URL,&pwzUrl,1,&uElFetched );
  showurl=OLE2T(pwzUrl);
  //::MessageBox(NULL,showurl,"",MB_ICONSTOP);
  //pass the parameter of URL to the interface DLL
  return INET_E_USE_DEFAULT_PROTOCOLHANDLER;//
  }
  }
  
  return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
}注册代码如下::
   USES_CONVERSION;
mCookie=0;
HRESULT hr = CoGetClassObject(CLSID_Geturl, CLSCTX_SERVER, NULL, IID_IClassFactory, (void**)&m_pFactory);
if(hr==S_OK)
{
if(CoInternetGetSession(0, &m_pSession, 0)==S_OK)

m_pSession->RegisterNameSpace(m_pFactory, CLSID_Geturl, L"http", 0, NULL, 0); //监视HTTP服务
}