Format pliku wymiany zasobów - Resource Interchange File Format

RIFF
Pierwsze wydanie Sierpień 1991 ; 29 lat temu  ( 1991-08 )
Rodzaj formatu Pojemnik
Przedłużony z Format pliku wymiany
Rozszerzony do AVI , ANI , PAL, RDIB, RMIDI, RMMP, WAV

Resource Interchange File Format ( RIFF ) jest rodzajowy plik format kontenera do przechowywania danych w oznaczonych kawałki . Służy głównie do przechowywania multimediów, takich jak dźwięk i wideo, chociaż może być również używany do przechowywania dowolnych danych.

Implementacja firmy Microsoft jest znana głównie z formatów kontenerów, takich jak AVI , ANI i WAV , które wykorzystują RIFF jako podstawę.

Historia

RIFF został wprowadzony w 1991 roku przez Microsoft i IBM i został przedstawiony przez Microsoft jako domyślny format plików multimedialnych systemu Windows 3.1 . Opiera się on Electronic Arts ' Interchange Format pliku , wprowadzony w 1985 roku na Commodore Amiga , jedyną różnicą, że multi- bajtowe liczby całkowite są w ostrokońcej formacie, native do 80x86 serii procesorów stosowanych w komputerach IBM, zamiast Big -endian format natywny dla serii procesorów 68k używanych w komputerach Amiga i Apple Macintosh , gdzie pliki IFF były intensywnie używane. Wprowadzono również format RIFX, wykorzystujący format big-endian.

W 2010 roku Google wprowadził format obrazu WebP , który używa RIFF jako kontenera.

Wyjaśnienie

Pliki RIFF składają się w całości z „ fragmentów ”. Ogólny format jest identyczny z IFF , z wyjątkiem endianness, jak wspomniano wcześniej, i innego znaczenia nazw fragmentów.

Wszystkie fragmenty mają następujący format:

  • 4 bajty: identyfikator ASCII dla tej porcji (przykłady to „fmt” i „data”; zwróć uwagę na spację w „fmt”).
  • 4 bajty: 32- bitowa liczba całkowita bez znaku little-endian z długością tego fragmentu (z wyjątkiem samego pola i identyfikatora fragmentu).
  • pole o zmiennej wielkości: same dane porcji, o rozmiarze podanym w poprzednim polu.
  • bajt wypełnienia, jeśli długość fragmentu nie jest parzysta.

Dwa identyfikatory porcji, „RIFF” i „LISTA”, wprowadzają porcję, która może zawierać fragmenty podrzędne. Dane porcji RIFF i LIST (pojawiające się po identyfikatorze i długości) mają następujący format:

  • 4 bajty: identyfikator ASCII dla tego konkretnego fragmentu RIFF lub LIST (w typowym przypadku dla RIFF te 4 bajty opisują zawartość całego pliku, np. „AVI” lub „WAVE”).
  • reszta danych: podjednostki.

Sam plik składa się z jednej porcji RIFF, która następnie może zawierać dalsze podczunki: w związku z tym pierwsze cztery bajty poprawnie sformatowanego pliku RIFF będą przeliterować „R”, „I”, „F”, „F”.

Więcej informacji na temat formatu RIFF można znaleźć w artykule Interchange File Format .

RF64 to wielokanałowy format pliku oparty na specyfikacji RIFF, opracowany przez Europejską Unię Nadawców . Jest kompatybilny z BWF i pozwala na rozmiar plików przekraczający 4 gigabajty . Czyni to, udostępniając fragment „ds64” o rozmiarze 64-bitowym (8-bajtowym).

Użycie fragmentu INFO

Opcjonalna porcja INFO umożliwia „oznaczanie” plików RIFF informacjami należącymi do szeregu predefiniowanych kategorii, takich jak prawa autorskie („ICOP”), komentarze („ICMT”), wykonawca („IART”) w ustandaryzowany sposób. Te szczegóły można odczytać z pliku RIFF, nawet jeśli reszta formatu pliku jest nierozpoznana. Standard pozwala również na użycie pól definiowanych przez użytkownika. Programiści zamierzający korzystać z pól niestandardowych powinni pamiętać, że ten sam niestandardowy identyfikator podchunka może być używany przez różne aplikacje na różne (i potencjalnie niekompatybilne) sposoby.

Problemy ze zgodnością

Początkowe trudności z plikami MIDI

Zgodnie z polityką korzystania z rozszerzenia .RIFF dla wszystkich plików „multimedialnych” systemu Windows 3.1, firma Microsoft wprowadziła nowy wariant istniejącego formatu plików MIDI używanego do przechowywania informacji o utworach odtwarzanych na elektronicznych instrumentach muzycznych. „Nowy” format pliku MIDI firmy Microsoft składał się ze standardowego pliku MIDI zawartego w „opakowaniu” RIFF i miał rozszerzenie .RMI . Ponieważ istniejący format pliku MIDI obsługiwał już osadzone informacje „tagowania”, korzyści wynikające z posiadania nowego formatu nie były oczywiste dla użytkownika.

Od tego czasu stowarzyszenie producentów MIDI przyjęło format plików MIDI oparty na RIFF i użyło go jako podstawy „rozszerzonego pliku midi”, który zawiera również dane instrumentów w formacie „ DLS ”, osadzone w tym samym pliku .RMI.

INFO problemy z umieszczaniem porcji

Na potrzeby katalogowania optymalna pozycja dla porcji INFO znajduje się blisko początku pliku. Ponieważ jednak porcja INFO jest opcjonalna, często jest pomijana w szczegółowych specyfikacjach poszczególnych formatów plików, co prowadzi do niejasności co do prawidłowego położenia tej porcji w pliku.

W przypadku dużych plików multimedialnych rozszerzenie lub zmniejszenie fragmentu INFO podczas edycji znacznika może spowodować, że następująca sekcja „danych” pliku będzie musiała zostać odczytana i przepisana z powrotem na dysk, aby pomieścić nowy rozmiar nagłówka. Ponieważ pliki multimedialne mogą mieć rozmiar gigabajtów, jest to proces potencjalnie obciążający dysk. Jednym ze sposobów obejścia tego problemu jest „wypełnienie” wiodącego fragmentu INFO przy użyciu fikcyjnych danych (przy użyciu „fikcyjnego fragmentu” lub „wypełnienia”) podczas tworzenia pliku. Późniejsza edycja może następnie rozszerzyć lub zawęzić pole „fikcyjne”, aby zachować stały rozmiar nagłówka pliku: inteligentnie napisane oprogramowanie może następnie nadpisać tylko nagłówek pliku, gdy znaczniki danych ulegną zmianie, bez modyfikowania lub przenoszenia głównej części plik.

Niektóre programy próbowały rozwiązać ten problem, umieszczając porcję INFO na końcu pliku multimedialnego, po głównej treści pliku. Doprowadziło to do dwóch różnych konwencji umieszczania fragmentów, z towarzyszącym ryzykiem, że niektóre kombinacje oprogramowania mogą spowodować zignorowanie lub trwałe nadpisanie danych INFO pliku podczas edycji. Bardziej zaawansowane programy wezmą pod uwagę możliwość „nieoczekiwanego” umieszczenia fragmentów w plikach i odpowiednio zareagują. Na przykład, gdy program do edycji audio Audacity napotka plik .WAV z końcowymi danymi INFO, poprawnie zidentyfikuje i odczyta dane, ale po zapisaniu przeniesie porcję INFO z powrotem do nagłówka pliku.

Chociaż program CorelDRAW 10 nominalnie używa struktury plików RIFF, początkowa wersja programu umieszczała porcję INFO na końcu, więc żadna osadzona mapa bitowa podglądu nie była domyślnie wyświetlana w menedżerze plików systemu Windows. Narzędzie „łatka” dostarczone z programem rozwiązuje ten problem.

Tagi informacyjne RIFF

Znaczniki informacyjne RIFF można znaleźć w plikach audio WAV i wideo AVI. Tagi, które są częścią specyfikacji Exif 2.2 (ID znaczników rozpoczynające się od „I”) mają podkreśloną nazwę znacznika w wersji HTML tej dokumentacji. Inne tagi znajdują się w plikach AVI generowanych przez oprogramowanie do edycji wideo Sony Vegas .

Identyfikator tagu Nazwa znacznika Zapisywalny Wartości / uwagi
DTIM DateTimeOriginal N Wartości formatu „dtim” profilu ICC
TAŚMA TapeName N

Konwersja czasu DTIM na normalny czas

Pole składa się z dwóch wartości (v [0] iv [1]) oddzielonych spacją (0x20). Przykładowy kod:

// time in seconds - "concatenate" date & time elements with a decimal point delimiter
TimeInSeconds = (v[0] * (2^32) + v[1]) * 10^(-7);

// shift basis from Jan 1, 1601 to Unix epoch Jan 1, 1970 (369 years & leap days)
UnixTimeStamp = TimeInSeconds - 134774 * 24 * 3600;

Niektóre popularne typy plików RIFF

Zobacz też

Bibliografia

Linki zewnętrzne