Udostępnij przez


Usługi formatowania plików wymiany zasobów

[Funkcja skojarzona z tą stroną, I/O plików multimedialnych, jest starszą funkcją. Został zastąpiony przez Source Reader. czytnika źródła został zoptymalizowany pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał czytnika źródeł zamiast we/wy plików multimedialnych, 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.]

Preferowanym formatem plików multimedialnych jest format pliku wymiany zasobów (RIFF). Funkcje we/wy plików RIFF działają z podstawowymi buforowanych i niebuforowanych usług we/wy plików. Pliki RIFF można otwierać, odczytywać i zapisywać w taki sam sposób, jak w przypadku innych typów plików. Aby uzyskać szczegółowe informacje na temat języka RIFF, zobacz funkcje AVIFile i makra.

Pliki RIFF używają czteroznakowych kodów do identyfikowania elementów pliku. Te kody to 32-bitowe ilości reprezentujące sekwencję od jednego do czterech znaków alfanumerycznych ASCII, wypełnione po prawej stronie znakami spacji. Typ danych dla kodów czterech znaków to FOURCC. Użyj makra mmioFOURCC, aby przekonwertować cztery znaki na czteroznaczny kod. Aby przekonwertować ciąg zakończony o wartości null na czteroznakowy kod, użyj funkcji mmioStringToFOURCC.

Podstawowym blokiem konstrukcyjnym pliku RIFF jest fragment . Fragment to jednostka logiczna danych multimedialnych, taka jak pojedyncza ramka w klipie wideo. Każdy fragment zawiera następujące pola:

  • Czteroznaczny kod określający identyfikator fragmentu
  • Wartość dwuwordu określająca rozmiar elementu członkowskiego danych we fragmentach
  • Pole danych

Poniższa ilustracja przedstawia fragment "RIFF", który zawiera dwa fragmenty podrzędne.

fragment riff, który zawiera dwa fragmenty obrazu

Fragment zawarty w innym fragmentie jest fragmentem podrzędnym. Jedynymi fragmentami, które mogą zawierać fragmenty podrzędne, są te z identyfikatorem fragmentu "RIFF" lub "LIST". Fragment zawierający inny fragment jest nazywany fragmentem nadrzędnym . Pierwszy fragment w pliku RIFF musi być fragmentem "RIFF". Wszystkie pozostałe fragmenty w pliku są fragmentami fragmentu "RIFF".

Fragmenty "RIFF" zawierają dodatkowe pole w pierwszych czterech bajtach pola danych. To dodatkowe pole zawiera typ formularza pola. Typ formularza to czteroznaczny kod identyfikujący format danych przechowywanych w pliku. Na przykład pliki waveform-audio firmy Microsoft mają typ formularza "WAVE".

Fragmenty "LIST" zawierają również dodatkowe pole w pierwszych czterech bajtach pola danych. To dodatkowe pole zawiera typ listy pola. Typ listy to czteroznaczny kod identyfikujący zawartość listy. Na przykład fragment "LIST" z typem listy "INFO" może zawierać fragmenty "ICOP" i "ICRD" dostarczające informacje o prawach autorskich i dacie utworzenia. Na poniższej ilustracji przedstawiono fragment "RIFF", który zawiera fragment "LIST" i jeden inny fragment podrzędny (fragment "LIST" zawiera dwa fragmenty podrzędne).

fragment riff zawierający obraz fragmentu listy

Usługi we/wy plików multimedialnych obejmują dwie funkcje, których można użyć do nawigowania między fragmentami w pliku RIFF: mmioAscend i mmioDescend. Tych funkcji można używać jako funkcji wyszukiwania wysokiego poziomu. Po zejściu do fragmentu pozycja pliku jest ustawiana na pole danych fragmentu (8 bajtów od początku fragmentu). W przypadku fragmentów "RIFF" i "LIST" pozycja pliku jest ustawiona na lokalizację po typie formularza lub typie listy (12 bajtów od początku fragmentu). Gdy wznosisz się poza fragment, pozycja pliku jest ustawiona na lokalizację po końcu fragmentu.

Aby utworzyć nowy fragment, użyj funkcji mmioCreateChunk, aby napisać nagłówek fragmentu w bieżącym położeniu w otwartym pliku. Funkcje mmioAscend, mmioDescendi mmioCreateChunk functions używają strukturyMMCKINFOMMCKINFO, aby określić i pobrać informacje o fragmentach "RIFF".