Delphi'de Android için video oynatıcıyı seçme ve yapılandırma
Kısa cevap: Basit görevler için TMediaPlayer + TMediaPlayerControl kullanın; HLS/DASH akışı için akış desteği sunan FMX bileşenleri (TVideo veya üçüncü taraf paketler); maksimum performans ve 4K/HDR için ExoPlayer'ı JNI üzerinden entegre edin.
Bileşen seçimi ve ne zaman kullanılacağı
- TMediaPlayer + TMediaPlayerControl — standart yol: Hızlıca yapılandırılır, Android'de "kutudan çıkar çıkmaz" çalışır, yerel MP4/MP3 dosyaları ve basit akışlar için uygundur.
- TVideo / özel FMX modülleri — HLS/M3U8 ve oynatma listeleri için daha kullanışlıdır, genellikle arabelleğe alma üzerinde daha fazla kontrol sağlar.
- Ticari UI paketleri (örneğin gelişmiş FMX kitleri) — altyazılar ve oynatma listeleriyle hazır bir arayüz gerekiyorsa.
- ExoPlayer (JNI üzerinden) — profesyonel görevler için: kararlı HLS/DASH, HDR, 60 FPS ve özel kod çözme işleme.
Videoları her zaman gerçek bir cihazda test edin — FMX öykünücüsü genellikle donanım hızlandırmayı yansıtmaz ve performans konusunda yanıltıcı bir tablo çizer.
Bileşenlerin karşılaştırılması
| Bileşen | Artılar | Eksiler | Ne zaman kullanılmalı |
|---|---|---|---|
| TMediaPlayer + TMediaPlayerControl | Kolay entegrasyon, FMX desteği | Sınırlı UI ve altyazı desteği | Hızlı prototipler, yerel dosyalar |
| TVideo / FMX akış bileşenleri | Daha iyi HLS/oynatma listesi desteği | Daha az kontrol edilebilir ayar | Çevrimiçi videolar, yayın akışı |
| ExoPlayer (JNI üzerinden) | Yüksek performans, genişletilmiş formatlar | Entegrasyonu daha zor | Profesyonel oynatıcılar, 4K/HDR |
Oynatma ayarı — adım adım
- Çok Cihazlı FMX projesi oluşturun (File → New → Multi-Device Application).
- Project Options'ta Android SDK API 23+ ve ihtiyaç duyduğunuz minimum API'yi belirtin.
- Forma TMediaPlayer ve TMediaPlayerControl ekleyin (veya TMediaPlayer ekleyip ona bir kontrol bağlayın):
- OnCreate içinde: MediaPlayer1.Media := TMedia.FromFile('assets\video.mp4'); veya URL kullanın.
- URL akışı için: MediaPlayer1.FileName := 'https://your.server/stream.m3u8';
- Oynatma kontrolü:
- Play: MediaPlayer1.Play;
- Pause: MediaPlayer1.Pause;
- Stop: MediaPlayer1.Stop;
- Olaylara göre UI güncelleme:
- OnStatusChange — mpPlaying/mpStopped durumlarını kontrol edin ve düğmeleri etkinleştirin/devre dışı bırakın.
- Duration, MediaPlayer1.Duration üzerinden erişilebilir; TrackBar.Max için bunu kullanın.
- İlerleme örneği:
procedure TForm1.MediaPlayer1StatusChange(Sender: TObject; Status: TMediaStatus);
begin
if Status = mpPlaying then
TrackBar1.Max := MediaPlayer1.Duration.AsInteger;
end;
- Ekrana uyarlama: MediaPlayer1.Display.Stretch := TStretchMode.ScaleToFit (veya göreve göre ScaleToFill).
- İzinler ve manifest:
- Ağdan oynatıyorsanız android.permission.INTERNET iznini ekleyin.
- Info.plist/AndroidManifest'in HTTPS akışları için gerekli güvenlik ayarlarını içerdiğinden emin olun.
Gelişmiş entegrasyon: JNI üzerinden ExoPlayer
- FMX istenen performansı sağlamadığında, ExoPlayer'ı saran (başlatma, yönetim, Surface) bir Java sınıfı oluşturun.
- Java sınıfını .jar/.aar olarak derleyin ve projeye ekleyin (RAD Studio araçları / deployment).
- Delphi'de yöntemleri Androidapi.JNI.* ve TAndroidHelper.Context üzerinden çağırın, SurfaceView/SurfaceTexture ile Surface'ı iletin.
- Bu, kod çözme, donanım hızlandırma ve gelişmiş arabelleğe alma üzerinde kontrol sağlar, ancak JNI ve Android yaşam döngüsüyle çalışma deneyimi gerektirir.
Sık yapılan hatalar
- Siyah ekran: Surface/SurfaceView'in görüntülendiğini kontrol edin ve OnResize içinde render bağlamını güncelleyin.
- Takılmalar/gecikmeler: Oynatıcının eşzamansız hazırlanmasını kullanın ve UI iş parçacığı kullanımını azaltın; farklı bit hızlarını test edin.
- Ses yokluğu: Ses çıkışının doğru yönlendirildiğinden ve izinlerin verildiğinden emin olun.
- Büyük APK boyutu: Dağıtım sırasında gereksiz kütüphaneleri hariç tutun ve ProGuard/sıkıştırma kullanın.
SSS
- ExoPlayer'ı her zaman kullanmak gerekir mi? Hayır — ExoPlayer, kararlı akış, çoklu iş parçacıklı kod çözme veya 4K/HDR gerektiğinde haklı çıkar. Çoğu basit görev için TMediaPlayer yeterlidir.
- HLS desteğini nasıl kontrol ederim? Android'de yerel platform genellikle HLS'yi destekler; daha iyi uyumluluk için hedef cihazlarda test edin ve uyarlanabilir akışlar kullanın.
- Cihazdaki sorunları nasıl hata ayıklarım? Java katmanında günlük kaydı (Log.d) etkinleştirin veya RAD Studio'da Debug ve Device Log'u kullanın; davranışı birkaç API düzeyinde karşılaştırın.
Doğru bileşen kombinasyonu ve basit ayarlar (doğru izinler, Surface kontrolü, durum işleme) kullanarak, Delphi'de Android için kararlı bir oynatıcı elde edersiniz.