TechLife devBlog

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

Bartosz &quot;BTM&quot; Szczeciński 11.01.2011 / 17:15

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.

trójkąt 11.01.2011 / 20:04

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.

Bartosz &quot;BTM&quot; Szczeciński 12.01.2011 / 08:53

Chromium wycofuje wsparcie dla H.264 więc może moda przeminie i problem rozwiąże sięsam ;)



Komentarze