Medya ve akış, modern mobil geliştirmenin temel yetkinliklerinden biridir. Statista (2025)'ya göre, küresel video akış pazarı 2027 yılına kadar 100 milyar doları aşacak. Mobil cihazlar, tüm akış platformu trafiğinin %60'ından fazlasını oluşturmaktadır. Geliştiricinin protokolleri, oynatıcıları, içerik koruma mekanizmalarını ve Picture-in-Picture gibi özellikleri anlaması gerekir. Mobil uygulamalarda kaliteli akış, tüm bu teknolojilere hakim olmayı gerektirir.
Ana Noktalar
HTTP Live Streaming (HLS), Apple tarafından geliştirilen mobil uygulamalarda akış için bir protokoldür. Videoyu küçük parçalara (genellikle 6–10 saniye) böler ve bunları normal HTTP üzerinden iletir. Oynatıcı bir çalma listesi (.m3u8) indirir ve sırayla parçaları yükleyerek kaliteyi bağlantı hızına göre uyarlar. HLS, tüm Apple cihazlarında mobil uygulamalarda güvenilir akış sağlar ve iOS için fiili standarttır.
DASH (Dynamic Adaptive Streaming over HTTP), mobil uygulamalara medya iletimi için açık bir MPEG standardıdır. HLS'den farklı olarak DASH, parçalar için MP4 formatı ve .m3u8 yerine XML manifestosu (MPD) kullanır. DASH, codec'ler üzerinde daha fazla kontrol sağlar ve daha fazla formatı destekler. HLS ve DASH arasındaki seçim, mobil cihazlar için akış geliştirirken önemli bir karardır. Protokol karşılaştırması aşağıdaki tabloda gösterilmiştir.
| Parametre | HLS | DASH |
|---|---|---|
| Geliştirici | Apple | MPEG (açık standart) |
| Çalma listesi formatı | .m3u8 | .mpd (XML) |
| Parçalar | .ts veya fMP4 | fMP4 (herhangi bir codec) |
| Yerel destek | iOS, macOS, tvOS | Android, web |
| Uyarlanabilir bit hızı | Evet (avc1, mp4a) | Evet (herhangi bir codec) |
| Düşük gecikme | LL-HLS (2–5 sn) | LL-DASH (2–5 sn) |
Pratikte, iOS uygulamaları HLS'yi seçer — AVPlayer onunla yerel olarak çalışır. Android için ExoPlayer sayesinde DASH tercih edilir. Her iki protokol de mobil cihazlarda medya akışı için uygundur. IT Sectr'da her iki teknolojiyi de kullanıyoruz ve protokolü hedef platforma göre seçmenizi öneriyoruz.
Adaptive Bitrate (ABR), oynatıcının bağlantı hızına göre otomatik olarak video kalitesini seçtiği bir mekanizmadır. Akış, birden çok bit hızında (360p, 720p, 1080p, 4K) kodlanır. Oynatıcı, duraklama olmadan aralarında geçiş yapar. Codec'ler: H.264 (AVC) — temel, H.265 (HEVC) — %50 daha verimli, VP9 ve AV1 — Android için açık alternatifler.
Mobil uygulamalarda donanım kod çözme için doğru codec'i seçmek önemlidir. Hardware Decoding, cihazın GPU/video işlemcisini kullanır ve daha az pil tüketir. Software Decoding, CPU'da çalışır — donanım kod çözme mevcut olmadığında kullanılır. IT Sectr, mobil cihazlarda optimum medya oynatma için MediaCodec (Android) veya AVAssetTrack (iOS) aracılığıyla codec desteğini her zaman kontrol etmenizi önerir.
ExoPlayer, mobil uygulamalarda medya oynatma için optimize edilmiş, Google'ın Android için medya oynatıcısıdır. MediaPlayer'ın aksine ExoPlayer, donanım kod çözmeye bağlı değildir ve uzantı modülleri aracılığıyla özel şemaları destekler. HLS, DASH, SmoothStreaming ve RTSP ile çalışır. ExoPlayer, YouTube, Google TV ve Android TV'nin ana oynatıcısıdır.
AVPlayer ve AVPlayerViewController, iOS, macOS, tvOS için Apple oynatıcılarıdır. AVPlayer düşük seviyeli bir API'dir, AVPlayerViewController ise PiP ve AirPlay ile hazır bir UI sarmalayıcısıdır. Temel farklar: ExoPlayer, arabelleğe alma ve işleme üzerinde tam kontrol sağlar, AVPlayerViewController minimum kodla hızlı entegrasyon sağlar. Oynatıcı seçimi, mobil uygulamalarda akış kalitesini doğrudan etkiler.
// ExoPlayer — Android'de temel oynatıcı kurulumu
val player = ExoPlayer.Builder(this)
.setMediaSource(ProgressiveMediaSource.Factory(DefaultHttpDataSource.Factory()))
.build()
val mediaItem = MediaItem.fromUri("https://example.com/stream.m3u8")
player.setMediaItem(mediaItem)
player.prepare()
player.playWhenReady = true
Kod, ExoPlayer'ın minimum başlatılmasını gösterir: örnek oluşturma, medya öğesi ayarlama ve oynatmayı başlatma. ExoPlayer, onStop içindeki player.release() ile Activity yaşam döngüsünü otomatik olarak yönetir. Android TV veya PiP için PlayerView aracılığıyla ek yaşam döngüsü yönetimi gerekir — bu, mobil uygulamalar için akış kurarken özellikle önemlidir.
Transcoding, videonun bir formattan diğerine dönüştürülmesidir. Farklı mobil cihazlar için medya akışlarını optimize etmek için kullanılır (örneğin, H.264 → H.265). Mobil cihazlarda dönüştürme, MediaCodec (Android) veya AVAssetExportSession (iOS) aracılığıyla mümkündür. Dönüştürme kaynak yoğundur ve pili tüketir — WorkManager veya BGTaskScheduler ile arka planda yapın.
Digital Rights Management (DRM), medya içeriğini yetkisiz kopyalamaya karşı koruyan sistemlerdir. Mobil uygulamalarda premium medya akışı için üç ana teknoloji kullanılır: Widevine (Google), FairPlay (Apple) ve PlayReady (Microsoft). DRM olmadan, premium hizmetler (Netflix, Spotify, Disney+) içerik dağıtamaz.
Widevine, Android için DRM koruma standardıdır ve üç seviyede mevcuttur: L3 (yazılım şifreleme), L2, L1 (donanım şifreleme, yalnızca Trusted Execution Environment). FairPlay, Apple'ın özel sistemidir ve çip seviyesinde SVP (Secure Video Pipeline) kullanır. PlayReady, Microsoft'un sistemidir ve Xbox ile Windows cihazlarında yaygındır.
Multi-DRM, tüm DRM anahtarlarını yönetmek için tek bir platform kullandığınız bir yaklaşımdır. Örnek: EZDRM veya Verimatrix. Bunlar, birleşik bir API aracılığıyla Widevine, FairPlay ve PlayReady lisansları verir. Multi-DRM, mobil cihazlarda premium medya için özellikle önemlidir. IT Sectr'da, toplayıcılar aracılığıyla multi-DRM uyguluyoruz — bu, her DRM'yi ayrı ayrı entegre etmeye kıyasla zaman ve para tasarrufu sağlar.
Audio Focus (Android), mobil uygulamalarda medya oynatma için ses akışı yönetim sistemidir. Uygulamanız Audio Focus talep ettiğinde, diğer uygulamalar (müzik, podcast'ler) duraklar veya ses seviyelerini düşürür (ducking). Audio Focus olmadan, iki uygulama aynı anda çalarak gürültü oluşturur.
Android, ses akışlarını türlere ayırır: MUSIC, VOICE_CALL, ALARM, NOTIFICATION. Bir medya oynatıcı için AudioManager.AUDIOFOCUS_GAIN talep etmeniz gerekir. Odağı kaybettiğinizde (gelen arama), medya oynatmayı duraklatmalı ve odak geri döndüğünde devam ettirmelisiniz. Uygulama, AudioManager.OnAudioFocusChangeListener aracılığıyla yapılır.
Audio Session (iOS), Apple mobil cihazlarındaki medya uygulamaları için Audio Focus'un eşdeğeridir. AVAudioSession.sharedInstance() aracılığıyla yapılandırılır. Kategoriler: .playback (video için zorunlu), .soloAmbient (varsayılan, kilitlendiğinde sessiz), .playAndRecord (kayıt için). Akış için .allowAirPlay seçeneğiyle .playback kullanın.
Picture-in-Picture (PiP), uygulama simge durumuna küçültüldüğünde veya başka bir ekrana geçildiğinde medya içeriğinin küçük bir hareketli pencerede oynatılmaya devam ettiği bir moddur. PiP, mobil cihazlarda medya uygulamaları için standart haline gelmiştir — iOS (iPadOS 13'ten itibaren) ve Android (Android 8.0'dan itibaren).
Android'de PiP, Activity.isInPictureInPictureMode() ve PictureInPictureParams.Builder aracılığıyla etkinleştirilir. Uygulama çoklu pencere modunda olmalıdır. PiP penceresinden medya oynatmayı kontrol etmek için MediaSession gereklidir. Manifest'te android:supportsPictureInPicture="true" belirtin.
AirPlay, Apple TV, HomePod ve uyumlu Akıllı TV'lere medya akışı yapmak için Apple'ın protokolüdür. iOS'ta AVRoutePickerView veya MPNowPlayingInfoCenter aracılığıyla uygulanır. Android'de eşdeğeri Google Cast SDK'dır (Chromecast). Her iki teknoloji de ikili dosyada yapılandırma ve oynatıcı desteği gerektirir. Bunlardan biri olmadan mobil uygulamalarda kaliteli akış imkansızdır.
Sıkça Sorulan Sorular
iOS için HLS daha iyidir — AVPlayer tarafından yerel olarak desteklenir. Android ve çapraz platform uygulamalar için DASH tercih edilir, çünkü ExoPlayer DASH için daha iyi destek ve daha esnek arabellek kontrolü sağlar. Protokol seçimi, mobil uygulamalarda akışı doğrudan etkiler.
DRM zorunludur yalnızca premium medya içeriği (film, müzik, kurs) dağıtıyorsanız. Kullanıcı tarafından oluşturulan içerik veya ücretsiz yayınlar için DRM gerekli değildir. IT Sectr, DRM olmadan başlamanızı ve yalnızca gerektiğinde eklemenizi önerir.
ExoPlayer, DASH, HLS ve SmoothStreaming desteğiyle Android için özelleştirilebilir bir medya oynatıcıdır. AVPlayerViewController, PiP ve AirPlay ile iOS için yerel bir oynatıcıdır. ExoPlayer daha fazla kontrol sağlar, AVPlayerViewController daha az kod gerektirir. Her ikisi de mobil uygulamalarda kaliteli medya oynatma sağlar.
PiP, uygulama simge durumuna küçültüldüğünde medya içeriğinin küçük bir pencerede oynatılmaya devam ettiği bir moddur. iOS'ta AVPlayerViewController temsilcisi aracılığıyla, Android'de PictureInPictureParams aracılığıyla etkinleştirilir. Manifest yapılandırması ve yaşam döngüsü yönetimi gerektirir.
Audio Focus (Android) ve Audio Session (iOS), farklı kaynaklardan eşzamanlı ses oynatmayı yönetir. Medya uygulamanızın aramalara, bildirimlere ve diğer ses uygulamalarının başlatılmasına doğru şekilde yanıt vermesini sağlarlar.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.