WebRTC plugin for Flutter Mobile/Desktop/Web

Overview

Flutter-WebRTC

Financial Contributors on Open Collective pub package Gitter

WebRTC plugin for Flutter Mobile/Desktop/Web


Sponsored with 💖   by
Stream Chat
Enterprise Grade APIs for Feeds & Chat. Try the Flutter Chat tutorial 💬


Functionality

Feature Android iOS Web macOS Windows Linux Fuchsia
Audio/Video ✔️ ✔️ ✔️ ✔️ ✔️ [WIP]
Data Channel ✔️ ✔️ ✔️ ✔️ ✔️ [WIP]
Screen Capture ✔️ ✔️ ✔️
Unified-Plan ✔️ ✔️ ✔️ ✔️
Simulcast ✔️ ✔️ ✔️ ✔️
MediaRecorder ⚠️ ⚠️ ✔️

Usage

Add flutter_webrtc as a dependency in your pubspec.yaml file.

iOS

Add the following entry to your Info.plist file, located in <project root>/ios/Runner/Info.plist:

<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) Camera Usage!</string>
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) Microphone Usage!</string>

This entry allows your app to access camera and microphone.

Android

Ensure the following permission is present in your Android Manifest file, located in <project root>/android/app/src/main/AndroidManifest.xml:

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

If you need to use a Bluetooth device, please add:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

The Flutter project template adds it, so it may already be there.

Also you will need to set your build settings to Java 8, because official WebRTC jar now uses static methods in EglBase interface. Just add this to your app level build.gradle:

android {
    //...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

If necessary, in the same build.gradle you will need to increase minSdkVersion of defaultConfig up to 21 (currently default Flutter generator set it to 16).

Important reminder

When you compile the release apk, you need to add the following operations, Setup Proguard Rules

Contributing

The project is inseparable from the contributors of the community.

Example

For more examples, please refer to flutter-webrtc-demo.

Contributors

Code Contributors

This project exists thanks to all the people who contribute. [Contribute].

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]

Individuals

Organizations

Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]

Issues
  • iOS microphone is not working

    iOS microphone is not working

    currently, i am developing on video p2p app. on android, I tested it many times and the microphone is working fine. but on ios, the microphone is not working when i start a call for the first time.

    this is the first call microphone on ios Untitled 2 this is the second call microphone on ios Untitled

    opened by Hooksmith 0
  • Unable to build plugin frameworks for simulator

    Unable to build plugin frameworks for simulator

    Describe the bug I'm trying to add a Flutter module as a framework to an existing iOS app, the framework uses the webrtc dependency and builds failed. When I execute command 'flutter build ios-framework --output=../Flutter/', it produced error like this : Unable to build plugin frameworks for simulator: ** BUILD FAILED ** The following build commands failed: CompileC /Users/bm/Desktop/video_plugin/Flutter/Debug/iphonesimulator/Pods.build/Debug-i phonesimulator/flutter_webrtc.build/Objects-normal/x86_64/FlutterRTCMediaStream .o /Users/bm/Desktop/FlutterSDK/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutte r_webrtc-0.7.1/ios/Classes/FlutterRTCMediaStream.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler (in target 'flutter_webrtc' from project 'Pods') CompileC /Users/bm/Desktop/video_plugin/Flutter/Debug/iphonesimulator/Pods.build/Debug-i phonesimulator/flutter_webrtc.build/Objects-normal/x86_64/FlutterRTCDataChannel .o /Users/bm/Desktop/FlutterSDK/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutte r_webrtc-0.7.1/ios/Classes/FlutterRTCDataChannel.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler (in target 'flutter_webrtc' from project 'Pods') (2 failures) To Reproduce flutter build ios-framework --output=../Flutter/ Expected behavior

    Platform information iOS

    • Flutter version: [✓] Xcode - develop for iOS and macOS [✓] Chrome - develop for the web [✓] Android Studio (version 4.2) [✓] VS Code (version 1.62.2) [✓] Flutter (Channel stable, 2.5.0, on macOS 11.6 20G165 darwin-x64, locale zh-Hans-CN)
    • Plugin version: 0.7.1
    • OS:
    • OS version:
    opened by wupengbigMarker 0
  • About libyuv

    About libyuv

    https://github.com/flutter-webrtc/flutter-webrtc/issues/168

    https://github.com/flutter-webrtc/flutter-webrtc/pull/188

    conflict with

    https://github.com/flutter-webrtc/flutter-webrtc-demo/issues/76

    https://github.com/flutter-webrtc/flutter-webrtc-demo/issues/76#issuecomment-976444789

    I am not familiar with ios, may be change #include "libyuv/xxx.h" to `#include "Libyuv/xxx.h" (case sensitive) in libyuv library can resolved them?

    opened by yangfanyu 0
  • Crash in v0.7.1

    Crash in v0.7.1

    Crash after successful p2p connection when video starts

    [log] "<message id="RSQAFRUCE" type="headline" to="[email protected]"><extraParams xmlns="jabber:client"><opponentsIDs><opponentID>5150293</opponentID></opponentsIDs><moduleIdentifier>WebRTCVideoChat</moduleIdentifier><callerID>5150297</callerID><callType>1</callType><sessionID>1b5d8b87-5e08-4c93-85f5-2caebd20444e</sessionID><signalType>iceCandidates</signalType><platform>flutter</platform><version_sdk>2.0.7</version_sdk><iceCandidates><iceCandidate><sdpMLineIndex>0</sdpMLineIndex><sdpMid>0</sdpMid><candidate>candidate:2505969574 1 udp 2122260223 192.168.31.29 41157 typ host generation 0 ufrag wj9X network-id 4 network-cost 10</candidate></iceCandidate></iceCandidates></extraParams></message>"
    [log] ---Xmpp Sending:---
    I/flutter (17491): CB-SDK: : sendIceCandidate, _sdp = CubeRTCSessionDescription: {sessionId = 1b5d8b87-5e08-4c93-85f5-2caebd20444e, callerId = 5150297, opponents = {5150293}, conferenceType = 1, userInfo = null}
    I/flutter (17491): CB-SDK: : sendIceCandidates, _sdp = CubeRTCSessionDescription: {sessionId = 1b5d8b87-5e08-4c93-85f5-2caebd20444e, callerId = 5150297, opponents = {5150293}, conferenceType = 1, userInfo = null}
    I/flutter (17491): CB-SDK: : sendIceCandidate, _sdp = CubeRTCSessionDescription: {sessionId = 1b5d8b87-5e08-4c93-85f5-2caebd20444e, callerId = 5150297, opponents = {5150293}, conferenceType = 1, userInfo = null}
    I/flutter (17491): CB-SDK: : sendIceCandidates, _sdp = CubeRTCSessionDescription: {sessionId = 1b5d8b87-5e08-4c93-85f5-2caebd20444e, callerId = 5150297, opponents = {5150293}, conferenceType = 1, userInfo = null}
    [log] "<message id="NVGWGDDCE" type="headline" to="[email protected]"><extraParams xmlns="jabber:client"><opponentsIDs><opponentID>5150293</opponentID></opponentsIDs><moduleIdentifier>WebRTCVideoChat</moduleIdentifier><callerID>5150297</callerID><callType>1</callType><sessionID>1b5d8b87-5e08-4c93-85f5-2caebd20444e</sessionID><signalType>iceCandidates</signalType><platform>flutter</platform><version_sdk>2.0.7</version_sdk><iceCandidates><iceCandidate><sdpMLineIndex>0</sdpMLineIndex><sdpMid>0</sdpMid><candidate>candidate:559267639 1 udp 2122136831 ::1 43869 typ host generation 0 ufrag wj9X network-id 2</candidate></iceCandidate></iceCandidates></extraParams></message>"
    [log] ---Xmpp Sending:---
    [log] "<message id="ILYIPMSGK" type="headline" to="[email protected]"><extraParams xmlns="jabber:client"><opponentsIDs><opponentID>5150293</opponentID></opponentsIDs><moduleIdentifier>WebRTCVideoChat</moduleIdentifier><callerID>5150297</callerID><callType>1</callType><sessionID>1b5d8b87-5e08-4c93-85f5-2caebd20444e</sessionID><signalType>iceCandidates</signalType><platform>flutter</platform><version_sdk>2.0.7</version_sdk><iceCandidates><iceCandidate><sdpMLineIndex>0</sdpMLineIndex><sdpMid>0</sdpMid><candidate>candidate:1510613869 1 udp 2122063615 127.0.0.1 41375 typ host generation 0 ufrag wj9X network-id 1</candidate></iceCandidate></iceCandidates></extraParams></message>"
    [log] ---Xmpp Sending:---
    [log] "<message id="PXSTVGJYN" type="headline" to="[email protected]"><extraParams xmlns="jabber:client"><opponentsIDs><opponentID>5150293</opponentID></opponentsIDs><moduleIdentifier>WebRTCVideoChat</moduleIdentifier><callerID>5150297</callerID><callType>1</callType><sessionID>1b5d8b87-5e08-4c93-85f5-2caebd20444e</sessionID><signalType>iceCandidates</signalType><platform>flutter</platform><version_sdk>2.0.7</version_sdk><iceCandidates><iceCandidate><sdpMLineIndex>0</sdpMLineIndex><sdpMid>0</sdpMid><candidate>candidate:1737481681 1 tcp 1518217471 2409:4001:e1f:94a7::8c08:2b07 9 typ host tcptype active generation 0 ufrag wj9X network-id 3 network-cost 900</candidate></iceCandidate></iceCandidates></extraParams></message>"
    [log] ---Xmpp Sending:---
    [log] "<message id="FHAEVSKAE" type="headline" to="[email protected]"><extraParams xmlns="jabber:client"><opponentsIDs><opponentID>5150293</opponentID></opponentsIDs><moduleIdentifier>WebRTCVideoChat</moduleIdentifier><callerID>5150297</callerID><callType>1</callType><sessionID>1b5d8b87-5e08-4c93-85f5-2caebd20444e</sessionID><signalType>iceCandidates</signalType><platform>flutter</platform><version_sdk>2.0.7</version_sdk><iceCandidates><iceCandidate><sdpMLineIndex>0</sdpMLineIndex><sdpMid>0</sdpMid><candidate>candidate:1876313031 1 tcp 1518157055 ::1 60133 typ host tcptype passive generation 0 ufrag wj9X network-id 2</candidate></iceCandidate></iceCandidates></extraParams></message>"
    [log] ---Xmpp Sending:---
    D/FlutterWebRTCPlugin(17491): CameraEventsHandler.onFirstFrameAvailable
    [log] "<message id="SSESOQJQU" type="headline" to="[email protected]"><extraParams xmlns="jabber:client"><opponentsIDs><opponentID>5150293</opponentID></opponentsIDs><moduleIdentifier>WebRTCVideoChat</moduleIdentifier><callerID>5150297</callerID><callType>1</callType><sessionID>1b5d8b87-5e08-4c93-85f5-2caebd20444e</sessionID><signalType>iceCandidates</signalType><platform>flutter</platform><version_sdk>2.0.7</version_sdk><iceCandidates><iceCandidate><sdpMLineIndex>0</sdpMLineIndex><sdpMid>0</sdpMid><candidate>candidate:344579997 1 tcp 1518083839 127.0.0.1 59473 typ host tcptype passive generation 0 ufrag wj9X network-id 1</candidate></iceCandidate></iceCandidates></extraParams></message>"
    I/BufferQueueConsumer(17491): [SurfaceTexture-0-17491-3](this:0xbd486000,id:3,api:1,p:17491,c:17491) setDefaultBufferSize: width=720 height=1280
    I/BufferQueueProducer(17491): [SurfaceTexture-2-17491-1](this:0xc1de6000,id:1,api:4,p:483,c:17491) queueBuffer: slot 0 is dropped, handle=0xe722e780
    W/System.err(17491): java.util.concurrent.ExecutionException: java.lang.UnsupportedOperationException: Not implemented.
    W/System.err(17491): 	at java.util.concurrent.FutureTask.report(FutureTask.java:123)
    W/System.err(17491): 	at java.util.concurrent.FutureTask.get(FutureTask.java:193)
    W/System.err(17491): 	at com.cloudwebrtc.webrtc.SimulcastVideoEncoderFactoryWrapper$StreamEncoderWrapper.initEncode(SimulcastVideoEncoderFactoryWrapper.kt:109)
    W/System.err(17491): Caused by: java.lang.UnsupportedOperationException: Not implemented.
    W/System.err(17491): 	at org.webrtc.WrappedNativeVideoEncoder.initEncode(WrappedNativeVideoEncoder.java:22)
    W/System.err(17491): 	at com.cloudwebrtc.webrtc.SimulcastVideoEncoderFactoryWrapper$StreamEncoderWrapper$initEncode$future$1.call(SimulcastVideoEncoderFactoryWrapper.kt:107)
    W/System.err(17491): 	at com.cloudwebrtc.webrtc.SimulcastVideoEncoderFactoryWrapper$StreamEncoderWrapper$initEncode$future$1.call(SimulcastVideoEncoderFactoryWrapper.kt:83)
    W/System.err(17491): 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    W/System.err(17491): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
    W/System.err(17491): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    W/System.err(17491): 	at java.lang.Thread.run(Thread.java:764)
    E/rtc     (17491):
    E/rtc     (17491):
    E/rtc     (17491): #
    E/rtc     (17491): # Fatal error in: gen/sdk/android/generated_metrics_jni/../../../../../../sdk/android/src/jni/jni_generator_helper.h, line 94
    E/rtc     (17491): # last system error: 11
    E/rtc     (17491): # Check failed: !env->ExceptionCheck()
    E/rtc     (17491): #
    I/BufferQueueProducer(17491): [SurfaceTexture-2-17491-1](this:0xc1de6000,id:1,api:4,p:483,c:17491) queueBuffer: slot 1 is dropped, handle=0xe722e860
    F/libc    (17491): Fatal signal 6 (SIGABRT), code -6 in tid 18515 (EncoderQueue - ), pid 17491 (p2p_call_sample)
    *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    Build fingerprint: 'samsung/j7maxlteins/j7maxlte:8.1.0/M1AJQ/G615FXXS2BUD2:user/release-keys'
    Revision: '5'
    ABI: 'arm'
    pid: 17491, tid: 18515, name: EncoderQueue -  >>> com.connectycube.flutter.p2p_call_sample <<<
    signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
        r0 00000000  r1 00004853  r2 00000006  r3 00000008
        r4 00004453  r5 00004853  r6 b0ef5c1c  r7 0000010c
        r8 00000000  r9 00000001  sl 000002d0  fp 00000500
        ip b3dd78d6  sp b0ef5c08  lr f0844c51  pc f083e3ea  cpsr 200d0030
    backtrace:
        #00 pc 0001a3ea  /system/lib/libc.so (abort+63)
        #01 pc 0020c5c5  /data/app/com.connectycube.flutter.p2p_call_sample-z_ahbOh6Kb7M3juqydMIng==/base.apk (offset 0x19b6000)
        #02 pc 0020c56d  /data/app/com.connectycube.flutter.p2p_call_sample-z_ahbOh6Kb7M3juqydMIng==/base.apk (offset 0x19b6000)
        #03 pc 001fd1cb  /data/app/com.connectycube.flutter.p2p_call_sample-z_ahbOh6Kb7M3juqydMIng==/base.apk (offset 0x19b6000)
        #04 pc 00321f8b  /data/app/com.connectycube.flutter.p2p_call_sample-z_ahbOh6Kb7M3juqydMIng==/base.apk (offset 0x19b6000)
        #05 pc 00459f7d  /data/app/com.connectycube.flutter.p2p_call_sample-z_ahbOh6Kb7M3juqydMIng==/base.apk (offset 0x19b6000)
        #06 pc 004e6b01  /data/app/com.connectycube.flutter.p2p_call_sample-z_ahbOh6Kb7M3juqydMIng==/base.apk (offset 0x19b6000)
        #07 pc 004e7dad  /data/app/com.connectycube.flutter.p2p_call_sample-z_ahbOh6Kb7M3juqydMIng==/base.apk (offset 0x19b6000)
        #08 pc 004e9f93  /data/app/com.connectycube.flutter.p2p_call_sample-z_ahbOh6Kb7M3juqydMIng==/base.apk (offset 0x19b6000)
        #09 pc 0045d2ab  /data/app/com.connectycube.flutter.p2p_call_sample-z_ahbOh6Kb7M3juqydMIng==/base.apk (offset 0x19b6000)
        #10 pc 0045e1f1  /data/app/com.connectycube.flutter.p2p_call_sample-z_ahbOh6Kb7M3juqydMIng==/base.apk (offset 0x19b6000)
        #11 pc 0045d671  /data/app/com.connectycube.flutter.p2p_call_sample-z_ahbOh6Kb7M3juqydMIng==/base.apk (offset 0x19b6000)
        #12 pc 00212941  /data/app/com.connectycube.flutter.p2p_call_sample-z_ahbOh6Kb7M3juqydMIng==/base.apk (offset 0x19b6000)
        #13 pc 002128b7  /data/app/com.connectycube.flutter.p2p_call_sample-z_ahbOh6Kb7M3juqydMIng==/base.apk (offset 0x19b6000)
        #14 pc 00047f07  /system/lib/libc.so (__pthread_start(void*)+22)
        #15 pc 0001b209  /system/lib/libc.so (__start_thread+32)
    Lost connection to device.
    Exited (sigterm)
    
    opened by abhi-dasgupta 3
  • Missing manifest and info plist file

    Missing manifest and info plist file

    When i try to build flutter webrtc getting issues missing manifest file and when i try to run app in ios device show error missing info plist file. what can i do for resolve this issues.

    opened by RRohitM 0
  • Flutter 两端交换完 sdp 信息后,并未触发 ice 事件

    Flutter 两端交换完 sdp 信息后,并未触发 ice 事件

    发起方:

    var offer = await pc.createOffer({
          'offerToReceiveAudio': true,
          'offerToReceiveVideo': true,
        });
    
        pc.setLocalDescription(offer);
        // 将请求信息发送给应答方
        hubConnection!.send('offerToPeer', args: [clientId, offer.sdp]);
    
    var pc = peer.peerConnetion;
    pc!.setRemoteDescription(RTCSessionDescription(answer, 'answer'));
    
    opened by iooc 7
  • iOS12 BoardCast Upload Extension can not send audio

    iOS12 BoardCast Upload Extension can not send audio

    iOS12 BoardCast Upload Extension , I create an new RTCPeerconnection,it can send video,but can not send audio,How to send an audio stream separately?

    • (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType {

      static NSUInteger frameCount = 0; switch (sampleBufferType) { case RPSampleBufferTypeVideo: if (++frameCount % 9 == 0) { [[YeasUploader shareInstance] uploadSampleBuffer:sampleBuffer]; } break; case RPSampleBufferTypeAudioApp: //send audio here break; case RPSampleBufferTypeAudioMic: break; default: break; } }

    opened by huoda1237 0
  • Flutter iOS App Error

    Flutter iOS App Error

    I got fatal error: 'WebRTC/WebRTC.h' file not found on flutter_webrtc 0.67. 0.7.1 version print error when try pod install. How fix it?!

    opened by Diy2210 5
  • Lighting mic input (iOS/Android)

    Lighting mic input (iOS/Android)

    Hi, I already raised a question about external microphone support (https://github.com/flutter-webrtc/flutter-webrtc/issues/687) and this solution worked for me on ios, but this was replaced with a different implementation that does not work with lightning microphones, and I would also like to have android support

    😭help wanted 
    opened by cr0manty 1
  • Force using high profile for webrtc session

    Force using high profile for webrtc session

    Hello,

    Currently we're experiencing problem that high profile is not being applied on all devices. We would like to have ability to explicitly force using high profile for encoder in flutter-webrtc plugin, is it possible?

    At the moment it's being forced from server side in sdp offer, but only ios devices follow this rule, as per android - it only depends on device, some return high profile and some baseline, even though baseline is used as one that is being provided in sdp, if sdp provides high - it fails for android, but ios is fine.

    opened by MoonCodeFellow 2
Releases(0.7.1)
  • 0.7.1(Nov 4, 2021)

    [0.7.1] - 2021-11-04

    • [iOS/macOS] Update framework.
    • [Android] Update framework.
    • [Windows] Implement mediaStreamTrackSetEnable (#756).
    • [iOS/macOS] Enable audio capture when acquiring track.
    • [Android] Call stopCaptureWithCompletionHandler instead (#748)
    • [Windows] Fix bug for windows.
    Source code(tar.gz)
    Source code(zip)
  • 0.7.0+hotfix.2(Oct 22, 2021)

  • 0.7.0+hotfix.1(Oct 21, 2021)

  • 0.7.0(Oct 20, 2021)

    [0.7.0] - 2021-10-20

    • [Android] Enable Android simulcast (#731)
    • [macOS] Use pre-compiled WebRTC for macOS. (#717)
    • [iOS/macOS] Fix the correct return value of createDataChannel under darwin.
    • [Windows] Fix using the wrong id to listen datachannel events.
    • [Dart] Fix(mediaStreamTrackSetEnable): remote track is unavaiable (#723).
    Source code(tar.gz)
    Source code(zip)
  • 0.6.10+hotfix.1(Oct 1, 2021)

  • 0.6.10(Oct 1, 2021)

  • 0.6.9(Sep 30, 2021)

    [0.6.9] - 2021-10-01

    • [iOS] Update WebRTC build (#707).
    • [Windows] Add Unified-Plan support for windows. (#688)
    • [iOS] Improve audio handling on iOS (#705)
    Source code(tar.gz)
    Source code(zip)
  • 0.6.8(Sep 27, 2021)

    [0.6.8] - 2021-09-27

    • [Android] Use ApplicationContext to verify permissions when activity is null.
    • [iOS] Add support for lightning microphone. (#693)
    • [Windows] Fix FlutterMediaStream::GetSources.
    • [Web] Fix Flutter 2.5.0 RTCVideoRendererWeb bug (#681)
    • [Web] Bug fix (#679)
    Source code(tar.gz)
    Source code(zip)
  • 0.6.7(Sep 8, 2021)

    [0.6.7] - 2021-09-08

    • [Android] upgrade webrtc sdk to m92.92.4515.
    • [Web] addTransceiver bug fix (#675)
    • [Web] Use low-level jsutil to call createOffer/createrAnswer to solve the issue on safari/firefox.
    • [Dart] Fix currentDirection/direction implementation confusion.
    Source code(tar.gz)
    Source code(zip)
  • 0.6.6(Sep 1, 2021)

    [0.6.6] - 2021.09.01

    • [Sponsorship] Thanks for LiveKit sponsorship.
    • [Web] Avoid removing all audio elements when stopping a single video renderer (#667)
    • [Web] Properly cleanup srcObject to avoid accidental dispose
    • [Dart] Removed warnings (#647)
    • [Web] Switch transferFromImageBitmap to be invoked using js.callMethod (#631)
    • [Web] Fix sending binary data over DataChannel in web implementation. (#634)
    • [Darwin] Nullable return for GetLocalDescription/GetRemoteDiscription
    • [Darwin] Fix incorrect argument name at RTCRtpSender (#600)
    Source code(tar.gz)
    Source code(zip)
  • 0.6.5(Aug 2, 2021)

    [0.6.5] - 2021.06.18

    • [Android] Falling back to the first available camera fix #580
    • [Android] Fix application exit null-pointer exception (#582)
    • [Dart] Add label getter to DataChannel Interface (#585)
    • [Dart] Fix exception raised at RTCPeerConnection.removeTrack and RTCRtpSender.setParameters (#588)
    • [Dart] Fix: null check (#595)
    • [Dart] Fix: null check for RTCRtpTransceiverNative.fromMap
    Source code(tar.gz)
    Source code(zip)
  • 0.6.4(May 29, 2021)

    [0.6.4] - 2021.05.02

    • [Android] Fix getting screen capture on Huawei only successful in the first time. (#523)
    • [Android] Add configuration "cryptoOptions" in parseRTCConfiguration().
    • [Dart] Change getLocalDescription,getRemoteDescription,RTCRtpSenderWeb.track returns to nullable.
    • [Dart] Fixed bug in RTCPeerConnectionWeb.removeTrack.
    • [Dart] Change MediaStreamTrack.captureFrame returns to ByteBuffer to compatible with web API.
    • [Dart] Do null safety check in onRemoveStream,onRemoveTrack and MediaStream.getTrackById.
    • [Android] Add reStartCamera method when the camera is preempted by other apps.
    • [Web] Refactored RTCVideoRendererWeb and RTCVideoViewWeb, using video and audio HTML tags to render audio and video streams separately.
    Source code(tar.gz)
    Source code(zip)
  • 0.6.3(Apr 3, 2021)

    [0.6.3] - 2021.04.03

    • [Dart] Change RTCRtpSender.track to nullable.
    • [Web] Fix RTCVideoView/Renderer pauses when changing child in IndexedStack.
    Source code(tar.gz)
    Source code(zip)
  • 0.6.2(Apr 2, 2021)

  • 0.6.1(Apr 1, 2021)

  • 0.6.0(Apr 1, 2021)

    [0.6.0] - 2021.04.01

    • [Sponsorship] Thanks for Stream sponsorship (#475)
    • [Android] Fixed a crash when switching cameras on Huawei devices.
    • [Windows] Correct signalingState & iceConnectionState event name on Windows. (#502)
    • [Dart] Clip behaviour. (#511)
    • [Dart] null-safety (@wer-mathurin Thanks for the hard work).
    • [Dart] Fix setMicrophoneMute (#466)
    • [Web] Fix pc.addTransceiver method, fix RTCRtpMediaType to string, fix (#437)
    • [Android] fix sdpSemantics issue (#478)
    Source code(tar.gz)
    Source code(zip)
  • 0.5.8(Jan 26, 2021)

    [0.5.8] - 2021.01.26

    • [Web] Support selecting audio output.
    • [Web] Fix issue for getDisplayMedia with audio.
    • [Windows] Add Windows Support.
    • [macOS] Fix compile error for macos.
    • [Dart] Add FilterQuality to RTCVideoView.
    • [iOS/Android] Unified plan gettracks.
    • [iOS/Android] Bluetooth switching enabled when switching enableSpeakerphone value (if they are connected). #201 (#435)
    • [Android] Increase necessary Android min SDK version after adding Unified-Plan API.
    Source code(tar.gz)
    Source code(zip)
  • 0.5.6(Nov 23, 2020)


    [0.5.6] - 2020.11.21

    • [Android/Darwin/Web] Add onResize event for RTCVideoRenderer.

    [0.5.5] - 2020.11.21

    • [Android/Darwin] Fix Simulcast issue.

    [0.5.4] - 2020.11.21

    • [Native/Web] Add videoWidth/videoHeight getter for RTCVideoRenderer.
    • [Web] Add optional parameter track to call getStats.

    [0.5.3] - 2020.11.21

    • Fix bug.

    [0.5.2] - 2020.11.19

    • Improve web code
    Source code(tar.gz)
    Source code(zip)
  • 0.5.1(Nov 19, 2020)


    [0.5.1] - 2020.11.19

    • Improve unfied-plan API for web.
    • Add getTransceivers,getSenders, getReceivers methods.
    • Remove dart-webrtc and reuse the code in dart:html because the code generated by package:js cannot be run in dart2js.
    Source code(tar.gz)
    Source code(zip)
  • 0.5.0(Nov 15, 2020)

    [0.5.0] - 2020.11.18

    • [Web] Add Unified-Plan for Flutter Web.
    • [Web] Add video frame mirror support for web.
    • [Web] Support Simulcast for web.
    • [Web] Use dart-webrtc as flutter web plugin.
    • [Android/Darwin] Fix crash when unset streamIds in RtpTransceiverInit.
    • [Dart]Change the constraints of createOffer/createAnswer as optional.
    • [iOS]Fix adding track to stream igal committed (#413)
    Source code(tar.gz)
    Source code(zip)
  • 0.4.1(Nov 11, 2020)

    [0.4.1] - 2020.11.11

    • Add transceiver to onTrack events.
    • Remove unnecessary log printing.
    • Fixed a crash caused by using GetTransceivers under non-unified-plan, close #389.
    • FIX - Invalid type inference (#392)
    • [Web]Add onEnded and onMuted for Web (#387)
    • [Darwin]Fix PeerConnectionState for darwin.
    • [Darwin] Fix compilation warning under darwin.
    • [Android] Fixed 'Sender is null' issue when removing track. (#401)
    • [iOS] fix removeTrack methodChannel response, onTrack's stream and track not being registered in native.
    • [Darwin/Android] RtpSender setParameters functionality.
    Source code(tar.gz)
    Source code(zip)
  • 0.4.0(Oct 13, 2020)

  • 0.3.3(Sep 14, 2020)

    [0.3.3] - 2020.09.14

    • Add RTCDTMFSender for mobile, web and macOS.
    • Improve RenegotiationNeededCallback.
    • Refactor RTCVideoView for web and solve the resize problem.
    • Reduce code size.
    Source code(tar.gz)
    Source code(zip)
  • 0.3.2(Sep 11, 2020)

    [0.3.2] - 2020.09.11

    • Reorganize the directory structure.
    • Replace class name navigator to MediaDevices.
    • Downgrade pedantic version to 1.9.0.
    Source code(tar.gz)
    Source code(zip)
  • 0.3.1(Sep 11, 2020)

  • 0.3.0+1(Sep 5, 2020)

  • 0.3.0(Sep 5, 2020)

    [0.3.0] - 2020.09.05

    • [Dart] Improve RTCVideoView.
    • [Android] Refactors Android plugin alongside the embedding V2 migration.
    • [Dart] Fix .ownerTag not defined for web.
    • [Dart] Added label as read-only property.
    • [macOS] Updated WebRTC framework to work with AppStoreConnect.
    • [Dart] Make 'constraints' argument optional.
    • [Dart] Make createOffer constraints optional.
    • [iOS/Android/Web] Adding createLocalMediaStream method to PeerConnectionFactory.
    • [Web] Fixing multiple video renderers on the same HTML page for Flutter Web.
    • [iOS] Add peerConnectionId to data channel EventChannel.
    • [Android] Add library module ProGuard configuration file.
    • [iOS] Fix typo in render size change check condition
    • [README] Add missed Android usage hint.
    Source code(tar.gz)
    Source code(zip)
  • 0.2.8(Apr 22, 2020)

    [0.2.8] - 2020.04.22

    • [macOS/iOS] Fix typo in render size change check condition.
    • [macOS] Fix hot restart videoCapturer crash.
    • [Android] Fix Android crash when getUserVideo.
    Source code(tar.gz)
    Source code(zip)
  • 0.2.7(Mar 20, 2020)

    [macOS] Fix crash with H264 HW Encoder. [Web] Add addTransceiver API. [Android] Removed duplicate method that was causing compilation error. [iOS] Use MrAlek Libyuv pod fixing incompatibility with FirebaseFirestore. [iOS] Upgrade GoogleWebRTC dependency to 1.1.29400.

    Source code(tar.gz)
    Source code(zip)
Owner
Flutter WebRTC
About flutter's voip, webrtc related solutions.
Flutter WebRTC
Flutter plugin that can support audio recording and level metering

flutter_audio_recorder English | 简体中文 Flutter Audio Record Plugin that supports Record Pause Resume Stop and provide access to audio level metering pr

RMBR ONE 93 Nov 10, 2021
Flutter plugin for sound. Audio recorder and player.

Flutter Sound user: your documentation is there The CHANGELOG file is here Overview Flutter Sound is a Flutter package allowing you to play and record

null 660 Nov 23, 2021
A flutter plugin to handle Android / iOS camera

?? Overview Flutter plugin to add Camera support inside your project. CamerAwesome include a lot of useful features like: ?? Live camera flip ( switch

Apparence.io 293 Nov 20, 2021
A Flutter plugin to use speech recognition on iOS & Android (Swift/Java)

speech_recognition A flutter plugin to use the speech recognition iOS10+ / Android 4.1+ Basic Example Sytody, speech to todo app Installation Depend o

Erick Ghaumez 321 Nov 17, 2021
The video player for Flutter with a heart of gold

chewie The video player for Flutter with a heart of gold. The video_player plugin provides low-level access to video playback. Chewie uses the video_p

Brian Egan 1.3k Nov 24, 2021
Flutter video trimmer package

A Flutter package for trimming videos Features Customizable video trimmer Video playback control Retrieving and storing video file Also, supports conv

Souvik Biswas 271 Nov 23, 2021
BlackHole - A Music Player App made with Flutter

BlackHole - A Music Player App made with Flutter

Ankit Sangwan 1.5k Dec 1, 2021
Trying out Flutter for desktop Web app development as an alternative to SPA frameworks (such as React and Angular) by recreating one of the pages of an existing CV Management web app

HTML Renderer Demo CanvasKit Renderer Demo Reddit discussion This repo contains a PoC of using Flutter as a traditional SPA framework for creating a d

Maxim Saplin 11 Nov 8, 2021
Flutter UI Kits for mobile, tablet, desktop and web application

UIKits2 A complete UIs for mobile and tablet, which include 16 categories. Start SignUp & Login Walkthrough Loading Profiles Feed Article Activity Cre

Anuchit Chalothorn 15 Sep 22, 2021
Web + mobile + desktop

SwiggyUI SwiggyUI App is a UI clone of a famous food ordering app called Swiggy built using Flutter. Show some ❤️ and star ⭐ the repo if you liked it,

Rudresh 17 Oct 30, 2021
Flutter WebRTC demo with Python server to perform image processing on video frames using OpenCV

flutter + webrtc => python + aiortc + opencv This demo project should help you to get setup sending a video feed from a flutter app to a python backen

John Crisp 24 Nov 8, 2021
Flutter basic desktop project. Desktop todo app.

Glory Todo Desktop Basic and Primitive Flutter Desktop Project! Goal My goal is to accept my inexperience without worrying about the plugin shortcomin

Özgür 41 Oct 14, 2021
Simple tool to open WhatsApp chat without saving the number, developed using Google's Flutter Framework. for Android/ IOS/ Desktop/ Web

OpenWp Simple tool to open WhatsApp chat without saving the number Explore the docs » View Demo · Report Bug · Request Feature Table of Contents About

Swarup Bhanja Chowdhury 14 Aug 8, 2021
Crop any widget/image in Android, iOS, Web and Desktop with fancy and customizable UI, in pure Dart code.

crop A Flutter package for cropping any widget, not only images. This package is entirely written in Dart and supports Android, iOS, Web and Desktop.

Mahdi 169 Nov 12, 2021
Beautiful Nike Web Design Concept With Flutter Beautiful Nike Web Design Concept With Flutter

flutter_web_nike A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started

Pawan Kumar 22 Nov 18, 2021
File picker plugin for Flutter, compatible with both iOS & Android and desktop (go-flutter).

File Picker A package that allows you to use the native file explorer to pick single or multiple files, with extensions filtering support. Currently s

Miguel Ruivo 706 Nov 27, 2021
gui automation based on pyautogui python as backend and flutter desktop as frontend, drag and drop tool, no coding required.

GUI_AUTOMATION gui automation based on pyautogui python as backend and flutter desktop as frontend, drag and drop tool, no coding required. Install py

Hassan Kanso 26 Oct 28, 2021
An Ubuntu desktop settings app made with Flutter

unofficial Ubuntu Desktop Settings App made with Flutter - WIP TODO use real yaru icons - thanks to @Jupi007 improve layout implement settings search

Frederik Feichtmeier 93 Nov 28, 2021
A curated list of awesome things related to Flutter desktop.

awesome-flutter-desktop A curated list of awesome things related to Flutter desktop. Table of Contents awesome-flutter-desktop Packages Open Source Ap

LeanFlutter 474 Nov 22, 2021
an internship log book desktop app

LogBook Desktop App an internship log book desktop app Table of contents LogBook Desktop App Table of contents Features Log Book Format Demo Screensho

Donald Chinhuru 50 Oct 1, 2021
A Flutter plugin for the Google Mobile Ads SDK

A Flutter plugin for the Google Mobile Ads SDK

Google Ads 164 Nov 22, 2021
OneSignal is a free push notification service for mobile apps. This plugin makes it easy to integrate your flutter app with OneSignal

OneSignal Flutter SDK OneSignal is a free push notification service for mobile apps. This SDK makes it easy to integrate your Flutter iOS and/or Andro

OneSignal 493 Nov 23, 2021
Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.

On most operating systems, permissions aren't just granted to apps at install time. Rather, developers have to ask the user for permissions while the

Baseflow 1.4k Nov 23, 2021
Udacity UI Clone made with Flutter Web (Flutter 2.0).

Udacity UI Clone Flutter Web 2.0 Description: Udacity UI Clone made with Flutter Web (Flutter 2.0). ScreenShots: Tools & languages: Android studio (ID

Benotmane Mohammed 15 Oct 3, 2021
A Google Analytics wrapper for command-line, web, and Flutter apps.

A wrapper around Google Analytics for command-line, web, and Flutter apps. For web apps To use this library as a web app, import the usage_html.dart l

Dart 122 Nov 5, 2021
Play simultaneously music/audio from assets/network/file directly from Flutter, compatible with android / ios / web / macos, displays notifications

?? assets_audio_player ?? Play music/audio stored in assets files (simultaneously) directly from Flutter (android / ios / web / macos). You can also u

Florent CHAMPIGNY 562 Nov 28, 2021
A multiplatform Dart movie app with 40% of code sharing between Flutter and the Web.

A multiplatform Dart movie app with 40% of code sharing between Flutter and the Web.

Iiro Krankka 3.2k Nov 24, 2021
flutter 2.0 web demo

web_demo Flutter 2.0 快速构建的一个站点样例 在线预览:http://webdemo.loveli.site github ci构建的版本(每次代码提交,自动构建):http://webdemo.oldbird.run, 采用 hash 路由策略 更多精彩,请关注官方微信公众号:

swiftdo 22 Nov 4, 2021