Pages

Netstreaming de fichiers via directshow sujet

mercredi 29 janvier 2014




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).


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();


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!




Aucun commentaire:

Enregistrer un commentaire