peerdart_exp 1.0.1 copy "peerdart_exp: ^1.0.1" to clipboard
peerdart_exp: ^1.0.1 copied to clipboard

Simple peer-to-peer with WebRTC for Dart. PeerJS port for Flutter.

Highly experimental major clone of orignial PeerDart Package #

=> Credits to orignal authors (https://github.com/MuhammedKpln/peerdart) , I'm simply striving to make it production ready :)

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 #

  • ✅ Alpha: Under heavy development
  • ✅ 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.).

Documentation / API Reference #

PeerServer #

License #

PeerDart is licensed under the MIT License.# peerdart_exp

5
likes
120
points
104
downloads

Publisher

unverified uploader

Weekly Downloads

Simple peer-to-peer with WebRTC for Dart. PeerJS port for Flutter.

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

events_emitter, flutter_webrtc, http, sdp_transform, uuid, web_socket_channel

More

Packages that depend on peerdart_exp