搜索插件、代码仓与 APP 分类

插件详情v0.5.6

peerdart

适用于 Dart 的简单点对点 WebRTC。Flutter 的 PeerJS 端口。

AndroidiOSmacOSWindowsLinux
近 30 天下载
481
喜欢数
78
Pub 分数
135

安装插件

flutter pub add peerdart

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

peerdart 是一个 Dart 包,可使用 WebRTC 实现简单的点对点通信,是 PeerJS 的 Flutter 兼容版本。它无需中央服务器即可在设备之间实现实时数据和媒体交换。专为低延迟连接设计,支持跨 Android、iOS、macOS、Windows 和 Linux 等多个平台的设备间直接通信。适用于需要即时连接的应用场景,如视频通话、实时流媒体或协作工具。

适合场景

  • 实时视频通话
  • 直播流
  • 协作应用程序
  • 直接设备消息
  • 基于 WebRTC 的聊天应用

主要特点

  • 基于 WebRTC 的点对点连接
  • 跨平台支持
  • 类似于 PeerJS 的简单 API
  • 支持数据和媒体渠道
  • 自动 ICE/STUN 处理

适合对象

  • 在Flutter中构建实时应用的开发者
  • 需要直接设备通信的项目
  • 针对多个操作系统的应用
  • 原型设计 WebRTC 功能
  • 低延迟的交互式体验

使用建议

  • 需要网络配置(防火墙/NAT)
  • 依赖信令服务器进行连接设置
  • 有限的浏览器支持(仅限 Flutter)
  • 性能随网络质量而变化
  • 可能需要TURN服务器以实现NAT穿透

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

PeerDart: Simple peer-to-peer with WebRTC

PeerDart provides a complete, configurable, and easy-to-use peer-to-peer API built on top of WebRTC, supporting both data channels and media streams.

PeerDart mirrors the design of peerjs. Find the documentation here..

Status

  • [x] Alpha: Under heavy development
  • [x] Public Alpha: Ready for testing. But go easy on us, there will be bugs and missing functionality.
  • [ ] Public Beta: Stable. No breaking changes expected in this version but possible bugs.
  • [ ] Public: Production-ready

Live Example

Here's an example application that uses both media and data connections: Example

Setup

Create a Peer

final Peer peer = Peer("pick-an-id");
// You can pick your own id or omit the id if you want to get a random one from the server.

Data connections

Connect

const conn = peer.connect("another-peers-id");

conn.on("open").listen((name) {
    conn.send("hi!");
})

Receive

peer.on<DataConnection>("connection").listen((connection) {

    // On peer closed.
    conn.on("close").listen((event) {
        setState(() {
            connected = false;
        });
    });

    // ....
})

Media calls

Call

final mediaStream = await navigator.mediaDevices
        .getUserMedia({"video": true, "audio": false});

    final conn = peer.call("peerId", mediaStream);

    // Do some stuff with stream
    conn.on<MediaStream>("stream").listen((event) {
      _remoteRenderer.srcObject = event;
      _localRenderer.srcObject = mediaStream;

      setState(() {
        inCall = true;
      });
    });
});

Answer

peer.on<MediaConnection>("call").listen((call) async {
    final mediaStream = await navigator.mediaDevices
        .getUserMedia({"video": true, "audio": false});

    call.answer(mediaStream);


    // on peer closed
    call.on("close").listen((event) {
        setState(() {
            inCall = false;
        });
    });

    // Get peer stream
    call.on<MediaStream>("stream").listen((event) {
        _localRenderer.srcObject = mediaStream;
        _remoteRenderer.srcObject = event;

        setState(() {
            inCall = true;
        });
    });
});

More examples

See more at example.

Support

Works both on mobile and web browsers (Chrome tested.).

Links

Documentation / API Reference
PeerServer

License

PeerDart is licensed under the MIT License.

所属分类

依赖

依赖清单 5 项

源码仓库

使用此插件的项目