Git Product home page Git Product logo

peerdart's Introduction

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

License

PeerDart is licensed under the MIT License.

peerdart's People

Contributors

mamena2020 avatar muhammedkpln avatar procodingtools avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

peerdart's Issues

Getting user data value "123" on reconnection

Cannot user data on subsequent reconnect, getting data as "123", on the peerdart but ok for browser. Note, the user data is ok on first connect. On reconnecting or closing and reopen, the user data has a value of "123". Any resolution or work around?

Android example not working

Describe the bug
Android app crashes when trying to connect to peer on Android device

To Reproduce
Run app on Android. try to connect to this app from another device or Web. Application crashed

Expected behavior
Application not crashed

Smartphone (please complete the following information):

  • Android emulator
  • Samsung Galaxy S20
  • Samsung Galaxy Tab 7

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");
  });
}

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

Data received two times

Hi,
I was using the data connection example code i was working perfectly but whenever i click the button send message to peer on the receiver side it was displayed two times is there any fix for that.

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)

Compatible with PeerJS?

I've been trying to connect from a website with peerjs to peerdart. I both tried running peerdart on Linux and on my android phone. I see the connection is being established, but I am unable to send data between them (both directions) (connection is still open).

I was wondering if peerdart is even compatible with peerjs, as it only claims to mirror the design of peerjs and not to be compatible with it?

I was using version 0.5.3.

Call received but instead of stream im getting these errors

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: No element
#0 Stream.first. (dart:async/stream.dart:1575:9)
#1 _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#2 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#3 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#4 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#5 _ForwardingStream._handleDone (dart:async/stream_pipe.dart:99:10)
#6 _ForwardingStreamSubscription._handleDone (dart:async/stream_pipe.dart:161:13)
#7 _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#8 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#9 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#10 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#11 _SinkTransformerStreamSubscription._close (dart:async/stream_transformers.dart:87:11)
#12 _EventSinkWrapper.close (dart:async/stream_transformers.dart:21:11)
#13 _WhereTypeStreamSink.close (package:rxdart/src/transformers/where_type.dart:19:31)
#14 _SinkTransformerStreamSubscription._handleDone (dart:async/stream_transformers.dart:132:24)
#15 _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#16 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#17 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#18 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#19 _ForwardingStream._handleDone (dart:async/stream_pipe.dart:99:10)
#20 _ForwardingStreamSubscription._handleDone (dart:async/stream_pipe.dart:161:13)
#21 _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#22 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#23 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#24 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#25 _SyncBroadcastStreamController._sendDone. (dart:async/broadcast_stream_controller.dart:399:22)
#26 _BroadcastStreamController._forEachListener (dart:async/broadcast_stream_controller.dart:322:15)
#27 _SyncBroadcastStreamController._sendDone (dart:async/broadcast_stream_controller.dart:398:7)
#28 _BroadcastStreamController.close (dart:async/broadcast_stream_controller.dart:268:5)
#29 StreamEventEmitter.close (package:events_emitter/emitters/stream_event_emitter.dart:117:30)
#30 Peer._handleMessage (package:peerdart/src/peer.dart:200:26)
#31 Peer._createServerConnection. (package:peerdart/src/peer.dart:121:7)
#32 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#33 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#34 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#35 _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
#36 _MapStream._handleData (dart:async/stream_pipe.dart:218:10)
#37 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
#38 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#39 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#40 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#41 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:63:11)
#42 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
#43 _WhereTypeStreamSink.add (package:rxdart/src/transformers/where_type.dart:11:19)
#44 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:111:24)
#45 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#46 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#47 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#48 _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
#49 _WhereStream._handleData (dart:async/stream_pipe.dart:195:12)
#50 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
#51 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#52 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#53 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#54 _SyncBroadcastStreamController._sendData. (dart:async/broadcast_stream_controller.dart:385:20)
#55 _BroadcastStreamController._forEachListener (dart:async/broadcast_stream_controller.dart:322:15)
#56 _SyncBroadcastStreamController._sendData (dart:async/broadcast_stream_controller.dart:384:5)
#57 _BroadcastStreamController.add (dart:async/broadcast_stream_controller.dart:244:5)
#58 StreamEventEmitter.emitEvent (package:events_emitter/emitters/stream_event_emitter.dart:53:51)
#59 StreamEventEmitter.emit (package:events_emitter/emitters/stream_event_emitter.dart:92:40)
#60 Socket.start. (package:peerdart/src/socket.dart:54:7)
#61 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#62 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#63 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#64 _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
#65 _HandleErrorStream._handleData (dart:async/stream_pipe.dart:253:10)
#66 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
#67 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#68 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#69 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#70 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:776:19)
#71 _StreamController._add (dart:async/stream_controller.dart:650:7)
#72 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#73 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#74 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#75 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:776:19)
#76 _StreamController._add (dart:async/stream_controller.dart:650:7)
#77 _StreamController.add (dart:async/stream_controller.dart:598:5)
#78 new _WebSocketImpl._fromSocket. (dart:_http/websocket_impl.dart:1144:21)
#79 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#80 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#81 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#82 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:63:11)
#83 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
#84 _WebSocketProtocolTransformer._messageFrameEnd (dart:_http/websocket_impl.dart:332:23)
#85 _WebSocketProtocolTransformer.add (dart:_http/websocket_impl.dart:226:46)
#86 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:111:24)
#87 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#88 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#89 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#90 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:776:19)
#91 _StreamController._add (dart:async/stream_controller.dart:650:7)
#92 _StreamController.add (dart:async/stream_controller.dart:598:5)
#93 _Socket._onData (dart:io-patch/socket_patch.dart:2381:41)
#94 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#95 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#96 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#97 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:776:19)
#98 _StreamController._add (dart:async/stream_controller.dart:650:7)
#99 _StreamController.add (dart:async/stream_controller.dart:598:5)
#100 _RawSecureSocket._sendReadEvent (dart:io/secure_socket.dart:1114:19)
#101 Timer._createTimer. (dart:async-patch/timer_patch.dart:18:15)
#102 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:398:19)
#103 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:429:5)
#104 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:189:12)

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: No element
#0 Stream.first. (dart:async/stream.dart:1575:9)
#1 _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#2 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#3 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#4 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#5 _ForwardingStream._handleDone (dart:async/stream_pipe.dart:99:10)
#6 _ForwardingStreamSubscription._handleDone (dart:async/stream_pipe.dart:161:13)
#7 _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#8 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#9 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#10 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#11 _SinkTransformerStreamSubscription._close (dart:async/stream_transformers.dart:87:11)
#12 _EventSinkWrapper.close (dart:async/stream_transformers.dart:21:11)
#13 _WhereTypeStreamSink.close (package:rxdart/src/transformers/where_type.dart:19:31)
#14 _SinkTransformerStreamSubscription._handleDone (dart:async/stream_transformers.dart:132:24)
#15 _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#16 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#17 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#18 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#19 _ForwardingStream._handleDone (dart:async/stream_pipe.dart:99:10)
#20 _ForwardingStreamSubscription._handleDone (dart:async/stream_pipe.dart:161:13)
#21 _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#22 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#23 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#24 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#25 _SyncBroadcastStreamController._sendDone. (dart:async/broadcast_stream_controller.dart:399:22)
#26 _BroadcastStreamController._forEachListener (dart:async/broadcast_stream_controller.dart:322:15)
#27 _SyncBroadcastStreamController._sendDone (dart:async/broadcast_stream_controller.dart:398:7)
#28 _BroadcastStreamController.close (dart:async/broadcast_stream_controller.dart:268:5)
#29 StreamEventEmitter.close (package:events_emitter/emitters/stream_event_emitter.dart:117:30)
#30 Peer._handleMessage (package:peerdart/src/peer.dart:200:26)
#31 Peer._createServerConnection. (package:peerdart/src/peer.dart:121:7)
#32 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#33 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#34 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#35 _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
#36 _MapStream._handleData (dart:async/stream_pipe.dart:218:10)
#37 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
#38 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#39 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#40 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#41 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:63:11)
#42 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
#43 _WhereTypeStreamSink.add (package:rxdart/src/transformers/where_type.dart:11:19)
#44 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:111:24)
#45 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#46 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#47 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#48 _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
#49 _WhereStream._handleData (dart:async/stream_pipe.dart:195:12)
#50 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
#51 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#52 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#53 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#54 _SyncBroadcastStreamController._sendData. (dart:async/broadcast_stream_controller.dart:385:20)
#55 _BroadcastStreamController._forEachListener (dart:async/broadcast_stream_controller.dart:322:15)
#56 _SyncBroadcastStreamController._sendData (dart:async/broadcast_stream_controller.dart:384:5)
#57 _BroadcastStreamController.add (dart:async/broadcast_stream_controller.dart:244:5)
#58 StreamEventEmitter.emitEvent (package:events_emitter/emitters/stream_event_emitter.dart:53:51)
#59 StreamEventEmitter.emit (package:events_emitter/emitters/stream_event_emitter.dart:92:40)
#60 Socket.start. (package:peerdart/src/socket.dart:54:7)
#61 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#62 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#63 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#64 _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
#65 _HandleErrorStream._handleData (dart:async/stream_pipe.dart:253:10)
#66 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
#67 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#68 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#69 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#70 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:776:19)
#71 _StreamController._add (dart:async/stream_controller.dart:650:7)
#72 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#73 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#74 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#75 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:776:19)
#76 _StreamController._add (dart:async/stream_controller.dart:650:7)
#77 _StreamController.add (dart:async/stream_controller.dart:598:5)
#78 new _WebSocketImpl._fromSocket. (dart:_http/websocket_impl.dart:1144:21)
#79 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#80 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#81 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#82 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:63:11)
#83 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
#84 _WebSocketProtocolTransformer._messageFrameEnd (dart:_http/websocket_impl.dart:332:23)
#85 _WebSocketProtocolTransformer.add (dart:_http/websocket_impl.dart:226:46)
#86 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:111:24)
#87 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#88 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#89 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#90 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:776:19)
#91 _StreamController._add (dart:async/stream_controller.dart:650:7)
#92 _StreamController.add (dart:async/stream_controller.dart:598:5)
#93 _Socket._onData (dart:io-patch/socket_patch.dart:2381:41)
#94 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#95 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#96 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#97 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:776:19)
#98 _StreamController._add (dart:async/stream_controller.dart:650:7)
#99 _StreamController.add (dart:async/stream_controller.dart:598:5)
#100 _RawSecureSocket._sendReadEvent (dart:io/secure_socket.dart:1114:19)
#101 Timer._createTimer. (dart:async-patch/timer_patch.dart:18:15)
#102 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:398:19)
#103 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:429:5)
#104 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:189:12)

xml: Ringing...Call from Prabhu
OnMediaSourceRemoved: 0
OnMediaSourceAdded: 0
sources: 1
OnMediaSourceThumbnailChanged: 0
OnMediaSourceThumbnailChanged: 0
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: Cannot add new events after calling close
#0 _BroadcastStreamController.add (dart:async/broadcast_stream_controller.dart:243:24)
#1 StreamEventEmitter.emitEvent (package:events_emitter/emitters/stream_event_emitter.dart:53:51)
#2 StreamEventEmitter.emit (package:events_emitter/emitters/stream_event_emitter.dart:92:40)
#3 Negotiator._setupListeners. (package:peerdart/src/negotiator.dart:263:18)
#4 RTCPeerConnectionNative.eventListener (package:flutter_webrtc/src/native/rtc_peerconnection_impl.dart:84:31)
#5 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#6 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#7 _DelayedData.perform (dart:async/stream_impl.dart:515:14)
#8 _PendingEvents.handleNext (dart:async/stream_impl.dart:620:11)
#9 _PendingEvents.schedule. (dart:async/stream_impl.dart:591:7)
#10 _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
#11 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: Cannot add new events after calling close
#0 _BroadcastStreamController.add (dart:async/broadcast_stream_controller.dart:243:24)
#1 StreamEventEmitter.emitEvent (package:events_emitter/emitters/stream_event_emitter.dart:53:51)
#2 StreamEventEmitter.emit (package:events_emitter/emitters/stream_event_emitter.dart:92:40)
#3 MediaConnection.addStream (package:peerdart/src/mediaconnection.dart:32:11)
#4 Negotiator._addStreamToMediaConnection (package:peerdart/src/negotiator.dart:328:21)
#5 Negotiator._setupListeners. (package:peerdart/src/negotiator.dart:297:9)
#6 RTCPeerConnectionNative.eventListener (package:flutter_webrtc/src/native/rtc_peerconnection_impl.dart:181:18)
#7 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#8 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#9 _DelayedData.perform (dart:async/stream_impl.dart:515:14)
#10 _PendingEvents.handleNext (dart:async/stream_impl.dart:620:11)
#11 _PendingEvents.schedule. (dart:async/stream_impl.dart:591:7)
#12 _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
#13 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)

Communication issue between Android and Web

Describe the bug
Web app can sent only Binary messages to Android app

To Reproduce

  1. Fix #40
  2. Run Flutter app on Android and Web
  3. Connect Web to Android (try different networks)
  4. Try to sent String message

Expected behavior
Message is received on Android device

Actual behavior
Only binary messages are received. String messages are not handled

Devices:

  • Chrome Web
  • Samsung Galaxy S20
  • Samsung Galaxy Tab 7

cannot close the media connection

I used the example code provided for the package and added an extra button to close the mediaconnection using the close() function explained in peerjs documentation when user clicks the button. But it never triggers the close event on either side of the connection and it is not closing the media connection.

Error when a peer disconnects

When a peer disconnects an error is thrown bad state cannot fire event after calling close is there any fix or solution for this problem.

Iphone camera not working

Hello there!
I am using the package and i works well with android but on iphone physical device even though i have asked the persmissions and gave them the front camera is not open.

After disposing and reinitiate the Peer still stream not sending to the user, Due to Stream controller closed

OnMediaSourceRemoved: 0
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: No element
#0 Stream.first. (dart:async/stream.dart:1575:9)
#1 _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#2 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#3 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#4 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#5 _ForwardingStream._handleDone (dart:async/stream_pipe.dart:99:10)
#6 _ForwardingStreamSubscription._handleDone (dart:async/stream_pipe.dart:161:13)
#7 _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#8 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#9 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#10 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#11 _SinkTransformerStreamSubscription._close (dart:async/stream_transformers.dart:87:11)
#12 _EventSinkWrapper.close (dart:async/stream_transformers.dart:21:11)
#13 _WhereTypeStreamSink.close (package:rxdart/src/transformers/where_type.dart:19:31)
#14 _SinkTransformerStreamSubscription._handleDone (dart:async/stream_transformers.dart:132:24)
#15 _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#16 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#17 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#18 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#19 _ForwardingStream._handleDone (dart:async/stream_pipe.dart:99:10)
#20 _ForwardingStreamSubscription._handleDone (dart:async/stream_pipe.dart:161:13)
#21 _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#22 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#23 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#24 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#25 _SyncBroadcastStreamController._sendDone. (dart:async/broadcast_stream_controller.dart:399:22)
#26 _BroadcastStreamController._forEachListener (dart:async/broadcast_stream_controller.dart:322:15)
#27 _SyncBroadcastStreamController._sendDone (dart:async/broadcast_stream_controller.dart:398:7)
#28 _BroadcastStreamController.close (dart:async/broadcast_stream_controller.dart:268:5)
#29 StreamEventEmitter.close (package:events_emitter/emitters/stream_event_emitter.dart:117:30)
#30 Peer._handleMessage (package:peerdart/src/peer.dart:200:26)
#31 Peer._createServerConnection. (package:peerdart/src/peer.dart:121:7)
#32 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#33 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#34 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#35 _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
#36 _MapStream._handleData (dart:async/stream_pipe.dart:218:10)
#37 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
#38 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#39 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#40 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#41 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:63:11)
#42 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
#43 _WhereTypeStreamSink.add (package:rxdart/src/transformers/where_type.dart:11:19)
#44 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:111:24)
#45 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#46 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#47 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#48 _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
#49 _WhereStream._handleData (dart:async/stream_pipe.dart:195:12)
#50 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
#51 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#52 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#53 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#54 _SyncBroadcastStreamController._sendData. (dart:async/broadcast_stream_controller.dart:385:20)
#55 _BroadcastStreamController._forEachListener (dart:async/broadcast_stream_controller.dart:322:15)
#56 _SyncBroadcastStreamController._sendData (dart:async/broadcast_stream_controller.dart:384:5)
#57 _BroadcastStreamController.add (dart:async/broadcast_stream_controller.dart:244:5)
#58 StreamEventEmitter.emitEvent (package:events_emitter/emitters/stream_event_emitter.dart:53:51)
#59 StreamEventEmitter.emit (package:events_emitter/emitters/stream_event_emitter.dart:92:40)
#60 Socket.start. (package:peerdart/src/socket.dart:54:7)
#61 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#62 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#63 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#64 _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
#65 _HandleErrorStream._handleData (dart:async/stream_pipe.dart:253:10)
#66 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
#67 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#68 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#69 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#70 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:776:19)
#71 _StreamController._add (dart:async/stream_controller.dart:650:7)
#72 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#73 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#74 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#75 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:776:19)
#76 _StreamController._add (dart:async/stream_controller.dart:650:7)
#77 _StreamController.add (dart:async/stream_controller.dart:598:5)
#78 new _WebSocketImpl._fromSocket. (dart:_http/websocket_impl.dart:1144:21)
#79 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#80 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#81 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#82 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:63:11)
#83 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
#84 _WebSocketProtocolTransformer._messageFrameEnd (dart:_http/websocket_impl.dart:332:23)
#85 _WebSocketProtocolTransformer.add (dart:_http/websocket_impl.dart:226:46)
#86 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:111:24)
#87 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#88 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#89 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#90 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:776:19)
#91 _StreamController._add (dart:async/stream_controller.dart:650:7)
#92 _StreamController.add (dart:async/stream_controller.dart:598:5)
#93 _Socket._onData (dart:io-patch/socket_patch.dart:2381:41)
#94 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#95 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#96 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#97 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:776:19)
#98 _StreamC OnMediaSourceAdded: 0
ontroller._add (dart:async/stream_controller.dart:650:7)
#99 _StreamController.add (dart:async/stream_controller.dart:598:5)
#100 _RawSecureSocket._sendReadEvent (dart:io/secure_socket.dart:1114:19)
#101 Timer._createTimer. (dart:async-patch/timer_patch.dart:18:15)
#102 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:398:19)
#103 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:429:5)
#104 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:189:12)

sources: 1
[log] CALL_RECEIVING: Prabhu
OnMediaSourceThumbnailChanged: 0
OnMediaSourceThumbnailChanged: 0
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: Cannot add new events after calling close
#0 _BroadcastStreamController.add (dart:async/broadcast_stream_controller.dart:243:24)
#1 StreamEventEmitter.emitEvent (package:events_emitter/emitters/stream_event_emitter.dart:53:51)
#2 StreamEventEmitter.emit (package:events_emitter/emitters/stream_event_emitter.dart:92:40)
#3 Negotiator._setupListeners. (package:peerdart/src/negotiator.dart:263:18)
#4 RTCPeerConnectionNative.eventListener (package:flutter_webrtc/src/native/rtc_peerconnection_impl.dart:84:31)
#5 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#6 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#7 _DelayedData.perform (dart:async/stream_impl.dart:515:14)
#8 _PendingEvents.handleNext (dart:async/stream_impl.dart:620:11)
#9 _PendingEvents.schedule. (dart:async/stream_impl.dart:591:7)
#10 _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
#11 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: Cannot add new events after calling close
#0 _BroadcastStreamController.add (dart:async/broadcast_stream_controller.dart:243:24)
#1 StreamEventEmitter.emitEvent (package:events_emitter/emitters/stream_event_emitter.dart:53:51)
#2 StreamEventEmitter.emit (package:events_emitter/emitters/stream_event_emitter.dart:92:40)
#3 MediaConnection.addStream (package:peerdart/src/mediaconnection.dart:32:11)
#4 Negotiator._addStreamToMediaConnection (package:peerdart/src/negotiator.dart:328:21)
#5 Negotiator._setupListeners. (package:peerdart/src/negotiator.dart:297:9)
#6 RTCPeerConnectionNative.eventListener (package:flutter_webrtc/src/native/rtc_peerconnection_impl.dart:181:18)
#7 _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#8 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#9 _DelayedData.perform (dart:async/stream_impl.dart:515:14)
#10 _PendingEvents.handleNext (dart:async/stream_impl.dart:620:11)
#11 _PendingEvents.schedule. (dart:async/stream_impl.dart:591:7)
#12 _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
#13 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)

webrtc p2p connection video freezes

in p2p connection when I'm using RTCVideoView for both local and remote user it's working fine.

Now I have the scenario when I want to replace the RTCVideoView local widget by the CameraPreview ( needed for Machine learning scenario ), the p2p connection is established but local video is freezes

any idea how we can override the RTCVideoView local video by my own camera view widget ?

This is a full main.dart example when we can reproduce issue easy :

How to reproduce :

  1. run main on Device 1
  2. run main on Device 2
  3. copy the connection ID of Device 1 on the TextField of Device 2
  4. click on connect

Observed : Remote video working fine but local video freezes

import 'dart:math';

import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
import 'package:flutter_webrtc/flutter_webrtc.dart' as flutter_webrtc;
import 'package:peerdart/peerdart.dart';

late List<CameraDescription> _cameras;

Future<void> main() async {
  try {
    WidgetsFlutterBinding.ensureInitialized();
    _cameras = await availableCameras();
  } on CameraException catch (e) {}
  runApp(MaterialApp(
    home: WebRTCP2PDemo(cameras: _cameras),
  ));
}

class WebRTCP2PDemo extends StatefulWidget {
  final List<CameraDescription>? cameras;
  const WebRTCP2PDemo({Key? key, required this.cameras}) : super(key: key);

  @override
  _WebRTCP2PDemoState createState() => _WebRTCP2PDemoState();
}

class _WebRTCP2PDemoState extends State<WebRTCP2PDemo> {
  final TextEditingController _controller = TextEditingController();
  late Peer peer = Peer(options: PeerOptions(debug: LogLevel.All), id: GeneratePeerId());
  final _remoteRenderer = flutter_webrtc.RTCVideoRenderer();
  bool inCall = false;
  CameraController? _cameraController;
  String? peerId;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
          child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          SizedBox(
            height: 50,
          ),
          _renderState(),
          const Text(
            'Connection ID:',
          ),
          SelectableText(
            peerId ?? '',
            style: TextStyle(fontSize: 48),
          ),
          TextField(
            textAlign: TextAlign.center,
            keyboardType: TextInputType.number,
            controller: _controller,
            style: TextStyle(fontSize: 48),
          ),
          ElevatedButton(onPressed: _connect, child: const Text("connect")),
          inCall
              ? Expanded(
                  child: Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Container(
                      decoration: BoxDecoration(
                        border: Border.all(width: 3.0, color: Colors.black38),
                        color: Colors.transparent,
                        borderRadius: BorderRadius.all(Radius.circular(5.0)),
                      ),
                      child: SizedBox(
                        height: MediaQuery.of(context).size.height / 4,
                        width: MediaQuery.of(context).size.width,
                        child: flutter_webrtc.RTCVideoView(
                          _remoteRenderer,
                        ),
                      ),
                    ),
                  ),
                )
              : Expanded(
                  child: Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Container(
                      decoration: BoxDecoration(
                        border: Border.all(width: 3.0, color: Colors.black38),
                        color: Colors.transparent,
                        borderRadius: BorderRadius.all(Radius.circular(5.0)),
                      ),
                      child: SizedBox(
                        height: MediaQuery.of(context).size.height / 4,
                        width: MediaQuery.of(context).size.width,
                        child: Center(
                          child: Text(
                            'waiting for remote user ...',
                            textAlign: TextAlign.center,
                            style: TextStyle(
                              fontSize: 28,
                            ),
                          ),
                        ),
                      ),
                    ),
                  ),
                ),
          Expanded(
            child: Padding(
              padding: const EdgeInsets.all(8.0),
              child: Container(
                decoration: BoxDecoration(
                  border: Border.all(width: 3.0, color: Colors.black38),
                  color: Colors.transparent,
                  borderRadius: BorderRadius.all(Radius.circular(5.0)),
                ),
                child: SizedBox(
                  height: MediaQuery.of(context).size.height / 3,
                  width: MediaQuery.of(context).size.width,
                  child: CameraPreview(_cameraController!),
                ),
              ),
            ),
          ),
        ],
      )),
    );
  }

  Future initCamera(CameraDescription cameraDescription) async {
    _cameraController = CameraController(cameraDescription, ResolutionPreset.high);
    try {
      await _cameraController?.initialize().then((_) {
        if (!mounted) return;
        setState(() {});
      });
    } on CameraException catch (e) {
      debugPrint("camera error $e");
    }
  }

  Widget _renderState() {
    Color bgColor = inCall ? Colors.green : Colors.grey;
    Color txtColor = Colors.white;
    String txt = inCall ? "Connected" : "Standby";
    return Container(
      decoration: BoxDecoration(color: bgColor),
      child: Text(
        txt,
        style: Theme.of(context).textTheme.titleLarge?.copyWith(color: txtColor),
      ),
    );
  }

  String GeneratePeerId() {
    Random random = Random();
    int min = 100000;
    int max = 999999;
    int randomNumber = min + random.nextInt(max - min);
    return randomNumber.toString();
  }

  @override
  void initState() {
    super.initState();
    initCamera(widget.cameras![1]);
    peer.on("open").listen((id) {
      setState(() {
        peerId = peer.id;
      });
    });
    _remoteRenderer.initialize();
    peer.on<MediaConnection>("call").listen(
      (call) async {
        final mediaStream = await flutter_webrtc.navigator.mediaDevices.getUserMedia({
          'video': {
            'facingMode': 'user',
          },
          "audio": false
        });
        call.answer(mediaStream);
        call.on("close").listen((event) {
          setState(() {
            inCall = false;
          });
        });
        call.on<flutter_webrtc.MediaStream>("stream").listen((event) {
          _remoteRenderer.srcObject = event;
          setState(() {
            inCall = true;
          });
        });
      },
    );
  }

  void _connect() async {
    FocusManager.instance.primaryFocus?.unfocus();
    final mediaStream = await flutter_webrtc.navigator.mediaDevices.getUserMedia({
      'video': {
        'facingMode': 'user',
      },
      "audio": false
    });
    final conn = peer.call(_controller.text, mediaStream);

    conn.on("close").listen((event) {
      setState(() {
        inCall = false;
      });
    });

    conn.on<flutter_webrtc.MediaStream>("stream").listen((event) {
      _remoteRenderer.srcObject = event;
      setState(() {
        inCall = true;
      });
    });
  }

  @override
  void dispose() {
    peer.dispose();
    _cameraController?.dispose();
    _remoteRenderer.dispose();
    super.dispose();
  }
}

(base) ➜ ~ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.13.1, on macOS 13.1 22C65 darwin-arm64, locale en-FR)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[✓] Xcode - develop for iOS and macOS (Xcode 14.2)
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.0)
[✓] Android Studio (version 2021.1)
[✓] IntelliJ IDEA Community Edition (version 2022.3.1)
[✓] VS Code (version 1.79.2)
[✓] Connected device (3 available)
[✓] Network resources

• No issues found!

Unhandled Exception: type 'String' is not a subtype of type 'Map<String, dynamic>'

Describe the bug
An unexpected exception on new Peer instantiation

I initialized the Peer instance with the following code:

Peer? connectPeer() {
  try {
    final peer = Peer(
      options: PeerOptions(
        secure: true,
        host: baseURL.replaceAll("https://", ""),
        path: "/peer/peer",
        debug: LogLevel.All,
      ),
    );
    return peer;
  } catch (e) {
    return null;
  }
}

I receive the success messages as expected:

I/flutter (25179): PeerDart:  Socket open
I/flutter (25179): PeerDart:  Server message received:{type: OPEN}
I/flutter (25179): PeerDart:  Server message received:Hello World!

Although, after that, I face this error:

E/flutter (25179): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: type 'String' is not a subtype of type 'Map<String, dynamic>'
E/flutter (25179): #0      Socket.start.<anonymous closure>

Smartphone (please complete the following information):

  • Device: Samsung A30
  • OS: Android 12
  • Peerdart version: latest

Cannot add new events after calling close

image

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: Cannot add new events after calling close
#0 _BroadcastStreamController.add (dart:async/broadcast_stream_controller.dart:243:24)
#1 StreamEventEmitter.emitEvent (package:events_emitter/emitters/stream_event_emitter.dart:53:51)
#2 StreamEventEmitter.emit (package:events_emitter/emitters/stream_event_emitter.dart:92:40)
#3 Socket.start. (package:peerdart/src/socket.dart:64:7)
#4 _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#5 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#6 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#7 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#8 _ForwardingStream._handleDone (dart:async/stream_pipe.dart:99:10)
#9 _ForwardingStreamSubscription._handleDone (dart:async/stream_pipe.dart:161:13)
#10 _RootZone.runGuarded (dart:async/zone.dart:1582:10)
#11 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#12 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#13 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#14 _SyncStreamControllerDispatch._sendDone (dart:async/stream_controller.dart:784:19)
#15 _StreamController._closeUnchecked (dart:async/stream_controller.dart:639:7)
#16 _StreamController.close (dart:async/stream_controller.dart:632:5)
#17 _RootZone.run (dart:async/zone.dart:1655:54)
#18 _FutureListener.handleWhenComplete (dart:async/future_impl.dart:190:18)
#19 Future._propagateToListeners.handleWhenCompleteCallback (dart:async/future_impl.dart:754:39)
#20 Future._propagateToListeners (dart:async/future_impl.dart:810:11)
#21 Future._completeWithValue (dart:async/future_impl.dart:584:5)
#22 Future._asyncCompleteWithValue. (dart:async/future_impl.dart:657:7)
#23 _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
#24 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)

example not work

Describe the bug
app crash when click connect button on example code

peerdart: 0.5 and 0.3.2
flutter 3.3.10

To Reproduce

Expected behavior

Screenshots
image

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]
  • Peerdart version

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]
  • Peerdart version

Additional context
Add any other context about the problem here.

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.

Example app doesn't work

I'm trying to run example app on mobile it build and install successfully, but after share the peer id to the other device and try to connect it doesn't.
the error log:
getUserMedia(): DOMException, NotAllowedError E/flutter (30108): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Unable to getUserMedia: getUserMedia(): DOMException, NotAllowedError E/flutter (30108): #0 MediaDeviceNative.getUserMedia (package:flutter_webrtc/src/native/mediadevices_impl.dart:48:7) E/flutter (30108): <asynchronous suspension> E/flutter (30108): #1 _CallExampleState.connect (package:example/call_example.dart:65:25) E/flutter (30108): <asynchronous suspension>

I tried the web demo and for 2 separate devices it doesn't work also.

package version the latest
Flutter version: 3.10

Pull request

Hi.
First, I want to thank you for this great port.
Just a small bug was discovered and I wanted to collaborate on this project.
Please check this PR#23

Thanks.

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}

Call connection issue when peers are outside the local network

Hi developers! First of all want to say great thanks for your plugin! But I can not use it at this moment because of next issue:

Describe the bug
1Android -> Android connection can not be established in different Wifi networks. Let's say we have device A and device B. When I'm trying to connect device A to device B, I have Suspended state on device A, and Connected state on device B. Messages between devices are not working.

To Reproduce
Steps to reproduce the behavior:

  1. Fix this issue #40
  2. Run Android application on 2 devices (let's say A and B)
  3. A and B are in different networks
  4. A tries to connect to B

Expected behavior
A is successfully connected to B

Actual behavior
Device A has Suspended status. Device B has Connected status. There are not possible to sent any messages

Smartphone (please complete the following information):

  • Android emulator
  • Samsung galaxy S20
  • Samsung galaxy Tab 7

How to handle client disconnection?

Hi, thank you for the fantastic package! I have a quick question regarding the client events. How do you handle client disconnection?

Thanks!
David

[Clarification]: Can we access audio received in UInt8List format?

Hi Developer,
I wanted to check if it is possible to receive the byte stream of the audio. I want to get access to the audio received in the live call to send it to a speech recognition system which accepts raw PCM16 audio data. Is it possible, to somehow get access to the same while the live call is going on?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.