Come configurare il localizzatore proxy
L'applicazione può modificare la configurazione predefinita del localizzatore proxy impostando la proprietà MFNETSOURCE_PROXYLOCATORFACTORY sull'oggetto factory del localizzatore proxy implementato dall'applicazione. Quando l'applicazione chiama i metodi del resolver di origine per creare l'origine di rete, Media Foundation chiama la factory del localizzatore proxy. Questo oggetto crea il localizzatore proxy con la configurazione personalizzata.
Per modificare l'impostazione di configurazione predefinita del localizzatore proxy
- Implementare l'interfaccia IMFNetProxyLocatorFactory .
- Nel metodo IMFNetProxyLocatorFactory::CreateProxyLocator eseguire le operazioni seguenti:
- Creare un archivio delle proprietà.
- Impostare le impostazioni di configurazione per il localizzatore proxy. Per informazioni su queste impostazioni, vedere Impostazioni di configurazione del localizzatore proxy.
- Chiamare la funzione MFCreateProxyLocator . Passare l'archivio delle proprietà e il protocollo. Il protocollo viene specificato nel parametro pszProtocol di CreateProxyLocator.
- Creare un'istanza della classe factory del localizzatore proxy e ottenere un puntatore all'interfaccia IMFNetProxyLocatorFactory .
- Creare un altro archivio proprietà e impostare il valore della proprietà MFNETSOURCE_PROXYLOCATORFACTORY uguale al puntatore IMFNetProxyLocatorFactory del passaggio 3.
- Quando si crea l'origine di rete, passare l'archivio delle proprietà nel parametro pProps dei metodi resolver di origine, ad esempio IMFSourceResolver::BeginCreateObjectFromURL.
Esempio
Nell'esempio di codice seguente viene implementata l'interfaccia IMFNetProxyLocatorFactory . Il metodo IMFNetProxyLocatorFactory::CreateProxyLocator crea un'istanza del localizzatore proxy predefinito e lo configura per il funzionamento in modalità di rilevamento automatico.
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;
}
};
Nell'esempio seguente viene illustrato come passare il puntatore IMFNetProxyLocatorFactory all'origine di rete.
// 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;
}
Argomenti correlati