搜尋套件、儲存庫與 APP 分類

套件詳情v2.1.0

cast

用於發現和連接 Chromecast 設備的 Dart 套件

近 30 天下載
1.7萬
喜歡數
94
Pub 分數
80

安裝套件

flutter pub add cast

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

該 cast 套件是一個 Dart 庫,旨在讓 Flutter 應用程式能夠發現並連接 Chromecast 設備。它允許開發者將音訊、影片及其他內容從其應用程式串流至相容的 Chromecast 裝置。該套件支援無縫裝置檢測與媒體控制,非常適合建構與智慧電視及串流硬體整合的媒體導向應用程式。以簡單性為設計核心,提供直覺的 API 來實現投射功能,無需深入理解底層協定。該套件由 eivo.co 維護,並於 GitHub 上開放,供社群貢獻。

適用情境

  • 將串流媒體傳輸到 Chromecast 設備
  • 建構電視或家庭娛樂應用
  • 啟用遠端播放控制
  • 與智慧家庭生態系統整合
  • 創建跨裝置的媒體體驗

主要特色

  • 自動發現 Chromecast 裝置
  • 支援音訊與影片投射
  • 簡單、直覺的 API
  • 跨平台相容性(具平台特定實作)
  • 開源並由社群維護

適合對象

  • 開發媒體應用的開發者
  • 針對智慧電視或串流裝置的應用
  • 需要設備間投射的專案
  • 從事物聯網或智慧家居整合工作的團隊
  • 旨在實現多螢幕體驗的 Flutter 應用

使用建議

  • 需要 Android 和 iOS 平台設定才能實現完整功能
  • 僅限相容 Chromecast 的裝置
  • 可能需要為複雜的媒體串流進行額外設定
  • 依賴外部網絡連接
  • 不適用於非媒體投射的使用情境

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

Pub Likes Pub Popularity Pub Points

cast

Dart package to discover and connect with Chromecast devices

Installation

Add this to your package's pubspec.yaml file:

dependencies:
  cast: ^2.1.0
iOS

Required iOS 13 minimum. Since iOS 14 a few more steps are required https://developers.google.com/cast/docs/ios_sender/ios_permissions_changes

In ios/Runner/Info.plist add:

<key>NSBonjourServices</key>
<array>
  <string>_googlecast._tcp</string>
  <string>_YOUR_APP_ID._googlecast._tcp</string>
</array>

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

Usage

List devices:

Widget build(BuildContext context) {
  return FutureBuilder<List<CastDevice>>(
    future: CastDiscoveryService().search(),
    builder: (context, snapshot) {
      if (snapshot.hasError) {
        return Center(
          child: Text(
            'Error: ${snapshot.error.toString()}',
          ),
        );
      } else if (!snapshot.hasData) {
        return Center(
          child: CircularProgressIndicator(),
        );
      }

      if (snapshot.data!.isEmpty) {
        return Column(
          children: [
            Center(
              child: Text(
                'No Chromecast founded',
              ),
            ),
          ],
        );
      }

      return Column(
        children: snapshot.data!.map((device) {
          return ListTile(
            title: Text(device.name),
            onTap: () {
              _connectToYourApp(context, device);
            },
          );
        }).toList(),
      );
    },
  );
}

Connect to device:

Future<void> _connect(BuildContext context, CastDevice object) async {
  final session = await CastSessionManager().startSession(object);

  session.stateStream.listen((state) {
    if (state == CastSessionState.connected) {
      _sendMessage(session);
    }
  });

  session.messageStream.listen((message) {
    print('receive message: $message');
  });

  session.sendMessage(CastSession.kNamespaceReceiver, {
    'type': 'LAUNCH',
    'appId': 'YouTube', // set the appId of your app here
  });
}

CastSessionManager is used to keep track of all sessions.

Send message:

void _sendMessage(CastSession session) {
  session.sendMessage('urn:x-cast:namespace-of-the-app', {
    'type': 'sample',
  });
}

Except for the launch message, you should wait until the session have a connected state before sending message.

Note

Some informations about the protocol used https://docs.rs/crate/gcast/0.1.5/source/PROTOCOL.md

$ pub global activate protoc_plugin
$ export PATH="$PATH":"$HOME/.pub-cache/bin"
$ protoc -I=./lib/cast_channel --dart_out=./lib/cast_channel ./lib/cast_channel/cast_channel.proto --plugin "pub run protoc_plugin"

Author

所屬分類

依賴

依賴清單 2 項

原始碼儲存庫

使用此套件的專案