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

Overview

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.).

Links

Documentation / API Reference

PeerServer

License

PeerDart is licensed under the MIT License.

Comments
  • Bad State Errors When Attempting To Send Data

    Bad State Errors When Attempting To Send Data

    Describe the bug Following the example code in the README results in bad state errors, making the data transfer unusable.

    To Reproduce Steps to reproduce the behavior: Follow example in README on iOS

    Expected behavior Data to be transfered

    Smartphone (please complete the following information):

    • Device: iPhone 11
    • OS: iOS
    • Browser Safari
    • Version iOS 16
    • Peerdart version: 0.5.0

    Additional context

    [VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: MissingPluginException(No implementation found for method createPeerConnection on channel FlutterWebRTC.Method)
    #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:294:7)
    <asynchronous suspension>
    #1      RTCFactoryNative.createPeerConnection (package:flutter_webrtc/src/native/factory_impl.dart:40:22)
    <asynchronous suspension>
    #2      Negotiator._startPeerConnection (package:peerdart/src/negotiator.dart:154:9)
    <asynchronous suspension>
    #3      Negotiator.startConnection (package:peerdart/src/negotiator.dart:17:28)
    <asynchronous suspension>
    [VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: Cannot fire new event. Controller is already firing an event
    #0      _BroadcastStreamController.close (dart:async/broadcast_stream_controller.dart:265:24)
    #1      StreamEventEmitter.close (package:events_emitter/emitters/stream_event_emitter.dart:117:30)
    #2      Socket._cleanup (package:peerdart/src/socket.dart:149:5)
    #3      Socket.dispose (package:peerdart/src/socket.dart:97:5)
    #4      Peer.disconnect (package:peerdart/src/peer.dart:381:12)
    #5      Peer._abort (package:peerdart/src/peer.dart:307:7)
    #6      Peer._handleMessage (package:peerdart/src/peer.dart:168:9)
    #7      Peer._createServerConnection.<anonymous closure> (package:peerdart/src/peer.dart:121:7)
    #8      _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #9      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #10     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #11     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
    #12     _MapStream._handleData (dart:async/stream_pipe.dart:218:10)
    #13     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
    #14     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #15     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #16     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #17     _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:63:11)
    #18     _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
    #19     _WhereTypeStreamSink.add (package:rxdart/src/transformers/where_type.dart:11:19)
    #20     _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:111:24)
    #21     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #22     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #23     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #24     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
    #25     _WhereStream._handleData (dart:async/stream_pipe.dart:195:12)
    #26     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
    #27     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #28     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #29     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #30     _SyncBroadcastStreamController._sendData.<anonymous closure> (dart:async/broadcast_stream_controller.dart:385:20)
    #31     _BroadcastStreamController._forEachListener (dart:async/broadcast_stream_controller.dart:322:15)
    #32     _SyncBroadcastStreamController._sendData (dart:async/broadcast_stream_controller.dart:384:5)
    #33     _BroadcastStreamController.add (dart:async/broadcast_stream_controller.dart:244:5)
    #34     StreamEventEmitter.emitEvent (package:events_emitter/emitters/stream_event_emitter.dart:53:51)
    #35     StreamEventEmitter.emit (package:events_emitter/emitters/stream_event_emitter.dart:92:40)
    #36     Socket.start.<anonymous closure> (package:peerdart/src/socket.dart:54:7)
    #37     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #38     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #39     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #40     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
    #41     _HandleErrorStream._handleData (dart:async/stream_pipe.dart:253:10)
    #42     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
    #43     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #44     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #45     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #46     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
    #47     _StreamController._add (dart:async/stream_controller.dart:648:7)
    #48     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #49     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #50     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #51     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
    #52     _StreamController._add (dart:async/stream_controller.dart:648:7)
    #53     _StreamController.add (dart:async/stream_controller.dart:596:5)
    #54     new _WebSocketImpl._fromSocket.<anonymous closure> (dart:_http/websocket_impl.dart:1144:21)
    #55     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #56     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #57     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #58     _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:63:11)
    #59     _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
    #60     _WebSocketProtocolTransformer._messageFrameEnd (dart:_http/websocket_impl.dart:332:23)
    #61     _WebSocketProtocolTransformer.add (dart:_http/websocket_impl.dart:226:46)
    #62     _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:111:24)
    #63     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #64     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #65     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #66     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
    #67     _StreamController._add (dart:async/stream_controller.dart:648:7)
    #68     _StreamController.add (dart:async/stream_controller.dart:596:5)
    #69     _Socket._onData (dart:io-patch/socket_patch.dart:2324:41)
    #70     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #71     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #72     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #73     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
    #74     _StreamController._add (dart:async/stream_controller.dart:648:7)
    #75     _StreamController.add (dart:async/stream_controller.dart:596:5)
    #76     _RawSecureSocket._sendReadEvent (dart:io/secure_socket.dart:1107:19)
    #77     Timer._createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:18:15)
    #78     _Timer._runTimers (dart:isolate-patch/timer_impl.dart:398:19)
    #79     _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:429:5)
    #80     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)
    [VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: MissingPluginException(No implementation found for method createPeerConnection on channel FlutterWebRTC.Method)
    #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:294:7)
    <asynchronous suspension>
    #1      RTCFactoryNative.createPeerConnection (package:flutter_webrtc/src/native/factory_impl.dart:40:22)
    <asynchronous suspension>
    #2      Negotiator._startPeerConnection (package:peerdart/src/negotiator.dart:154:9)
    <asynchronous suspension>
    #3      Negotiator.startConnection (package:peerdart/src/negotiator.dart:17:28)
    <asynchronous suspension>
    [VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: Cannot fire new event. Controller is already firing an event
    #0      _BroadcastStreamController.close (dart:async/broadcast_stream_controller.dart:265:24)
    #1      StreamEventEmitter.close (package:events_emitter/emitters/stream_event_emitter.dart:117:30)
    #2      Socket._cleanup (package:peerdart/src/socket.dart:149:5)
    #3      Socket.dispose (package:peerdart/src/socket.dart:97:5)
    #4      Peer.disconnect (package:peerdart/src/peer.dart:381:12)
    #5      Peer._abort (package:peerdart/src/peer.dart:307:7)
    #6      Peer._handleMessage (package:peerdart/src/peer.dart:168:9)
    #7      Peer._createServerConnection.<anonymous closure> (package:peerdart/src/peer.dart:121:7)
    #8      _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #9      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #10     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #11     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
    #12     _MapStream._handleData (dart:async/stream_pipe.dart:218:10)
    #13     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
    #14     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #15     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #16     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #17     _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:63:11)
    #18     _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
    #19     _WhereTypeStreamSink.add (package:rxdart/src/transformers/where_type.dart:11:19)
    #20     _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:111:24)
    #21     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #22     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #23     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #24     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
    #25     _WhereStream._handleData (dart:async/stream_pipe.dart:195:12)
    #26     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
    #27     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #28     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #29     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #30     _SyncBroadcastStreamController._sendData.<anonymous closure> (dart:async/broadcast_stream_controller.dart:385:20)
    #31     _BroadcastStreamController._forEachListener (dart:async/broadcast_stream_controller.dart:322:15)
    #32     _SyncBroadcastStreamController._sendData (dart:async/broadcast_stream_controller.dart:384:5)
    #33     _BroadcastStreamController.add (dart:async/broadcast_stream_controller.dart:244:5)
    #34     StreamEventEmitter.emitEvent (package:events_emitter/emitters/stream_event_emitter.dart:53:51)
    #35     StreamEventEmitter.emit (package:events_emitter/emitters/stream_event_emitter.dart:92:40)
    #36     Socket.start.<anonymous closure> (package:peerdart/src/socket.dart:54:7)
    #37     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #38     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #39     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #40     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
    #41     _HandleErrorStream._handleData (dart:async/stream_pipe.dart:253:10)
    #42     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
    #43     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #44     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #45     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #46     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
    #47     _StreamController._add (dart:async/stream_controller.dart:648:7)
    #48     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #49     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #50     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #51     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
    #52     _StreamController._add (dart:async/stream_controller.dart:648:7)
    #53     _StreamController.add (dart:async/stream_controller.dart:596:5)
    #54     new _WebSocketImpl._fromSocket.<anonymous closure> (dart:_http/websocket_impl.dart:1144:21)
    #55     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #56     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #57     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #58     _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:63:11)
    #59     _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
    #60     _WebSocketProtocolTransformer._messageFrameEnd (dart:_http/websocket_impl.dart:332:23)
    #61     _WebSocketProtocolTransformer.add (dart:_http/websocket_impl.dart:226:46)
    #62     _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:111:24)
    #63     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #64     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #65     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #66     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
    #67     _StreamController._add (dart:async/stream_controller.dart:648:7)
    #68     _StreamController.add (dart:async/stream_controller.dart:596:5)
    #69     _Socket._onData (dart:io-patch/socket_patch.dart:2324:41)
    #70     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    #71     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    #72     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
    #73     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
    #74     _StreamController._add (dart:async/stream_controller.dart:648:7)
    #75     _StreamController.add (dart:async/stream_controller.dart:596:5)
    #76     _RawSecureSocket._sendReadEvent (dart:io/secure_socket.dart:1107:19)
    #77     Timer._createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:18:15)
    #78     _Timer._runTimers (dart:isolate-patch/timer_impl.dart:398:19)
    #79     _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:429:5)
    #80     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)
    [VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: MissingPluginException(No implementation found for method createPeerConnection on channel FlutterWebRTC.Method)
    #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:294:7)
    <asynchronous suspension>
    #1      RTCFactoryNative.createPeerConnection (package:flutter_webrtc/src/native/factory_impl.dart:40:22)
    <asynchronous suspension>
    #2      Negotiator._startPeerConnection (package:peerdart/src/negotiator.dart:154:9)
    <asynchronous suspension>
    #3      Negotiator.startConnection (package:peerdart/src/negotiator.dart:17:28)
    <asynchronous suspension>
    [VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: Cannot fire new event. Controller is already firing an event
    #0      _BroadcastStreamController.close (dart:async/broadcast_stream_controller.dart:265:24)
    #1      StreamEventEmitter.close (package:events_emitter/emitters/stream_event_emitter.dart:117:30)
    #2      Socket._cleanup (package:peerdart/src/socket.dart:149:5)
    #3      Socket.dispose (package:peerdart/src/socket.dart:97:5)
    #4      Peer.disconnect (package:peerdart/src/peer.dart:381:12)
    #5      Peer._abort (package:peerdart/src/peer.dart:307:7)
    #6      Peer._handleMessage (package:peerdart/src/peer.dart:168:9)
    #7      Peer._createServerConnection.<anonymous closure> (package:peerdart/src/peer.dart:121:7)
    
    bug 
    opened by garv-shah 3
  • On data event no being emitted on the DataConnection object

    On data event no being emitted on the DataConnection object

    Hi there,

    Following along from the referenced peerJS documentation link it seems that you should be able to listen for an on data event on the DataConnection object given back to you when an on connection event is triggered. I don't seem to be able to get that to work though. When sending the message I seem to only get on data event when listening on the peer object.

    I need it on the DataConnection so I can send a reply to the correct remote connection. Is this an issue or am I doing this incorrectly?

    Thanks in advance!

      var peer = Peer();
    
      peer.once("open").asStream().listen((event) {
        connected = true;
        print("Connection established");
      });
    
     
      peer.on<DataConnection>("connection").listen((connection) {
        //Connection of remote peer
        connection.on("open").listen((event) {});
    
        connection.on("data").listen((event) {
          //This never runs
          print("inner loop");
        });
    
        // On peer closed.
        connection.on("close").listen((event) {});
      });
    
      peer.on("data").listen((data) {
        //This always runs
        print("Outer reader worked");
      });
    }
    
    opened by SamORichards 3
  • i am getting this error when i am using your example

    i am getting this error when i am using your example

    E/flutter ( 4031): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String?' E/flutter ( 4031): #0 new PeerConnectOption.fromMap (package:peerdart/src/option_interfaces.dart:107:18) E/flutter ( 4031): #1 Peer._handleMessage (package:peerdart/src/peer.dart:220:59) E/flutter ( 4031): #2 Peer._createServerConnection. (package:peerdart/src/peer.dart:121:7) E/flutter ( 4031): #3 _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10) E/flutter ( 4031): #4 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11) E/flutter ( 4031): #5 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7) E/flutter ( 4031): #6 _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11) E/flutter ( 4031): #7 _MapStream._handleData (dart:async/stream_pipe.dart:218:10) E/flutter ( 4031): #8 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13) E/flutter ( 4031): #9 _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10) E/flutter ( 4031): #10 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11) E/flutter ( 4031): #11 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7) E/flutter ( 4031): #12 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:63:11) E/flutter ( 4031): #13 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11) E/flutter ( 4031): #14 _WhereTypeStreamSink.add (package:rxdart/src/transformers/where_type.dart:11:19) E/flutter ( 4031): #15 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:111:24) E/flutter ( 4031): #16 _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10) E/flutter ( 4031): #17 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11) E/flutter ( 4031): #18 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7) E/flutter ( 4031): #19 _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11) E/flutter ( 4031): #20 _WhereStream._handleData (dart:async/stream_pipe.dart:195:12) E/flutter ( 4031): #21 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13) E/flutter ( 4031): #22 _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10) E/flutter ( 4031): #23 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11) E/flutter ( 4031): #24 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7) E/flutter ( 4031): #25 _SyncBroadcastStreamController._sendData. (dart:async/broadcast_stream_controller.dart:385:20) E/flutter ( 4031): #26 _BroadcastStreamController._forEachListener (dart:async/broadcast_stream_controller.dart:322:15) E/flutter ( 4031): #27 _SyncBroadcastStreamController._sendData (dart:async/broadcast_stream_controller.dart:384:5) E/flutter ( 4031): #28 _BroadcastStreamController.add (dart:async/broadcast_stream_controller.dart:244:5) E/flutter ( 4031): #29 StreamEventEmitter.emitEvent (package:events_emitter/emitters/stream_event_emitter.dart:53:51) E/flutter ( 4031): #30 StreamEventEmitter.emit (package:events_emitter/emitters/stream_event_emitter.dart:92:40) E/flutter ( 4031): #31 Socket.start. (package:peerdart/src/socket.dart:54:7) E/flutter ( 4031): #32 _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10) E/flutter ( 4031): #33 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11) E/flutter ( 4031): #34 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7) E/flutter ( 4031): #35 _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11) E/flutter ( 4031): #36 _HandleErrorStream._handleData (dart:async/stream_pipe.dart:253:10) E/flutter ( 4031): #37 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13) E/flutter ( 4031): #38 _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10) E/flutter ( 4031): #39 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11) E/flutter ( 4031): #40 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7) E/flutter ( 4031): #41 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19) E/flutter ( 4031): #42 _StreamController._add (dart:async/stream_controller.dart:648:7) E/flutter ( 4031): #43 _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10) E/flutter ( 4031): #44 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11) E/flutter ( 4031): #45 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7) E/flutter ( 4031): #46 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19) E/flutter ( 4031): #47 _StreamController._add (da

    opened by Basim2Shaban 3
  • Unable to connect to video call room

    Unable to connect to video call room

    I am not sure what happening

    flutter: PeerDart:  Socket open
    flutter: PeerDart:  Server message received:{type: OPEN}
    flutter: Instance of 'MediaStreamNative'
    flutter: PeerDart:  Creating RTCpeerConnection?.
    flutter: PeerDart:  add connection ConnectionType.Media:mc_nfrwgem465 to peerId:demo
    flutter: Instance of 'MediaConnection'
    flutter: PeerDart:  Listening for ICE candidates.
    flutter: PeerDart:  Listening for data channel
    flutter: PeerDart:  Listening for remote stream
    flutter: PeerDart:  add tracks from stream F895A6C2-F06D-460C-8B34-2780EA9BFC54 to peer connection
    flutter: PeerDart:  Created offer.
    flutter: PeerDart:  Set localDescription: Instance of 'RTCSessionDescription' for demo
    flutter: PeerDart:  Received ICE candidates for demo: Instance of 'RTCIceCandidate'
    flutter: PeerDart:  Received ICE candidates for demo: Instance of 'RTCIceCandidate'
    flutter: PeerDart:  Received ICE candidates for demo: Instance of 'RTCIceCandidate'
    flutter: PeerDart:  Received ICE candidates for demo: Instance of 'RTCIceCandidate'
    flutter: PeerDart:  Received ICE candidates for demo: Instance of 'RTCIceCandidate'
    flutter: PeerDart:  Received ICE candidates for demo: Instance of 'RTCIceCandidate'
    flutter: PeerDart:  Received ICE candidates for demo: Instance of 'RTCIceCandidate'
    flutter: PeerDart:  Received ICE candidates for demo: Instance of 'RTCIceCandidate'
    flutter: PeerDart:  Server message received:{type: EXPIRE, src: demo, dst: ed9bfe76-cc1d-41d8-b286-8af33658f014}
    
    opened by ponnamkarthik 3
  • Add trailing slash to custom paths

    Add trailing slash to custom paths

    Hi! I tried using peerdart with my own server and kept getting an error retrieving the ID. I checked the URL that it generated and it turned out that the URL is missing a slash. This should fix it. Please let me know your thoughts.

    Thanks!

    opened by theniceboy 3
  • Tutorial for example

    Tutorial for example

    Is there any setup tutorial to run the example? like server setup, signaling, turn, stun,...

    Should I use this one? https://github.com/peers/peerjs-server

    Thank you :)

    opened by siisee11 2
  • Example registering listen even for data on the wrong object.

    Example registering listen even for data on the wrong object.

    Hi there!

    Really interested in this package and have been trying to use it for a simple example to try it out!

    I have been trying to implement a basic data transfer. The example has the listen for the data event on the dataconnection object returned by the peer.connect("PEERS ID") method. However in the dataconnection.dart file in the _handleDataMessage method the event is emitted on the provider variable which is the Peer object, not the super (baseconnection) like the open event. Not sure which is the correct behavior, either updating the docs and examples or changing to super. My first is it likely should be on the super (baseconnection) so we know where the data is specifically coming from, but, not sure if that is correct.

    opened by SamORichards 1
  • I have issue in my Flutter omegle clone app

    I have issue in my Flutter omegle clone app

    I can video call randomly but issues is that i can't see other people video also after video disconnected audio still working

    https://github.com/Ayushpanditmoto/Flutter_Omegle

    opened by Ayushpanditmoto 2
Releases(0.5.0)
Owner
Muhammed Kaplan
22y/o
Muhammed Kaplan
WebRTC plugin for Flutter Mobile/Desktop/Web

Flutter-WebRTC WebRTC plugin for Flutter Mobile/Desktop/Web Sponsored with ?? by Enterprise Grade APIs for Feeds & Chat. Try the Flutter Chat tutorial

Flutter WebRTC 3.4k Jan 8, 2023
video call with WebRTC and Flutter

Video Call Flutter App ?? Description: This is sandbox video call application using Flutter and WebRTC, you can call from browser to browser, phone to

Dao Hong Vinh 21 Nov 9, 2022
Video call with WebRTC and Flutter

This is sandbox video call application using Flutter and WebRTC, you can call from browser to browser, phone to phone, browser to phone and opposite.

Dao Hong Vinh 21 Nov 9, 2022
Demo for flutter-webrtc

flutter-webrtc-demo Flutter WebRTC plugin Demo Online Demo: https://demo.cloudwebrtc.com:8086/ Usage git clone https://github.com/cloudwebrtc/flutter-

Flutter WebRTC 977 Dec 30, 2022
Sandbox video call application using Flutter and WebRTC

Video Call Flutter App ?? Description: This is sandbox video call application using Flutter and WebRTC, you can call from browser to browser, phone to

Dao Hong Vinh 21 Nov 9, 2022
A simple YouTube Music Client written in Dart using Flutter Framework with @microsoft Fluent design guidlines

A simple YouTube Music Client written in Dart using Flutter Framework with @microsoft Fluent design guidlines

Suraj Pratap Singh 123 Jan 7, 2023
A simple video streaming application made with Dart, JavaScript, HTML, CSS

streamZ A simple video streaming application made with Dart, JS, HTML, CSS & ❤️ Show some ❤️ by putting ⭐ Recently I wrote an article, explaining how

Anjan Roy 28 Nov 23, 2021
Mpv dart - MPV player's JSON IPC binding for Dart

MPV Dart MPV Player's JSON-IPC binding for Dart (Flutter Supported) Installation

Kingkor Roy Tirtho 11 Nov 24, 2022
A simple music player made using Flutter.

Music Player App This is a beautiful music player, developed using Flutter. Features Play any song included in Flutter Assets Background Play Beautifu

Hash Studios 15 May 21, 2022
Flutter-Music-Player - A simple music player app that let you play mp3 songs with some customization feature with a rich user interface

Flutter-Music-Player - A simple music player app that let you play mp3 songs with some customization feature with a rich user interface

Ashirbad Swain 6 Jan 4, 2023
This is a flutter package of video player. it's a very simple and easy to use.

This is a flutter package of video player. it's a very simple and easy to use.

初冬 184 Nov 18, 2022
Simple plugin to implement Picture in Picture support for Android only.

flutter_pip Simple plugin to implement Picture in Picture support for Android only. Android Setup You need to declare that your app supports Picture i

null 0 Dec 22, 2021
Image Editor Plugin with simple, easy support for image editing using Paints, Text, Filters, Emoji and Sticker like stories.

ImageEditorPro Image Editor Plugin with simple, easy support for image editing using Paints, Text, Filters, Emoji and Sticker like stories. To start w

Zeeshan 206 Dec 2, 2022
Born from needs of an amateur musician, Rythm Shuffle provides a dynamic exercise with a simple and elegant interface for customization.

Rythm-Shuffle Born from needs of an amateur musician, Rythm Shuffle provides a dynamic exercise with a simple and elegant interface for customization.

Emre Karadağ 1 May 10, 2022
This Flutter plugin created to show how to use OpenCV and ZXing C++ libraries natively in Flutter with Dart FFI using the camera stream

OpenCV and ZXing C++ libraries natively in Flutter with Dart FFI using the camera stream

Khoren Markosyan 17 Oct 21, 2022
A small image utils package for flutter written in dart.

flutter_simple_image_utils A small image utils package for flutter written in dart. Usage: import 'package:flutter_simple_image_utils/flutter_simple_i

Hamlet D'Arcy 1 Nov 18, 2021
Unleash Client SDK for Dart and Flutter

Unleash Client SDK for Dart and Flutter This is an unofficial Unleash Client SDK

null 0 Oct 6, 2021
Apps For streaming audio via url (Android, iOS & Web ). Developed with Dart & Flutter ❤

Flutter Sleep App (Dicoding Submission : Learn to Make Flutter Apps for Beginners) Stream Great collection of high-definition sounds that can be mixed

Utrodus Said Al Baqi 13 Nov 29, 2022
Dart package for reading and writing wav files

wav Simple tools for reading and writing WAV files. Written in pure Dart, with no dependencies. This package currently supports reading and writing 8/

Liam Appelbe 8 Dec 28, 2022