cast_plus_plugin

Flutter plugin for casting videos

Getting started

For iOS

Add permission to your ios/Runner/Info.plist:

<key>NSLocalNetworkUsageDescription</key>
    <string>${PRODUCT_NAME} uses the local network to discover Cast-enabled devices on your WiFi network.</string>
<key>NSBonjourServices</key>
    <array>
        <string>_googlecast._tcp</string>
        <string>_CC1AD845._googlecast._tcp</string>
    </array>

For Android

nothing to do

Usage Instruction

Call initialize() in the iniState() method:

@override
void initState() {
  super.initState();
  CastPlusPlugin.initialize();
}

To retrieve a list of available cast devices:

Future<void> _fetchDevices() async {
  List<CastDevice> devices = await CastPlusPlugin.getAvailableCastDevices();
  setState(() {
    _devices = devices;
  });
}

Use a stream to listen for cast devices:

StreamSubscription<List<CastDevice>>? _deviceSub;

void _listenForDevices() {
  _deviceSub = CastPlusPlugin.deviceUpdateStream.listen((devices) {
    setState(() {
      _devices = devices;
    });
  });
}

To cast a video to a selected device:

void _castToDevice(CastDevice device) async {
  const videoUrl = 'https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8';
  try {
    await CastPlusPlugin.castToDevice(
      url: videoUrl,
      deviceId: device.deviceId,
      deviceUniqueId: device.deviceUniqueId,
      videoTitle: "Sample Video"
    );
    setState(() {
      _isCasting = true;
    });
  } catch (e) {
    print("Error: $e");
  }
}

For Airplay support on iOS:

void _castToAirPlay() {
  const videoUrl = 'https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8';
  CastPlusPlugin.castToAirPlay(videoUrl);
}

To stop casting a video:

void _stopCasting() {
  CastPlusPlugin.stopCasting();
  setState(() {
    _isCasting = false;
  });
}