Udostępnij przez


Aby zidentyfikować wejścia według numeru

[Funkcja skojarzona z tą stroną, windows Media Format 11 SDK, jest starszą funkcją. Zastąpił go Source Reader oraz Sink Writer. Czytnika źródła i Zapisywacza ujścia zostały zoptymalizowane pod kątem Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał Source Reader i Sink Writer zamiast Windows Media Format 11 SDK, jeśli jest to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

Każda próbka przekazywana do pisarza musi być skojarzona z numerem wejściowym. Każda liczba wejściowa odpowiada jednemu lub większej liczbie strumieni w profilu, których używa program zapisujący do zapisu pliku. W profilu źródła multimediów są identyfikowane przez nazwę połączenia. Pisarz kojarzy numer wejściowy z każdą nazwą połączenia, gdy ustawiasz profil dla pisarza. Zanim będzie można przekazać przykłady do modułu zapisywania, musisz określić, jakie dane wejściowe oczekują. Nie można założyć, że dane wejściowe będą w takiej samej kolejności jak strumienie w profilu, nawet jeśli często tak jest. W związku z tym jedynym niezawodnym sposobem dopasowania danych wejściowych ze strumieniami jest porównanie nazwy połączenia danych wejściowych z nazwą połączenia strumienia.

Aby zidentyfikować nazwy połączeń i odpowiadające im numery wejściowe dla załadowanego profilu, wykonaj następujące kroki:

  1. Utwórz obiekt składnika zapisywania i ustaw profil do użycia. Aby uzyskać więcej informacji na temat ustawiania profilów w programie Writer, zobacz To Use Profiles with the Writer. Powinieneś znać nazwy połączeń używane dla strumieni w profilu. Nazwę połączenia można uzyskać z poziomu profilu, uzyskując obiekt konfiguracji strumienia dla każdego strumienia i wywołując IWMStreamConfig::GetConnectionName. Aby uzyskać więcej informacji na temat profilów i obiektów konfiguracji strumienia, zobacz Praca z profilami.
  2. Pobierz łączną liczbę danych wejściowych, wywołując IWMWriter::GetInputCount.
  3. Przeiteruj przez wszystkie dane wejściowe, wykonując następujące kroki dla każdego z nich.

Poniższy przykładowy kod wyświetla nazwę połączenia dla poszczególnych danych wejściowych. Aby uzyskać więcej informacji na temat korzystania z tego kodu, zobacz Using the Code Examples.

HRESULT GetNamesForInputs(IWMWriter* pWriter)
{
    DWORD    cInputs  = 0;
    HRESULT  hr       = S_OK;
    WCHAR*   pwszName = NULL;
    WORD     cchName  = 0;

    IWMInputMediaProps* pProps = NULL;

    // Get the total number of inputs for the file.
    hr = pWriter->GetInputCount(&cInputs);
    GOTO_EXIT_IF_FAILED(hr);

    // Loop through all supported inputs.
    for (DWORD inputIndex = 0; inputIndex < cInputs; inputIndex++)
    {
        // Get the input properties for the input.
        hr = pWriter->GetInputProps(inputIndex, &pProps);  
        GOTO_EXIT_IF_FAILED(hr);

        // Get the size of the connection name.
        hr = pProps->GetConnectionName(0, &cchName);
        GOTO_EXIT_IF_FAILED(hr);

        if (cchName > 0)
        {
            // Allocate memory for the connection name.
            pwszName = new WCHAR[cchName];
            if (wszName == NULL)
            {
                hr = E_OUTOFMEMORY;
                goto Exit;
            }

            // Get the connection name.
            hr = pProps->GetConnectionName(pwszName, &cchName);
            GOTO_EXIT_IF_FAILED(hr);
            
            // Display the name.
            printf("Input # %d = %S\n", pwszName);
        } // end if

        // Clean up for next iteration.
        SAFE_ARRAY_DELETE(pwszName);
        SAFE_RELEASE(pProps);
    } // end for inputIndex

Exit:
    SAFE_ARRAY_DELETE(pwszName);
    SAFE_RELEASE(pProps);
    return hr;
}

Interfejs IWMWriter

Pisanie plików ASF