Bonjour,
Dans le cadre de mon logiciel, je suis à la recherche d'exemples afin de parvenir à diffuser sur un réseau local des fichiers ( vidéo ou audio). A l'aide du code suivant, j'ai réussi à diffuser sur mon réseau une chaine mms ( france 24).
Mais je ne parviens pas à diffuser autre chose même en construisant manuellement le graph et liant les filtres manuellement ( MP3=>LAV SPLITTER=>LAV AUDIO DECODER=>ACM WRAPER=>ASFWRITER etc...)
Si vous avez une idée je suis preneur!
Dans le cadre de mon logiciel, je suis à la recherche d'exemples afin de parvenir à diffuser sur un réseau local des fichiers ( vidéo ou audio). A l'aide du code suivant, j'ai réussi à diffuser sur mon réseau une chaine mms ( france 24).
Code:
HRESULT hr = CoInitialize(NULL);
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&m_pGraph);
hr=m_pGraph->AddFilter(m_pAudDeviceFilter,L"Aud Capture Filter");
hr = CoCreateInstance(CLSID_WMAsfWriter, NULL,CLSCTX_INPROC_SERVER,IID_IBaseFilter, (void **) &m_pWMASFWritter);
if(FAILED(hr))return FALSE;
hr=m_pGraph->AddFilter(m_pWMASFWritter,L"ASF Writter");
if(FAILED(hr)) return FALSE;
hr = m_pWMASFWritter->QueryInterface( IID_IFileSinkFilter, (void**)&m_pFileSinkFilter );
if(FAILED(hr)) return FALSE;
hr = m_pFileSinkFilter->SetFileName(L"test.wmv", NULL);
if(FAILED(hr))return FALSE;
if (FAILED(hr = m_pWMASFWritter->QueryInterface(IID_IServiceProvider,(void**)&m_pProvider)))
{
printf("Getting service provider failed");
return FALSE;
}
if (FAILED(hr = m_pProvider->QueryService(IID_IWMWriterAdvanced2,IID_IWMWriterAdvanced2, (void**)&m_pWriter2)))
{
printf("Query Service failed");
return FALSE;
}
if (FAILED(hr = m_pWriter2->SetLiveSource(TRUE)))
{
printf ("Setting live source failed");
return FALSE;
}
if (FAILED(hr = m_pWriter2->RemoveSink(0)))
{
printf (" Remove Sink failed");
return FALSE;
}
m_pProvider->Release();
if (FAILED(hr = WMCreateWriterNetworkSink(&m_pNetSink)))
{
printf ("WMCreateWriterNetworkSink failed");
return FALSE;
}
DWORD dwPort = 8080;
if (FAILED(hr = m_pNetSink->Open(&dwPort)))
{
printf ("Port opening failed");
return FALSE;
}
WCHAR url[256];
DWORD len = 256;
hr = m_pNetSink->GetHostURL(url, &len);
if (FAILED(m_pWriter2->AddSink(m_pNetSink)))
{
printf ("AddSink failed");
return FALSE;
}
IFileSourceFilter *pAsfSource;
IBaseFilter *pFSrc;
hr=CoCreateInstance(CLSID_WMAsfReader,NULL,CLSCTX_INPROC_SERVER,IID_IBaseFilter,(void**)&pFSrc);
hr=m_pGraph->AddFilter(pFSrc,NULL);
hr=pFSrc->QueryInterface(IID_IFileSourceFilter,(void**)&pAsfSource);
hr=pAsfSource->Load(L"mms://stream1.france24.yacast.net/f24_livefr",NULL);
hr=ConnectFilters(pFSrc,m_pWMASFWritter);
hr = m_pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
IEnumPins* pAsfPins;
hr=pFSrc->EnumPins(&pAsfPins);
IPin *Pin = NULL;
while(pAsfPins->Next(1,&Pin,NULL) == S_OK) {
hr=m_pGraph->Render(Pin);
}
hr=pControl->Run();Si vous avez une idée je suis preneur!
Aucun commentaire:
Enregistrer un commentaire