Kodowanie wideo (encoding) to proces kompresji cyfrowego sygnału wideo do formatu nadającego się do przechowywania i przesyłania przez sieć przy minimalnych stratach jakości. Bez kodowania jedna minuta nieskompresowanego wideo w rozdzielczości 4K zajmuje około 30 GB, co uniemożliwia transmisję przez internet. Według raportu Sandvine Global Internet Phenomena (2025), wideo stanowi 65% całego ruchu internetowego, a kodowanie jest kluczową technologią, która to umożliwia.
Na skrót
Kodowanie wideo (encoding) to proces przekształcania nieskompresowanego sygnału wideo na format cyfrowy z wykorzystaniem algorytmów kompresji. Algorytmy zaimplementowane w kodekach wideo usuwają nadmiarowe informacje zarówno w dziedzinie przestrzennej (wewnątrz pojedynczej klatki), jak i czasowej (pomiędzy kolejnymi klatkami).
Nieskompresowane wideo to ciąg klatek, z których każda przechowywana jest jako tablica pikseli w formacie RGB lub YUV. Bez kompresji jedna sekunda wideo 1080p przy 30 FPS wymaga około 1,5 GB pamięci. Kodek H.264 kompresuje ten strumień do 3–5 Mb/s, co jest 2500 razy mniejsze od początkowej objętości.
Kodeki wideo wykorzystują dwa typy kompresji: wewnątrzklatkową (intra-frame) i międzyklatkową (inter-frame). Kompresja intra-frame stosowana jest do każdej klatki niezależnie, wykorzystując algorytmy podobne do JPEG: dyskretną transformację kosinusową (DCT), kwantyzację i kodowanie entropijne.
Kompresja inter-frame analizuje różnicę pomiędzy kolejnymi klatkami i koduje tylko zmiany. Jeżeli tło jest statyczne, kodek przesyła pełną klatkę tylko raz (I-frame), a następnie tylko różnicę (P- i B-ramki), co znacząco zmniejsza ilość danych dla scen z małą dynamiką.
Wybrór kodeka wideo określa stosunek jakości do rozmiaru pliku, zgodność z urządzeniami i opłaty licencyjne. Na rynku aplikacji mobilnych dominują cztery główne kodeki: H.264 (AVC), H.265 (HEVC), VP9 i AV1.
| Kodek | Standard | Rok | Kompresja vs H.264 | Licencjonowanie |
|---|---|---|---|---|
| H.264/AVC | MPEG-4 Part 10 | 2003 | 1x (podstawowy) | Płatny (MPEG LA) |
| H.265/HEVC | MPEG-H Part 2 | 2013 | 40–50% wydajniejszy | Płatny (dwa pule) |
| VP9 | 2013 | 30–40% wydajniejszy | Bezpłatny | |
| AV1 | AOM | 2018 | 50–60% wydajniejszy | Bezpłatny (Royalty-free) |
H.264 (AVC — Advanced Video Coding) pozostaje najbardziej zgodnym kodekiem wideo: jest obsługiwany przez wszystkie urządzenia mobilne, przeglądarki i Smart TV od 2005 roku. Sprzętowe przyspieszenie dekodowania H.264 jest dostępne nawet w budżetowych urządzeniach, co czyni go idealnym do uniwersalnego strumienia.
Gówną wadą H.264 jest stosunkowo niska wydajność kompresji w porównaniu z nowoczesnymi kodekami. Przy tym samym bitracie H.265 i AV1 zapewniają wyraźnie wyższą jakość, co jest szczególnie ważne dla trésci HDR i 4K.
H.265 (HEVC — High Efficiency Video Coding) zapewnia 40–50% lepszą kompresję niż H.264 przy tej samej jakości wizualnej. Osiaga się to dzięki bardziej elastycznemu podziałowi klatki na bloki (CTU do 64×64 pikseli zamiast 16×16) i ulepszonym algorytmom przewidywania ruchu.
HEVC jest obsługiwany na wszystkich urządzeniach Apple (począwszy od iPhone 6), na Androidzie (od wersji 5.0 ze sprzętowym dekodowaniem) i na większości Smart TV. Opłaty licencyjne HEVC są wyższe niż H.264 i zarządzane przez dwa pule patentowe, co utrudnia użycie prawne.
AV1 — kodek wideo opracowany przez Alliance for Open Media (AOM), konsorcjum pod przewodnictwem Google, Netflix, Amazon, Intel i Mozilla. AV1 zapewnia 50–60% lepszą kompresję niż H.264 i jest całkowicie wolny od opłat licencyjnych, co czyni go atrakcyjnym dla serwisów streamingowych.
Gówną wadą AV1 jest wysoka złożoność obliczeniowa kodowania. Kodowanie AV1 może być 5–10 razy wolniejsze niż H.264 na tym samym sprzęcie, chociaż sprzętowe dekodowanie pojawia się już na urządzeniach z lat 2024–2025 (Snapdragon 8 Gen 3, Apple A17 Pro).
Kodeki audio w aplikacjach mobilnych są nie mniej ważne niż kodeki wideo. Do streamingu wideo wymagane jest audio o minimalnym opóźnieniu, wysokiej jakości i zgodności z kontenerami MP4 i WebM. Trzy główne kodeki audio pokrywają 99% mobilnych aplikacji streamingowych.
AAC (Advanced Audio Coding) — następca MP3, opracowany przez MPEG w 1997 roku, stał się standardowym kodekiem audio dla iTunes, YouTube i Androida. AAC zapewnia tę samą jakość co MP3 przy 30% niższym bitracie i obsługuje dźwięk wielokanałowy do 7.1.
Dla aplikacji mobilnych zaleca się AAC-LC przy bitracie 128–192 kb/s dla stereo i AAC-HE dla niskich bitratów 32–64 kb/s. Sprzętowe dekodowanie AAC jest dostępne na wszystkich nowoczesnych urządzeniach, co minimalizuje pobór energii.
Opus — otwarty kodek audio od IETF (RFC 6716), zapewniający najlepszą jakość spośród wszystkich kodeków audio przy bitratach od 6 do 510 kb/s. Opus łączy SILK (algorytm dla mowy) i CELT (dla muzyki) i automatycznie przełącza tryby w zależności od treści.
Opus jest używany w WebRTC do połac�zeń wideo, w aplikacjach Spotify i Discord, i jest obsługiwany w HLS od iOS 11 i Androida 5.0. Niskie opóźnienie Opusa (5–26 ms wobec 40–100 ms u AAC) czyni go preferowanym wyborem dla transmisji na żywo i wideokonferencji.
Parametry kodowania określają końcowy rozmiar pliku, jakość wideo i zgodność z urządzeniami. Programista aplikacji mobilnej musi dobrać optymalne ustawienia dla każdego typu treści: filmy, transmisje sportowe, treść użytkowników.
Bitrate — ilość bitów użytych do kodowania jednej sekundy wideo. Rozróżniamy CBR (Constant Bitrate) — stały bitrate dla transmisji na żywo, VBR (Variable Bitrate) — zmienny z docelową jakością do przechowywania archiwalnego i ABR (Average Bitrate) — średni do streamingu.
| Rozdzielczość | H.264 (zalecany) | H.265/HEVC | AV1 |
|---|---|---|---|
| 360p | 400–800 kb/s | 250–500 kb/s | 200–400 kb/s |
| 720p | 1,5–4 Mb/s | 1–2,5 Mb/s | 0,8–2 Mb/s |
| 1080p | 3–8 Mb/s | 2–5 Mb/s | 1,5–4 Mb/s |
| 4K (2160p) | 15–40 Mb/s | 10–25 Mb/s | 8–20 Mb/s |
CRF (Constant Rate Factor) — parametr kodowania w x264 i x265, określający docelową jakość zamiast stałego bitratu. Skala CRF od 0 (lossless) do 51 (najgorsza jakość), gdzie 18–28 to zakres roboczy. Dla aplikacji mobilnych zaleca się CRF 23 dla x264 i CRF 25 dla x265.
CRF 18–20 zapewnia wysoką jakość dla treści prezentacyjnych i ogladania offline. CRF 24–28 nadaje się do streamingu i treści użytkowników, gdzie rozmiar pliku jest ważniejszy niż absolutna jakość.
Standard H.264 określa profile (Baseline, Main, High) i poziomy (Level 1–5.2), które ograniczają maksymalne parametry wideo. Baseline Profile jest zgodny ze wszystkimi urządzeniami, ale nie obsługuje B-klatek. High Profile zapewnia maksymalną jakość i jest używany dla treści 1080p.
Dla streamingu 4K wymagany jest Level 5.1 i wyższy, co jest obsługiwane przez większość urządzeń mobilnych od 2018 roku. Poziom kodeka określa maksymalną rozdzielczość, bitrate i rozmiar bufora, gwarantując poprawne dekodowanie na wszystkich certyfikowanych urządzeniach.
Kodowanie do streamingu różni się od kodowania archiwalnego koniecznością tworzenia kilku wariantów jakości (ABR ladder) i optymalizacją pod kątem transmisji sieciowej. Dostawcy treści używają transkodowania w czasie rzeczywistym lub wstępnego kodowania dla VOD.
Typowy zestaw ABR dla aplikacji mobilnych obejmuje 4–6 wariantów: od 144p (200 kb/s) dla słabych sieci do 1080p (8 Mb/s) dla Wi-Fi. Zalecane rozdzielczości: 144p, 240p, 360p, 480p, 720p, 1080p. Dla treści 4K dodaje się 1440p i 2160p.
val mediaCodec = MediaCodec.createEncoderByType(
MediaFormat.MIMETYPE_VIDEO_AVC
)
val format = MediaFormat.createVideoFormat(
MediaFormat.MIMETYPE_VIDEO_AVC,
1280, 720
).apply {
setInteger(MediaFormat.KEY_BIT_RATE, 3_000_000)
setInteger(MediaFormat.KEY_FRAME_RATE, 30)
setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 2)
setInteger(MediaFormat.KEY_PROFILE,
MediaCodecInfo.CodecProfileLevel.AVCProfileHigh)
setInteger(MediaFormat.KEY_LEVEL,
MediaCodecInfo.CodecProfileLevel.AVCLevel31)
}
mediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)
Dla transmisji na żywo szczególnie ważne jest niskie opóźnienie. Ustawienia kodowania powinny minimalizować opóźnienie wejścia/wyjścia kodeka: zaleca się rozmiar GOP 1–2 sekundy (co 30–60 klatek), B-klatki wyłączone lub zminimalizowane, dla H.264 używa się Baseline Profile.
Nowoczesne protokoły dla niskiego opóźnienia — LL-HLS i CMAF-Low Latency — wymagają fragmentarycznego kodowania z segmentami 1–2 sekund i możliwością częściowego ładowania (Partial Segments). Kodek musi obsługiwać moof-box w każdym segmencie dla fragmentarycznego MP4.
Często zadawane pytania
Kodowanie wideo — proces kompresji cyfrowego sygnału wideo za pomocą kodeków w celu zmniejszenia ilości danych. W aplikacjach mobilnych kodowanie pozwala przesyłać i przechowywać wideo, zmniejszając rozmiar setki razy bez zauważalnej utraty jakości na ekranie urządzenia.
H.264 zapewnia maksymalną zgodność ze starymi urządzeniami, a H.265 jest 40–50% wydajniejszy przy tej samej jakości. Dla treści 1080p i niżej wystarczy H.264, dla 4K zaleca się H.265 lub AV1, jeżeli urządzenie je obsługuje.
Bitrate — ilość danych na sekundę wideo. Dla 1080p optymalny bitrate to 3–8 Mb/s dla H.264, 2–5 Mb/s dla H.265. Wybór zależy od treści: dynamiczne sceny (sport) wymagają wyższego bitratu, statyczne (wywiady) — niższego.
VP9 — poprzednik AV1 od Google, zapewniający kompresję na poziomie H.265. AV1 kompresuje 20–30% wydajniej niż VP9, ale wymaga 5–10 razy więcej zasobów do kodowania. VP9 jest lepszy dla YouTube, AV1 — dla Netflix i nowoczesnych serwisów streamingowych.
Do transmisji na żywo użyj H.264 Baseline Profile z GOP 1–2 sekund, bez B-klatek, bitrate 2–4 Mb/s dla 1080p. Włącz fragmentaryczny MP4 (CMAF) dla LL-HLS i użyj kodowania sprzętowego przez MediaCodec lub VideoToolbox.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również