मुख्य कंटेंट तक स्किप करें

Flutter live streaming plugin

aibuds_live_stream_flutter नेटिव AIBudsLiveStream मिडलवेयर को Flutter से जोड़ता है। यह प्लेबैक के लिए iOS प्लेटफ़ॉर्म व्यू और RTSP इनपुट या ऐप से मिले JPEG फ़्रेम व PCM ऑडियो को RTMP गंतव्य पर भेजने के लिए अलग कंट्रोलर देता है।

यह पेज Flutter/native ownership समझाता है। Device capability checks, hotspot setup और RTSP URL प्राप्त करने का तरीका RTSP Live Streaming में है।

Animated flow map

Device stream और Flutter consumers

एक device RTSP session ऐसा address देता है जिसे एक host lifecycle owner के तहत native preview, optional relay या दोनों उपयोग कर सकते हैं।

Device session

RTSP session शुरू करें

Capability और hotspot coordination पूरा करें।

Shared input

RTSP URL पाएँ

इस session का authoritative address सुरक्षित रखें।

Platform view

Native player

Playback commands देने से पहले controller attach करें।

Flutter UI

Preview दिखाएँ

Native events को mounted presentation state में map करें।

Optional branch

RTMP relay

अलग owned streamer lifecycle से publish करें।

  • RTSP session शुरू करेंcontinues toRTSP URL पाएँ
  • RTSP URL पाएँpreviewNative player
  • Native playercontinues toPreview दिखाएँ
  • RTSP URL पाएँoptional relayRTMP relay
Player state, streamer state और device session अलग हैं; हर owned resource को स्पष्ट रूप से stop और dispose करें।

Platform और packaging की सीमा​

  • iOS supported है; Android implemented नहीं है।
  • Dart 3.3+, Flutter 3.19+ और iOS 15.0+ आवश्यक हैं।
  • Plugin AIBudsLiveStreamFlutterPlugin.xcframework wrap करता है और AIBudsSDK/LiveStream पर depend करता है।
  • RTSP और RTMP को physical iOS device पर validate करें।

Supplied XCFrameworks और resources को plugin target के iOS packaging flow में रखें। Runner target में conflicting copies जोड़ने के बजाय linkage वहीं resolve करें।

Runtime architecture​

एक प्लेयर कंट्रोलर, एक नेटिव प्लेटफ़ॉर्म व्यू को नियंत्रित करता है। AIBudsLiveStreamPlayerView बनने और जुड़ने तक कमांड उपलब्ध नहीं होतीं। स्ट्रीमर कंट्रोलर के नेटिव रिले का जीवनचक्र अलग होता है।

View, events और controller साथ manage करें​

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();
  }
}

प्लेटफ़ॉर्म व्यू और डिवाइस का RTSP URL, दोनों तैयार होने दें; इनमें से कोई भी पहले मिल सकता है। एक कंट्रोलर को एक ही समय पर कई माउंट किए गए व्यू में दोबारा उपयोग न करें।

Device और player state अलग रखें​

LiveStreamingAPI डिवाइस और हॉटस्पॉट सेशन संभालता है। Flutter प्लेयर नेटिव रेंडरिंग संभालता है। प्लेयर की सफलता से डिवाइस सेशन के सही होने की पुष्टि नहीं होती और डिवाइस सेशन शुरू होने का अर्थ यह नहीं कि फ़्रेम रेंडर हो चुका है। डिवाइस सेशन, नेटवर्क रूट, प्लेयर और UI स्थिति को अलग-अलग ट्रैक करें।

Stop या page छोड़ते समय नए actions रोकें, player/streamer और device session बंद करें, Dart subscriptions cancel करें, native controllers dispose करें और retained URL clear करें। एक side interruption से पहले ही बंद हो तो भी cleanup सुरक्षित रहे।

RTMP प्रसारण​

AIBudsLiveStreamStreamerController को independent operational feature मानें:

  • गंतव्य के लिए अनुमति की जाँच कॉलबैक के बाहर करें;
  • शुरू करने से पहले events subscribe करें;
  • Target network के अनुसार bitrate, dimensions, frame rate, audio, timeout, adaptive bitrate और reconnect policy चुनें;
  • Preview success से publication success का अनुमान न लगाएँ;
  • डिवाइस सेशन समाप्त होने पर स्ट्रीमर को रोककर रिलीज़ करें;
  • प्रसारण के क्रेडेंशियल को Dart सोर्स या डायग्नोस्टिक जानकारी में शामिल न करें।

मीडिया स्रोत के अनुसार कंट्रोलर मोड चुनें। RTSP रिले इनपुट URL का उपयोग करता है, जबकि सीधे इनपुट वाला प्रसारण ऐप से JPEG फ़्रेम और PCM S16LE ऑडियो लेता है। सीधे इनपुट के लिए सैंपल रेट और चैनलों की संख्या को डिकोड किए गए PCM स्रोत के अनुरूप रखें। मीडिया भेजने से पहले स्ट्रीमर के तैयार होने की प्रतीक्षा करें और ऑडियो प्रसारण बंद होने पर ऑडियो न भेजें।

प्रीव्यू और रिले एक ही RTSP स्रोत का उपयोग करते हों, तो सबसे कम क्षमता वाले समर्थित डिवाइस पर संसाधन उपयोग और दोबारा कनेक्ट होने के व्यवहार की जाँच करें।

Performance और recovery​

  • सामान्य status changes पर platform view rebuild न करें।
  • setState से पहले high-frequency events throttle करें।
  • Backgrounding, hotspot loss, disconnect और view disposal को अलग interruptions मानें।
  • Automatic reconnect सीमित रखें और user-controlled retry दें।
  • पुराना session authoritative न रहे तो पूरी device-to-player pipeline फिर बनाएँ।

समस्या निवारण​

समस्यासंभावित कारण
Playback से पहले command fail होती हैPlatform view अभी attach नहीं हुआ।
Non-iOS placeholderPlugin अभी केवल iOS implement करता है।
URL है पर video नहींPlayer events, hotspot route और physical-device reachability जाँचें।
RTMP destination पर stream नहींStreamer events को preview state से अलग diagnose करें।
Page छोड़ने के बाद events आते हैंSubscription cancel करें और native controller dispose करें।
Duplicate symbolsConflicting native dependency copies हटाएँ।