Ana içeriğe geç

Flutter Canlı Yayın Eklentisi

aibuds_live_stream_flutter, yerel AIBudsLiveStream ara katmanını Flutter'a bağlar. Oynatma için iOS platform görünümü ve RTSP girişini RTMP hedefine aktarmak için ayrı bir denetleyici sunar.

Bu sayfa Flutter ve yerel taraf arasındaki sahipliği açıklar. Aygıt yeteneği kontrolleri, erişim noktası kurulumu ve RTSP URL'sinin alınması RTSP Canlı Yayın sayfasında anlatılır.

Animated flow map

Device stream and Flutter consumers

One device RTSP session produces an address that can feed native preview, optional relay, or both under one host lifecycle owner.

Device session

Start RTSP Session

Complete capability and hotspot coordination.

Shared input

Receive RTSP URL

Retain the authoritative address for this session.

Platform view

Native Player

Attach the controller before issuing playback commands.

Flutter UI

Render Preview

Map native events into mounted presentation state.

Optional branch

RTMP Relay

Publish through a separately owned streamer lifecycle.

  • Start RTSP Sessioncontinues toReceive RTSP URL
  • Receive RTSP URLpreviewNative Player
  • Native Playercontinues toRender Preview
  • Receive RTSP URLoptional relayRTMP Relay
Player state, streamer state, and the device session are independent; stop and dispose each owned resource explicitly.

Platform ve Paketleme Sınırı

  • iOS desteklenir; Android henüz uygulanmamıştır.
  • Dart 3.3+, Flutter 3.19+ ve iOS 13+ gerekir.
  • Eklenti AIBudsLiveStreamFlutterPlugin.xcframework paketini sarar ve AIBudsSDK/LiveStream bağımlılığını kullanır.
  • RTSP ve RTMP'yi fiziksel bir iOS aygıtında doğrulayın.

Sağlanan XCFramework'leri ve kaynakları eklenti hedefinin iOS paketleme akışında tutun. Runner hedefine çakışan kopyalar eklemek yerine bağlantı sorunlarını burada çözün.

Çalışma Zamanı Mimarisi

Bir oynatıcı denetleyicisi tek bir yerel platform görünümünü temsil eder. AIBudsLiveStreamPlayerView oluşturulup bağlanana kadar komutlar kullanılamaz. Yayıncı denetleyicisi ayrı bir yerel aktarma yaşam döngüsüne sahiptir.

Görünümü, Olayları ve Denetleyiciyi Birlikte Yönetin

DART
class LivePreviewState extends State<LivePreview> {
  final player = AIBudsLiveStreamPlayerController();
  StreamSubscription<AIBudsLiveStreamPlayerEvent>? events;

  @override
  void initState() {
    super.initState();
    events = player.events.listen((event) {
      if (!mounted) return;
      setState(() { /* map native event to presentation state */ });
    });
  }

  @override
  Widget build(BuildContext context) => AIBudsLiveStreamPlayerView(
    controller: player,
    options: const AIBudsLiveStreamPlayerOptions(
      format: AIBudsLiveStreamFormat.rtsp,
      gravityMode: AIBudsLiveStreamGravityMode.resizeAspect,
    ),
  );

  @override
  void dispose() {
    events?.cancel();
    player.disposePlayer();
    super.dispose();
  }
}

Platform görünümü ile aygıt RTSP URL'sinin ikisi de hazır olana kadar bekleyin; herhangi biri önce gelebilir. Aynı anda bağlı birden fazla görünümde tek denetleyiciyi yeniden kullanmayın.

Aygıt ve Oynatıcı Durumunu Ayırın

LiveStreamingAPI aygıt/erişim noktası oturumunu, Flutter oynatıcısı ise yerel görüntülemeyi yönetir. Oynatıcının başarısı aygıt oturumunun sağlıklı olduğunu; aygıtın başlaması da bir karenin görüntülendiğini kanıtlamaz. Aygıt oturumunu, ağ rotasını, oynatıcıyı ve arayüz durumunu ayrı izleyin.

Durdururken veya sayfadan ayrılırken yeni işlemleri engelleyin; oynatıcıyı/yayıncıyı ve aygıt oturumunu durdurun, Dart aboneliklerini iptal edin, yerel denetleyicileri serbest bırakın ve saklanan URL'yi temizleyin. Bir kesinti taraflardan birini önceden durdurmuş olsa da temizleme güvenli olmalıdır.

RTSP'den RTMP'ye Aktarma

AIBudsLiveStreamStreamerController öğesini bağımsız bir işletim özelliği olarak yönetin:

  • hedef yetkilendirmesini geri çağrı yolunun dışında doğrulayın;
  • başlatmadan önce olaylara abone olun;
  • hedef ağa uygun bit hızı, boyut, kare hızı, ses, zaman aşımı, uyarlanabilir bit hızı ve yeniden bağlanma politikasını seçin;
  • önizlemenin başarısından yayın başarısını çıkarsamayın;
  • aygıt oturumu bittiğinde yayıncıyı durdurup serbest bırakın;
  • yayın kimlik bilgilerini Dart kaynağına veya tanılama verilerine asla gömmeyin.

Önizleme ve aktarma aynı RTSP kaynağını paylaşıyorsa kaynak kullanımını ve yeniden bağlanma davranışını desteklenen en düşük aygıtta test edin.

Performans ve Kurtarma

  • Sıradan durum değişikliklerinde platform görünümünü yeniden oluşturmayın.
  • setState öncesinde yüksek frekanslı olayları sınırlayın.
  • Arka plana geçişi, erişim noktası kaybını, bağlantı kopmasını ve görünümün serbest bırakılmasını ayrı kesintiler olarak ele alın.
  • Otomatik yeniden bağlanmayı sınırlandırın ve kullanıcı denetimli yeniden deneme sunun.
  • Eski oturum artık geçerli değilse aygıttan oynatıcıya uzanan hattın tamamını yeniden oluşturun.

Sorun Giderme

BelirtiOlası sınır
Komut oynatma öncesinde başarısızPlatform görünümü henüz bağlanmamış.
iOS dışı yer tutucuEklenti şu anda yalnızca iOS'u uygular.
URL var ancak video yokOynatıcı olaylarını, erişim noktası rotasını ve fiziksel aygıt erişimini inceleyin.
RTMP hedefinde veri yokYayıncı olaylarını önizleme durumundan bağımsız inceleyin.
Sayfadan ayrılınca olaylar sürüyorAboneliği iptal edin ve yerel denetleyiciyi serbest bırakın.
Yinelenen sembollerÇakışan yerel bağımlılık kopyalarını kaldırın.