Archiwum kategorii 'Flash'

15/10/2009Rzeczywistość rozszerzona szerzej

Lepiej późno niż wcale… moja prezentacja z konferencji InternetBeta2009 uzupełniona o przykłady.

dodajdo

17/09/2009Dostępność kamer internetowych w Polsce

Od dłuższego czasu przeczesuję niemal każdy zakątek sieci, żeby znaleźć informacje na temat tego, ile osób posiada kamery internetowe. Jedyne dane, do jakich udało mi się dotrzeć informują, że w 2006r. osób takich było 9% (Mintel report) a w 2007r. około 13% (raport Logitech: http://files.shareholder.com/downloads/LOGI/0×0xS1193125-07-123026/1032975/filing.pdf). Ten brak informacji zmobilizował mnie do przeprowadzenia własnych badań. Po napisaniu prostego skryptu AS3, umieściliśmy go na kilku hostowanych przez Netizens stronach i przez 24h zbieraliśmy dane. Przy próbie prawie 11tys. unikalnych adresów IP okazało się, że kamery internetowe posiada 30,73% badanych.

Dostepność kamer internetowych w Polsce

Przyznam, że wyniki trochę mnie zaskoczyły… zresztą nie tylko mnie, bo obstawiało kilka osób i wszystkie celowały w okolice 10 -20%. W czasie badania można było zauważyć, że odsetek osób posiadających kamery był znacznie większy w godzinach wieczornych niż porannych. Wynika stąd, że komputery służbowe są mniej multimedialne. ;)

Oczywiście wyniki te mogą różnić się od rzeczywistych, gdyż badanie wykonane było w bardzo krótkim okresie czasu, w zaledwie kilu serwisach (każdy serwis ma swój określony target, np. ludzie młodzi, klienci biznesowi) i wymagało posiadania flash playera w wersji 9.0 lub nowszej (około 98% komputerów wg Adobe). Mimo to postanowiłem podzielić się tą wiedzą.

Dziękuję za pomoc w przeprowadzeniu badania Mariuszowi Górskiemu, który był odpowiedzialny za php/mysql i zestawienie wyników.

dodajdo

07/01/2009Optymalizacja H.264

Począwszy od wersji 9.0.r115 Flash Player ma wbudowaną obsługę formatu video H.264. W chwili obecnej taką lub nowszą wersję playera posiada 90% internautów. Czas więc najwyższy przyjrzeć się temu formatowi bliżej i postarać się wykorzystać jak najbardziej jego możliwości. Nie jest to zadanie łatwe, gdyż liczba parametrów jakie oferuje może przyprawić o ból głowy. Na początek trochę teorii. Poniżej schemat blokowy kodeka H.264:

Schemat blokowy kodeka H.264

Schemat blokowy kodeka H.264

Ok, darujmy sobie teorię. ;)  Oto lista podstawowych parametrów z ich krótkim opisem oraz optymalnymi wartościami (nazwy parametrów mogą być różne w różnych programach).

  • Profile (określa technikę i strategię używaną przez koder oraz dekoder, co wpływa na wymaganą moc obliczeniową): High
  • Level (określa maksymalną rozdzielczość, wymaganą pamięć, lokalny bitrate, oraz poziom buforowania): 4.1 (5.1 dla Full HD)
  • Constant Bitrate – korzystne przy streamingu
  • Variable Bitrate – korzystne przy progressive download
  • Multi-pass encoding – kiedy tylko to możliwe używamy 2-pass encoding
  • IDR Interval (odległość pomiędzy klatkami kluczowymi – key frames distance): 50 – 250
  • Dynamic IDR positioning (dynamiczne umieszczanie klatek kluczowych zdeterminowane detekcją scen): 40 – 50
  • B-frames (lub B-pictures – klatki interpolowane na podstawie klatek poprzednich oraz następnych; nie są referencją dla innych klatek; wartość parametru określa ich maksymalną występującą po sobie ilość; kiedy koder to umożliwia, rekomenduje się użycie “auto decision”): 1 – 3
  • B-pyramid (umożliwia kiedy to konieczne użycie  B-frames jako klatek referencyjnych): włączyć jeżeli jest dostępne
  • Entropy coding (kodowanie entropijne binarnego strumienia obrazu): jeżeli to możliwe używamy CABAC zamiast CAVLC
  • Search mode (technika szukania wukorzystywana w estymacji ruchu): hexagonal
  • Search accuracy: quarter-pixel
  • Number of reference frames: 2 – 5
  • Intra frame prediction: należy używać Hadamard transform
  • Rate distortion optimization (optymalizuje estymację ruchu, jednak może znaczenie spowolnić przetwarzanie i niewiele poprawić jakość): complex
  • De-blocking (filtr – jeden z głównych powodów wysokiej wydajności kodeka H.264; nigdy nie należy go wyłączać): pozostawić wartości standardowe

Zastosowanie powyższych parametrów powoduje jednak znaczne wydłużenie czasu kodowania (nawet kilkukrotnie w stosunku do czasu trwania filmu). Oto lista parametrów oraz wartości jakie można im przypisać, żeby skrócić czas i jednocześnie nie stracić zbyt wiele na jakości:

  • reference frames: 2
  • zablokować B-pyramid
  • zmniejszyć  search range (np. do 16 lub do simple) oraz search mode
  • zmniejszyć search accuracy do half-pixel
  • zablokować rate distortion optimizations (RDO)
  • rozważyć zmniejszenie rozdzielczości lub zastosować pre-filtering

W takim razie do dzieła. Pod nóż poszły trzy programy: MediaCoder, MainConcept Reference, Adobe Media Encoder CS4 oraz 42 sekundowy film w jakości Full HD (1080i). Żeby dostrzec pogorszenie jakości, narzuciłem dość rygorystyczne warunki: docelowa rozdzielczość 720×400 oraz bitrate video 300kbps.

Niestety w MediaConcept Reference nie udało mi się wyprodukować filmu z dźwiękiem w formacie AAC, więc odpadł w zasadzie w przedbiegach. Nie jest to jednak dużą stratą, gdyż Adobe Media Encoder opiera się na kodeku opracowanym właśnie przez firmę MediaConcept. Tak więc poniżej porównanie klipów pochodzących z dwóch pozostałych programów.

Przykład 1: Media Coder
Przykład 2: Adobe Media Encoder CS4

MediaCoder wygrywa w tej konkurencji, choć oba programy wymagają przetestowania kompresji na filmach o innym tempie akcji (częste zmiany scen, dużo ruchu i szczegółów). Jakość obu filmów jest jednak i tak bardzo zadowalająca. Biorąc pod uwagę poprzedni kodek (On2vp6) otrzymujemy o wiele lepszą jakość przy niższym bitrate i cztery razy większej rozdzielczości (biorąc pod uwagę powierzchnię).

Kilka porad nie do końca związanych z kodekiem:

  • Wybierz odpowiedni bitrate do zadanej rozdzielczości; oto zalecane wartości:
    -  1080p: Full HD (1920×1080) 2 – 3 Mbps
    - 720p HD (1280×720): 1.5 – 2 Mbps
    - 576p HQ (1024×576): 1 – 1.2 Mbps
    - 480p SD (848×480): 0.8 – 1 Mbps
    - 360p MD (640×360): 0.6 – 0.8 Mbps
  • Rozważ kodowanie w rozdzielczości anamorficznej (np. 1440 x 1080 zamiast 1920 x 1080 i późniejsze rozciągnięcie obrazu we flashu – wg standardu dalej będzie to obraz Full HD)
  • Odszum video przed zakodowaniem (”temporal denoise filter”, “3D denoise filter”). Skalowanie również działa jako filtr odszumiający, o ile jest to skalowanie bilinear lub bicubic.
  • Jeżeli film źródłowy jest nagrany z przeplotem i nie posiadasz zaawansowanego programu do jego usuwania, spróbuj zakodować obraz w dwukrotnie niższej rozdzielczości pionowej i rozciągnij go we Flashu.
  • Jeżeli rozciągasz film we Flashu używaj video.smoothing=true. Pamiętaj, aby wyłączyć smoothing przy wchodzeniu w tryb fullscreen, aby uaktywnić akcelerację sprzętową.
  • Jeżeli kodujesz w niskiej jakości, można użyć we Flashu prostego sharpen filter w celu wyostrzenia szczegółów.

Na koniec jeszcze dwa przykłady przygotowane za pomocą MediaCoder pokazujące możliwości formatu H.264. Pierwszy z nich to fragment filmu w rozdzielczości HD (720p: 1280 x 720) i jakości 1Mbps: http://woszkowski.com/h264/pb-hd-1000.html. Drugi to film w rozdzielczości Full HD (1080p: 1920 x 1080) i jakości 1.5Mbps: http://woszkowski.com/h264/pb-fhd-1500.html. W obu przypadkach polecam przełączenie do trybu fullscreen przyciskiem w lewym górnym rogu filmu.

Na podstawie sesji “Encoding Video for the Highest Quality and Performance”, Fabio Sonnati, Adobe MAX 2008, Milan.

dodajdo