Udostępnij za pośrednictwem


Negocjowanie typu nośnika w koderze

W programie Microsoft Media Foundation kodery są implementowane jako transformacje programu Media Foundation (MFT) z jednym wejściem i jednym wyjściem. Przed sesją kodowania koder musi znać charakterystykę strumienia, który otrzyma jako dane wejściowe, a format strumienia, który zostanie wygenerowany jako dane wyjściowe. Przed przekazaniem danych przez koder należy ustawić typy nośników wejściowych i wyjściowych oraz powiązane właściwości. Należy podać formaty wejściowe i wyjściowe, określając odpowiednie identyfikatory GUID typu nośnika i ustawić właściwości strumienia wyjściowego, ustawiając odpowiednie atrybuty typu nośnika na typ nośnika wyjściowego. Nowo utworzony koder nie ma żadnych zestawów typów multimediów.

Typ nośnika wejściowego jest formatem nieskompresowanym, takim jak dźwięk PCM lub wideo RGB. Typy formatów używane przez koder są ograniczone do typów opisanych przez VIDEOINFOHEADER i struktury WAVEFORMATEX. Aby uzyskać więcej informacji na temat tych struktur, zobacz dokumentację zestawu Windows SDK. Podstawy multimediów udostępniają funkcje pomocnicze do tworzenia typów multimediów na podstawie struktur formatowania. Na przykład funkcja MFInitMediaTypeFromVideoInfoHead er inicjuje typ wideo ze struktury VIDEOINFOHEADER oraz funkcję MFInitMediaTypeFromWaveFormatEx inicjuje typ wideo z WAVEFORMAT EX lub struktura WAVEFORMATEXTENSIBLE. Aby uzyskać więcej informacji, zobacz Konwersje typów multimediów. Musisz ustawić typ nośnika wejściowego w koderze, wywołując IMFTransform::SetInputType.

Typ nośnika wyjściowego to format kompresji używany w końcowym strumieniu źródłowym lub pliku. Typ dostępnego nośnika wyjściowego można ustawić tylko po ustawieniu typu nośnika wejściowego. Obsługiwane typy danych wyjściowych można pobrać, wywołując IMFTransform::GetOutputAvailableType w pętli, dopóki koder nie zwróci MF_E_NO_MORE_TYPES. Zwiększa indeks typu przy użyciu każdej iteracji. Po znalezieniu odpowiedniego typu nośnika ustaw typ nośnika wyjściowego, wywołując IMFTransform::SetOutputType.

Decydujący czynnik wyboru typu nośnika wyjściowego zależy od typu kodowania i wymagań dotyczących kodowania. Na przykład w przypadku strumieni audio zakodowanych w formacie CBR chcesz znaleźć typ nośnika pasujący do danych wejściowych i ma szybkość transmisji bitów, która jest możliwie zbliżona do wartości docelowej.

Jeśli chcesz użyć trybu kodowania innego niż CBR, musisz ustawić tryb, a następnie wyliczyć typy danych wyjściowych dla tego trybu, ponieważ koder zmienia obsługiwane typy danych wyjściowych w zależności od ustawionego trybu. Właściwości kontrolujące tryb kodowania są MFPKEY_VBRENABLED i MFPKEY_PASSESUSED. Jeśli na przykład wyliczasz typy danych wyjściowych dla kodowania jakości VBR, typ nośnika zależy od wartości jakości, której chcesz użyć. Aby uzyskać informacje na temat ustawiania tych właściwości, zobacz Właściwości kodowania.

utworzenie wystąpienia MFT kodera

koderów Windows Media Encoders