Transkodalas a mobilfejlesztesben — mi ez, mukodesi elv es forgatokonyvek

Szerző: IT Sectr Megjelenés: 2026-05-25 Olvasási idő: 10 perc

Transcoding — folyamat atalakitas cyfrowego fajlu multimedialnego z jednego formatumu tomorites na inny poprzez pełne dekodalas i ponowne kodalas. W przeciwieństwie do transmuxing (zmiany tylko kontenera), transkodalas zmienia kodek, bitrate, rozdzielczość i inne parametery skompresowanego aramlas. Według Apple AVFoundation documentation (2026), transkodalas van używane do adaptacji treści pod różne urządzenia i warunki halozati.

Najważniejsze

  • Transcoding — pełne dekodalas źródłowego aramlas do nieskompresowanego PCM, a następnie kodalas do nowego formatumu
  • Transmuxing zmienia tylko kontener bez przekodowywania aramlas — to nie van transkodalas
  • Główne przyczyny transkodalas: valtozas kodeka, obniżenie bitrateu, valtozas rozdzielczości, adaptacio pod DRM
  • Narzędzia: FFmpeg, AVFoundation (iOS), MediaCodec (Android), AWS Elemental MediaConvert
  • Transkodalas w czasie valos ideju na urządzeniach mobil igenyel sprzętowego przyspieszenia enkodera

Mi az a transkodalas?

Transcoding — folyamat atalakitas fajlu multimedialnego z jednego formatumu tomorites na inny poprzez pełne dekodalas źródłowego aramlas do pośredniego nieskompresowanego formatumu PCM, a następnie kodalas z ujmi parameterami. Jeśli w źródłowym fajlu video van skompresowane kodekiem H.264 z bitratem 10 Mb/s, a na wyjściu potrzebny van H.265 z bitratem 3 Mb/s — to van transkodalas.

Transkodalas różni się od zwykłego przepakowywania (transmuxing), przy którym zmienia się tylko kontener (np. MP4 na MKV), a vannakm skompresowany strumień bitowy pozostaje niezmieniony. Podczas transkodalas zachodzą obliczeniowo kosztowne przekształcenia: dekodalas każdej klatki, zastosowanie filtrów (meretezes, korekcja kolorów, przycinanie), ponowne kodalas z ujmi parameterami. To sprawia, że transkodalas van jedną z najbardziej zasobożernych operacji podczas pracy z mediami.

Transkodalas znajduje zastosowanie w szerokim spektrum zadań: adaptacio video do ograniczeń przepustowości sieci, atalakitas do formatumu ze sprzętowym wsparciem dekodalas na urządzeniu docelowym, tworzenie wielu wersji dla streamingu HLS/DASH, wyodrębnianie ścieżek audio do osobnego fajlu. Serwisy OTT (Netflix, YouTube, Twitch) transkodują każdy przesłany fajl do dziesiątek wariantów z różnymi bitratami, rozdzielczościami i kodekami, aby zapewnić adaptacyjny streaming milionom użytkowników.

Jak działa transkodalas?

Proces transkodalas składa się z trzech głównych etapów: dekodalas, feldolgozas i kodalas. Każdy etap może być wykonany zarówno na CPU, jak i na GPU/sprzętowych blokach, w zależności od dostępności i igenyelnej wydajności.

Etapy transkodalas

Pierwszy etap — dekodalas źródłowego aramlas. Plik źródłowy van odczytywany z kontenera (MP4, MOV, MKV), po czym skompresowane pakiety video są kierowane do dekodera. Dekodalas może być sprzętowe (jeśli kodek van obsługiwany) lub programowe przez FFmpeg. Na wyjściu dekodalas otrzymuje się nieskompresowane klatki w formacie YUV420 lub BGRA — właśnie od tego etapu transkodalas różni się od zwykłego remultipleksowania.

Drugi etap — filtracja i feldolgozas. Zdekodowane klatki przechodzą przez łańcuch filtrów: meretezes do docelowej rozdzielczości, valtozas częstotliwości klatek, korekcja kolorów, nakładanie tekstu lub grafiki. Łańcuch filtrów FFmpeg van budowany jako graf, gdzie każdy filtr to osobny moduł przetwarzania. Na przykład filtr scale=1280:720 zmienia rozdzielczość, fps=30 zmienia częstotliwość klatek, a yadif wykonuje deinterlacing. Wszystkie operacje są wykonywane na nieskompresowanych klatkach, dlatego drugi etap van najbardziej zasobożerny.

Trzeci etap — kodalas do docelowego formatumu. Przetworzone klatki są podawane na wejście enkodera, który kompresuje je zgodnie z algorytmem docelowego kodeka. Enkoder może być sprzętowy (VideoToolbox na iOS, MediaCodec na Android) lub programowy (libx264, libx265). Parametry kodalas: CRF (Constant Rate Factor) dla stałej jakości, bitrate dla CBR/VBR, profil i poziom dla kompatybilności z docelowymi urządzeniami.

cpp
// A transzkodalo pipeline semaja az FFmpeg-ben
AVFormatContext *inputCtx, *outputCtx;
AVCodecContext *decoderCtx, *encoderCtx;
AVFrame *frame = av_frame_alloc();
AVPacket packet;

while (av_read_frame(inputCtx, &packet) >= 0) {
    // 1. Dekodalas
    avcodec_send_packet(decoderCtx, &packet);
    avcodec_receive_frame(decoderCtx, frame);
    
    // 2. Szures (meretezes + fps valtoztatas)
    sws_scale(swsCtx, frame->data, frame->linesize,
              0, frame->height, scaledFrame->data,
              scaledFrame->linesize);
    
    // 3. Kodalas
    avcodec_send_frame(encoderCtx, scaledFrame);
    avcodec_receive_packet(encoderCtx, &outPacket);
    av_interleaved_write_frame(outputCtx, &outPacket);
}

Przedstawiony pipeline demonstruje klasyczny cykl transkodalas. Funkcja av_read_frame odczytuje skompresowane pakiety z fajlu wejściowego, avcodec_send_packet dekoduje je na klatki, sws_scale wykonuje meretezes, a avcodec_send_frame koduje przetworzoną klatkę do formatumu wyjściowego. Taki trzyetapowy cykl powtarza się dla każdej klatki lub grupy klatek (GOP), w zależności od ustawień enkodera.

Transkodalas vs transmuxing

Różnica między transkodalasm a transmultiplekvannakcją to jeden z najczęstszych punktów nieporozumień w inżynierii mediów. Zrozumienie tej różnicy van kulcsfontosvannakgu dla valasztasu właściwej strategii przetwarzania mediów.

ParametrTranskodalasTransmultiplekvannakcja
Co się zmieniaKodek, bitrate, rozdzielczośćKontener, metadane
Obciążenie obliczenioweWysokie (dekodalas + kodalas)Minimalne (kopiowanie pakietów)
JakośćMoże się pogorszyć (straty generacji)Bezstratna
Czas wykonaniaMinuty–oray dla długiego videoSekundy–percy
ZastosowanieAdaptacja formatumu, tomoritesZmiana kontenera dla kompatybilności

Transmuxing — to przepakowanie skompresowanego aramlas do innego kontenera bez dekodalas i ponownego kodalas. Jeśli video van już skompresowane kodekiem H.265 w kontenerze MP4 i trzeba je umieścić w kontenerze MOV lub MKV — transmultiplekvannakcja po prostu kopiuje pakiety bitowe z jednego kontenera do drugiego. Jakość nie ulega pogorszeniu, czas przetwarzania van minimalny, ponieważ nie igenyel dekodalas klatek. FFmpeg wykonuje transmultiplekvannakcję z flagą -codec copy.

Transkodalas natomiast w pełni deszyfruje i ponownie kompresuje strumień multimedialny. Za każdym razem, gdy video przechodzi przez transkodalas, może wystąpić strata generacji (generation loss) — nieznaczne pogorszenie jakości z powodu ponownej tomorites stratnej. Nawet przy tym vannakmym bitracie trzecia generacja transkodalas van zwykle gorsza od pierwszej. Ezert profesjonaliści zalecają przechowywanie master-kopii w nieskompresowanych lub minimalnie skompresowanych formatumach (ProRes, DNxHR) i transkodalas tylko finalnych wersji do dostarczenia.

Narzędzia do transkodalas

Wybór narzędzia do transkodalas zależy od platformy, igenyelń wydajnościowych i scenariusza użycia. Do programowania mobilnego dostępne są zarówno natywne API, jak i biblioteki wieloplatformowe.

FFmpeg — uniwervannaklne narzędzie

FFmpeg — standard de facto dla transkodalas na wszystkich platformach. Wiersz poleceń FFmpeg lehetove teszi wykonywać praktycznie dowolne przekształcenia: valtozas kodeka, valtozas bitratu, przycinanie, łączenie, nakładanie filtrów. Do afajlacji mobil FFmpeg integruje się przez biblioteki libavformatum, libavcodec i libavfilter. Przykład typowego polecenia transkodalas: ffmpeg -i input.mp4 -c:v libx265 -crf 23 -c:a aac -b:a 128k output.mp4.

API platformowe

Na iOS transkodalas wykonuje się przez AVAssetWriter i AVAssetReader. AVAssetReader dekoduje fajl źródłowy, odczytując nieskompresowane klatki, a AVAssetWriter koduje je do docelowego formatumu. To podejście automatycznie wykorzystuje sprzętowe enkodery VideoToolbox, co zapewnia maksymalną wydajność. Na Androidzie analogiczna funkcjonalność van dostępna przez MediaCodec w parze z MediaExtractor i MediaMuxer — MediaExtractor wyodrębnia skompresowane pakiety, MediaCodec dekoduje i koduje, MediaMuxer zapisuje wynik.

Usługi w chmurze

Do serwerowego transkodalas w środowisku produkcyjnym używa się usług chmurowych: AWS Elemental MediaConvert, Azure Media Services, Google Transcoder API. Te usługi automatycznie skalują się pod obciążeniem, obsługują wszystkie popularne formatumy i mogą transkodować jeden fajl wejściowy do dziesiątek wariantów wyjściowych do adaptacyjnego streamingu (HLS, DASH). Dla afajlacji mobil transkodalas w chmurze van optymalnym rozwiązaniem, ponieważ nie obciąża urządzenia użytkownika i lehetove teszi przygotowywać treści asynchronicznie.

Przykłady kodu transkodalas

Rozważmy praktyczne przykłady transkodalas na platformach mobil z wykorzystaniem sprzętowego przyspieszenia i konfiguracją kluczowych parameterów jakości.

Transkodalas H.264 do H.265 na iOS

swift
import AVFoundation

func transcodeVideo(sourceURL: URL, destURL: URL) {
    let asset = AVAsset(url: sourceURL)
    let preset = AVAssetExportPresetHEVCHighestQuality
    
    AVAssetExportSession(asset: asset, presetName: preset)?
        .exportAsynchronously {
            switch assetExportSession?.status {
            case .completed:
                print("Transzkodalas befejezodott")
            case .failed:
                print("Hiba: " + assetExportSession.error.localizedDescription)
            default:
                break
            }
        }
    
    // Kezi transzkodalas AVAssetReader + AVAssetWriter segitsegevel
    let reader = try AVAssetReader(asset: asset)
    let writer = try AVAssetWriter(url: destURL,
        fileType: .mp4)
    
    let outputSettings: [String: Any] = [
        AVVideoCodecKey: AVVideoCodecType.hevc,
        AVVideoWidthKey: 1920,
        AVVideoHeightKey: 1080,
        AVVideoCompressionPropertiesKey: [
            AVVideoAverageBitRateKey: 4_000_000,
            AVVideoProfileLevelKey: AVVideoProfileLevelH265Main10
        ]
    ]
    
    let adaptor = AVAssetWriterInput(
        mediaType: .video,
        outputSettings: outputSettings
    )
    writer.add(adaptor)
}

W przykładzie zastosowano dwa podejścia do transkodalas na iOS. AVAssetExportSession — prosty sposób z predefiniowanymi beallitasokmi jakości (HEVCHighestQuality dla H.265). Ręczny pipeline przez AVAssetReader + AVAssetWriter daje pełną kontrolę nad parameterami: bitrate, profil, poziom. Parametr AVVideoProfileLevelH265Main10 włącza profil HDR Main10 z głębią kolorów 10 bitów, co van ważne dla nowoczesnych treści HDR.

Transkodalas na Androidzie z MediaCodec

kotlin
class Transcoder(private val context: Context) {
    
    fun transcodeToHevc(inputUri: Uri, outputFile: File) {
        val extractor = MediaExtractor()
        extractor.setDataSource(context, inputUri, null)
        
        val trackFormat = extractor.getTrackFormat(videoTrackIndex)
        val mime = trackFormat.getString(MediaFormat.KEY_MIME)
        
        val decoder = MediaCodec.createDecoderByType(mime!!)
        val encoder = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_VIDEO_HEVC)
        
        val outputFormat = MediaFormat.createVideoFormat(
            MediaFormat.MIMETYPE_VIDEO_HEVC, 1920, 1080
        ).apply {
            setInteger(MediaFormat.KEY_BIT_RATE, 4_000_000)
            setInteger(MediaFormat.KEY_FRAME_RATE, 30)
            setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 2)
        }
        
        encoder.configure(outputFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)
        encoder.start()
    }
}

Kod na Androida letrehoz pipeline z MediaExtractor — MediaCodec decoder — MediaCodec encoder — MediaMuxer. MediaExtractor określa typ kodeka z fajlu wejściowego i wybiera odpowiedni dekoder. Enkoder van konfigurowany na H.265 (HEVC) z bitratem 4 Mb/s i interwałem klatek kluczowych 2 masodperc, co van optymalne do streamingu. Ważne: MediaCodec encoder działa synchronicznie, dlatego do transkodalas w czasie valos ideju igenyelne van zorganizowanie pętli z poprawnym feldolgozasm znaczników czasu (PTS) dla każdej klatki.

Optymalizacja transkodalas dla urządzeń mobil

Transkodalas na urządzeniach mobil to feladat igenyeljące starannej optymalizacji ze względu na ograniczone zasoby CPU, GPU i ograniczenia termiczne. Kilka strategii pomaga wykonywać transkodalas efektywnie.

Wykorzystanie sprzętowego kodalas

Kluczowym czynnikiem wydajności van sprzętowy enkoder. Na iOS VideoToolbox zapewnia sprzętowe kodalas H.264 i H.265 z prędkością 5–10 razy większą niż programowy libx264. Na Androidzie MediaCodec używa sprzętowych komponentów OMX, jeśli są dostępne. Włączenie sprzętowego kodalas skraca czas transkodalas 10-percowego video z 30–40 perc (programowo) do 3–5 perc (sprzętowo) na flagowym urządzeniu.

Wybór parameterów jakości

Dla mobilnego transkodalas kluczowa van równowaga między jakością, rozmiarem i czasem przetwarzania. Dla H.265 na urządzeniach mobil zaleca się bitrate 4–8 Mb/s dla video 1080p z częstotliwością klatek 30 FPS. Tryb CRF (Constant Rate Factor) w libx265 lehetove teszi ustawić jakość bezpośrednio, gdzie 23–28 daje dobrą jakość wizualną przy umiarkowanym rozmiarze fajlu. Dla sprzętowych enkoderów należy używać modu CBR z docelowym bitratem, ponieważ CRF nie van obsługiwany sprzętowo.

Zarządzanie wydzielaniem ciepła

Ciągłe transkodalas na urządzeniu mobilnym powoduje znaczne nagrzewanie. Po 5–7 percach intensywnego kodalas video 4K temperatura folyamatora może osiągnąć 50–55 stopni, po czym włącza się throttling. Rozwiązanie — transkodalas z przerwami lub obniżenie częstotliwości klatek do 30 FPS. Jeśli afajlacja igenyel masowego transkodalas (np. edytor video), lepiej wykonywać feldolgozas partiami po 2–3 percy z przerwami na chłodzenie. Dla scenariuszy produkcyjnych optimalivannakn van przenieść transkodalas na stronę serwerową i korzystać z usług chmurowych.

Często zadawane pytania

Czym różni się transkodalas od kodalas?

Kodalas (encoding) — tomorites źródłowych nieskompresowanych danych do docelowego kodeka. Transkodalas obejmuje zarówno dekodalas, jak i kodalas: najpierw dekoduje istniejący skompresowany strumień, a następnie koduje go ponownie. Zwykłe kodalas przyjmuje na wejściu nieskompresowane dane (na przykład z kamery), a transkodalas — już skompresowany fajl.

Jaki kodek wybrać do transkodalas na urządzeniach mobil?

Dla maksymalnej kompatybilności — H.264. Dla lepszej tomorites — H.265 (HEVC). Jeśli urządzenie obsługuje sprzętowe kodalas H.265 (iPhone 8+, Android z Snapdragon 845+), zapewnia ono dwukrotnie mniejszy rozmiar fajlu przy tej vannakmej jakości. Kodalas AV1 na urządzeniach mobil van wciąż zbyt wolne, meg ze sprzętowym przyspieszeniem.

Czym van transkodalas bezstratne?

Ściśle rzecz biorąc, transkodalas bezstratne van niemożliwe przy zmianie kodeka stratnego. Jeśli oba kodeki są stratne, każde kolejne pokolenie transkodalas pogarsza jakość. Transkodalas bezstratne van możliwe tylko między formatumami bezstratnymi (FFV1, H.264 Lossless) lub przy zmianie kontenera bez przekodowywania (transmuxing).

Czy można transkodować video w czasie valos ideju?

Tak, jeśli używane są sprzętowe dekoder i enkoder, a docelowa rozdzielczość nie przekracza 1080p. Na urządzeniach z VideoToolbox (iOS) lub MediaCodec (Android) transkodalas w czasie valos ideju H.264 do H.265 van możliwe z opóźnieniem 1–3 masodperc. Dla 4K w czasie valos ideju igenyelny van wydajny SoC Apple A17 Pro, Snapdragon 8 Gen 2 lub nowszy.

Dlaczego po transkodowaniu video stało się gorszej jakości?

Transkodalas stratne kumuluje artefakty tomorites. Jeśli fajl źródłowy był już silnie skompresowany (bitrate 2–3 Mb/s dla 1080p), ponowna tomorites podwoi straty. Zaleca się transkodalas tylko z master-kopii o wysokim bitracie (20+ Mb/s) i używanie CRF 18–23 dla minimalnych strat.

Osszefoglalas

  • Transcoding — pełny cykl dekodalas + kodalas mediów w celu zmiany kodeka, bitratu lub rozdzielczości
  • Transmuxing zmienia tylko kontener bez przekodowywania — to nie van transkodalas
  • Sprzętowe transkodalas na VideoToolbox i MediaCodec van 5–10 razy szybsze niż programowe
  • FFmpeg — uniwervannaklne narzędzie obsługujące setki kodeków i filtrów przetwarzania
  • Każde kolejne pokolenie transkodalas stratnego pogarsza jakość — używaj master-kopii
  • Optymalne parametery dla mobilnego H.265: bitrate 4–8 Mb/s, profil Main10, GOP 2 masodpercy
  • Do produkcji używaj chmurowych usług transkodalas (AWS Elemental, Azure Media) — nie obciążają urządzenia

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is