mboost-dp1

newz.dk

h.264-video dekodet i Javascript

- Via Michael Bebenita Blog - , redigeret af Net_Srak , indsendt af Montago.NET

Da programmøren Michael Bebenita startede hos Mozilla, blev en af de første opgaver han fik, at gøre det muligt at dekode h.264-video udelukkende via Javascript. Selv tænkte han, at det lød som en nærmest umulig opgave, men nu er det lykkedes.

Sammen med udvikleren Alon Zakai, der har lavet compileren Emscripten, har de nu alpha-kode klar, der kan dekode en h.264 komprimeret video i den seneste nightly build af Firefox.

Koden kan afvikle videoen i næsten 30 billeder i sekundet, og Bebenita skriver på sin blog, at der er masser af optimeringer at tage fat i. Blandt andet skal koden understøtte flere CPU-kerner, ligesom det skal understøtte hardware accelerering via WebGL.

Endnu er koden blot et proof of concept, men ønsker man selv at rode med det, så er det muligt ved at hente det på Github, eller forsøge i sin egen browser her.

Vil man ikke selv rode med det, så kan du se en video-demonstration inde hos yfrog.





Gå til bund
Gravatar #1 - memborg
2. nov. 2011 14:42
Sejt nok
Gravatar #2 - David Munch
2. nov. 2011 14:58
Hvorfor er det relevant, udover at være proof of concept?
Gravatar #3 - Henrik S
2. nov. 2011 15:02
Fordi Firefox ikke har H.264 video support. De støtter OGG og Theora. Så det her kunne banen vejen for at Video ikke skal fikses specielt for Firefox fremadrettet.

Og ellers er det bare lækkert :)
Gravatar #4 - Chucara
2. nov. 2011 15:02
"When all you have is a hammer, every problem is a nail" ?

Jeg misunder ham ikke hans job :)
Gravatar #5 - Holger_dk
2. nov. 2011 15:10
Hehe det er edderspark'me fedt...

Dog ser det ud til at det er Enscripten der er den virkelig imponerende
Gravatar #6 - grok
2. nov. 2011 15:20
David Munch (2) skrev:
Hvorfor er det relevant, udover at være proof of concept?

Fordi hvis du viser video direkte i browseren i stedet for at kalde et eksternt prog. undgår du nogle sikkerheds risici.
Brugeren får en bedre oplevelse hvis han ikke skal installere addons. Video kan vises på kiosk maskiner uden addons.
Der er sikkert flere fordele, men det var de første jeg kunne komme i tanke om.

Gravatar #7 - Trixxrlol
2. nov. 2011 15:37
Det er sku da FOR FEDT!
Jeg har i VIRKELIG lang tid, håbet på at man på et tidspunkt i fremtiden, kunne få lov til at se film i sin browseHNNNNNGHHHHHH.

Gravatar #8 - Abech
2. nov. 2011 15:39
Mega fedt!
Men jeg har ingen lyd på videoen. I hverken chrome eller Firefox?
Gravatar #9 - Montago.NET
2. nov. 2011 15:58
Abech (8) skrev:
Mega fedt!
Men jeg har ingen lyd på videoen. I hverken chrome eller Firefox?


Derer ikke lyd på videoerne.. Desuden er det kun h264 som bliver decoded= video..

Det er før set at man kan generere lyd i javascrip, så der skal nok komme en ac3/mp3 dekoder i javascript så man kan se mkv film :)
Gravatar #10 - tentakkelmonster
2. nov. 2011 18:02
Det er da ihvertifald en måde at få brugt noget CPU på. Javascript er ikke just assembler-performance.

Hvem skriver en H.264 dekoder i QBASIC? Så tager jeg hatten af! ;)
Gravatar #11 - rasmusssen
2. nov. 2011 18:09
nyhed skrev:
Koden kan afvikle videoen i næsten 30 billeder i sekundet

Chrome 15 afspillede det med
Average FPS (All / Steady) 56.56 57.06
Gravatar #12 - syska
2. nov. 2011 18:16
tentakkelmonster (10) skrev:
Det er da ihvertifald en måde at få brugt noget CPU på. Javascript er ikke just assembler-performance.


Ja og nej ...

JavaScirpt bliver vist optimeret ved brug af assembly, mener jeg i hvert fald de gør i Chrome.

mvh
Gravatar #13 - mrtnf
2. nov. 2011 18:33
Coooollll...
Gravatar #14 - el_barto
2. nov. 2011 20:11
Det er god kodning :)

Brugsværdien er dog begrænset uden lyd, og uden brug af de H.264 optimerede GPU'er vi efterhånden får serveret i enhver enhed der kan vise video.
Gravatar #15 - cyberdude
2. nov. 2011 22:34
Det er sgu imponerende uanset hvordan man vender og drejer det.

Dog lidt flamebait til FF.

Lidt sjovt det er mozilla programmører der står bag, med en mozilla video, og som #3 skriver så er det smart til FF da det ikke understøtter h.264. Når FF på min computer runder omkring 25 fps steady, og min Chrome runder 40fps steady på den samme video. Det viser måske klart og tydeligt at Chrome er _liiiidt_ foran med hensyn til deres JavaScript motor.
Hvis nu FF også fik shinet deres motor en tand så ville det nok være noget mere brugbart.

Jeg undre mig lidt over denne sætning
"der kan dekode en h.264 komprimeret video i den seneste nightly build af Firefox."
Jeg kører altså ikke Nightly builds, men kan sagtens kører denne demo?
Gravatar #16 - xenocrates
3. nov. 2011 00:58
#15 tror der menes at scriptet er indbygget i den seneste nightly build.
Gravatar #17 - Fyrsten
3. nov. 2011 06:57
Koden kan afvikle videoen i næsten 30 billeder i sekundet, o..

Det er vel hardwaren der afgør hvor mange billeder der kan afspilles i sec. ?
Gravatar #18 - zcuba
3. nov. 2011 07:55
#17

der antages vel her at brugere har uendelig regnekraft, og derfor er HW ikke en begrænsende faktor. Det eneste der begrænser her er den helt specielle codec struktur der siger:
-------
function show_next_frame();
{
//hemmelig kode

return frame_number;
}

while( last_frame != show_next_frame())
{
sleep( 1/30 second + 10 - Math.floor(Math.random()*21) );
}

show_last_frame();

--------

chrome snyder lidt ved at opdage det her hemmelige timing, og har en

if(FF sleep was x, make sleep = x / 2)
Gravatar #19 - CableCat
3. nov. 2011 08:27
ja ja, næsten 30fps med 360p. Fuld HD ved 1080p vil så kræve 9 gange mere regnekraft.
Gravatar #20 - tachylatus
3. nov. 2011 09:59
Med Canvas får jeg 35-40 fps i Chrome 15 med et CPU forbrug på ca. 25% (ca. 85% på én kerne).
Core i7-2620M 2.7 GHz med 4 logiske kerner.

Uden rendering omkring 50 fps.
Med Canvas w/ WebGL 45-50 fps, men billedet vises i sort-hvid.

Skalerer vi CPU forbruget ned så det svarer til 25 fps afspilning ender vi på 12-17%, afhængig af rendering.
Til sammenligning bruger en 360p YouTube video typisk 6-8% CPU.

Der er selvfølgelig en masse usikkerhed i målingerne, men det giver da et billede der siger ca. 2-3x mere CPU forbrug i forhold til YouTube.
Gravatar #21 - Abech
3. nov. 2011 13:07
Men når Javascript's hastighed afhænger af computerens regnekraft. Vil alle så ikke se videoen i forskellig hastighed? Det holder jo ikke at videoen afspiller vildt hurtigt hos nogle, og langsomt hos andre?
Gravatar #22 - el_barto
4. nov. 2011 12:10
Abech (21) skrev:
Men når Javascript's hastighed afhænger af computerens regnekraft. Vil alle så ikke se videoen i forskellig hastighed? Det holder jo ikke at videoen afspiller vildt hurtigt hos nogle, og langsomt hos andre?


Jo, så længe der ikke gøres brug af uret i scriptet. Men nu er det jo også bare et proof of concept.

Det ville være en smal sag at begrænse frameraten til f.eks. 24fps. At det indbyggede ur så langt fra er præcist nok til at vise judderfri video er nok en anden sag. Her skal en hardware-clock til (som. f.eks. i lydkort eller grafikkort).
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login