「Microsoft DVBT Network Provider」、「AVerMedia BDA DVBT Tuner」、「AVerMEdia BDA Digital Capture」、「Sample Grabber」、および「NULL Renderer」を含む DirectShow グラフがあります。
これらのフィルタは接続されています。
それに加えて、「MPEG-2 Demultiplexer」と「BDA MPEG2 Transport Information Filter」もありますが、これら 2 つのフィルターは接続されていません。グラフを実行するには、ここにいる必要があるようです。
グラフを起動するとTSデータを受信しているのですが、どうやってもチューニングリクエストが入れられません。Windows Media Center などの他のアプリケーションを使用して、最後にチューニングされた周波数からのみ MUX データをキャプチャできます。
チューニングリクエストを入れるコードは次のとおりです。
// creating tuning space
CComPtr<IDVBTuningSpace> pDVBTuningSpace;<br>
hr = pDVBTuningSpace.CoCreateInstance( __uuidof( DVBTuningSpace ) );
WCHAR szFriendlyName[ 64 ] = L"Local DVB-T Digital Antenna";<br> BSTR bstrFriendlyName = SysAllocString( szFriendlyName );
hr = pDVBTuningSpace->put_UniqueName( bstrFriendlyName );<br>
hr = pDVBTuningSpace->put_FriendlyName( bstrFriendlyName );
SysFreeString( bstrFriendlyName );
CComBSTR clsid_dvbt = ("{216C62DF-6D7F-4e9a-8571-05F14EDB766A}");<br>
hr = pDVBTuningSpace->put_NetworkType( clsid_dvbt );<br>
hr = pDVBTuningSpace->put_SystemType( DVB_Terrestrial );<br>
// creating tune request<br>
CComPtr<ITuneRequest> pTuneRequest;
hr = pDVBTuningSpace->CreateTuneRequest( &pTuneRequest );
CComQIPtr<IDVBTuneRequest> pDVBTuneRequest( pTuneRequest );
hr = pDVBTuneRequest->put_ONID( -1 );<br>
hr = pDVBTuneRequest->put_TSID( -1 );<br>
hr = pDVBTuneRequest->put_SID( -1 );
// locator<br>
CComPtr<IDVBTLocator> pDVBTLocator;
hr = pDVBTLocator.CoCreateInstance( __uuidof( DVBTLocator ) );<br>
hr = pDVBTLocator->put_Bandwidth( 8 );<br>
hr = pDVBTLocator->put_CarrierFrequency( 506000 );
hr = pDVBTuneRequest->put_Locator( pDVBTLocator );
CComQIPtr<ITuner> pTuner( pNetworkProvider_ );
hr = pTuner->put_TuneRequest( pDVBTuneRequest );
これは、グラフに「Microsoft DVBT Network Provider」フィルタを追加した直後に実行されます。
上記のコードのすべての「hr」値は S_OK です。
私は何を間違っていますか?それとも、この「曲リクエスト」で何か大きなことを見逃していたのでしょうか。
(帯域幅と周波数の値は正しい)