Flash player i pseudo-strumień MP4
Internet 10th Jan 2011
Co jakiś czas przychodzi mi osadzać na stronach pliki FLV z jakimś Flashowym playerem. Oczywiście nie ma z tym żadnego problemu, jednak obecnie nadciąga moda na pliki MP4 kodowane przez h264. Flash od wersji 9 umożliwia odtwarzanie tego typu plików jednak jest ale. Żeby Flash zaśpiewał jak mu MP4 zagra, potrzebuje wyciągnąć z niego metadane (w tym cały indeks zawartości pliku) czyli tzw. obszar Moov Atom. Problem w tym, że większość enkoderów beztrosko umieszcza metadane na końcu pliku MP4.
Rezultatem tej złotej myśli technologicznej jest to, że plik MP4 musi zostać w całości pobrany, zanim jakiś Flash player go zdoła otworzyć. Z małymi plikami to nie problem, jednak kazanie użytkownikowi czekać na pobranie 200 MB pliku, zamiast oglądać go w trakcie ściągania jak w przypadku plików FLV, to powrót do epoki, w której to strony zdobione były tagami <marquee>.
Wyjścia innego nie ma jak złapać za uszy metadane i przeciągnąć je na początek pliku. Na szczęście FFMPEG dostastarcza do tego celu gotowy skrypt o nazwie qt-faststart. Jego użycie raczej nie przysporzy nikogo o ból głowy.
qt-faststart in.mp4 out.mp4
Dla !linuksiarzy pozostaje skorzystanie z aplikacji dla Adobe AIR, lub przygarnięcie klasy dla PHP5.
Komentarze z jogger.pl
Jeżeli rzeczywiście jest to na tyle poważny problem i nie ma możliwości zmiany encoderów, to zawsze można zaimplementować to w playerze. Niech w takim wypadku spróbuje pobrać z serwera ostatnie parę kb pliku (poprzez negocjację początku pobierania obiektu - ala wznawianie pobierania czy przeskakiwanie do danego miejsca filmu) i po oczytaniu danych odpowiednio je wykorzysta.
Z tego co się rozglądałem to żaden player czegoś takiego nie obsługiwał, a napisanie jakiegoś samemu to zadanie nieporównywalnie trudniejsze od poziomu problemu, nie wspominając o tym, że Adobe raczej narzędzi dla Linuksa nie ma.
Chromium wycofuje wsparcie dla H.264 więc może moda przeminie i problem rozwiąże sięsam ;)