Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Jak określić obsługiwane stawki

Przed zmianą częstotliwości odtwarzania aplikacja powinna sprawdzić, czy szybkość odtwarzania jest obsługiwana przez obiekty w potoku. Interfejs IMFRateSupport udostępnia metody uzyskania maksymalnych stawek dla kierunków do przodu i wstecz, najwolniejszej stawki oraz obsługiwanej stawki najbliższej do żądanej. Każde z tych zapytań szybkości może określać kierunek odtwarzania i określać, czy należy używać rozrzedzania. Dokładna częstotliwość odtwarzania jest odpytywane przy użyciu interfejsu IMFRateControl.

Aby uzyskać informacje o zmianie częstotliwości odtwarzania, zobacz Jak ustawić częstotliwość odtwarzania w sesji multimediów.

Aby uzyskać ogólne informacje na temat częstotliwości odtwarzania, zobacz About Rate Control.

Aby określić bieżącą częstotliwość odtwarzania

  1. Pobierz usługę kontroli szybkości transmisji z sesji multimedialnej.

    IMFRateControl *pRateControl = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateControl, 
           (void**) &pRateControl );
    

    Przekaż zainicjowany wskaźnik interfejsu IMFMediaSession w parametrze punkObjectMFGetService.

    Aplikacja musi wykonywać zapytania dotyczące usługi kontroli szybkości za pośrednictwem sesji multimediów. Wewnętrznie sesja multimediów wysyła zapytanie do obiektów w topologii.

  2. Wywołaj metodę IMFRateControl::GetRate, aby uzyskać bieżącą częstotliwość odtwarzania.

    hr = pRateControl->GetRate(&bThin, &rate);
    

    Parametr pfThin w funkcji GetRate otrzymuje wartość BOOL, która wskazuje, czy strumień jest obecnie rozrzedzony. Aplikacja musi przekazać null, jeśli nie chce wykonywać zapytań o obsługę rozrzedzania strumienia. Parametr pflRate odbiera bieżącą szybkość odtwarzania.

Aby określić najbliższy obsługiwany kurs

  1. Uzyskaj usługę pomocy technicznej rate z sesji multimediów.

    IMFRateSupport *pRateSupport = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateSupport, 
           (void**) &pRateSupport );
    

    Przekaż zainicjowany wskaźnik interfejsu IMFMediaSession w parametrze punkObjectMFGetService.

  2. Wywołaj metodę IMFRateSupport::IsRateSupported, aby pobrać obsługiwaną częstotliwość najbliższą żądanej szybkości odtwarzania.

    float rateRequested = 4.0;
    float actualRate = 0;
    hr = pRateSupport->IsRateSupported(
           TRUE, 
           rateRequested, 
           &actualRate );
    

    Przykład sprawdza, czy szybkość odtwarzania wynosząca 4,0 jest obsługiwana przy redukcji. Jest to wskazane przez przekazanie true w fThin parametru IsRateSupported. Jeśli ta szybkość jest obsługiwana, actualRate zawiera szybkość odtwarzania 4,0, a wywołanie powiedzie się z wartością zwracaną S_OK. Jeśli dokładna szybkość odtwarzania nie jest obsługiwana, zostaje wybrana najbliższa obsługiwana szybkość w actualRate. Jeśli szybkość nie jest obsługiwana i nie ma dostępnej najbliższej szybkości odtwarzania, wywołanie zwraca odpowiedni kod błędu.

    Te wartości mogą ulec zmianie w zależności od tego, które składniki potoku zostały załadowane. W związku z tym należy ponownie wykonać zapytanie o wartości za każdym razem, gdy załadujesz nową topologię.

    Jeśli żądana szybkość odtwarzania nie jest obsługiwana, jedną z opcji jest wykonywanie zapytań dotyczących każdego obiektu w topologii indywidualnie, aby dowiedzieć się, czy dany składnik nie obsługuje szybkości. Może być możliwe ponowne skompilowanie topologii bez tego składnika, a następnie odtwarzanie w żądanej szybkości. Jeśli na przykład każdy składnik z wyjątkiem modułu renderowania audio obsługuje daną szybkość, można ponownie skompilować topologię bez gałęzi audio i odtwarzać w żądanej szybkości bez dźwięku.

Aby określić najwolniejszą obsługiwaną prędkość

  1. Skorzystaj z usługi wsparcia dotyczącej stawek z sesji multimedialnej.

    IMFRateSupport *pRateSupport = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateSupport, 
           (void**) &pRateSupport );
    

    Przekaż zainicjowany wskaźnik interfejsu IMFMediaSession w parametrze punkObjectMFGetService.

  2. Wywołaj metodę IMFRateSupport::GetSlowestRate, aby pobrać najwolniejszy obsługiwany współczynnik.

    float slowestRate = 0;
    hr = pRateSupport->GetSlowestRate(
           MFRATE_REVERSE, 
           TRUE, 
           &slowestRate);
    

    Przykładowe zapytania dotyczące najwolniejszego współczynnika odtwarzania odwrotnego z rozrzedzeniem. Dolna granica szybkości jest zawarta w parametrze najwolniejszejSzybkości w GetSlowestRate.

    Jeśli odtwarzanie odwrotne lub rozrzedzenie nie jest obsługiwane, wywołanie zwraca odpowiedni kod błędu.

sesja multimediów

Kontrola szybkości

Szukanie, Szybkie do przodu i Odwrotne odtwarzanie