WebRTC plugin for Flutter Mobile/Desktop/Web

Overview

Flutter-WebRTC

Financial Contributors on Open Collective pub package Gitter slack

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 Embedded
Audio/Video ✔️ ✔️ ✔️ ✔️ ✔️ [WIP] [WIP]
Data Channel ✔️ ✔️ ✔️ ✔️ ✔️ [WIP] [WIP]
Screen Capture ✔️ ✔️ ✔️
Unified-Plan ✔️ ✔️ ✔️ ✔️ ✔️ [WIP] [WIP]
Simulcast ✔️ ✔️ ✔️ ✔️ [WIP]
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]

Comments
  • [version:0.6.10+hotfix.1] iOS error: 'WebRTC/WebRTC.h' file not found

    [version:0.6.10+hotfix.1] iOS error: 'WebRTC/WebRTC.h' file not found

    When i try to build release on ios (Product -> archive), the build fails with 'WebRTC/WebRTC.h' file not found error. When i downgrade the dependency to 0.6.7, it works without errors, but i need the changes in the latest version for improved iOS audio handling. Screen Shot 2021-10-04 at 4 15 20 AM

    version that fails: 0.6.10+hotfix.1 version that works: 0.6.7

    Oh and another thing that i noticed while running pod update is that flutter_webrtc.podspec still states s.version = '0.2.2' for almost all the versions, it gets confusing sometimes to check if xcode is using the right version dependency or not 😅

    opened by aki25 37
  • Screen Capture for Flutter Desktop

    Screen Capture for Flutter Desktop

    I added a desktop-specific capture interface, which uses the desktop unified interface for Windows/macOS/Linux.

    https://github.com/flutter-webrtc/webrtc-interface/blob/feat/desktop-cpaturer/lib/src/desktop_capturer.dart

    enum SourceType {
      kEntireScreen,
      kWindow,
    }
    
    class ThumbnailSize {
      ThumbnailSize(this.width, this.height);
      int width;
      int height;
    }
    
    abstract class DesktopCapturerSource {
      /// The identifier of a window or screen that can be used as a
      /// chromeMediaSourceId constraint when calling
      String get id;
    
      /// A screen source will be named either Entire Screen or Screen <index>,
      /// while the name of a window source will match the window title.
      String get name;
    
      ///A thumbnail image of the source. ARGB
      ByteBuffer get thumbnail;
    
      /// specified in the options passed to desktopCapturer.getSources.
      /// The actual size depends on the scale of the screen or window.
      ThumbnailSize get thumbnailSize;
    
      /// The type of the source.
      SourceType get type;
    }
    
    abstract class DesktopCapturer {
      Future<List<DesktopCapturerSource>> getSources(
          {List<SourceType> types, ThumbnailSize thumbnailSize});
    }
    

    The enumeration is as follows

    var sources = await navigator.desktopCapturer.getSources(
            types: [kScreen, kWindow], 
            thumbnailSize:  ThumbnailSize(width: 320, heigth: 180)
            );
    
    DesktopCapturerSource selectedSource;
    sources.forEach((item) => {
         // print item.id, item.title
         // display thumbnail
         selectedSource = item;
    });
    
    

    get default display media.

    var mediaStream = await navigator.mediaDevices.getDisplayMedia({video: true});
    

    get display media by source id.

    var mediaStream = await navigator.mediaDevices.getDisplayMedia({
          video: {
                   deviceId: {
                         exact: selectedSource.id
                  }
                  mandatory: {
                        minWidth: 1280,
                        minHeight: 720,
                        frameRate: 30.0
                  }
          }
    })
    

    image

    opened by cloudwebrtc 25
  • Change video/audio source on Chrome/Firefox

    Change video/audio source on Chrome/Firefox

    Hi, I can switch between front and back cameras using the following function on mobile:

    stream.getVideoTracks()[0].switchCamera();

    Can it be possible to iterate through all available cameras on Chrome (web) using the same function or an additional function?

    Or can you add a function to get a list of available cameras (and also available audio input sources) and select one of them using an index?

    On Chrome WebRTC, one can select from available video and audio sources even during a conversation.

    But on Firefox, the user chooses the video/audio source before the conversation starts and it's not possible to switch to another source afterwards.

    I'm not sure how this difference can be addressed.

    PS: My app works fine on the latest versions of Chrome and Firefox but not on Safari. Do you have any plans to support Safari?

    opened by postacik 23
  • How Can I add camera effects - filters

    How Can I add camera effects - filters

    Hello,

    Did anyone know how can we add camera effects and transmit them to peer connection?

    For example Snapchat like filters or open GL filters

    Appreciate it if anyone able to give a solution or guiding to how to do it

    TIA

    🚀enhancement 😭help wanted wontfix 
    opened by magiccDev 21
  • [WIP]Support for Flutter Desktop

    [WIP]Support for Flutter Desktop

    Texture widget for the embedder seems to be coming soon: https://github.com/google/flutter-desktop-embedding/issues/107#issuecomment-444272681, let's port it to the desktop embedder and let the plugin extend to mac/linux/windows. 😄

    🚀enhancement work in progress 
    opened by cloudwebrtc 21
  • dead loop?

    dead loop?

    I/org.webrtc.Logging(28548): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4005 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4004 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4005 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4004 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4004 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4003 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4005 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4004 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4005 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4005 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4004 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4004 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4004 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(28548): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.

    ❔question wontfix 
    opened by cuijinfeng68 16
  • Stream Video on Galaxy s22 ultra black screen, audio working find. (SD 8 Gen 1)

    Stream Video on Galaxy s22 ultra black screen, audio working find. (SD 8 Gen 1)

    ** During stream audio working fine, but the video shows a black screen for S22 ultra, other device working normally. **

    Make a call from S22 ultra and the incoming call device picked up the black screen show. If make a call from other devices to s22 ultra video and audio work well as usual.

    I/ViewRootImpl@f81f857MainActivity: ViewPostIme pointer 0 I/ViewRootImpl@f81f857MainActivity: ViewPostIme pointer 1 I/DecorView(32251): notifyKeepScreenOnChanged: keepScreenOn=true I/ViewRootImpl@f81f857MainActivity: Relayout returned: old=(0,0,1080,2316) new=(0,0,1080,2316) req=(1080,2316)0 dur=4 res=0x1 s={true -5476376610960537264} ch=false fn=3 I/ViewRootImpl@f81f857MainActivity: updateBoundsLayer: t = android.view.SurfaceControl$Transaction@73115d3 sc = Surface(name=Bounds for - com.futureteen.chat/com.example.myapp.MainActivity@0)/@0x8bec510 frame = 3 I/org.webrtc.Logging(32251): NativeLibrary: Loading native library: jingle_peerconnection_so I/org.webrtc.Logging(32251): NativeLibrary: Loading library: jingle_peerconnection_so I/org.webrtc.Logging(32251): PeerConnectionFactory: PeerConnectionFactory was initialized without an injected Loggable. Any existing Loggable will be deleted. I/org.webrtc.Logging(32251): EglBase14Impl: SDK version: 31. isEGL14Supported: true I/org.webrtc.Logging(32251): EglBase14Impl: Using OpenGL ES version 2 I/org.webrtc.Logging(32251): WebRtcAudioManagerExternal: Sample rate is set to 48000 Hz I/org.webrtc.Logging(32251): WebRtcAudioManagerExternal: Sample rate is set to 48000 Hz I/org.webrtc.Logging(32251): JavaAudioDeviceModule: createAudioDeviceModule I/org.webrtc.Logging(32251): JavaAudioDeviceModule: HW NS will be used. I/org.webrtc.Logging(32251): JavaAudioDeviceModule: HW AEC will be used. I/org.webrtc.Logging(32251): WebRtcAudioEffectsExternal: ctor@[name=main, id=2] I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: ctor@[name=main, id=2] I/org.webrtc.Logging(32251): WebRtcAudioTrackExternal: ctor@[name=main, id=2] W/AudioCapabilities(32251): Unsupported mime audio/x-ape W/AudioCapabilities(32251): Unsupported mime audio/x-ima W/AudioCapabilities(32251): Unsupported mime audio/mpeg-L1 W/AudioCapabilities(32251): Unsupported mime audio/mpeg-L2 W/VideoCapabilities(32251): Unsupported mime video/wvc1 W/VideoCapabilities(32251): Unsupported mime video/x-ms-wmv W/VideoCapabilities(32251): Unsupported mime video/avc-wfd W/VideoCapabilities(32251): Unsupported mime video/avc-wfd W/VideoCapabilities(32251): Unsupported mime video/hevc-wfd W/VideoCapabilities(32251): Unsupported mime video/hevc-wfd W/VideoCapabilities(32251): Unsupported mime image/vnd.android.heic W/VideoCapabilities(32251): Unsupported mime image/vnd.android.heic I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: enableBuiltInAEC(true) I/org.webrtc.Logging(32251): WebRtcAudioEffectsExternal: setAEC(true) I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: enableBuiltInNS(true) I/org.webrtc.Logging(32251): WebRtcAudioEffectsExternal: setNS(true) I/org.webrtc.Logging(32251): PeerConnectionFactory: onNetworkThreadReady I/org.webrtc.Logging(32251): PeerConnectionFactory: onWorkerThreadReady I/org.webrtc.Logging(32251): PeerConnectionFactory: onSignalingThreadReady I/org.webrtc.Logging(32251): EglRenderer: Initializing EglRenderer I/org.webrtc.Logging(32251): EglRenderer: EglBase.create shared context I/org.webrtc.Logging(32251): EglBase14Impl: Using OpenGL ES version 2 I/org.webrtc.Logging(32251): EglRenderer: Initializing EglRenderer I/org.webrtc.Logging(32251): EglRenderer: EglBase.create shared context I/org.webrtc.Logging(32251): EglBase14Impl: Using OpenGL ES version 2 I/FlutterWebRTCPlugin(32251): getUserMedia(audio): mandatory: [], optional: [googNoiseSuppression: true, googEchoCancellation: true, echoCancellation: true, googEchoCancellation2: true, googDAEchoCancellation: true] I/FlutterWebRTCPlugin(32251): getUserMedia(video): ConstraintsMap{mMap={facingMode=user}} I/CameraManagerGlobal(32251): Connecting to camera service D/VendorTagDescriptor(32251): addVendorDescriptor: vendor tag id 14172875900359437128 added I/CameraManagerGlobal(32251): Camera 0 facing CAMERA_FACING_BACK state now CAMERA_STATE_CLOSED for client com.samsung.android.visionintelligence API Level 2 I/CameraManagerGlobal(32251): Camera 1 facing CAMERA_FACING_FRONT state now CAMERA_STATE_CLOSED for client com.futureteen.chat API Level 2 I/CameraManagerGlobal(32251): Camera 2 facing CAMERA_FACING_BACK state now CAMERA_STATE_CLOSED for client android.system API Level 2 D/FlutterWebRTCPlugin(32251): Creating video capturer using Camera2 API. I/CameraManagerGlobal(32251): Camera 20 facing CAMERA_FACING_BACK state now CAMERA_STATE_CLOSED for client com.sec.android.app.camera API Level 2 I/CameraManagerGlobal(32251): Camera 21 facing CAMERA_FACING_BACK state now CAMERA_STATE_CLOSED for client android.system API Level 2 I/CameraManagerGlobal(32251): Camera 23 facing CAMERA_FACING_BACK state now CAMERA_STATE_CLOSED for client android.system API Level 2 I/CameraManagerGlobal(32251): Camera 3 facing CAMERA_FACING_FRONT state now CAMERA_STATE_CLOSED for client android.system API Level 2 D/FlutterWebRTCPlugin(32251): Create front camera 1 succeeded I/CameraManagerGlobal(32251): Camera 4 facing CAMERA_FACING_FRONT state now CAMERA_STATE_CLOSED for client vendor.client.pid<1907> API Level 2 I/CameraManagerGlobal(32251): Camera 52 facing CAMERA_FACING_BACK state now CAMERA_STATE_CLOSED for client android.system API Level 2 I/CameraManagerGlobal(32251): Camera 54 facing CAMERA_FACING_BACK state now CAMERA_STATE_CLOSED for client android.system API Level 2 I/org.webrtc.Logging(32251): EglBase14Impl: Using OpenGL ES version 2 I/CameraManagerGlobal(32251): Camera 56 facing CAMERA_FACING_BACK state now CAMERA_STATE_CLOSED for client com.sec.android.app.camera API Level 2 I/CameraManagerGlobal(32251): Camera 58 facing CAMERA_FACING_BACK state now CAMERA_STATE_CLOSED for client android.system API Level 2 I/CameraManagerGlobal(32251): Camera 90 facing CAMERA_FACING_FRONT state now CAMERA_STATE_CLOSED for client android.system API Level 2 I/org.webrtc.Logging(32251): CameraCapturer: startCapture: 1280x720@30 D/FlutterWebRTCPlugin(32251): changeCaptureFormat: 1280x720@30 I/org.webrtc.Logging(32251): Camera2Session: Create new camera2 session on camera 1 I/org.webrtc.Logging(32251): Camera2Session: start D/FlutterWebRTCPlugin(32251): MediaStream id: 3d840e6c-64e7-4c1c-abd9-7e34575c00b3 I/flutter (32251): MediaStreamTrack:enableSpeakerphone true I/flutter (32251): MediaStreamTrack:enableSpeakerphone true I/org.webrtc.Logging(32251): Camera2Session: Available preview sizes: [3648x2736, 3648x2048, 3648x1640, 2736x2736, 2400x1080, 2320x1080, 1920x1440, 1920x1080, 1920x824, 1440x1080, 1280x720, 1088x1088, 960x720, 720x480, 640x480, 640x360, 352x288, 320x240, 176x144] I/org.webrtc.Logging(32251): Camera2Session: Available fps ranges: [[10.0:10.0], [7.0:15.0], [15.0:15.0], [24.0:24.0], [7.0:30.0], [30.0:30.0]] I/org.webrtc.Logging(32251): Camera2Session: Using capture format: 1280x720@[7.0:30.0] I/org.webrtc.Logging(32251): Camera2Session: Opening camera 1 D/FlutterWebRTCPlugin(32251): CameraEventsHandler.onCameraOpening: cameraName=1 D/RTCAudioManager(32251): ctor D/RTCBluetoothManager(32251): create@[name=main, id=2] D/RTCBluetoothManager(32251): ctor D/RTCAudioManager(32251): useSpeakerphone: auto D/RTCProximitySensor(32251): RTCProximitySensor@[name=main, id=2] D/RTCAudioManager(32251): defaultAudioDevice: SPEAKER_PHONE D/RTCAudioManager(32251): Android SDK: 31, Release: 12, Brand: samsung, Device: b0q, Id: SP1A.210812.016, Hardware: qcom, Manufacturer: samsung, Model: SM-S908E, Product: b0qxxx D/RTCAudioManager(32251): start D/RTCAudioManager(32251): AudioManager starts... W/AudioManager(32251): Use of stream types is deprecated for operations other than volume control W/AudioManager(32251): See the documentation of requestAudioFocus() for what to use instead with android.media.AudioAttributes to qualify your playback use case D/RTCAudioManager(32251): Audio focus request granted for VOICE_CALL streams D/RTCBluetoothManager(32251): start I/BluetoothAdapter(32251): BluetoothAdapter() : com.futureteen.chat D/RTCBluetoothManager(32251): BluetoothAdapter: enabled=false, state=OFF, name=Sokpheng's S22 Ultra, address=02:00:00:00:00:00 I/org.webrtc.Logging(32251): Camera2Session: Camera opened. D/BluetoothHeadset(32251): BTStateChangeCB is registed by 32251 @ com.futureteen.chat D/RTCBluetoothManager(32251): HEADSET profile state: DISCONNECTED D/RTCBluetoothManager(32251): Bluetooth proxy for headset profile has started D/RTCBluetoothManager(32251): start done: BT state=HEADSET_UNAVAILABLE D/RTCAudioManager(32251): --- updateAudioDeviceState: wired headset=false, BT state=HEADSET_UNAVAILABLE D/RTCAudioManager(32251): Device status: available=[], selected=NONE, user selected=NONE D/RTCAudioManager(32251): setAudioDeviceInternal(device=SPEAKER_PHONE) I/CameraManagerGlobal(32251): Camera 1 facing CAMERA_FACING_FRONT state now CAMERA_STATE_OPEN for client com.futureteen.chat API Level 2 D/RTCAudioManager(32251): New device status: available=[EARPIECE, SPEAKER_PHONE], selected=SPEAKER_PHONE D/FlutterWebRTCPlugin(32251): onAudioManagerDevicesChanged: [EARPIECE, SPEAKER_PHONE], selected: SPEAKER_PHONE D/RTCAudioManager(32251): --- updateAudioDeviceState done D/RTCAudioManager(32251): AudioManager started D/RTCAudioManager(32251): WiredHeadsetReceiver.onReceive@[name=main, id=2]: a=android.intent.action.HEADSET_PLUG, s=unplugged, m=mic, n=null, sb=true D/RTCAudioManager(32251): --- updateAudioDeviceState: wired headset=false, BT state=HEADSET_UNAVAILABLE D/RTCAudioManager(32251): Device status: available=[EARPIECE, SPEAKER_PHONE], selected=SPEAKER_PHONE, user selected=NONE D/RTCAudioManager(32251): --- updateAudioDeviceState done W/FlutterWebRTCPlugin(32251): FlutterRTCVideoRenderer.setVideoTrack, set video track to 9f56a813-5dab-4455-b6ff-9254b07e01a3 I/org.webrtc.Logging(32251): EglRenderer: Releasing. I/org.webrtc.Logging(32251): EglRenderer: eglBase detach and release. I/org.webrtc.Logging(32251): EglRenderer: Quitting render thread. I/org.webrtc.Logging(32251): EglRenderer: Releasing done. I/org.webrtc.Logging(32251): EglRenderer: Initializing EglRenderer I/org.webrtc.Logging(32251): EglRenderer: EglBase.create shared context I/org.webrtc.Logging(32251): EglBase14Impl: Using OpenGL ES version 2 I/org.webrtc.Logging(32251): Camera2Session: Camera capture session configured. I/org.webrtc.Logging(32251): Camera2Session: Using video stabilization. I/org.webrtc.Logging(32251): Camera2Session: Using continuous video auto-focus. I/org.webrtc.Logging(32251): Camera2Session: Camera device successfully started. I/org.webrtc.Logging(32251): CameraCapturer: Create session done. Switch state: IDLE I/org.webrtc.Logging(32251): SurfaceTextureHelper: Setting listener to org.webrtc.-$$Lambda$Camera2Session$CaptureSessionCallback$_XbqUL6ihfYRgME_EfDLZtLmkGA@83fe3b I/CameraManagerGlobal(32251): Camera 1 facing CAMERA_FACING_FRONT state now CAMERA_STATE_ACTIVE for client com.futureteen.chat API Level 2 I/BufferQueueProducer(32251): SurfaceTexture-1-32251-2 queueBuffer: queued for the first time. D/FlutterWebRTCPlugin(32251): CameraEventsHandler.onFirstFrameAvailable I/BufferQueueProducer(32251): SurfaceTexture-0-32251-0 queueBuffer: queued for the first time. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 26. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4004 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4004 ms. Frames received: 107. Dropped: 0. Rendered: 107. Render fps: 26.7. Average render time: 1560 us. Average swapBuffer time: 774 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/ViewRootImpl@f81f857MainActivity: ViewPostIme pointer 0 I/ViewRootImpl@f81f857MainActivity: ViewPostIme pointer 1 D/ThumbnailPlugin(32251): buildThumbnailFile( format:0, maxh:0, maxw:0, timeMs:0, quality:5 ) D/ThumbnailPlugin(32251): buildThumbnailData( format:0, maxh:0, maxw:0, timeMs:0, quality:5 ) V/MediaMetadataRetriever(32251): constructor V/MediaHTTPService(32251): MediaHTTPService(android.media.MediaHTTPService@844dab1): Cookies: null V/MediaMetadataRetriever(32251): setDataSource V/MediaHTTPService(32251): makeHTTPConnection: CookieManager created: java.net.CookieManager@5d93b96 V/MediaHTTPService(32251): makeHTTPConnection(android.media.MediaHTTPService@844dab1): cookieHandler: java.net.CookieManager@5d93b96 Cookies: null I/MediaHTTPConnection(32251): setReadTimeout and setConnectTimeout with 8000ms I/MediaHTTPConnection(32251): response code = 200 I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. D/MediaConstraintsUtils(32251): mandatory constraints are not a map D/MediaConstraintsUtils(32251): optional constraints are not an array I/org.webrtc.Logging(32251): NetworkMonitor: Start monitoring with native observer -5476376614449608560 D/ConnectivityManager(32251): StackLog: [android.net.ConnectivityManager.sendRequestForNetwork(ConnectivityManager.java:3937)] [android.net.ConnectivityManager.sendRequestForNetwork(ConnectivityManager.java:3979)] [android.net.ConnectivityManager.requestNetwork(ConnectivityManager.java:4117)] [android.net.ConnectivityManager.requestNetwork(ConnectivityManager.java:4095)] [org.webrtc.NetworkMonitorAutoDetect$ConnectivityManagerDelegate.requestMobileNetwork(NetworkMonitorAutoDetect.java:404)] [org.webrtc.NetworkMonitorAutoDetect.(NetworkMonitorAutoDetect.java:597)] [org.webrtc.NetworkMonitor$1.create(NetworkMonitor.java:50)] [org.webrtc.NetworkMonitor.createNetworkChangeDetector(NetworkMonitor.java:181)] [org.webrtc.NetworkMonitor.startMonitoring(NetworkMonitor.java:108)] [org.webrtc.NetworkMonitor.startMonitoring(NetworkMonitor.java:129)] D/ConnectivityManager(32251): StackLog: [android.net.ConnectivityManager.sendRequestForNetwork(ConnectivityManager.java:3937)] [android.net.ConnectivityManager.sendRequestForNetwork(ConnectivityManager.java:3979)] [android.net.ConnectivityManager.registerNetworkCallback(ConnectivityManager.java:4361)] [android.net.ConnectivityManager.registerNetworkCallback(ConnectivityManager.java:4331)] [org.webrtc.NetworkMonitorAutoDetect$ConnectivityManagerDelegate.registerNetworkCallback(NetworkMonitorAutoDetect.java:391)] [org.webrtc.NetworkMonitorAutoDetect.(NetworkMonitorAutoDetect.java:604)] [org.webrtc.NetworkMonitor$1.create(NetworkMonitor.java:50)] [org.webrtc.NetworkMonitor.createNetworkChangeDetector(NetworkMonitor.java:181)] [org.webrtc.NetworkMonitor.startMonitoring(NetworkMonitor.java:108)] [org.webrtc.NetworkMonitor.startMonitoring(NetworkMonitor.java:129)] D/FlutterWebRTCPlugin(32251): onIceGatheringChangeGATHERING D/FlutterWebRTCPlugin(32251): onIceCandidate D/FlutterWebRTCPlugin(32251): onIceCandidate D/FlutterWebRTCPlugin(32251): onIceCandidate D/FlutterWebRTCPlugin(32251): onIceCandidate D/FlutterWebRTCPlugin(32251): onIceCandidate D/FlutterWebRTCPlugin(32251): onIceCandidate I/org.webrtc.Logging(32251): NetworkMonitorAutoDetect: Network becomes available: 180 I/org.webrtc.Logging(32251): NetworkMonitorAutoDetect: capabilities changed: [ Transports: WIFI Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED&NOT_VCN_MANAGED LinkUpBandwidth>=76233Kbps LinkDnBandwidth>=38894Kbps TransportInfo: <SSID: , BSSID: 02:00:00:00:00:00, MAC: 02:00:00:00:00:00, Security type: 2, Supplicant state: COMPLETED, Wi-Fi standard: 4, RSSI: -62, Link speed: 52Mbps, Tx Link speed: 52Mbps, Max Supported Tx Link speed: 300Mbps, Rx Link speed: 117Mbps, Max Supported Rx Link speed: 300Mbps, Frequency: 2452MHz, Net ID: -1, Metered hint: false, score: 60, CarrierMerged: false, SubscriptionId: -1, IsPrimary: -1> SignalStrength: -62 UnderlyingNetworks: Null] I/org.webrtc.Logging(32251): NetworkMonitorAutoDetect: link properties changed I/flutter (32251): singaling RTCSignalingState.RTCSignalingStateHaveLocalOffer D/FlutterWebRTCPlugin(32251): onIceCandidate D/FlutterWebRTCPlugin(32251): onIceCandidate D/FlutterWebRTCPlugin(32251): onIceCandidate D/FlutterWebRTCPlugin(32251): onIceCandidate V/MediaMetadataRetriever(32251): setDataSource return(0) V/MediaMetadataRetriever(32251): getFrameAtTime: time(0 us) option(3) colorFormat(4) metaOnly(0) V/MediaMetadataRetriever(32251): destructor V/MediaMetadataRetriever(32251): disconnect D/ThumbnailPlugin(32251): buildThumbnailFile( written:9479 ) D/FlutterWebRTCPlugin(32251): onIceCandidate I/org.webrtc.Logging(32251): WebRtcAudioTrackExternal: initPlayout(sampleRate=48000, channels=1, bufferSizeFactor=1.0) I/org.webrtc.Logging(32251): WebRtcAudioTrackExternal: byteBuffer.capacity: 960 I/org.webrtc.Logging(32251): WebRtcAudioTrackExternal: minBufferSizeInBytes: 9620 I/org.webrtc.Logging(32251): WebRtcAudioTrackExternal: createAudioTrackOnLollipopOrHigher I/org.webrtc.Logging(32251): WebRtcAudioTrackExternal: nativeOutputSampleRate: 48000 I/org.webrtc.Logging(32251): WebRtcAudioTrackExternal: AudioTrack: session ID: 13529, channels: 1, sample rate: 48000, max gain: 1.0 I/org.webrtc.Logging(32251): WebRtcAudioTrackExternal: AudioTrack: buffer size in frames: 4810 I/org.webrtc.Logging(32251): WebRtcAudioTrackExternal: AudioTrack: buffer capacity in frames: 4810 I/org.webrtc.Logging(32251): VolumeLogger: start@[name=worker_thread - 32454, id=154] I/org.webrtc.Logging(32251): VolumeLogger: audio mode is: MODE_NORMAL I/org.webrtc.Logging(32251): WebRtcAudioTrackExternal: startPlayout I/org.webrtc.Logging(32251): WebRtcAudioTrackExternal: AudioTrackThread@[name=AudioTrackJavaThread, id=170] I/org.webrtc.Logging(32251): WebRtcAudioTrackExternal: doAudioTrackStateCallback: 0 I/org.webrtc.Logging(32251): AndroidVideoDecoder: ctor name: c2.qti.avc.decoder type: H264 color format: 19 context: org.webrtc.EglBase14Impl$Context@6c18591 I/org.webrtc.Logging(32251): AndroidVideoDecoder: ctor name: c2.android.avc.decoder type: H264 color format: 19 context: org.webrtc.EglBase14Impl$Context@6c18591 D/FlutterWebRTCPlugin(32251): onAddTrack D/FlutterWebRTCPlugin(32251): onAddTrack D/FlutterWebRTCPlugin(32251): onConnectionChangeCONNECTING D/FlutterWebRTCPlugin(32251): onIceCandidate I/flutter (32251): singaling RTCSignalingState.RTCSignalingStateStable D/FlutterWebRTCPlugin(32251): onIceGatheringChangeCOMPLETE D/FlutterWebRTCPlugin(32251): onSelectedCandidatePairChanged I/flutter (32251): onIceConnectionState RTCIceConnectionState.RTCIceConnectionStateChecking W/FlutterWebRTCPlugin(32251): FlutterRTCVideoRenderer.setVideoTrack, set video track to 5c5648e7-f470-4365-84ba-923585071cdc I/org.webrtc.Logging(32251): EglRenderer: Releasing. I/flutter (32251): onConnectionState RTCPeerConnectionState.RTCPeerConnectionStateConnecting D/FlutterWebRTCPlugin(32251): onConnectionChangeCONNECTED I/org.webrtc.Logging(32251): EglRenderer: eglBase detach and release. I/org.webrtc.Logging(32251): EglRenderer: Quitting render thread. I/org.webrtc.Logging(32251): EglRenderer: Releasing done. I/org.webrtc.Logging(32251): EglRenderer: Initializing EglRenderer I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: initRecording(sampleRate=48000, channels=1) I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: byteBuffer.capacity: 960 I/org.webrtc.Logging(32251): EglRenderer: EglBase.create shared context I/org.webrtc.Logging(32251): EglBase14Impl: Using OpenGL ES version 2 I/org.webrtc.Logging(32251): HardwareVideoEncoder: initEncode: 1280 x 720. @ 300kbps. Fps: 60 Use surface mode: true I/CCodec (32251): state->set(ALLOCATING) I/CCodec (32251): allocate(c2.qti.avc.encoder) I/Codec2Client(32251): Available Codec2 services: "default" "default0" "software" I/CCodec (32251): setting up 'default' as default (vendor) store I/CCodec (32251): Created component [c2.qti.avc.encoder] I/CCodec (32251): state->set(ALLOCATED) D/CCodecConfig(32251): read media type: video/avc D/ReflectedParamUpdater(32251): ignored struct field coding.qp.values D/ReflectedParamUpdater(32251): extent() != 1 for single value type: vendor.qti-ext-enc-temporal-layer-bitrate.layerBitrates D/ReflectedParamUpdater(32251): ignored struct field coding.gop.values D/ReflectedParamUpdater(32251): extent() != 1 for single value type: output.buffers.pool-ids.values D/ReflectedParamUpdater(32251): extent() != 1 for single value type: vendor.qti-ext-enc-info-metadata-cvp.reserved D/CCodecConfig(32251): ignoring local param raw.color (0xc2001809) as it is already supported I/CCodecConfig(32251): query failed after returning 23 values (BAD_INDEX) D/CCodecConfig(32251): c2 config diff is Dict { D/CCodecConfig(32251): c2::u32 algo.bitrate-mode.value = 3 D/CCodecConfig(32251): c2::u32 algo.complexity.value = 100 D/CCodecConfig(32251): c2::i32 algo.priority.value = 0 D/CCodecConfig(32251): c2::float algo.rate.value = 30 D/CCodecConfig(32251): c2::u32 algo.secure-mode.value = 0 D/CCodecConfig(32251): c2::u32 coded.bitrate.value = 20000000 D/CCodecConfig(32251): c2::float coded.frame-rate.value = 30 D/CCodecConfig(32251): c2::u32 coded.pl.level = 0 D/CCodecConfig(32251): c2::u32 coded.pl.profile = 20484 D/CCodecConfig(32251): c2::u32 coded.vui.color.matrix = 255 D/CCodecConfig(32251): c2::u32 coded.vui.color.primaries = 0 D/CCodecConfig(32251): c2::u32 coded.vui.color.range = 0 D/CCodecConfig(32251): c2::u32 coded.vui.color.transfer = 255 D/CCodecConfig(32251): c2::u32 coding.intra-refresh.mode = 0 D/CCodecConfig(32251): c2::float coding.intra-refresh.period = 0 D/CCodecConfig(32251): c2::u32 coding.request-sync-frame.value = 0 D/CCodecConfig(32251): c2::i64 coding.sync-frame-interval.value = 1000000 D/CCodecConfig(32251): Buffer coding.temporal-layering = { D/CCodecConfig(32251): 00000000: 10 00 00 00 07 20 01 52 00 00 00 00 00 00 00 00 ..... .R........ D/CCodecConfig(32251): } D/CCodecConfig(32251): c2::u32 default.color.matrix = 0 D/CCodecConfig(32251): c2::u32 default.color.primaries = 0 D/CCodecConfig(32251): c2::u32 default.color.range = 0 D/CCodecConfig(32251): c2::u32 default.color.transfer = 0 D/CCodecConfig(32251): c2::u32 input.delay.value = 0 D/CCodecConfig(32251): string input.media-type.value = W/ColorUtils(32251): expected specified color aspects (0:0:255:255) I/org.webrtc.Logging(32251): HardwareVideoEncoder: Format: {color-format=2130708361, i-frame-interval=20, mime=video/avc, width=1280, bitrate-mode=2, bitrate=300000, frame-rate=60.0, height=720} I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: AudioRecord.getMinBufferSize: 3840 I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: bufferSizeInBytes: 7680 I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: createAudioRecordOnMOrHigher D/CodecSeeding(32251): Seed: codec c2.qti.avc.encoder, mediatype video/avc, overrideable 1 D/CodecProperties(32251): setTuningValue(vq-target-bpp,0) D/CodecProperties(32251): setTuningValue(vq-target-bpp-1080p,1.90) D/CodecProperties(32251): setTuningValue(vq-target-bpp-720p,2.25) D/CodecProperties(32251): setTuningValue(vq-target-bpp-540p,2.65) D/CodecProperties(32251): setTuningValue(vq-target-bpp-480p,3.00) D/CodecProperties(32251): setTuningValue(vq-target-bpp-320x240,0) D/CodecProperties(32251): setTuningValue(vq-target-qpmax,-1) D/CodecProperties(32251): setTuningValue(vq-target-qpmax-1080p,45) D/CodecProperties(32251): setTuningValue(vq-target-qpmax-720p,43) D/CodecProperties(32251): setTuningValue(vq-target-qpmax-540p,42) D/CodecProperties(32251): setTuningValue(vq-target-qpmax-480p,38) D/CodecProperties(32251): setTuningValue(vq-bitrate-phaseout,1.75) D/CodecProperties(32251): setTuningValue(vq-boost-missing-qp,0.20) D/CodecProperties(32251): setFeatureValue(intra-refresh,0) D/CodecProperties(32251): setFeatureValue(video-minimum-quality,0) D/CodecProperties(32251): setFeatureValue(_vq_eligible.device,1) D/CodecProperties(32251): setFeatureValue(_quality.target,1) D/CodecSeeding(32251): Seed: codec c2.qti.avc.encoder, mediatype video/avc, overrideable 0 D/VQApply (32251): minquality: applies only to VBR encoding D/MediaCodec(32251): shapeMediaFormat: deltas(0): AMessage(what = 0x00000000) = { D/MediaCodec(32251): } D/CCodec (32251): [c2.qti.avc.encoder] buffers are bound to CCodec for this session I/CCodec (32251): appPid(32251) width(1280) height(720) I/CCodec (32251): app-name: com.futureteen.chat I/CCodec (32251): Set content adaptive mode (0) I/CCodec (32251): VideoController::setValues() isSet [0] W/CCodec (32251): can't get ro.hardware.chipname I/CCodec (32251): set values for [taro] D/CCodecConfig(32251): no c2 equivalents for color-format D/CCodecConfig(32251): no c2 equivalents for flags D/CCodecConfig(32251): no c2 equivalents for encoder D/CCodecConfig(32251): c2 config diff is c2::u32 algo.bitrate-mode.value = 1 D/CCodecConfig(32251): c2::u32 coded.bitrate.value = 300000 D/CCodecConfig(32251): c2::float coded.frame-rate.value = 60 D/CCodecConfig(32251): c2::i64 coding.sync-frame-interval.value = 20000000 D/CCodecConfig(32251): c2::u32 raw.pixel-format.value = 34 D/CCodecConfig(32251): c2::u32 raw.size.height = 720 D/CCodecConfig(32251): c2::u32 raw.size.width = 1280 W/ColorUtils(32251): expected specified color aspects (0:0:255:255) W/Codec2Client(32251): query -- param skipped: index = 3254781982. D/CCodec (32251): setup formats input: AMessage(what = 0x00000000) = { D/CCodec (32251): int32_t android._color-format = 2130708361 D/CCodec (32251): Rect crop(0, 0, 1279, 719) D/CCodec (32251): int32_t color-standard = 130816 D/CCodec (32251): int32_t color-range = 0 D/CCodec (32251): int32_t color-transfer = 65791 D/CCodec (32251): int32_t width = 1280 D/CCodec (32251): int32_t android._dataspace = 12648448 D/CCodec (32251): int32_t feature-secure-playback = 0 D/CCodec (32251): int32_t frame-rate = 60 D/CCodec (32251): int32_t height = 720 D/CCodec (32251): int32_t intra-refresh-period = 0 D/CCodec (32251): string mime = "video/raw" D/CCodec (32251): int32_t prepend-sps-pps-to-idr-frames = 0 D/CCodec (32251): int32_t priority = 0 D/CCodec (32251): Buffer hdr-static-info = { D/CCodec (32251): 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ D/CCodec (32251): 00000010: 00 00 00 00 00 00 00 00 00 ......... D/CCodec (32251): } D/CCodec (32251): int64_t android._C2MemoryUsage = 4503599631631104 D/CCodec (32251): int32_t color-format = 2130708361 D/CCodec (32251): } D/CCodec (32251): setup formats output: AMessage(what = 0x00000000) = { D/CCodec (32251): int32_t bitrate = 300000 D/CCodec (32251): int32_t bitrate-mode = 2 D/CCodec (32251): Rect crop(0, 0, 1279, 719) D/CCodec (32251): int32_t width = 1280 D/CCodec (32251): int32_t color-standard = 130816 D/CCodec (32251): int32_t color-range = 0 D/CCodec (32251): int32_t color-transfer = 65791 D/CCodec (32251): int32_t feature-secure-playback = 0 D/CCodec (32251): int32_t frame-rate = 60 D/CCodec (32251): int32_t height = 720 D/CCodec (32251): int32_t intra-refresh-period = 0 D/CCodec (32251): int32_t max-bitrate = 300000 D/CCodec (32251): string mime = "video/avc" D/CCodec (32251): int32_t prepend-sps-pps-to-idr-frames = 0 D/CCodec (32251): int32_t priority = 0 D/CCodec (32251): int32_t profile = 8 D/CCodec (32251): } I/CCodecConfig(32251): query failed after returning 24 values (BAD_INDEX) I/org.webrtc.Logging(32251): EglBase14Impl: Using OpenGL ES version 2 D/CCodec (32251): input format changed to AMessage(what = 0x00000000) = { D/CCodec (32251): int32_t android._color-format = 2130708361 D/CCodec (32251): Rect crop(0, 0, 1279, 719) D/CCodec (32251): int32_t color-standard = 1 D/CCodec (32251): int32_t color-range = 2 D/CCodec (32251): int32_t color-transfer = 3 D/CCodec (32251): int32_t width = 1280 D/CCodec (32251): int32_t android._dataspace = 260 D/CCodec (32251): int32_t feature-secure-playback = 0 D/CCodec (32251): int32_t frame-rate = 60 D/CCodec (32251): int32_t height = 720 D/CCodec (32251): int32_t intra-refresh-period = 0 D/CCodec (32251): string mime = "video/raw" D/CCodec (32251): int32_t prepend-sps-pps-to-idr-frames = 0 D/CCodec (32251): int32_t priority = 0 D/CCodec (32251): Buffer hdr-static-info = { D/CCodec (32251): 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ D/CCodec (32251): 00000010: 00 00 00 00 00 00 00 00 00 ......... D/CCodec (32251): } D/CCodec (32251): int64_t android._C2MemoryUsage = 4503599631631104 D/CCodec (32251): int32_t color-format = 2130708361 D/CCodec (32251): } D/CCodec (32251): ISConfig not changed I/CCodec (32251): state->set(STARTING) W/Codec2Client(32251): query -- param skipped: index = 1342179345. W/Codec2Client(32251): query -- param skipped: index = 2415921170. W/Codec2Client(32251): query -- param skipped: index = 1610614798. D/CCodecBufferChannel(32251): [c2.qti.avc.encoder#634] Query input allocators returned 0 params => BAD_INDEX (6) D/CCodecBufferChannel(32251): [c2.qti.avc.encoder#634] Using basic input block pool with poolID 1 => got 1 - OK (0) D/CCodecBufferChannel(32251): [c2.qti.avc.encoder#634] Query output allocators returned 0 params => BAD_INDEX (6) I/CCodecBufferChannel(32251): [c2.qti.avc.encoder#634] Created output block pool with allocatorID 16 => poolID 989 - OK D/CCodecBufferChannel(32251): [c2.qti.avc.encoder#634] Configured output block pool ids 989 => OK I/CCodec (32251): state->set(RUNNING) I/MediaCodec(32251): setCodecState state(0), called in 6 I/org.webrtc.Logging(32251): WebRtcAudioEffectsExternal: enable(audioSession=13537) I/org.webrtc.Logging(32251): WebRtcAudioEffectsExternal: AcousticEchoCanceler: was enabled, enable: true, is now: enabled I/org.webrtc.Logging(32251): WebRtcAudioEffectsExternal: NoiseSuppressor: was disabled, enable: true, is now: enabled I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: AudioRecord: session ID: 13537, channels: 1, sample rate: 48000 I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: AudioRecord: buffer size in frames: 3840 I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: Number of active recording sessions: 0 I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: startRecording I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: scheduleLogRecordingConfigurationsTask I/Choreographer(32251): Skipped 47 frames! The application may be doing too much work on its main thread. I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: AudioRecordThread@[name=AudioRecordJavaThread, id=180] I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: doAudioRecordStateCallback: START I/flutter (32251): onConnectionState RTCPeerConnectionState.RTCPeerConnectionStateConnected I/flutter (32251): MediaStreamTrack:enableSpeakerphone true I/flutter (32251): onIceConnectionState RTCIceConnectionState.RTCIceConnectionStateConnected W/futureteen.cha(32251): Long monitor contention with owner Binder:32251_6 (631) at int android.media.AudioManager.updateAudioPortCache(java.util.ArrayList, java.util.ArrayList, java.util.ArrayList)(AudioManager.java:6525) waiters=0 in int android.media.AudioManager.resetAudioPortGeneration() for 727ms I/org.webrtc.Logging(32251): HardwareVideoEncoder: Releasing MediaCodec on output thread I/CCodec (32251): state->set(STOPPING) I/CCodec (32251): state->set(ALLOCATED) I/CCodec (32251): state->set(RELEASING) I/CCodec (32251): [c2.qti.avc.encoder] release(1) I/CCodec (32251): state->set(RELEASED) I/MediaCodec(32251): Codec shutdown complete I/hw-BpHwBinder(32251): onLastStrongRef automatically unlinking death recipients I/org.webrtc.Logging(32251): HardwareVideoEncoder: Release on output thread done E/org.webrtc.Logging(32251): HardwareVideoEncoder: MediaCodec is only tested with resolutions that are 16x16 aligned. E/org.webrtc.Logging(32251): HardwareVideoEncoder: MediaCodec is only tested with resolutions that are 16x16 aligned. I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: Number of active recording sessions: 1 I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: AudioRecordingConfigurations: I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: client audio source=VOICE_COMMUNICATION, client session id=13537 (13537) I/org.webrtc.Logging(32251): Device AudioFormat: channel count=1, channel index mask=0, channel mask=IN_MONO, encoding=PCM_16BIT, sample rate=48000 I/org.webrtc.Logging(32251): Client AudioFormat: channel count=1, channel index mask=0, channel mask=IN_MONO, encoding=PCM_16BIT, sample rate=48000 I/org.webrtc.Logging(32251): AudioDevice: type=TYPE_BUILTIN_MIC, id=25 I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: verifyAudioConfig: PASS I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 119. Dropped: 0. Rendered: 119. Render fps: 29.7. Average render time: 1388 us. Average swapBuffer time: 766 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): NetworkMonitorAutoDetect: Network becomes available: 200 I/org.webrtc.Logging(32251): NetworkMonitorAutoDetect: capabilities changed: [ Transports: CELLULAR Capabilities: SUPL&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED&NOT_VCN_MANAGED LinkUpBandwidth>=1800Kbps LinkDnBandwidth>=4300Kbps Specifier: <TelephonyNetworkSpecifier [mSubId = 1]> UnderlyingNetworks: Null] I/org.webrtc.Logging(32251): NetworkMonitorAutoDetect: link properties changed I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): NetworkMonitorAutoDetect: capabilities changed: [ Transports: CELLULAR Capabilities: SUPL&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED&NOT_VCN_MANAGED LinkUpBandwidth>=1705Kbps LinkDnBandwidth>=4305Kbps Specifier: <TelephonyNetworkSpecifier [mSubId = 1]> UnderlyingNetworks: Null] I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1634 us. Average swapBuffer time: 972 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): NetworkMonitorAutoDetect: capabilities changed: [ Transports: CELLULAR Capabilities: SUPL&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED&NOT_VCN_MANAGED LinkUpBandwidth>=1705Kbps LinkDnBandwidth>=4305Kbps Specifier: <TelephonyNetworkSpecifier [mSubId = 1]> UnderlyingNetworks: Null] I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. E/org.webrtc.Logging(32251): HardwareVideoEncoder: MediaCodec is only tested with resolutions that are 16x16 aligned. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. E/org.webrtc.Logging(32251): HardwareVideoEncoder: MediaCodec is only tested with resolutions that are 16x16 aligned. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1776 us. Average swapBuffer time: 1032 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4004 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): NetworkMonitorAutoDetect: capabilities changed: [ Transports: CELLULAR Capabilities: SUPL&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED&NOT_VCN_MANAGED LinkUpBandwidth>=1800Kbps LinkDnBandwidth>=4300Kbps Specifier: <TelephonyNetworkSpecifier [mSubId = 1]> UnderlyingNetworks: Null] I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1718 us. Average swapBuffer time: 1022 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. E/org.webrtc.Logging(32251): HardwareVideoEncoder: MediaCodec is only tested with resolutions that are 16x16 aligned. E/org.webrtc.Logging(32251): HardwareVideoEncoder: MediaCodec is only tested with resolutions that are 16x16 aligned. I/flutter (32251): onIceConnectionState RTCIceConnectionState.RTCIceConnectionStateCompleted I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4002 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1669 us. Average swapBuffer time: 997 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 119. Dropped: 0. Rendered: 119. Render fps: 29.7. Average render time: 1681 us. Average swapBuffer time: 1029 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. E/org.webrtc.Logging(32251): HardwareVideoEncoder: MediaCodec is only tested with resolutions that are 16x16 aligned. E/org.webrtc.Logging(32251): HardwareVideoEncoder: MediaCodec is only tested with resolutions that are 16x16 aligned. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): NetworkMonitorAutoDetect: capabilities changed: [ Transports: CELLULAR Capabilities: SUPL&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED&NOT_VCN_MANAGED LinkUpBandwidth>=1705Kbps LinkDnBandwidth>=4305Kbps Specifier: <TelephonyNetworkSpecifier [mSubId = 1]> UnderlyingNetworks: Null] I/org.webrtc.Logging(32251): EglRenderer: Duration: 4006 ms. Frames received: 121. Dropped: 0. Rendered: 121. Render fps: 30.2. Average render time: 1647 us. Average swapBuffer time: 976 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 31. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4006 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1702 us. Average swapBuffer time: 1004 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 31. I/org.webrtc.Logging(32251): VolumeLogger: VOICE_CALL stream volume: 8 (max=8) I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4006 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1707 us. Average swapBuffer time: 1025 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4012 ms. Frames received: 121. Dropped: 0. Rendered: 121. Render fps: 30.2. Average render time: 1566 us. Average swapBuffer time: 963 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4006 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1778 us. Average swapBuffer time: 1169 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4002 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1616 us. Average swapBuffer time: 989 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4008 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1737 us. Average swapBuffer time: 1071 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4005 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4004 ms. Frames received: 121. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1623 us. Average swapBuffer time: 974 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4007 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4002 ms. Frames received: 120. Dropped: 0. Rendered: 121. Render fps: 30.2. Average render time: 1712 us. Average swapBuffer time: 1040 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 31. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): NetworkMonitorAutoDetect: capabilities changed: [ Transports: CELLULAR Capabilities: SUPL&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED&NOT_VCN_MANAGED LinkUpBandwidth>=1800Kbps LinkDnBandwidth>=4300Kbps Specifier: <TelephonyNetworkSpecifier [mSubId = 1]> UnderlyingNetworks: Null] I/org.webrtc.Logging(32251): VolumeLogger: VOICE_CALL stream volume: 8 (max=8) I/org.webrtc.Logging(32251): EglRenderer: Duration: 4004 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4002 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1772 us. Average swapBuffer time: 1060 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4002 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1799 us. Average swapBuffer time: 1085 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4004 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1575 us. Average swapBuffer time: 941 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4007 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4004 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1668 us. Average swapBuffer time: 1025 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4004 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4005 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1579 us. Average swapBuffer time: 951 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 121. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1650 us. Average swapBuffer time: 1017 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4007 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4011 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 29.9. Average render time: 1633 us. Average swapBuffer time: 1023 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4005 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4004 ms. Frames received: 120. Dropped: 0. Rendered: 121. Render fps: 30.2. Average render time: 1591 us. Average swapBuffer time: 953 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): VolumeLogger: VOICE_CALL stream volume: 8 (max=8) I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 31. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4010 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4004 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1740 us. Average swapBuffer time: 1035 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4005 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1663 us. Average swapBuffer time: 1037 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4005 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 121. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1629 us. Average swapBuffer time: 958 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 120. Dropped: 0. Rendered: 121. Render fps: 30.2. Average render time: 1591 us. Average swapBuffer time: 948 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4002 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1722 us. Average swapBuffer time: 1093 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4010 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1715 us. Average swapBuffer time: 1068 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4007 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA. I/org.webrtc.Logging(32251): EglRenderer: Duration: 4003 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 1778 us. Average swapBuffer time: 1054 us. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): CameraStatistics: Camera fps: 30. I/org.webrtc.Logging(32251): VolumeLogger: VOICE_CALL stream volume: 8 (max=8) I/org.webrtc.Logging(32251): EglRenderer: Duration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.

    Platform information

    • Flutter version: 2.8.1
    • Plugin version: ^0.8.3
    • OS: Android
    • OS version: Android 12
    opened by sokpheng 15
  • Get audio sources list and change localstream audio

    Get audio sources list and change localstream audio

    Hello,

    Is it possible to list all audio sources : headphones, speaker, bluetooth, ... available on the device ? An how can I change from one to another during a call ?

    Thank you, Luc

    wontfix 
    opened by LucMoreau33560 15
  • How to choose an audio / video codec?

    How to choose an audio / video codec?

    Need help, please tell me:

    1. Logs say that the default codec is H264. How to specify VP9 video codec and OPUS audio codec in configuration?
    2. And another question: how can you quickly switch the established connection to the "audio only" mode, when we do not send and do not receive the video track? And then re-enable video conferencing?
    🚀enhancement 🦔rostopira wontfix 
    opened by kostasoft 15
  • Fatal error in: .../task_queue_libevent.cc, line 178

    Fatal error in: .../task_queue_libevent.cc, line 178

    Describe the bug I think there are several problems.

    1. List of remote streams in PeerConnection contains duplicate of each stream;
    2. Remote streams in the same List do not disappearing after stopping stream;
    3. Looks like C++ lib crashing (check "To Peproduce" for case).

    To Reproduce If opposite user turn off and turn on stream (for example webcamera stream) for some amount of time I got the error;

    E/rtc (17935): #
    E/rtc (17935): # Fatal error in: ../../../../usr/local/google/home/sakal/code/webrtc-aar-release/src/rtc_base/task_queue_libevent.cc, line 178
    E/rtc (17935): # last system error: 24
    E/rtc (17935): # Check failed: pipe(fds) == 0
    E/rtc (17935): #
    F/libc (17935): Fatal signal 6 (SIGABRT), code -6 in tid 18053 (worker_thread -)
    

    Expected behavior I expect no crash... Please <3

    Platform information Linux 20.04

    • Flutter version:
    [✓] Flutter (Channel master, 1.23.0-8.0.pre.105, on Linux, locale en_US.UTF-8)
        • Flutter version 1.23.0-8.0.pre.105 at
          /home/firstname_lastname/snap/flutter/common/flutter
        • Framework revision f1013e6873 (6 weeks ago), 2020-10-02 09:50:33 +0800
        • Engine revision 0522ff22cc
        • Dart version 2.11.0 (build 2.11.0-181.0.dev)
    
     
    [✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
        • Android SDK at /home/firstname_lastname/Android/Sdk
        • Platform android-30, build-tools 30.0.2
        • Java binary at: /usr/local/android-studio/jre/bin/java
        • Java version OpenJDK Runtime Environment (build
          1.8.0_242-release-1644-b3-6222593)
        • All Android licenses accepted.
    
    [✓] Chrome - develop for the web
        • Chrome at google-chrome
    
    [✓] Android Studio (version 4.0)
        • Android Studio at /usr/local/android-studio
        • Flutter plugin version 50.0.1
        • Dart plugin version 193.7547
        • Java version OpenJDK Runtime Environment (build
          1.8.0_242-release-1644-b3-6222593)
    
    [✓] VS Code (version 1.50.1)
        • VS Code at /usr/share/code
        • Flutter extension version 3.16.0
    
    [✓] Connected device (3 available)
        • Nexus 7 (mobile) • 08f4ceaf   • android-arm    • Android 6.0.1 (API 23)
        • Web Server (web) • web-server • web-javascript • Flutter Tools
        • Chrome (web)     • chrome     • web-javascript • Google Chrome
          86.0.4240.183
    
    • No issues found!
    
    • Plugin version: 0.4.0
    • OS: Android&iOS
    • OS version:
    opened by Blancduman 14
  • Android embedding v2

    Android embedding v2

    This migrates the Android side of the plugin to the new Embedding V2 API.

    • The V2 APIs make lifecycle a lot more explicit to plugins, thus should allow for improve code structure and predictable memory usage
    • There may have been a memory leak observed due to missing cleanup methods in the previous implementation (I've been testing with "leakcanary" and "Don't Keep Activities" both set to on
    • The plugin will now lazily initialize the audio manager and most of the RTC classes on the first method call invocation (important when in a multi-engine environment, e.g. when a App utilizes firebase_messaging & flutter-webrtc)
    • Small refactors and decouplings have been done

    Functionality has been tested locally on a few phones, but I'll appreciate if others can test as well.

    Note: My Android Studio installation probably formats the code different than other contributors. Could the project agree on a standard set of rules? Most of the official flutter code uses google-java-format (a plugin in Android Studio) with the Google rules. Maybe this project could use it, too.

    opened by ened 14
  • Linux fatal error when building

    Linux fatal error when building

    Describe the bug

    When building on Linux I get this error:

    [  +96 ms] Building Linux application... (completed in 6.1s)
    [  +26 ms] (fluffychat:230187): Gtk-WARNING **: 20:33:18.576: Locale not supported by C library.
    [        ]      Using the fallback 'C' locale.
    [ +131 ms] #
    [        ] # Fatal error in: ../../media/engine/adm_helpers.cc, line 39
    [        ] # last system error: 0
    [        ] # Check failed: 0 == adm->Init() (0 vs. -1)
    [  +84 ms] # Failed to initialize the ADM.
    [   +2 ms] Error waiting for a debug connection: The log reader stopped unexpectedly, or never started.
    [   +1 ms] Error launching application on Linux.
    

    To Reproduce

    Build on Ubuntu 22.10 with Flutter 3.3.9

    Expected behavior

    Just builds

    Platform information

    • Flutter version: 3.3.9
    • Plugin version: 0.9.18
    • OS: Ubuntu
    • OS version: 22.10
    opened by krillefear 6
  • [ios] how to stop screen share from app

    [ios] how to stop screen share from app

    @cloudwebrtc Describe the bug when i stop from controller is working fine To Reproduce

    Expected behavior

    Platform information

    • Flutter version:
    • Plugin version:
    • OS:
    • ios
    • OS version:
    • 16.2
    opened by mohd-afid 0
  • Loud background noise when getUserMedia is either not called or microphone permission is denied

    Loud background noise when getUserMedia is either not called or microphone permission is denied

    There is quite a loud background noise when starting a WebRTC session without requesting a local stream by getUserMedia, or calling getUserMedia but not having or granting microphone permission. This seems to be limiting for use-cases where one wants to still have the stream with no microphone permissions due to privacy.

    To Reproduce Start a WebRTC session without calling getUserMedia and passing in the local stream. OR Start a WebRTC session with calling getUserMedia, but while microphone permission is not granted.

    Expected behavior A video stream with no background noise

    • Flutter version:3.3.7
    • Plugin version: 0.9.18
    • OS: iOS
    • OS version: 15
    opened by Dmirzoyan 0
  • iOS version reporting crashes saying

    iOS version reporting crashes saying "Sending a message before the flutterEngine has been run"

    Describe the bug Getting 2 crashes reported in Crashlytics from iOS. Using version 0.9.18

    Screenshot 2022-12-20 at 6 17 58 PM

    Screenshot 2022-12-20 at 6 19 27 PM

    To Reproduce I don't have a proper way to reproduce this problem.

    Platform information

    • Flutter version: 3.0.5
    • Plugin version: 0.9.18
    • OS: iOS
    • OS version: 16.1.1, 16.1.2, 16.2
    opened by MohamedRisaldarTA 0
  • App crashes when receiving a SIP (Janus) call

    App crashes when receiving a SIP (Janus) call

    Describe the bug When the user receives a SIP call (Janus), the app crashes just after receiving the incomingcall event, though the error seems to point towards an issue with WebRTC. For further insight, we were using an older version of Janus, which was working just fine for our app; the issue began when we switched to a much more recent version of Janus.

    To Reproduce Start the app and register the user's SIP extension, then wait for a call. The following error shows in the console as the app crashes:

    W/System.err( 5350): java.lang.NullPointerException: Attempt to invoke virtual method 'byte[] java.lang.String.getBytes(java.lang.String)' on a null object reference
    W/System.err( 5350):     at org.webrtc.JniHelper.getStringBytes(JniHelper.java:25)
    W/System.err( 5350):     at org.webrtc.PeerConnection.nativeAddIceCandidate(Native Method)
    W/System.err( 5350):     at org.webrtc.PeerConnection.addIceCandidate(PeerConnection.java:937)
    W/System.err( 5350):     at com.cloudwebrtc.webrtc.MethodCallHandlerImpl.peerConnectionAddICECandidate(MethodCallHandlerImpl.java:1539)
    W/System.err( 5350):     at com.cloudwebrtc.webrtc.MethodCallHandlerImpl.onMethodCall(MethodCallHandlerImpl.java:301)
    W/System.err( 5350):     at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:262)
    W/System.err( 5350):     at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295)
    W/System.err( 5350):     at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:319)
    W/System.err( 5350):     at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
    W/System.err( 5350):     at android.os.Handler.handleCallback(Handler.java:938)
    W/System.err( 5350):     at android.os.Handler.dispatchMessage(Handler.java:99)
    W/System.err( 5350):     at android.os.Looper.loop(Looper.java:250)
    W/System.err( 5350):     at android.app.ActivityThread.main(ActivityThread.java:7848)
    W/System.err( 5350):     at java.lang.reflect.Method.invoke(Native Method)
    W/System.err( 5350):     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    W/System.err( 5350):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
    E/rtc     ( 5350): #
    E/rtc     ( 5350): # Fatal error in: gen/sdk/android/generated_metrics_jni/../../../../../../sdk/android/src/jni/jni_generator_helper.h, line 94
    E/rtc     ( 5350): # last system error: 11
    E/rtc     ( 5350): # Check failed: !env->ExceptionCheck()
    E/rtc     ( 5350): # 
    F/libc    ( 5350): Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 5350 ([hiperme.app](http://hiperme.app/)), pid 5350 ([hiperme.app](http://hiperme.app/))
    *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    Build fingerprint: 'motorola/odessa_retail/odessa:11/RPAS31.Q2-59-17-4-3-9/412e48:user/release-keys'
    Revision: 'pvt'
    ABI: 'arm64'
    Timestamp: 2022-12-07 10:55:30-0600
    pid: 5350, tid: 5350, name: [hiperme.app](http://hiperme.app/)  >>> [hiperme.app](http://hiperme.app/) <<<
    uid: 10521
    signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
        x0  0000000000000000  x1  00000000000014e6  x2  0000000000000006  x3  0000007fc6171070
        x4  0000007c04fff000  x5  0000007c04fff000  x6  0000007c04fff000  x7  000000000332971c
        x8  00000000000000f0  x9  fd5021796680ad88  x10 0000000000000000  x11 ffffffc0fffffbdf
        x12 0000000000000001  x13 00000000000000c3  x14 002511ba45439f42  x15 000043b909b0b0d4
        x16 0000007bfef88c80  x17 0000007bfef6a740  x18 0000007c04ee6000  x19 00000000000014e6
        x20 00000000000014e6  x21 00000000ffffffff  x22 000000789f976b99  x23 b400007ade860868
        x24 0000007952b7f280  x25 0000007c03e95000  x26 0000000000000037  x27 0000000000000004
        x28 0000007fc61713f0  x29 0000007fc61710f0
        lr  0000007bfef1e2e0  sp  0000007fc6171050  pc  0000007bfef1e30c  pst 0000000000000000
    backtrace:
          #00 pc 000000000004e30c  /apex/com.android.runtime/lib64/bionic/libc.so (abort+164) (BuildId: 5ac8edab3f967405e91706e1da982ce9)
          #01 pc 0000000000409054  /data/app/~~Kg76t2gKO-ludVHWw2NH7w==/hiperme.app-kwRFTxA1TxfWXpUVI2FV8A==/base.apk!libjingle_peerconnection_so.so (offset 0x2a17000) (BuildId: 36751e766361ce9d)
    

    Expected behavior The SIP call goes through, and the user is able to answer in the app, starting communication with the caller.

    Platform information

    • Flutter version:
    [!] Flutter (Channel unknown, 3.3.4, on macOS 13.0.1 22A400 darwin-arm, locale
        es-419)
        ! Flutter version 3.3.4 on channel unknown at /Volumes/Mac Mini M2
          SSD/Users/user/Documents/development/flutter
        ! Upstream repository unknown
        • Framework revision eb6d86ee27 (3 months ago), 2022-10-04 22:31:45 -0700
        • Engine revision c08d7d5efc
        • Dart version 2.18.2
        • DevTools version 2.15.0
    
    [!] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
        • Android SDK at /Volumes/Mac Mini M2
          SSD/Users/user/Library/Android/sdk
        • Platform android-33, build-tools 33.0.0
        • Java binary at: /Applications/Android
          Studio.app/Contents/jre/Contents/Home/bin/java
        • Java version OpenJDK Runtime Environment (build
          11.0.13+0-b1751.21-8125866)
        ✗ Android license status unknown.
          Run `flutter doctor --android-licenses` to accept the SDK licenses.
          See https://flutter.dev/docs/get-started/install/macos#android-setup for
          more details.
    
    [✓] Xcode - develop for iOS and macOS (Xcode 14.0)
        • Xcode at /Applications/Xcode.app/Contents/Developer
        • Build 14A309
        • CocoaPods version 1.11.3
    
    [✓] Chrome - develop for the web
        • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
    
    [✓] Android Studio (version 2021.3)
        • Android Studio at /Applications/Android Studio.app/Contents
        • Flutter plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/9212-flutter
        • Dart plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/6351-dart
        • Java version OpenJDK Runtime Environment (build
          11.0.13+0-b1751.21-8125866)
    
    [✓] IntelliJ IDEA Community Edition (version 2022.2.4)
        • IntelliJ at /Applications/IntelliJ IDEA CE.app
        • Flutter plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/9212-flutter
        • Dart plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/6351-dart
    
    [✓] VS Code (version 1.74.1)
        • VS Code at /Applications/Visual Studio Code.app/Contents
        • Flutter extension version 3.54.0
    
    [✓] Connected device (3 available)
        • moto g 9 plus (mobile) • ZY22BFSDD7 • android-arm64  • Android 11 (API 30)
        • macOS (desktop)        • macos      • darwin-arm64   • macOS 13.0.1 22A400
          darwin-arm
        • Chrome (web)           • chrome     • web-javascript • Google Chrome
          108.0.5359.124
    
    [✓] HTTP Host Availability
        • All required HTTP hosts are available
    
    • Plugin version: flutter_webrtc: 0.9.15 through 0.9.18 janus_client: 2.2.9

    • OS: Android 10 through 12

    opened by amilcar-uptech 0
Releases(0.9.17)
  • 0.9.17(Nov 28, 2022)

  • 0.9.16(Nov 14, 2022)

    [0.9.16] - 2022-11-14

    • [Linux] Fixed compiler error for flutter 3.3.8.
    • [Linux] Remove 32-bit precompiled binaries.
    • [Linux] Supports linux-x64 and linux-arm64.
    Source code(tar.gz)
    Source code(zip)
  • 0.9.15(Nov 13, 2022)

  • 0.9.13(Nov 12, 2022)

    [0.9.13] - 2022-11-12

    • [Dart] Change MediaStream.clone to async.
    • [iOS] Fixed the bug that the mic indicator light was still on when mic recording was stopped.
    • [iOS/macOS/Android/Windows] Allow sdpMLineIndex to be null when addCandidate.
    • [macOS] Frame capture support for macOS.
    • [Android] Add enableCpuOveruseDetection configuration (#1165).
    • [Android] Update comments (#1164).
    Source code(tar.gz)
    Source code(zip)
  • 0.9.12(Nov 2, 2022)

    [0.9.12] - 2022-11-02

    • [iOS] Fixed the problem that iOS earphones and speakers do not switch.
    • [Windows] fix bug for rtpSender->RemoveTrack/pc->getStats.
    • [iOS] Return groupId.
    • [Web] MediaRecorder.startWeb() should expose the timeslice parameter.
    • [iOS] Implement RTCPeerConnectionDelegate didRemoveIceCandidates method.
    • [iOS] fix disposing Broadcast Sharing stream.
    Source code(tar.gz)
    Source code(zip)
  • 0.9.11(Oct 16, 2022)

    [0.9.11] - 2022-10-16

    [iOS] fix audio route/setSpeakerphoneOn issues. [Windows] fix: Have same remote streams id then found the wrong MediaStream. [Dart] feat: RTCVideoRenderer supports specific trackId when setting MediaStream.

    Source code(tar.gz)
    Source code(zip)
  • 0.9.9(Oct 12, 2022)

    [0.9.9] - 2022-10-12

    • [Darwin/Android/Windows] Support getStats for RtpSender/RtpReceiver (Migrate from Legacy to Standard Stats for getStats).
    • [Android] Dispose of streams and connections.
    • [Android] Support RTP transceiver direction type 4.
    • [Web] Update dart_webrtc dependency.
    Source code(tar.gz)
    Source code(zip)
  • 0.9.8(Sep 30, 2022)

    [0.9.8] - 2022-09-30

    • [Android] fix: Make sure local stream/track dispose correctly.
    • [Android] Remove bluetooth permission on peerConnectionInit.
    • [iOS] Fix system sound interruption on iOS (#1099).
    • [Android] Fix: call mode on app start (#1097).
    • [Dart] Avoid renderer initialization multiple times (#1067).
    Source code(tar.gz)
    Source code(zip)
  • 0.9.7(Sep 13, 2022)

  • 0.9.6(Sep 6, 2022)

    [0.9.6] - 2022-09-06

    • [Dart] The dc created by didOpenDataChannel needs to set the state to open.
    • [Dart] Added callback onFirstFrameRendered.
    Source code(tar.gz)
    Source code(zip)
  • 0.9.5(Aug 30, 2022)

    [0.9.5] - 2022-08-30

    • [Android] fix: Fix crashes when using multiple renderers.
    • [Android] fix bug with dispose of track cannot close video
    • [Andorid/iOS/macOS/Windows] Fix bug of missing events in data-channel.
    Source code(tar.gz)
    Source code(zip)
  • 0.9.4(Aug 22, 2022)

    [0.9.4] - 2022-08-22

    • [Andorid/iOS/macOS/Windows] New audio input/output selection API, ondevicechange event is used to monitor audio device changes.
    Source code(tar.gz)
    Source code(zip)
  • 0.9.3(Aug 15, 2022)

  • 0.9.2(Aug 9, 2022)

    [0.9.2] - 2022-08-09

    • [Android] update libwebrtc to com.github.webrtc-sdk:android:104.5112.01.
    • [iOS/macOS] update WebRTC-SDK to 104.5112.02.
    • [Windows] update libwebrtc.dll to 104.5112.02.
    Source code(tar.gz)
    Source code(zip)
  • 0.9.0(Jul 27, 2022)

    [0.9.0] - 2022-07-27

    • [macOS] Added screen-sharing support for macOS
    • [Windows] Added screen-sharing support for Windows
    • [iOS/macOS] fix: Fix compile warning for Darwin
    • [Darwin/Android/Windows] fix: Fix typo peerConnectoinEvent -> peerConnectionEvent for EventChannel name (#1019)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.12(Jul 15, 2022)

  • 0.8.11(Jul 11, 2022)

    [0.8.11] - 2022-07-11

    • [Windows] Fix variant exception of findLongInt. (#990)
    • [Windows] fix unable to get username/credential when parsing iceServers containing urls
    • [iOS] Fix RTCAudioSession properties set with libwebrtc m97, Fixes #987.
    Source code(tar.gz)
    Source code(zip)
  • 0.8.10(Jun 29, 2022)

  • 0.8.9(Jun 8, 2022)

    [0.8.8] - 2022-06-08

    • [Android] Fixes DataChannel issue described in #974
    • [iOS] Fixes DataChannel issue described in #974
    • [Darwin/Android/Windows] Split data channel's webrtc id from our internal id (#961)
    • [Windows] Update to m97.
    • [Windows] Add PeerConnectionState
    • [Windows] Fix can't open mic alone when built-in AEC is enabled.
    Source code(tar.gz)
    Source code(zip)
  • 0.8.7(May 18, 2022)

    [0.8.7] - 2022-05-18

    • [iOS/macOS] fix: Use RTCYUVHelper instead of external libyuv library (#954).
    • [iOS/macOS] Flutter 3.0 crash fixes, setStreamHandler on main thread (#953)
    • [Android] Use mavenCentral() instead of jcenter() (#952)
    • [Windows] Use uint8_t* instead of string in DataChannel::Send method, fix binary send bug.
    • [Android] fix: "Reply already submitted" error and setVolume() not working on remote streams.
    Source code(tar.gz)
    Source code(zip)
  • 0.8.6(May 8, 2022)

    [0.8.6] - 2022-05-08

    • [Web/Android/iOS/macOS] Support null tracks in replaceTrack/setTrack.
    • [macOS] Remove absolute path from resolved spec to make checksum stable.
    • [Android] Android 12 bluetooth permissions.
    • [Dart] fix wrong id type for data-channel.
    • [Android] Release i420 Buffer in FrameCapturer.
    Source code(tar.gz)
    Source code(zip)
  • 0.8.5(Apr 1, 2022)

    [0.8.5] - 2022-04-01

    • [Dart] Expose RTCDataChannel.id (#898)
    • [Android] Enable H264 high profile for SimulcastVideoEncoderFactoryWrapper (#890)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.4(Mar 28, 2022)

    [0.8.4] - 2022-03-28

    • [Android] Fix simulcast factory not sending back EncoderInfo (#891)
    • [Android] fix: correct misspell in method screenRequestPermissions (#876)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.3(Mar 1, 2022)

    [0.8.3] - 2022-03-01

    • [Android/iOS] Update android/ios webrtc native sdk versions.
    • [Windows] Feature of selecting i/o audio devices by passing sourceId and/or deviceId constraints (#851).
    Source code(tar.gz)
    Source code(zip)
  • 0.8.2(Feb 7, 2022)

  • 0.8.1(Dec 29, 2021)

  • 0.8.0(Dec 4, 2021)

    [0.8.0] - 2021-12-05

    • [Dart] Refactor: Use webrtc interface. (#777)
    • [iOS] Fix crashes for FlutterRPScreenRecorder stop.
    • [Web] Don't stop tracks when disposing MediaStream (#760)
    • [Windows] Add the necessary parameters for onRemoveTrack (#763)
    • [Example] Properly start foreground service in example (#764)
    • [Android] Fix crash for Android, close #757 and #734.
    • [Dart] Fix typo in deprecated annotations.
    • [iOS] Fix IOS captureFrame and add support for remote stream captureFrame (#778)
    • [Windows] Fix parsing stun configuration (#789)
    • [Windows] Fix mute (#792)
    • [iOS/Android/Windows] New video constraints syntax (#790)
    Source code(tar.gz)
    Source code(zip)
  • 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)

Owner
Flutter WebRTC
About flutter's voip, webrtc related solutions.
Flutter WebRTC
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 20 Oct 11, 2022
A Flutter application running on mobile, web and desktop. Stay tuned to see who will win the stars race!

The live stars race Access this project running at jhbitencourt.github.io/stars-race An app running on mobile, web and desktop. How long do you think

null 28 Jul 20, 2022
Another way to build Flutter applications for mobile, web and desktop using the powerful of MVC Design Pattern.

Karee Another way to build Flutter applications for mobile, web and desktop using the powerful of MVC Design Pattern. + = About Karee Karee is a frame

@LeCode 44 Sep 29, 2022
Just collection of UI designs build with flutter. Can run on any mobile, web & desktop.

Flutter UI Designs True cross platform app runs on web, mobile & desktop Download Requirements to run locally Flutter stable v2.0.0+ Dart VM version:

Hamza Iqbal 222 Dec 28, 2022
Cross Platform app in Flutter with Firebase Auth and Firestore. Available for Mobile,Web,Desktop

NavokiNotes Navoki Notes, a note app app, will sync data to cloud and on all devices. We have application for Android, iOS, Web App, PWA, Windows, mac

shivam srivastava 93 Dec 27, 2022
Example implementation of Responsive Screen for Mobile, Tablet, Web, and Desktop in Flutter

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

R. Rifa Fauzi Komara 7 Oct 12, 2022
Flet enables developers to easily build realtime web, mobile and desktop apps in Python. No frontend experience required.

Flet Flet is a framework that enables you to easily build realtime web, mobile and desktop apps in your favorite language and securely share them with

Flet 3.6k Jan 9, 2023
Flet enables developers to easily build realtime web, mobile and desktop apps in Ruby. No frontend experience required

Flet If bundler is not being used to manage dependencies, install the gem by executing: $ gem install flet Flet Flet is a framework that enables you

AdamMusa 29 Jan 3, 2023
Simple WebRTC for flutter (similar to the simple-peer project)

Simple WebRTC. Wraps flutter_webrtc similar to simple-peer IMPORTANT: Right now this library only supports data channels (and not media). Contribution

Simon Bengtsson 6 Nov 24, 2022
A full-featured (simple message, voice, video) flutter chat application by SignalR and WebRTC

flutter_chat A full-featured (simple message, voice, video) flutter chat application by SignalR and WebRTC. Features Full Authentication service Bad r

WebDevYCH 4 Dec 11, 2022
WebRTC wifi Camera - Flutter - iOS/Android/Mac

Flutter WebRTC Camera 스마트폰(iOS /Android)카메라를 Wifi를 통하여 웹캠처럼 사용할 수 있는 아이폰/안드로이드/맥용 앱입니다. 맥앱을 먼저 빌드해서 실행한 후 아이폰, 안드로이드 앱을 빌드해서 동일한 Wifi 네트웍에서 실행하면 자동으로

Billy park 8 Nov 14, 2022
Flathub-desktop - Unofficial Desktop Client for Flathub

Flathub Desktop Unofficial Desktop Client for Flathub How to build and run: You

Jean3219 2 Sep 19, 2022
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 15 Nov 1, 2022
Shortcuts and actions - Spice up your Flutter Desktop/Web apps with Shortcuts and Actions

Spice up your Flutter Desktop/Web apps with Shortcuts and Actions A desktop/web

Waleed Arshad 12 Nov 20, 2022
📦flutter localstorage for ios/android/desktop/web

Localstorage Simple json file-based storage for flutter Installation Add dependency to pubspec.yaml dependencies: ... localstorage: ^4.0.0+1 Run i

Andrei Lesnitsky 267 Dec 16, 2022
tabler admin panel in flutter web/desktop

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

Milad 1 Dec 14, 2022
A portable canvas that can work in many platforms (Flutter, Web, Desktop, in-memory Image).

pcanvas A portable canvas that can work in many platforms (Flutter, Web, Desktop, in-memory Image). Motivation Canvas operations can be highly depende

Graciliano Monteiro Passos 3 Dec 8, 2022
Flutterweb-spotify - Interfaz Clone de Spotify Web-Desktop

Spotify UI Clone Stack Tecnologies Flutter Web & Provider Site Web https://spoti

Efrain May 0 Jan 22, 2022
Horizontal list - A horizontal list widget to use in mainly for web or desktop application

horizontal_list A horizontal list widget with buttons next and previous. You can

Daniel 2 Feb 2, 2022