Comment configurer le localisateur de proxy
L’application peut modifier la configuration par défaut du localisateur de proxy en définissant la propriété MFNETSOURCE_PROXYLOCATORFACTORY sur l’objet de fabrique de localisateur de proxy implémenté par l’application. Lorsque l’application appelle des méthodes de résolution de source pour créer la source réseau, Media Foundation appelle la fabrique de localisateur de proxy. Cet objet crée le localisateur de proxy avec une configuration personnalisée.
Pour modifier le paramètre de configuration par défaut du localisateur de proxy
- Implémentez l’interface IMFNetProxyLocatorFactory .
- Dans la méthode IMFNetProxyLocatorFactory::CreateProxyLocator , procédez comme suit :
- Créez un magasin de propriétés.
- Définissez les paramètres de configuration du localisateur de proxy. Pour plus d’informations sur ces paramètres, consultez Paramètres de configuration du localisateur de proxy.
- Appelez la fonction MFCreateProxyLocator . Passez le magasin de propriétés et le protocole. Le protocole est spécifié dans le paramètre pszProtocol de CreateProxyLocator.
- Créez un instance de votre classe de fabrique de localisateur de proxy et obtenez un pointeur vers son interface IMFNetProxyLocatorFactory.
- Créez un autre magasin de propriétés et définissez la valeur de la propriété MFNETSOURCE_PROXYLOCATORFACTORY égale au pointeur IMFNetProxyLocatorFactory de l’étape 3.
- Lorsque vous créez la source réseau, transmettez le magasin de propriétés dans le paramètre pProps des méthodes de résolveur source telles que IMFSourceResolver::BeginCreateObjectFromURL.
Exemple
L’exemple de code suivant implémente l’interface IMFNetProxyLocatorFactory . La méthode IMFNetProxyLocatorFactory::CreateProxyLocator crée une instance du localisateur de proxy par défaut et la configure pour fonctionner en mode de détection automatique.
class CProxyLocatorFactory : public IMFNetProxyLocatorFactory
{
LONG m_cRef;
public:
CProxyLocatorFactory() : m_cRef(1)
{
}
STDMETHODIMP QueryInterface(REFIID riid, void** ppv)
{
static const QITAB qit[] =
{
QITABENT(CProxyLocatorFactory, IMFNetProxyLocatorFactory),
{ 0 }
};
return QISearch(this, qit, riid, ppv);
}
STDMETHODIMP_(ULONG) AddRef()
{
return InterlockedIncrement(&m_cRef);
}
STDMETHODIMP_(ULONG) Release()
{
LONG cRef = InterlockedDecrement(&m_cRef);
if (cRef == 0)
{
delete this;
}
return cRef;
}
STDMETHODIMP CreateProxyLocator(
LPCWSTR pszProtocol,
IMFNetProxyLocator **ppProxyLocator
)
{
*ppProxyLocator = NULL;
//Create the property store object
IPropertyStore *pProp = NULL;
HRESULT hr = PSCreateMemoryPropertyStore(IID_PPV_ARGS(&pProp));
if(SUCCEEDED(hr))
{
// Property key for proxy settings.
PROPERTYKEY key;
key.fmtid = MFNETSOURCE_PROXYSETTINGS;
key.pid = 0;
// Proxy settings
PROPVARIANT var;
var.vt = VT_I4;
var.lVal = MFNET_PROXYSETTING_AUTO;
hr = pProp->SetValue(key, var);
}
//Create the default proxy locator.
if(SUCCEEDED(hr))
{
hr = MFCreateProxyLocator(pszProtocol, pProp, ppProxyLocator);
}
SafeRelease(&pProp);
return hr;
}
};
L’exemple suivant montre comment passer le pointeur IMFNetProxyLocatorFactory à la source réseau.
// Creates a media source from a URL.
//
// This example demonstrates how to set a proxy locator on the network source.
HRESULT CreateMediaSourceWithProxyLocator(
PCWSTR pszURL,
IMFMediaSource **ppSource
)
{
IPropertyStore *pConfig = NULL;
IMFNetProxyLocatorFactory *pFactory = new (std::nothrow) CProxyLocatorFactory();
if (pFactory == NULL)
{
return E_OUTOFMEMORY;
}
// Configure the property store.
HRESULT hr = PSCreateMemoryPropertyStore(IID_PPV_ARGS(&pConfig));
if (SUCCEEDED(hr))
{
PROPERTYKEY key;
key.fmtid = MFNETSOURCE_PROXYLOCATORFACTORY;
key.pid = 0;
PROPVARIANT var;
var.vt = VT_UNKNOWN;
var.punkVal = pFactory;
hr = pConfig->SetValue(key, var);
}
// Create the source media source.
if (SUCCEEDED(hr))
{
hr = CreateMediaSource(pszURL, pConfig, ppSource);
}
SafeRelease(&pConfig);
return hr;
}
Rubriques connexes