{"id":23461386,"url":"https://github.com/siprix/flutterpluginfederated","last_synced_at":"2025-10-30T22:31:33.223Z","repository":{"id":265297787,"uuid":"895732745","full_name":"siprix/FlutterPluginFederated","owner":"siprix","description":"Siprix VoIP SDK federated plugin for embedding voice/video calls based on SIP/RTP protocols into Flutter applications.","archived":false,"fork":false,"pushed_at":"2025-02-09T00:40:40.000Z","size":195182,"stargazers_count":2,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-09T01:27:45.108Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/siprix.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-28T19:29:19.000Z","updated_at":"2025-02-09T00:40:49.000Z","dependencies_parsed_at":null,"dependency_job_id":"ec48b4fe-fa09-4498-9848-8b8b6dcd78f4","html_url":"https://github.com/siprix/FlutterPluginFederated","commit_stats":null,"previous_names":["siprix/flutterpluginfederated"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siprix%2FFlutterPluginFederated","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siprix%2FFlutterPluginFederated/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siprix%2FFlutterPluginFederated/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siprix%2FFlutterPluginFederated/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/siprix","download_url":"https://codeload.github.com/siprix/FlutterPluginFederated/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239073969,"owners_count":19577124,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-24T07:35:01.631Z","updated_at":"2025-10-30T22:31:28.150Z","avatar_url":"https://github.com/siprix.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# siprix_voip_sdk\r\n\r\nSiprix VoIP SDK plugin for embedding voice and video communication (based on SIP/RTP protocols) into Flutter applications.\r\nIt contains native SIP client implementations for 5 platforms: Android, iOS, MacOS, Windows, Linux and unified API for all them. \r\n\r\nPlugin implements ready to use SIP VoIP Client with ability to:\r\n- Add multiple SIP accounts\r\n- Send/receive multiple calls (Audio and Video)\r\n- Manage calls with: hold, mute microphone/camera, play sound to call from file, send/receive DTMF,...\r\n- Join calls to conference, blind and attended transfer\r\n- Secure SIP signaling (using TLS) and call media (using SRTP)\r\n- Detect network changes and automatically update registration/switch and restore call(s) media\r\n- Echo cancelation and noise suppression\r\n- Create BLF/Presence subscriptions and monitor state of remote extension(s)\r\n- Send/receive text messages\r\n- Ready to use models for fast and easy UI creating\r\n- Embedded CallKit/PushKit support in iOS version of plugin\r\n\r\n## Usage\r\n\r\n### Add dependency in pubspec.yaml\r\n```\r\ndependencies:\r\n  siprix_voip_sdk: ^1.0.11\r\n  provider: ^6.1.1\r\n```\r\n\r\n### Add imports\r\n```\r\nimport 'package:provider/provider.dart';\r\n\r\nimport 'package:siprix_voip_sdk/accounts_model.dart';\r\nimport 'package:siprix_voip_sdk/network_model.dart';\r\nimport 'package:siprix_voip_sdk/calls_model.dart';\r\nimport 'package:siprix_voip_sdk/cdrs_model.dart';\r\nimport 'package:siprix_voip_sdk/devices_model.dart';\r\nimport 'package:siprix_voip_sdk/logs_model.dart';\r\nimport 'package:siprix_voip_sdk/siprix_voip_sdk.dart';\r\n```\r\n\r\n### Prepare models\r\n\r\n```dart\r\nvoid main() async {\r\n  AccountsModel accountsModel = AccountsModel();\r\n  CallsModel callsModel = CallsModel(accountsModel);\r\n  runApp(\r\n    MultiProvider(providers:[\r\n      ChangeNotifierProvider(create: (context) =\u003e accountsModel),\r\n      ChangeNotifierProvider(create: (context) =\u003e callsModel),\r\n    ],\r\n    child: const MyApp(),\r\n  ));\r\n}\r\n```\r\n### Init SDK\r\n```dart\r\nclass _MyAppState extends State\u003cMyApp\u003e {\r\n  @override\r\n  void initState() {\r\n    super.initState();\r\n    _initializeSiprix();\r\n  }\r\n\r\n  void _initializeSiprix([LogsModel? logsModel]) async {\r\n    InitData iniData = InitData();\r\n    iniData.license  = \"...license-credentials...\";\r\n    iniData.logLevelFile = LogLevel.info;\r\n    SiprixVoipSdk().initialize(iniData, logsModel);\r\n  }\r\n```\r\n\r\n### Build UI, add accounts/calls\r\n```dart\r\nWidget buildBody() {\r\n    final accounts = context.watch\u003cAccountsModel\u003e();\r\n    final calls = context.watch\u003cCallsModel\u003e();\r\n    return Column(children: [\r\n      ListView.separated(shrinkWrap: true,\r\n        itemCount: accounts.length,\r\n        separatorBuilder: (BuildContext context, int index) =\u003e const Divider(height: 1),\r\n        itemBuilder: (BuildContext context, int index) {\r\n          AccountModel acc = accounts[index];\r\n          return\r\n            ListTile(title: Text(acc.uri, style: Theme.of(context).textTheme.titleSmall),\r\n                subtitle: Text(acc.regText),\r\n                tileColor: Colors.blue\r\n            );\r\n        },\r\n      ),\r\n      ElevatedButton(onPressed: _addAccount, child: const Icon(Icons.add_card)),\r\n      ElevatedButton(onPressed: _addCall, child: const Icon(Icons.add_call)),\r\n      ...\r\n}\r\n\r\nvoid _addAccount() {\r\n    AccountModel account = AccountModel();\r\n    account.sipServer = \"192.168.0.122\";\r\n    account.sipExtension = \"1016\";\r\n    account.sipPassword = \"12345\";\r\n    account.expireTime = 300;\r\n    context.read\u003cAccountsModel\u003e().addAccount(account)\r\n      .catchError(showSnackBar);\r\n}\r\n\r\n\r\nvoid _addCall() {\r\n    final accounts = context.read\u003cAccountsModel\u003e();\r\n    if(accounts.selAccountId==null) return;\r\n\r\n    CallDestination dest = CallDestination(\"1012\", accounts.selAccountId!, false);\r\n\r\n    context.read\u003cCallsModel\u003e().invite(dest)\r\n      .catchError(showSnackBar);\r\n}\r\n  \r\n  \r\n```\r\n\r\n[More detailed integration guide](https://docs.siprix-voip.com/rst/flutter.html#integration-into-flutter-application)\r\n\r\n## How to use this library without provider?\r\n\r\nLibrary doesn't have any limitations related to provider.\r\nYou can copy source code of existing models to your project and use as you need/want.\r\nAlso you can create own classes and directly invoke library's methods like:\\\r\n`int callId = await SiprixVoipSdk().invite(dest) ?? 0;`\\\r\n`int accId  = await SiprixVoipSdk().addAccount(acc) ?? 0;`\\\r\n\r\nThe same is true for listening events - add own class as listener which will handles events:\\\r\n`SiprixVoipSdk().accListener = MyAccStateListener(regStateChanged : onRegStateChanged);`\r\n\r\nUse source code of existing models as implementation hint or ask support@siprix-voip.com in case of difficulties.\r\n\r\n\r\n## Limitations\r\n\r\nSiprix doesn't provide VoIP services, but in the same time doesn't have backend limitations and can connect to any SIP (Server) PBX or make direct calls between clients.\r\nFor testing app you need an account(s) credentials from a SIP service provider(s). \r\nSome features may be not supported by all SIP providers.\r\n\r\nAttached Siprix SDK works in trial mode and has limited call duration - it drops call after 60sec.\r\nUpgrading to a paid license removes this restriction, enabling calls of any length.\r\n\r\nPlease contact [sales@siprix-voip.com](mailto:sales@siprix-voip.com) for more details.\r\n\r\n## More resources\r\n\r\nProduct web site: [siprix-voip.com](https://siprix-voip.com)\r\n\r\nManual: [docs.siprix-voip.com](https://docs.siprix-voip.com)\r\n\r\n\r\n## Screenshots\r\n\r\n\u003ca href=\"https://docs.siprix-voip.com/screenshots/Flutter_Accounts.png\"  title=\"Accounts list Android\"\u003e\r\n\u003cimg src=\"https://docs.siprix-voip.com/screenshots/Flutter_Accounts_Mini.png\" width=\"50\"\u003e\u003c/a\u003e\r\n\u003ca href=\"https://docs.siprix-voip.com/screenshots/Flutter_CallAdd.png\"  title=\"Add call Android\"\u003e\r\n\u003cimg src=\"https://docs.siprix-voip.com/screenshots/Flutter_CallAdd_Mini.png\" width=\"50\"\u003e\u003c/a\u003e\r\n\u003ca href=\"https://docs.siprix-voip.com/screenshots/Flutter_Calls.png\"  title=\"Call in progress Android\"\u003e\r\n\u003cimg src=\"https://docs.siprix-voip.com/screenshots/Flutter_Calls_Mini.png\" width=\"50\"\u003e\u003c/a\u003e\r\n\u003ca href=\"https://docs.siprix-voip.com/screenshots/Flutter_CallsDtmf.png\"  title=\"Call in progress DTMF Android\"\u003e\r\n\u003cimg src=\"https://docs.siprix-voip.com/screenshots/Flutter_CallsDtmf_Mini.png\" width=\"50\"\u003e\u003c/a\u003e\r\n\u003ca href=\"https://docs.siprix-voip.com/screenshots/Flutter_BLF.png\"  title=\"BLF subscription Android\"\u003e\r\n\u003cimg src=\"https://docs.siprix-voip.com/screenshots/Flutter_BLF_Mini.png\" width=\"50\"\u003e\u003c/a\u003e\r\n\u003ca href=\"https://docs.siprix-voip.com/screenshots/Flutter_Logs.png\"  title=\"Logs Android\"\u003e\r\n\u003cimg src=\"https://docs.siprix-voip.com/screenshots/Flutter_Logs_Mini.png\" width=\"50\"\u003e\u003c/a\u003e\r\n\r\n\u003ca href=\"https://docs.siprix-voip.com/screenshots/Flutter_Accounts_Win.png\"  title=\"Accounts list Windows\"\u003e\r\n\u003cimg src=\"https://docs.siprix-voip.com/screenshots/Flutter_Accounts_Win_Mini.png\" width=\"50\"\u003e\u003c/a\u003e\r\n\u003ca href=\"https://docs.siprix-voip.com/screenshots/Flutter_Calls_Win.png\"  title=\"Call in progress Windows\"\u003e\r\n\u003cimg src=\"https://docs.siprix-voip.com/screenshots/Flutter_Calls_Win_Mini.png\" width=\"50\"\u003e\u003c/a\u003e\r\n\u003ca href=\"https://docs.siprix-voip.com/screenshots/Flutter_CallsDtmf_Win.png\"  title=\"Call in progress DTMF Windows\"\u003e\r\n\u003cimg src=\"https://docs.siprix-voip.com/screenshots/Flutter_CallsDtmf_Win_Mini.png\" width=\"50\"\u003e\u003c/a\u003e\r\n\u003ca href=\"https://docs.siprix-voip.com/screenshots/Flutter_BLF_Win.png\"  title=\"BLF subscription Windows\"\u003e\r\n\u003cimg src=\"https://docs.siprix-voip.com/screenshots/Flutter_BLF_Win_Mini.png\" width=\"50\"\u003e\u003c/a\u003e\r\n\u003ca href=\"https://docs.siprix-voip.com/screenshots/Flutter_Logs_Win.png\"  title=\"Logs Windows\"\u003e\r\n\u003cimg src=\"https://docs.siprix-voip.com/screenshots/Flutter_Logs_Win_Mini.png\" width=\"50\"\u003e\u003c/a\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsiprix%2Fflutterpluginfederated","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsiprix%2Fflutterpluginfederated","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsiprix%2Fflutterpluginfederated/lists"}