diff --git a/CHANGELOG.md b/CHANGELOG.md index 0cb10c3b..a39555bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ +## 1.0.6 +- **ENHAN**: Update dependencies + ## 1.0.5 -- webrtc client lib updated added option to : force stream quality , fix IOS screen rotation and audio issues +- **FEAT**: Webrtc client lib updated added option to : force stream quality , fix IOS screen rotation and audio issues ## 1.0.4 diff --git a/example/Conference/lib/conference.dart b/example/Conference/lib/conference.dart index a1e1f2ee..808145a0 100644 --- a/example/Conference/lib/conference.dart +++ b/example/Conference/lib/conference.dart @@ -13,7 +13,7 @@ class Conference extends StatefulWidget { String ip; String id; List> iceServers = [ - {'url': 'stun:stun.l.google.com:19302'}, + {'url': 'stun:stun.l.google.com:19302'}, ]; String roomId; bool userscreen; @@ -57,90 +57,86 @@ class _ConferenceState extends State { void _connect() async { AntMediaFlutter.connect( - //host - widget.ip, - //streamID - widget.id, - //roomID - widget.roomId, - AntMediaType.Conference, - widget.userscreen, - - //onStateChange - (HelperState state) { - switch (state) { - case HelperState.CallStateNew: - setState(() { - _inCalling = true; - }); - break; - case HelperState.CallStateBye: - setState(() { - _localRenderer.srcObject = null; - _inCalling = false; - Navigator.pop(context); - }); - break; - case HelperState.ConnectionOpen: - break; - case HelperState.ConnectionClosed: - break; - case HelperState.ConnectionError: - break; - } - }, - - //onLocalStream - ((stream) { - setState(() { - _localRenderer.srcObject = stream; - }); - }), - - //onAddRemoteStream - ((stream) {}), - - // onDataChannel - (dc) {}, - - (dc, message, isReceived) { - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text( - (isReceived ? "Received:" : "Sent:") + " " + message.text, - style: const TextStyle(color: Colors.white), - ), - backgroundColor: Colors.blue, - )); - }, - - //onUpdateConferenceUser - (streams) { - List widgetlist = []; - for (final stream in streams) { - SizedBox widget = SizedBox( - child: PlayWidget( - ip: this.widget.ip, - id: stream, - roomId: this.widget.roomId, - userscreen: false), - ); - widgetlist.add(widget); - } - - setState(() { - widgets = widgetlist; - }); - }, - - //onRemoveRemoteStream - ((stream) { - setState(() {}); - }), - widget.iceServers, - (command , mapData){ - - } - ); + //host + widget.ip, + //streamID + widget.id, + //roomID + widget.roomId, + AntMediaType.Conference, + widget.userscreen, + + //onStateChange + (HelperState state) { + switch (state) { + case HelperState.CallStateNew: + setState(() { + _inCalling = true; + }); + break; + case HelperState.CallStateBye: + setState(() { + _localRenderer.srcObject = null; + _inCalling = false; + Navigator.pop(context); + }); + break; + case HelperState.ConnectionOpen: + break; + case HelperState.ConnectionClosed: + break; + case HelperState.ConnectionError: + break; + } + }, + + //onLocalStream + ((stream) { + setState(() { + _localRenderer.srcObject = stream; + }); + }), + + //onAddRemoteStream + ((stream) {}), + + // onDataChannel + (dc) {}, + (dc, message, isReceived) { + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text( + (isReceived ? "Received:" : "Sent:") + " " + message.text, + style: const TextStyle(color: Colors.white), + ), + backgroundColor: Colors.blue, + )); + }, + + //onUpdateConferenceUser + (streams) { + List widgetlist = []; + for (final stream in streams) { + SizedBox widget = SizedBox( + child: PlayWidget( + ip: this.widget.ip, + id: stream, + roomId: this.widget.roomId, + userscreen: false), + ); + widgetlist.add(widget); + } + + setState(() { + widgets = widgetlist; + }); + }, + + //onRemoveRemoteStream + ((stream) { + setState(() {}); + }), + widget.iceServers, + (command, mapData) {}); } _hangUp() { diff --git a/example/Conference/lib/main.dart b/example/Conference/lib/main.dart index 018b3e71..6df70aa8 100644 --- a/example/Conference/lib/main.dart +++ b/example/Conference/lib/main.dart @@ -110,15 +110,15 @@ class _MyAppState extends State { _prefs.setString('streamId', _streamId); _prefs.setString('roomId', _roomId); if (settedIP != null) { - Navigator.push( - context, - MaterialPageRoute( - builder: (BuildContext context) => Conference( - ip: settedIP, - id: _streamId, - userscreen: false, - roomId: _roomId, - ))); + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => Conference( + ip: settedIP, + id: _streamId, + userscreen: false, + roomId: _roomId, + ))); } } } diff --git a/example/Conference/lib/route_item.dart b/example/Conference/lib/route_item.dart index 9a4517dd..acfc7e2f 100644 --- a/example/Conference/lib/route_item.dart +++ b/example/Conference/lib/route_item.dart @@ -13,4 +13,4 @@ class RouteItem { final String title; final String subtitle; final RouteCallback push; -} \ No newline at end of file +} diff --git a/example/DataChannel/lib/datachannel.dart b/example/DataChannel/lib/datachannel.dart index cdfb8e39..d94c88ac 100644 --- a/example/DataChannel/lib/datachannel.dart +++ b/example/DataChannel/lib/datachannel.dart @@ -9,7 +9,7 @@ class DataChannel extends StatefulWidget { String ip; String id; List> iceServers = [ - {'url': 'stun:stun.l.google.com:19302'}, + {'url': 'stun:stun.l.google.com:19302'}, ]; bool userscreen; @@ -51,81 +51,78 @@ class _DataChannelState extends State { void _connect() async { AntMediaFlutter.connect( - //host - widget.ip, - - //streamID - widget.id, - - //roomID - '', - - //type - AntMediaType.DataChannelOnly, - - //userScreen - false, - - //onStateChange - (HelperState state) { - switch (state) { - case HelperState.CallStateNew: - setState(() {}); - break; - case HelperState.CallStateBye: - setState(() { - _localRenderer.srcObject = null; - _remoteRenderer.srcObject = null; - Navigator.pop(context); - }); - break; - - case HelperState.ConnectionClosed: - case HelperState.ConnectionError: - case HelperState.ConnectionOpen: - break; - } - }, - - //onLocalStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = stream; - }); - }), - - //onAddRemoteStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = stream; - }); - }), - - // onDataChannel - (datachannel) { - print(''); - }, - - // onDataChannelMessage - (channel, message, isRecieved) { - messages.add(DataChannelMessage(isRecieved, channel, message)); - setState(() {}); - }, - - // onupdateConferencePerson - (stream) {}, - - //onRemoveRemoteStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = null; - }); - }), - widget.iceServers, - (command , mapData){ - - } - ); + //host + widget.ip, + + //streamID + widget.id, + + //roomID + '', + + //type + AntMediaType.DataChannelOnly, + + //userScreen + false, + + //onStateChange + (HelperState state) { + switch (state) { + case HelperState.CallStateNew: + setState(() {}); + break; + case HelperState.CallStateBye: + setState(() { + _localRenderer.srcObject = null; + _remoteRenderer.srcObject = null; + Navigator.pop(context); + }); + break; + + case HelperState.ConnectionClosed: + case HelperState.ConnectionError: + case HelperState.ConnectionOpen: + break; + } + }, + + //onLocalStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = stream; + }); + }), + + //onAddRemoteStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = stream; + }); + }), + + // onDataChannel + (datachannel) { + print(''); + }, + + // onDataChannelMessage + (channel, message, isRecieved) { + messages.add(DataChannelMessage(isRecieved, channel, message)); + setState(() {}); + }, + + // onupdateConferencePerson + (stream) {}, + + //onRemoveRemoteStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = null; + }); + }), + widget.iceServers, + (command, mapData) {}); } @override diff --git a/example/DataChannel/lib/main.dart b/example/DataChannel/lib/main.dart index 15aa2a61..347c2436 100644 --- a/example/DataChannel/lib/main.dart +++ b/example/DataChannel/lib/main.dart @@ -103,15 +103,15 @@ class _MyAppState extends State { String? settedIP = _prefs.getString('server'); _prefs.setString('streamId', _streamId); if (settedIP != null) { - // Navigator.of(context, rootNavigator: true).pop(); - Navigator.push( - context, - MaterialPageRoute( - builder: (BuildContext context) => DataChannel( - ip: settedIP, - id: _streamId, - userscreen: false, - ))); + // Navigator.of(context, rootNavigator: true).pop(); + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => DataChannel( + ip: settedIP, + id: _streamId, + userscreen: false, + ))); } } } diff --git a/example/DataChannel/lib/route_item.dart b/example/DataChannel/lib/route_item.dart index 9a4517dd..acfc7e2f 100644 --- a/example/DataChannel/lib/route_item.dart +++ b/example/DataChannel/lib/route_item.dart @@ -13,4 +13,4 @@ class RouteItem { final String title; final String subtitle; final RouteCallback push; -} \ No newline at end of file +} diff --git a/example/DataChannel/test/widget_test.dart b/example/DataChannel/test/widget_test.dart index 37c8bec0..55c5d7ae 100644 --- a/example/DataChannel/test/widget_test.dart +++ b/example/DataChannel/test/widget_test.dart @@ -9,7 +9,6 @@ import 'package:datachannel/main.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; - void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. diff --git a/example/Peer/lib/peer.dart b/example/Peer/lib/peer.dart index cf266a15..98324378 100644 --- a/example/Peer/lib/peer.dart +++ b/example/Peer/lib/peer.dart @@ -9,7 +9,7 @@ class Peer extends StatefulWidget { String ip; String id; List> iceServers = [ - {'url': 'stun:stun.l.google.com:19302'}, + {'url': 'stun:stun.l.google.com:19302'}, ]; bool userscreen; @@ -52,84 +52,81 @@ class _PeerState extends State { void _connect() async { AntMediaFlutter.connect( - //host - widget.ip, - //streamID - widget.id, - //roomID - '', - AntMediaType.Peer, - widget.userscreen, - //onStateChange - (HelperState state) { - switch (state) { - case HelperState.CallStateNew: - setState(() { - _inCalling = true; - }); - break; - case HelperState.CallStateBye: - setState(() { - _localRenderer.srcObject = null; - _remoteRenderer.srcObject = null; - _inCalling = false; - Navigator.pop(context); - }); - break; - case HelperState.ConnectionOpen: - break; - case HelperState.ConnectionClosed: - break; - case HelperState.ConnectionError: - break; - } - }, - - //onLocalStream - ((stream) { - setState(() { - _localRenderer.srcObject = stream; - local_input_stream = stream; - }); - }), - - //onAddRemoteStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = stream; - }); - }), - - // onDataChannel - (dc) {}, - - //onDataChannelMessage - - (dc, message, isReceived) { - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text( - (isReceived ? "Received:" : "Sent:") + " " + message.text, - style: const TextStyle(color: Colors.white), - ), - backgroundColor: Colors.blue, - )); - }, - - // onupdateConferencePerson - - (Streams) {}, - - //onRemoveRemoteStream - (stream) { - setState(() { - _remoteRenderer.srcObject = null; - }); - }, - widget.iceServers, - (command , mapData){ - - } - ); + //host + widget.ip, + //streamID + widget.id, + //roomID + '', + AntMediaType.Peer, + widget.userscreen, + //onStateChange + (HelperState state) { + switch (state) { + case HelperState.CallStateNew: + setState(() { + _inCalling = true; + }); + break; + case HelperState.CallStateBye: + setState(() { + _localRenderer.srcObject = null; + _remoteRenderer.srcObject = null; + _inCalling = false; + Navigator.pop(context); + }); + break; + case HelperState.ConnectionOpen: + break; + case HelperState.ConnectionClosed: + break; + case HelperState.ConnectionError: + break; + } + }, + + //onLocalStream + ((stream) { + setState(() { + _localRenderer.srcObject = stream; + local_input_stream = stream; + }); + }), + + //onAddRemoteStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = stream; + }); + }), + + // onDataChannel + (dc) {}, + + //onDataChannelMessage + + (dc, message, isReceived) { + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text( + (isReceived ? "Received:" : "Sent:") + " " + message.text, + style: const TextStyle(color: Colors.white), + ), + backgroundColor: Colors.blue, + )); + }, + + // onupdateConferencePerson + + (Streams) {}, + + //onRemoveRemoteStream + (stream) { + setState(() { + _remoteRenderer.srcObject = null; + }); + }, + widget.iceServers, + (command, mapData) {}); } _hangUp() { diff --git a/example/Peer/lib/route_item.dart b/example/Peer/lib/route_item.dart index 9a4517dd..acfc7e2f 100644 --- a/example/Peer/lib/route_item.dart +++ b/example/Peer/lib/route_item.dart @@ -13,4 +13,4 @@ class RouteItem { final String title; final String subtitle; final RouteCallback push; -} \ No newline at end of file +} diff --git a/example/Play/lib/play.dart b/example/Play/lib/play.dart index daa915bb..1b36b29d 100644 --- a/example/Play/lib/play.dart +++ b/example/Play/lib/play.dart @@ -11,7 +11,7 @@ class Play extends StatefulWidget { String ip; String id; List> iceServers = [ - {'url': 'stun:stun.l.google.com:19302'}, + {'url': 'stun:stun.l.google.com:19302'}, ]; bool userscreen; @@ -62,92 +62,89 @@ class _PlayState extends State { void _connect() async { AntMediaFlutter.connect( - //host - widget.ip, - //streamID - widget.id, - //roomID - '', - AntMediaType.Play, - widget.userscreen, - //onStateChange - (HelperState state) { - switch (state) { - case HelperState.CallStateNew: - setState(() { - _inCalling = true; - }); - break; - case HelperState.CallStateBye: - setState(() { - _localRenderer.srcObject = null; - _remoteRenderer.srcObject = null; - _inCalling = false; - Navigator.pop(context); - }); - break; - case HelperState.ConnectionOpen: - break; - case HelperState.ConnectionClosed: - break; - case HelperState.ConnectionError: - break; - } - }, - - //onLocalStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = stream; - }); - }), - - //onAddRemoteStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = stream; - }); - }), - - // onDataChannel - (datachannel) { - print(datachannel.id); - print(datachannel.state); - }, - - // onDataChannelMessage - (channel, message, isReceived) { - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text( - (isReceived ? "Received:" : "Sent:") + " " + message.text, - style: const TextStyle(color: Colors.white), - ), - backgroundColor: Colors.blue, - )); - }, - - // onupdateConferencePerson - (stream) {}, - - //onRemoveRemoteStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = null; - }); - }), - widget.iceServers, + //host + widget.ip, + //streamID + widget.id, + //roomID + '', + AntMediaType.Play, + widget.userscreen, + //onStateChange + (HelperState state) { + switch (state) { + case HelperState.CallStateNew: + setState(() { + _inCalling = true; + }); + break; + case HelperState.CallStateBye: + setState(() { + _localRenderer.srcObject = null; + _remoteRenderer.srcObject = null; + _inCalling = false; + Navigator.pop(context); + }); + break; + case HelperState.ConnectionOpen: + break; + case HelperState.ConnectionClosed: + break; + case HelperState.ConnectionError: + break; + } + }, + + //onLocalStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = stream; + }); + }), - (command , mapData){ - abrList = ['Automatic']; - if(command == 'streamInformation'){ + //onAddRemoteStream + ((stream) { setState(() { - mapData['streamInfo'].forEach((abrSetting)=>{ - abrList.add(abrSetting['streamHeight'].toString()) + _remoteRenderer.srcObject = stream; }); + }), + + // onDataChannel + (datachannel) { + print(datachannel.id); + print(datachannel.state); + }, + + // onDataChannelMessage + (channel, message, isReceived) { + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text( + (isReceived ? "Received:" : "Sent:") + " " + message.text, + style: const TextStyle(color: Colors.white), + ), + backgroundColor: Colors.blue, + )); + }, + + // onupdateConferencePerson + (stream) {}, + + //onRemoveRemoteStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = null; }); - } - } - ); + }), + widget.iceServers, + (command, mapData) { + abrList = ['Automatic']; + if (command == 'streamInformation') { + setState(() { + mapData['streamInfo'].forEach((abrSetting) => + {abrList.add(abrSetting['streamHeight'].toString())}); + }); + } + }); } _hangUp() { @@ -183,9 +180,9 @@ class _PlayState extends State { ); }).toList(), onChanged: (streamHeight) { - if(streamHeight=='Automatic') - streamHeight= '0'; - AntMediaFlutter.anthelper?.forceStreamQuality(widget.id, int?.parse(streamHeight.toString())); + if (streamHeight == 'Automatic') streamHeight = '0'; + AntMediaFlutter.anthelper?.forceStreamQuality( + widget.id, int?.parse(streamHeight.toString())); }, ) ])) diff --git a/example/Play/lib/route_item.dart b/example/Play/lib/route_item.dart index 9a4517dd..acfc7e2f 100644 --- a/example/Play/lib/route_item.dart +++ b/example/Play/lib/route_item.dart @@ -13,4 +13,4 @@ class RouteItem { final String title; final String subtitle; final RouteCallback push; -} \ No newline at end of file +} diff --git a/example/Publish/lib/publish.dart b/example/Publish/lib/publish.dart index 03fc388a..995265db 100644 --- a/example/Publish/lib/publish.dart +++ b/example/Publish/lib/publish.dart @@ -9,7 +9,7 @@ class Publish extends StatefulWidget { static String tag = 'call'; List> iceServers = [ - {'url': 'stun:stun.l.google.com:19302'}, + {'url': 'stun:stun.l.google.com:19302'}, ]; String ip; @@ -54,89 +54,84 @@ class _PublishState extends State { void _connect() async { AntMediaFlutter.connect( - //host - widget.ip, - - //streamID - widget.id, - - //roomID - '', - - AntMediaType.Publish, - - widget.userscreen, - - //onStateChange - (HelperState state) { - switch (state) { - case HelperState.CallStateNew: - setState(() { - _inCalling = true; - }); - break; - case HelperState.CallStateBye: - setState(() { - _localRenderer.srcObject = null; - _remoteRenderer.srcObject = null; - _inCalling = false; - Navigator.pop(context); - }); - break; - case HelperState.ConnectionOpen: - break; - case HelperState.ConnectionClosed: - break; - case HelperState.ConnectionError: - break; - } - }, - - //onLocalStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = stream; - }); - }), - - //onAddRemoteStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = stream; - }); - }), - - // onDataChannel - (datachannel) { - print(datachannel.id); - print(datachannel.state); - }, - - // onDataChannelMessage - (channel, message, isReceived) { - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text( - (isReceived ? "Received:" : "Sent:") + " " + message.text, - style: const TextStyle(color: Colors.white), - ), - backgroundColor: Colors.blue, - )); - }, - - // onupdateConferencePerson - (streams) {}, - - //onRemoveRemoteStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = null; - }); - }), - widget.iceServers, - (command , mapData){ - - } - ); + //host + widget.ip, + + //streamID + widget.id, + + //roomID + '', + AntMediaType.Publish, + widget.userscreen, + + //onStateChange + (HelperState state) { + switch (state) { + case HelperState.CallStateNew: + setState(() { + _inCalling = true; + }); + break; + case HelperState.CallStateBye: + setState(() { + _localRenderer.srcObject = null; + _remoteRenderer.srcObject = null; + _inCalling = false; + Navigator.pop(context); + }); + break; + case HelperState.ConnectionOpen: + break; + case HelperState.ConnectionClosed: + break; + case HelperState.ConnectionError: + break; + } + }, + + //onLocalStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = stream; + }); + }), + + //onAddRemoteStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = stream; + }); + }), + + // onDataChannel + (datachannel) { + print(datachannel.id); + print(datachannel.state); + }, + + // onDataChannelMessage + (channel, message, isReceived) { + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text( + (isReceived ? "Received:" : "Sent:") + " " + message.text, + style: const TextStyle(color: Colors.white), + ), + backgroundColor: Colors.blue, + )); + }, + + // onupdateConferencePerson + (streams) {}, + + //onRemoveRemoteStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = null; + }); + }), + widget.iceServers, + (command, mapData) {}); } _hangUp() { @@ -162,6 +157,7 @@ class _PublishState extends State { }); } } + _toggleCam(bool state) { if (_camOn) { setState(() { @@ -215,15 +211,18 @@ class _PublishState extends State { tooltip: _micOn == true ? 'Stop Mic' : 'Start Mic', onPressed: () => _muteMic(_micOn), child: Icon( - _micOn == false ? Icons.mic : Icons.mic_off)), const SizedBox( + _micOn == false ? Icons.mic : Icons.mic_off)), + const SizedBox( width: 10, ), - FloatingActionButton( - heroTag: "btn4", - tooltip: _camOn == true ? 'Stop Camera' : 'Start Camera', - onPressed: () => _toggleCam(_camOn), - child: Icon( - _camOn == true ? Icons.videocam : Icons.videocam_off)), + FloatingActionButton( + heroTag: "btn4", + tooltip: + _camOn == true ? 'Stop Camera' : 'Start Camera', + onPressed: () => _toggleCam(_camOn), + child: Icon(_camOn == true + ? Icons.videocam + : Icons.videocam_off)), ])) : null, body: OrientationBuilder(builder: (context, orientation) { diff --git a/example/Publish/lib/route_item.dart b/example/Publish/lib/route_item.dart index 9a4517dd..acfc7e2f 100644 --- a/example/Publish/lib/route_item.dart +++ b/example/Publish/lib/route_item.dart @@ -13,4 +13,4 @@ class RouteItem { final String title; final String subtitle; final RouteCallback push; -} \ No newline at end of file +} diff --git a/example/SampleProject/lib/conference.dart b/example/SampleProject/lib/conference.dart index adc17172..334daae1 100644 --- a/example/SampleProject/lib/conference.dart +++ b/example/SampleProject/lib/conference.dart @@ -15,7 +15,7 @@ class Conference extends StatefulWidget { String roomId; bool userscreen; List> iceServers = [ - {'url': 'stun:stun.l.google.com:19302'}, + {'url': 'stun:stun.l.google.com:19302'}, ]; Conference( @@ -57,91 +57,85 @@ class _ConferenceState extends State { void _connect() async { AntMediaFlutter.connect( - //host - widget.ip, - //streamID - widget.id, - //roomID - widget.roomId, - AntMediaType.Conference, - widget.userscreen, - - //onStateChange - (HelperState state) { - switch (state) { - case HelperState.CallStateNew: - setState(() { - _inCalling = true; - }); - break; - case HelperState.CallStateBye: - setState(() { - _localRenderer.srcObject = null; - _inCalling = false; - Navigator.pop(context); - }); - break; - - case HelperState.ConnectionClosed: - - case HelperState.ConnectionError: - - case HelperState.ConnectionOpen: - break; - } - }, - - //onLocalStream - ((stream) { - setState(() { - _localRenderer.srcObject = stream; - }); - }), - - //onAddRemoteStream - ((stream) {}), - - // onDataChannel - (dc) {}, - - (dc, message, isReceived) { - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text( - (isReceived ? "Received:" : "Sent:") + " " + message.text, - style: const TextStyle(color: Colors.white), - ), - backgroundColor: Colors.blue, - )); - }, - - //onUpdateConferenceUser - (streams) { - List widgetlist = []; - for (final stream in streams) { - SizedBox widget = SizedBox( - child: PlayWidget( - ip: this.widget.ip, - id: stream, - roomId: this.widget.roomId, - userscreen: false), - ); - widgetlist.add(widget); - } - - setState(() { - widgets = widgetlist; - }); - }, - - //onRemoveRemoteStream - ((stream) { - setState(() {}); - }), - widget.iceServers, - (command , mapData){ - - } - ); + //host + widget.ip, + //streamID + widget.id, + //roomID + widget.roomId, + AntMediaType.Conference, + widget.userscreen, + + //onStateChange + (HelperState state) { + switch (state) { + case HelperState.CallStateNew: + setState(() { + _inCalling = true; + }); + break; + case HelperState.CallStateBye: + setState(() { + _localRenderer.srcObject = null; + _inCalling = false; + Navigator.pop(context); + }); + break; + + case HelperState.ConnectionClosed: + case HelperState.ConnectionError: + case HelperState.ConnectionOpen: + break; + } + }, + + //onLocalStream + ((stream) { + setState(() { + _localRenderer.srcObject = stream; + }); + }), + + //onAddRemoteStream + ((stream) {}), + + // onDataChannel + (dc) {}, + (dc, message, isReceived) { + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text( + (isReceived ? "Received:" : "Sent:") + " " + message.text, + style: const TextStyle(color: Colors.white), + ), + backgroundColor: Colors.blue, + )); + }, + + //onUpdateConferenceUser + (streams) { + List widgetlist = []; + for (final stream in streams) { + SizedBox widget = SizedBox( + child: PlayWidget( + ip: this.widget.ip, + id: stream, + roomId: this.widget.roomId, + userscreen: false), + ); + widgetlist.add(widget); + } + + setState(() { + widgets = widgetlist; + }); + }, + + //onRemoveRemoteStream + ((stream) { + setState(() {}); + }), + widget.iceServers, + (command, mapData) {}); } _hangUp() { diff --git a/example/SampleProject/lib/datachannel.dart b/example/SampleProject/lib/datachannel.dart index eb2c4635..16864f35 100644 --- a/example/SampleProject/lib/datachannel.dart +++ b/example/SampleProject/lib/datachannel.dart @@ -51,81 +51,78 @@ class _DataChannelState extends State { void _connect() async { AntMediaFlutter.connect( - //host - widget.ip, - - //streamID - widget.id, - - //roomID - '', - - //type - AntMediaType.DataChannelOnly, - - //userScreen - false, - - //onStateChange - (HelperState state) { - switch (state) { - case HelperState.CallStateNew: - setState(() {}); - break; - case HelperState.CallStateBye: - setState(() { - _localRenderer.srcObject = null; - _remoteRenderer.srcObject = null; - Navigator.pop(context); - }); - break; - - case HelperState.ConnectionClosed: - case HelperState.ConnectionError: - case HelperState.ConnectionOpen: - break; - } - }, - - //onLocalStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = stream; - }); - }), - - //onAddRemoteStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = stream; - }); - }), - - // onDataChannel - (datachannel) { - print(''); - }, - - // onDataChannelMessage - (channel, message, isRecieved) { - messages.add(DataChannelMessage(isRecieved, channel, message)); - setState(() {}); - }, - - // onupdateConferencePerson - (stream) {}, - - //onRemoveRemoteStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = null; - }); - }), - widget.iceServers, - (command , mapData){ - - } - ); + //host + widget.ip, + + //streamID + widget.id, + + //roomID + '', + + //type + AntMediaType.DataChannelOnly, + + //userScreen + false, + + //onStateChange + (HelperState state) { + switch (state) { + case HelperState.CallStateNew: + setState(() {}); + break; + case HelperState.CallStateBye: + setState(() { + _localRenderer.srcObject = null; + _remoteRenderer.srcObject = null; + Navigator.pop(context); + }); + break; + + case HelperState.ConnectionClosed: + case HelperState.ConnectionError: + case HelperState.ConnectionOpen: + break; + } + }, + + //onLocalStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = stream; + }); + }), + + //onAddRemoteStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = stream; + }); + }), + + // onDataChannel + (datachannel) { + print(''); + }, + + // onDataChannelMessage + (channel, message, isRecieved) { + messages.add(DataChannelMessage(isRecieved, channel, message)); + setState(() {}); + }, + + // onupdateConferencePerson + (stream) {}, + + //onRemoveRemoteStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = null; + }); + }), + widget.iceServers, + (command, mapData) {}); } @override diff --git a/example/SampleProject/lib/peer.dart b/example/SampleProject/lib/peer.dart index 238ffd26..1d3d4ba7 100644 --- a/example/SampleProject/lib/peer.dart +++ b/example/SampleProject/lib/peer.dart @@ -52,83 +52,80 @@ class _PeerState extends State { void _connect() async { AntMediaFlutter.connect( - //host - widget.ip, + //host + widget.ip, //streamID - widget.id, - //roomID - '', - AntMediaType.Peer, - widget.userscreen, - //onStateChange - (HelperState state) { - switch (state) { - case HelperState.CallStateNew: - setState(() { - _inCalling = true; - }); - break; - case HelperState.CallStateBye: - setState(() { - _localRenderer.srcObject = null; - _remoteRenderer.srcObject = null; - _inCalling = false; - Navigator.pop(context); - }); - break; - - case HelperState.ConnectionClosed: - case HelperState.ConnectionError: - case HelperState.ConnectionOpen: - break; - } - }, - - //onLocalStream - ((stream) { - setState(() { - _localRenderer.srcObject = stream; - local_input_stream = stream; - }); - }), - - //onAddRemoteStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = stream; - }); - }), - - // onDataChannel - (dc) {}, - - //onDataChannelMessage - - (dc, message, isReceived) { - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text( - (isReceived ? "Received:" : "Sent:") + " " + message.text, - style: const TextStyle(color: Colors.white), - ), - backgroundColor: Colors.blue, - )); - }, - - // onupdateConferencePerson - - (Streams) {}, - - //onRemoveRemoteStream - (stream) { - setState(() { - _remoteRenderer.srcObject = null; - }); - }, - widget.iceServers, - (command , mapData){ - - } - ); + widget.id, + //roomID + '', + AntMediaType.Peer, + widget.userscreen, + //onStateChange + (HelperState state) { + switch (state) { + case HelperState.CallStateNew: + setState(() { + _inCalling = true; + }); + break; + case HelperState.CallStateBye: + setState(() { + _localRenderer.srcObject = null; + _remoteRenderer.srcObject = null; + _inCalling = false; + Navigator.pop(context); + }); + break; + + case HelperState.ConnectionClosed: + case HelperState.ConnectionError: + case HelperState.ConnectionOpen: + break; + } + }, + + //onLocalStream + ((stream) { + setState(() { + _localRenderer.srcObject = stream; + local_input_stream = stream; + }); + }), + + //onAddRemoteStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = stream; + }); + }), + + // onDataChannel + (dc) {}, + + //onDataChannelMessage + + (dc, message, isReceived) { + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text( + (isReceived ? "Received:" : "Sent:") + " " + message.text, + style: const TextStyle(color: Colors.white), + ), + backgroundColor: Colors.blue, + )); + }, + + // onupdateConferencePerson + + (Streams) {}, + + //onRemoveRemoteStream + (stream) { + setState(() { + _remoteRenderer.srcObject = null; + }); + }, + widget.iceServers, + (command, mapData) {}); } _hangUp() { diff --git a/example/SampleProject/lib/play.dart b/example/SampleProject/lib/play.dart index ecbf0d44..10e1fcb4 100644 --- a/example/SampleProject/lib/play.dart +++ b/example/SampleProject/lib/play.dart @@ -62,7 +62,7 @@ class _PlayState extends State { void _connect() async { AntMediaFlutter.connect( - //host + //host widget.ip, //streamID widget.id, @@ -71,7 +71,7 @@ class _PlayState extends State { AntMediaType.Play, widget.userscreen, //onStateChange - (HelperState state) { + (HelperState state) { switch (state) { case HelperState.CallStateNew: setState(() { @@ -110,13 +110,13 @@ class _PlayState extends State { }), // onDataChannel - (datachannel) { + (datachannel) { print(datachannel.id); print(datachannel.state); }, // onDataChannelMessage - (channel, message, isReceived) { + (channel, message, isReceived) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text( (isReceived ? "Received:" : "Sent:") + " " + message.text, @@ -127,7 +127,7 @@ class _PlayState extends State { }, // onupdateConferencePerson - (stream) {}, + (stream) {}, //onRemoveRemoteStream ((stream) { @@ -136,19 +136,16 @@ class _PlayState extends State { }); }), widget.iceServers, - - (command , mapData){ + (command, mapData) { abrList = ['Automatic']; - if(command == 'streamInformation'){ + if (command == 'streamInformation') { print(mapData['streamInfo']); setState(() { - mapData['streamInfo'].forEach((abrSetting)=>{ - abrList.add( abrSetting['streamHeight'].toString()) - }); + mapData['streamInfo'].forEach((abrSetting) => + {abrList.add(abrSetting['streamHeight'].toString())}); }); } - } - ); + }); } _hangUp() { @@ -165,32 +162,31 @@ class _PlayState extends State { floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, floatingActionButton: _inCalling ? SizedBox( - width: 200.0, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - FloatingActionButton( - heroTag: "btn2", - onPressed: _hangUp, - tooltip: 'Hangup', - child: const Icon(Icons.call_end), - backgroundColor: Colors.pink, - ), - DropdownButton( - items: abrList.map((String value) { - return DropdownMenuItem( - value: value, - child: Text(value), - ); - }).toList(), - onChanged: (streamHeight) { - if(streamHeight=='Automatic') - streamHeight= '0'; - AntMediaFlutter.anthelper?.forceStreamQuality(widget.id, int?.parse(streamHeight.toString())); - - }, - ) - ])) + width: 200.0, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + FloatingActionButton( + heroTag: "btn2", + onPressed: _hangUp, + tooltip: 'Hangup', + child: const Icon(Icons.call_end), + backgroundColor: Colors.pink, + ), + DropdownButton( + items: abrList.map((String value) { + return DropdownMenuItem( + value: value, + child: Text(value), + ); + }).toList(), + onChanged: (streamHeight) { + if (streamHeight == 'Automatic') streamHeight = '0'; + AntMediaFlutter.anthelper?.forceStreamQuality( + widget.id, int?.parse(streamHeight.toString())); + }, + ) + ])) : null, body: OrientationBuilder(builder: (context, orientation) { return Stack(children: [ diff --git a/example/SampleProject/lib/publish.dart b/example/SampleProject/lib/publish.dart index 7af25dce..adfca4ce 100644 --- a/example/SampleProject/lib/publish.dart +++ b/example/SampleProject/lib/publish.dart @@ -54,90 +54,83 @@ class _PublishState extends State { void _connect() async { AntMediaFlutter.connect( - //host - widget.ip, - - //streamID - widget.id, - - //roomID - '', - - AntMediaType.Publish, - - widget.userscreen, - - //onStateChange - (HelperState state) { - switch (state) { - case HelperState.CallStateNew: - setState(() { - _inCalling = true; - }); - break; - case HelperState.CallStateBye: - setState(() { - _localRenderer.srcObject = null; - _remoteRenderer.srcObject = null; - _inCalling = false; - Navigator.pop(context); - }); - break; - - case HelperState.ConnectionClosed: - case HelperState.ConnectionError: - case HelperState.ConnectionOpen: - break; - } - }, - - //onLocalStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = stream; - }); - }), - - //onAddRemoteStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = stream; - }); - }), - - // onDataChannel - (datachannel) { - print(datachannel.id); - print(datachannel.state); - }, - - // onDataChannelMessage - (channel, message, isReceived) { - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text( - (isReceived ? "Received:" : "Sent:") + " " + message.text, - style: const TextStyle(color: Colors.white), - ), - backgroundColor: Colors.blue, - )); - }, - - // onupdateConferencePerson - (streams) { - - }, - - //onRemoveRemoteStream - ((stream) { - setState(() { - _remoteRenderer.srcObject = null; - }); - }), - widget.iceServers, - (command , mapData){ - - } - ); + //host + widget.ip, + + //streamID + widget.id, + + //roomID + '', + AntMediaType.Publish, + widget.userscreen, + + //onStateChange + (HelperState state) { + switch (state) { + case HelperState.CallStateNew: + setState(() { + _inCalling = true; + }); + break; + case HelperState.CallStateBye: + setState(() { + _localRenderer.srcObject = null; + _remoteRenderer.srcObject = null; + _inCalling = false; + Navigator.pop(context); + }); + break; + + case HelperState.ConnectionClosed: + case HelperState.ConnectionError: + case HelperState.ConnectionOpen: + break; + } + }, + + //onLocalStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = stream; + }); + }), + + //onAddRemoteStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = stream; + }); + }), + + // onDataChannel + (datachannel) { + print(datachannel.id); + print(datachannel.state); + }, + + // onDataChannelMessage + (channel, message, isReceived) { + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text( + (isReceived ? "Received:" : "Sent:") + " " + message.text, + style: const TextStyle(color: Colors.white), + ), + backgroundColor: Colors.blue, + )); + }, + + // onupdateConferencePerson + (streams) {}, + + //onRemoveRemoteStream + ((stream) { + setState(() { + _remoteRenderer.srcObject = null; + }); + }), + widget.iceServers, + (command, mapData) {}); } _hangUp() { diff --git a/example/SampleProject/lib/route_item.dart b/example/SampleProject/lib/route_item.dart index 9a4517dd..acfc7e2f 100644 --- a/example/SampleProject/lib/route_item.dart +++ b/example/SampleProject/lib/route_item.dart @@ -13,4 +13,4 @@ class RouteItem { final String title; final String subtitle; final RouteCallback push; -} \ No newline at end of file +} diff --git a/lib/ant_media_flutter.dart b/lib/ant_media_flutter.dart index a3a618ea..909892d6 100644 --- a/lib/ant_media_flutter.dart +++ b/lib/ant_media_flutter.dart @@ -15,14 +15,7 @@ enum HelperState { ConnectionError, } -enum AntMediaType { - Default, - Publish, - Play, - Peer, - Conference, - DataChannelOnly -} +enum AntMediaType { Default, Publish, Play, Peer, Conference, DataChannelOnly } typedef void HelperStateCallback(HelperState state); typedef void StreamStateCallback(MediaStream stream); @@ -31,8 +24,7 @@ typedef void DataChannelMessageCallback( RTCDataChannel dc, RTCDataChannelMessage data, bool isReceived); typedef void DataChannelCallback(RTCDataChannel dc); typedef void ConferenceUpdateCallback(dynamic streams); -typedef void Callbacks(String command , Map mapData); - +typedef void Callbacks(String command, Map mapData); class DataChannelMessage extends Object { RTCDataChannelMessage message; @@ -64,21 +56,20 @@ class AntMediaFlutter { } static void connect( - String ip, - String streamId, - String roomId, - AntMediaType type, - bool userScreen, - HelperStateCallback onStateChange, - StreamStateCallback onLocalStream, - StreamStateCallback onAddRemoteStream, - DataChannelCallback onDataChannel, - DataChannelMessageCallback onDataChannelMessage, - ConferenceUpdateCallback onupdateConferencePerson, - StreamStateCallback onRemoveRemoteStream, - List> iceServers, - Callbacks callbacks - ) async { + String ip, + String streamId, + String roomId, + AntMediaType type, + bool userScreen, + HelperStateCallback onStateChange, + StreamStateCallback onLocalStream, + StreamStateCallback onAddRemoteStream, + DataChannelCallback onDataChannel, + DataChannelMessageCallback onDataChannelMessage, + ConferenceUpdateCallback onupdateConferencePerson, + StreamStateCallback onRemoveRemoteStream, + List> iceServers, + Callbacks callbacks) async { anthelper = null; anthelper ??= AntHelper( //host @@ -118,8 +109,7 @@ class AntMediaFlutter { iceServers, //callbacks - callbacks ) - + callbacks) ..connect(type); } } diff --git a/lib/src/utils/conference_widget/playwidget.dart b/lib/src/utils/conference_widget/playwidget.dart index 1bf879fc..0b0631c1 100644 --- a/lib/src/utils/conference_widget/playwidget.dart +++ b/lib/src/utils/conference_widget/playwidget.dart @@ -111,11 +111,10 @@ class _PlayWidgetState extends State { //ScreenSharing widget.userscreen, (streams) {}, - - [{"url": "stun:stun.l.google.com:19302"}], - (command , mapData){ - - }) + [ + {"url": "stun:stun.l.google.com:19302"} + ], + (command, mapData) {}) ..connect(AntMediaType.Play); } diff --git a/lib/src/utils/websocket.dart b/lib/src/utils/websocket.dart index 25ee79c8..984e0b6e 100644 --- a/lib/src/utils/websocket.dart +++ b/lib/src/utils/websocket.dart @@ -13,7 +13,6 @@ class SimpleWebSocket { SimpleWebSocket(this._url); - connect() async { try { _socket = await WebSocket.connect(_url); @@ -39,7 +38,7 @@ class SimpleWebSocket { } } - void send(data) { + void send(data) { if (_socket != null) { _socket.add(data); print('send: $data'); @@ -49,5 +48,4 @@ class SimpleWebSocket { close() { if (_socket != null) _socket.close(); } - } diff --git a/pubspec.yaml b/pubspec.yaml index e7aa3684..5ec7254f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: ant_media_flutter description: Flutter Package to use Ant Media Server Enterprise Edition Streaming Engine on Android, iOS, Web and Desktop -version: 1.0.5 +version: 1.0.6 homepage: https://github.com/ant-media/WebRTC-Flutter-SDK environment: @@ -11,22 +11,20 @@ dependencies: flutter: sdk: flutter - get: ^4.6.1 - collection: ^1.17.1 - flutter_webrtc: ^0.9.39 - permission_handler: ^10.2.0 - shared_preferences: ^2.0.15 - shared_preferences_macos: ^2.0.4 - shared_preferences_web: ^2.0.4 - http: ^0.13.3 + get: ^4.6.6 + collection: ^1.18.0 + flutter_webrtc: ^0.9.47 + permission_handler: ^11.1.0 + shared_preferences: ^2.2.2 + http: ^1.1.2 path_provider: ^2.0.11 path_provider_macos: ^2.0.6 - flutter_background: ^1.1.0 + flutter_background: ^1.2.0 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^2.0.0 + flutter_lints: ^3.0.1 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec @@ -44,6 +42,14 @@ flutter: pluginClass: AntMediaFlutterPlugin ios: pluginClass: AntMediaFlutterPlugin + web: + pluginClass: AntMediaFlutterPlugin + macos: + pluginClass: FlutterWebRTCPlugin + windows: + pluginClass: FlutterWebRTCPlugin + linux: + pluginClass: FlutterWebRTCPlugin # To add assets to your plugin package, add an assets section, like this: # assets: diff --git a/test/ant_media_flutter_test.dart b/test/ant_media_flutter_test.dart index 581415a6..77e2e08c 100644 --- a/test/ant_media_flutter_test.dart +++ b/test/ant_media_flutter_test.dart @@ -16,7 +16,5 @@ void main() { channel.setMockMethodCallHandler(null); }); - test('getPlatformVersion', () async { - - }); + test('getPlatformVersion', () async {}); }