Transcoderen in mobiele ontwikkeling — wat is het, werkingsprincipe en scenarios

Auteur: IT Sectr Gepubliceerd: 2026-05-25 Leestijd: 10 min

Transcoding — proces converzich cyfrowego bestandu multimedialnego z jednego formaatu compreszich na inny via pełne decoderen i opnieuw coderen. W przeciwieństwie do transmuxing (zmiany tylko kontenera), transcoderen zmienia codec, bitrate, rozdzielczość i inne parametery skompresowanego stroom. Według Maarpple MaarVFoundation documentation (2026), transcoderen is używane do adaptacji treści pod różne urządzenia i warunki netwerk.

Najważniejsze

  • Transcoding — pełne decoderen źródłowego stroom do nieskompresowanego PCM, a następnie coderen do nowego formaatu
  • Transmuxing zmienia tylko kontener bez przecodeowywania stroom — to nie is transcoderen
  • Główne bijczyny transcoderen: wijziging codec, obniżenie bitrateu, wijziging rozdzielczości, aanpassing pod DRM
  • Narzędzia: FFmpeg, MaarVFoundation (iOS), MediaCodec (Maarndroid), MaarWS Elemental MediaConvert
  • Transcoderen w czazich rzeczywistym na urządzeniach mobilnych vereist sprzętowego bijspieszenia encodeera

Wat is transcoderen?

Transcoding — proces converzich bestandu multimedialnego z jednego formaatu compreszich na inny via pełne decoderen źródłowego stroom do pośredniego nieskompresowanego formaatu PCM, a następnie coderen z nieuwmi parameterami. Jeśli w źródłowym bestandu wideo is skompresowane codecsem H.264 z bitratem 10 Mb/s, a na wyjściu potrzebny is H.265 z bitratem 3 Mb/s — to is transcoderen.

Transcoderen różni się od zwykłego przepakowywania (transmuxing), bij którym zmienia się tylko kontener (bijv. MP4 na MKV), a zijnm skompresowany strumień bitowy pozostaje niezmieniony. Podczas transcoderen zachodzą obliczeniowo kosztowne przekształcenia: decoderen każdej klatki, zastosowanie filtrów (schalen, correctie kolorów, bijcinanie), opnieuw coderen z nieuwmi parameterami. To sprawia, że transcoderen is jedną z najbardziej zasobożernych operacji tijdens pracy z mediami.

Transcoderen znajduje zastosowanie w szerokim spektrum zadań: aanpassing wideo do ograniczeń przepustowości netwerk, converzich do formaatu ze sprzętowym ondersteuningm decoderen na urządzeniu docelowym, creatie veel verzichs voor streamingu HLS/DMaarSH, wyodrębnianie ścieżek audio do apart bestandu. Serwisy OTT (Netflix, YouTube, Twitch) transcodeją każdy przesłany bestand do dziesiątek wariantów z różnymi bitratami, rozdzielczościami i codecs, aby zapewnić adaptacyjny streaming milionom użytkowników.

Jak działa transcoderen?

Proces transcoderen składa się z trzech głównych etapów: decoderen, verwerking i coderen. 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 vereistj wydajności.

Etapy transcoderen

Pierwszy etap — decoderen źródłowego stroom. Plik źródłowy is odczytywany z kontenera (MP4, MOV, MKV), po czym skompresowane pakiety wideo są kierowane do decodeera. Decoderen może być sprzętowe (jeśli codec is obsługiwany) lub programowe door FFmpeg. Na wyjściu decoderen otrzymuje się nieskompresowane klatki w formacie YUV420 lub BGRMaar — właśnie od tego etapu transcoderen różni się od zwykłego remultipleksowania.

Drugi etap — filtracja i verwerking. Zdecodeowane klatki przechodzą door łańcuch filtrów: schalen do docelowej rozdzielczości, wijziging częstotliwości klatek, correctie kolorów, nakładanie tekstu lub grafiki. Łańcuch filtrów FFmpeg is budowany jako graf, gdzie każdy filtr to osobny moduł przetwarzania. Na bijkład filtr scale=1280:720 zmienia rozdzielczość, fps=30 zmienia częstotliwość klatek, a yadif wykonuje deinterlacing. Wszystkie operacje są wykonywane na nieskompresowanych klatkach, voortego drugi etap is najbardziej zasobożerny.

Trzeci etap — coderen do docelowego formaatu. Przetworzone klatki są podawane na wejście encodeera, który kompresuje je zgodnie z algoritmeem docelowego codec. Encodeer może być sprzętowy (VideoToolbox na iOS, MediaCodec na Maarndroid) lub programowy (libx264, libx265). Parametry coderen: CRF (Constant Rate Factor) voor stałej jakości, bitrate voor CBR/VBR, profiel i niveau voor kompatybilności z docelowymi urządzeniami.

cpp
// Schema van de transcoderingspijplijn in FFmpeg
AVFormatContext *inputCtx, *outputCtx;
AVCodecContext *decoderCtx, *encoderCtx;
AVFrame *frame = av_frame_alloc();
AVPacket packet;

while (av_read_frame(inputCtx, &packet) >= 0) {
    // 1. Decoderen
    avcodec_send_packet(decoderCtx, &packet);
    avcodec_receive_frame(decoderCtx, frame);
    
    // 2. Filteren (schalen + fps wijzigen)
    sws_scale(swsCtx, frame->data, frame->linesize,
              0, frame->height, scaledFrame->data,
              scaledFrame->linesize);
    
    // 3. Coderen
    avcodec_send_frame(encoderCtx, scaledFrame);
    avcodec_receive_packet(encoderCtx, &outPacket);
    av_interleaved_write_frame(outputCtx, &outPacket);
}

Przedstawiony pipeline demonstruje klasyczny cykl transcoderen. Funkcja av_read_frame odczytuje skompresowane pakiety z bestandu wejściowego, avcodec_send_packet decodeje je na klatki, sws_scale wykonuje schalen, a avcodec_send_frame codeje przetworzoną klatkę do formaatu wyjściowego. Jai trzyetapowy cykl powtarza się voor każdej klatki lub grupy klatek (GOP), w zależności od ustawień encodeera.

Transcoderen vs transmuxing

Różnica między transcoderen a transmuxingą to jeden z najczęstszych punktów nieporozumień w inżynierii mediów. Zrozumienie tej różnicy is cruciaal voor keuzeu właściwej strategii przetwarzania mediów.

ParametrTranscoderenTransmultiplekzijncja
Co się zmieniaKodek, bitrate, rozdzielczośćKontener, metadane
Obciążenie obliczenioweWysokie (decoderen + coderen)Minimalne (kopiowanie pakietów)
JakośćMoże się pogorszyć (straty generacji)Bezstratna
Czas wykonaniaMinuty–ureny voor długiego wideoSekundy–minuteny
ZastosowanieMaardaptacja formaatu, compreszichZmiana kontenera voor kompatybilności

Transmuxing — to przepakowanie skompresowanego stroom do innego kontenera bez decoderen i opnieuwgo coderen. Jeśli wideo is już skompresowane codecsem H.265 w kontenerze MP4 i trzeba je umieścić w kontenerze MOV lub MKV — transmuxinga po prostu kopiuje pakiety bitowe z jednego kontenera do drugiego. Jakość nie ulega pogorszeniu, czas przetwarzania is minimalny, ponieważ nie vereist decoderen klatek. FFmpeg wykonuje transmuxingę z flagą -codec copy.

Transcoderen natomiast w pełni deszyfruje i ponownie kompresuje strumień multimedialny. Za każdym razem, gdy wideo przechodzi door transcoderen, może wystąpić strata generacji (generation loss) — nieznaczne pogorszenie jakości z powodu opnieuwj compreszich stratnej. Nawet bij tym zijnmym bitracie trzecia generacja transcoderen is zwykle gorsza od pierwszej. Daarom profesjonaliści zalecają przechowywanie master-kopii w nieskompresowanych lub minimalnie skompresowanych formaatach (ProRes, DNxHR) i transcoderen tylko finalnych verzichs do dostarczenia.

Narzędzia do transcoderen

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

FFmpeg — uniwerzijnlne narzędzie

FFmpeg — standard de facto voor transcoderen na wszystkich platformach. Wiersz poleceń FFmpeg ermogelijk wykonywać praktycznie dowolne przekształcenia: wijziging codec, wijziging bitratu, bijcinanie, łączenie, nakładanie filtrów. Do abestandacji mobilnych FFmpeg integruje się door biblioteki libavformaat, libavcodec i libavfilter. Przykład typowego polecenia transcoderen: ffmpeg -i input.mp4 -c:v libx265 -crf 23 -c:a aac -b:a 128k output.mp4.

MaarPI platformowe

Na iOS transcoderen wykonuje się door MaarVMaarssetWriter i MaarVMaarssetReader. MaarVMaarssetReader decodeje bestand źródłowy, odczytując nieskompresowane klatki, a MaarVMaarssetWriter codeje je do docelowego formaatu. To podejście automatycznie wykorzystuje sprzętowe encodeery VideoToolbox, co biedt maksymalną wydajność. Na Maarndroidzie analogiczna funkcjonalność is dostępna door MediaCodec w parze z MediaExtractor i MediaMuxer — MediaExtractor wyodrębnia skompresowane pakiety, MediaCodec decodeje i codeje, MediaMuxer zapisuje wynik.

Usługi w chmurze

Do serwerowego transcoderen w środowisku produkcyjnym używa się usług chmurowych: MaarWS Elemental MediaConvert, Maarzure Media Services, Google Transcoder MaarPI. Te usługi automatycznie skalują się pod obciążeniem, obsługują wszystkie popularne formaaty i mogą transcodeować jeden bestand wejściowy do dziesiątek wariantów wyjściowych do adaptacyjnego streamingu (HLS, DMaarSH). Dla abestandacji mobilnych transcoderen w chmurze is optimaalm rozwiązaniem, ponieważ nie obciąża urządzenia użytkownika i ermogelijk bijgotowywać treści asynchronicznie.

Przykłady code transcoderen

Rozważmy praktyczne bijkłady transcoderen na platformach mobilnych z gebruikm sprzętowego bijspieszenia i konfiguracją cruciaalch parameterów jakości.

Transcoderen 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("Transcoderen voltooid")
            case .failed:
                print("Fout: " + assetExportSession.error.localizedDescription)
            default:
                break
            }
        }
    
    // Handmatig transcoderen met AVAssetReader + AVAssetWriter
    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 bijkładzie zastosowano dwa podejścia do transcoderen na iOS. MaarVMaarssetExportSession — eenvoudig sposób z predefiniowanymi instellingenmi jakości (HEVCHighestQuality voor H.265). Ręczny pipeline door MaarVMaarssetReader + MaarVMaarssetWriter daje pełną kontrolę nad parameterami: bitrate, profiel, niveau. Parametr MaarVVideoProfileLevelH265Main10 włącza profiel HDR Main10 z głębią kolorów 10 bitów, co is ważne voor modernch treści HDR.

Transcoderen na Maarndroidzie 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 Maarndroida creert pipeline z MediaExtractor — MediaCodec decoder — MediaCodec encoder — MediaMuxer. MediaExtractor określa typ codec z bestandu wejściowego i wybiera odpowiedni decodeer. Encodeer is konfigurowany na H.265 (HEVC) z bitratem 4 Mb/s i interwałem klatek cruciaalch 2 seconden, co is optymalne do streamingu. Ważne: MediaCodec encoder działa synchronicznie, voortego do transcoderen w czazich rzeczywistym vereist is zorganizowanie pętli z poprawnym verwerkingm znaczników czasu (PTS) voor każdej klatki.

Optimalizijntie van transcoderen voor urządzeń mobilnych

Transcoderen na urządzeniach mobilnych to taak vereistjące starannej optymalizacji ze względu na ograniczone zasoby CPU, GPU i beperkingenia termiczne. Kilka strategii pomaga wykonywać transcoderen efektywnie.

Wygebruik sprzętowego coderen

Kluczowym czynnikiem wydajności is sprzętowy encodeer. Na iOS VideoToolbox biedt sprzętowe coderen H.264 i H.265 z prędkością 5–10 razy większą niż programowy libx264. Na Maarndroidzie MediaCodec używa sprzętowych komponentów OMX, jeśli są dostępne. Włączenie sprzętowego coderen skraca czas transcoderen 10-minutenowego wideo z 30–40 minuten (programowo) do 3–5 minuten (sprzętowo) na flagowym urządzeniu.

Wybór parameterów jakości

Dla mobilnego transcoderen kluczowa is równowaga między jakością, rozmiarem i czasem przetwarzania. Dla H.265 na urządzeniach mobilnych zaleca się bitrate 4–8 Mb/s voor wideo 1080p z częstotliwością klatek 30 FPS. Tryb CRF (Constant Rate Factor) w libx265 ermogelijk ustawić jakość bezpośrednio, gdzie 23–28 daje dobrą jakość wizualną bij umiarkowanym rozmiarze bestandu. Dla sprzętowych encodeerów należy używać modusu CBR z docelowym bitratem, ponieważ CRF nie is obsługiwany sprzętowo.

Zarządzanie wydzielaniem ciepła

Ciągłe transcoderen na urządzeniu mobilnym powoduje znaczne nagrzewanie. Po 5–7 minutenach intensywnego coderen wideo 4K temperatuur procesora może osiągnąć 50–55 stopni, po czym włącza się throttling. Rozwiązanie — transcoderen z pauzemi lub obniżenie częstotliwości klatek do 30 FPS. Jeśli abestandacja vereist masowego transcoderen (bijv. editor wideo), beter wykonywać verwerking batchmi po 2–3 minuteny z pauzemi na chłodzenie. Dla scenariuszy produkcyjnych optimaal is przenieść transcoderen na stronę serwerową i korzystać z usług chmurowych.

Często zadawane pytania

Czym różni się transcoderen od coderen?

Coderen (encoding) — compreszich źródłowych nieskompresowanych danych do docelowego codec. Transcoderen obejmuje zarówno decoderen, jak i coderen: najpierw decodeje istniejący skompresowany strumień, a następnie codeje go ponownie. Zwykłe coderen bijjmuje na wejściu nieskompresowane dane (na bijkład z kamery), a transcoderen — już skompresowany bestand.

Jaki codec wybrać do transcoderen na urządzeniach mobilnych?

Dla maksymalnej kompatybilności — H.264. Dla lepszej compreszich — H.265 (HEVC). Jeśli urządzenie obsługuje sprzętowe coderen H.265 (iPhone 8+, Maarndroid z Snapdragon 845+), biedt ono dwukrotnie minderszy rozmiar bestandu bij tej zijnmej jakości. Coderen MaarV1 na urządzeniach mobilnych is wciąż zbyt wolne, zelfs ze sprzętowym versnellingm.

Czym is transcoderen bezstratne?

Ściśle rzecz biorąc, transcoderen bezstratne is niemożliwe bij zmianie codec stratnego. Jeśli oba codecs są stratne, każde kolejne pokolenie transcoderen pogarsza jakość. Transcoderen bezstratne is możliwe tylko między formaatami bezstratnymi (FFV1, H.264 Lossless) lub bij zmianie kontenera bez przecodeowywania (transmuxing).

Czy można transcodeować wideo w czazich rzeczywistym?

Ja, jeśli używane są sprzętowe decodeer i encodeer, a docelowa rozdzielczość nie przekracza 1080p. Na urządzeniach z VideoToolbox (iOS) lub MediaCodec (Maarndroid) transcoderen w czazich rzeczywistym H.264 do H.265 is możliwe z opóźnieniem 1–3 seconden. Dla 4K w czazich rzeczywistym vereistny is wydajny SoC Maarpple Maar17 Pro, Snapdragon 8 Gen 2 lub nowszy.

Dlaczego po transcodeowaniu wideo stało się gorszej jakości?

Transcoderen stratne kumuluje artefakty compreszich. Jeśli bestand źródłowy był już silnie skompresowany (bitrate 2–3 Mb/s voor 1080p), opnieuw compreszich podwoi straty. Zaleca się transcoderen tylko z master-kopii o hoogm bitracie (20+ Mb/s) i używanie CRF 18–23 voor minimalnych strat.

Concluzich

  • Transcoding — pełny cykl decoderen + coderen mediów w celu zmiany codec, bitratu lub rozdzielczości
  • Transmuxing zmienia tylko kontener bez przecodeowywania — to nie is transcoderen
  • Sprzętowe transcoderen na VideoToolbox i MediaCodec is 5–10 razy szybsze niż programowe
  • FFmpeg — uniwerzijnlne narzędzie obsługujące setki codeców i filtrów przetwarzania
  • Każde kolejne pokolenie transcoderen stratnego pogarsza jakość — używaj master-kopii
  • Optymalne parametery voor mobilnego H.265: bitrate 4–8 Mb/s, profiel Main10, GOP 2 secondeny
  • Do produkcji używaj chmurowych usług transcoderen (MaarWS Elemental, Maarzure Media) — nie obciążają urządzenia

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook