WebRTC plugin for Flutter Mobile/Desktop/Web

Last update: May 25, 2022

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]

GitHub

https://github.com/flutter-webrtc/flutter-webrtc
Comments
  • 1. 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?

    Reviewed by postacik at 2020-10-12 07:16
  • 2. 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

    Reviewed by LazyIdeasCompany at 2020-09-30 19:20
  • 3. 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.

    Reviewed by cuijinfeng68 at 2019-10-10 06:11
  • 4. 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/[email protected]MainActivity: ViewPostIme pointer 0 I/[email protected]MainActivity: ViewPostIme pointer 1 I/DecorView(32251): notifyKeepScreenOnChanged: keepScreenOn=true I/[email protected]MainActivity: 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/[email protected]MainActivity: updateBoundsLayer: t = [email protected] sc = Surface(name=Bounds for - com.futureteen.chat/[email protected])/@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: [email protected][name=main, id=2] I/org.webrtc.Logging(32251): WebRtcAudioRecordExternal: [email protected][name=main, id=2] I/org.webrtc.Logging(32251): WebRtcAudioTrackExternal: [email protected][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: [email protected] D/FlutterWebRTCPlugin(32251): changeCaptureFormat: [email protected] 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: [email protected][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): [email protected][name=main, id=2] D/RTCBluetoothManager(32251): ctor D/RTCAudioManager(32251): useSpeakerphone: auto D/RTCProximitySensor(32251): [email protected][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): [email protected][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$Ca[email protected]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/[email protected]MainActivity: ViewPostIme pointer 0 I/[email protected]MainActivity: 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([email protected]): Cookies: null V/MediaMetadataRetriever(32251): setDataSource V/MediaHTTPService(32251): makeHTTPConnection: CookieManager created: [email protected] V/MediaHTTPService(32251): makeHTTPConnection([email protected]): cookieHandler: [email protected] 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: [email protected][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: [email protected][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: [email protected] I/org.webrtc.Logging(32251): AndroidVideoDecoder: ctor name: c2.android.avc.decoder type: H264 color format: 19 context: [email protected] 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: [email protected][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
    Reviewed by sokpheng at 2022-03-14 05:02
  • 5. 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?
    Reviewed by kostasoft at 2019-01-12 10:32
  • 6. 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:
    Reviewed by Blancduman at 2020-11-09 13:59
  • 7. 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.

    Reviewed by ened at 2020-06-07 12:49
  • 8. Improve RTC video view

    The main intent of this PR is to add to RTCVideoRenderer possibility to notify of its changes not only to RTCVideoView by direct handler by to all concerned code logic.

    For example, this gives possibly to change the size of widget which on its turn holds RTCVideoView widget.

    Also as the improvement part, objectFit and mirror were moved from RTCVideoRenderer where they only stored to RTCVideoView where they actually applied.

    Reviewed by ycherniavskyi at 2020-04-11 13:17
  • 9. Release Mode, In real cell phone generated has stopped when I try to run the application

    Hi, I'm making a video conference app using the webrtc plugin for flutter, at the end of the application and make the release compiles perfectly but does not work on the real cell phone. I thought it was my implementation but, I built a new application, compile to release and it works. I think the problem is with the webrtc plugin, any suggestion to solve the problem ?

    Reviewed by RaulAlejandroSalas at 2018-12-19 20:42
  • 10. [WIP] Flutter Web (WIP, don't merge)

    Adds support for Flutter Web

    • [x] P2P
    • [x] Data Channel (text)
    • [x] Data Channel (binary)
    • [x] getUserMedia
    • [x] getDisplayMedia
    • [x] getSources
    • [x] Sending video/audio
    • [x] Displaying video/audio (waiting for pr merge)
    • [x] Capture frame (works only once for no reason)
    • [x] Video/audio recording (gives blob)
    • [ ] Camera switch

    Linked issue #85

    Reviewed by rostopira at 2019-08-22 09:10
  • 11. Avoid encode/decode overhead with b64 strings for type binary

    We are using this in a performance sensitive capacity and wanted to avoid using base64 strings, which get encoded/decoded more than once, when the data type passed by Flutter's StandardMethodCodec for typed lists, FlutterStandardDataType has a data property that can be pulled off and passed to RTCDataBuffer's alloc call directly. This also lets us avoid encoding/decoding our raw binary on the Dart side to b64 in order to use these data channels.

    Reviewed by SimpliciTea at 2019-05-09 22:01
  • 12. after uprade to fullter 0.8.6 when use flutter dataChannel for send get D/FlutterWebRTCPlugin( 9800): dataChannelSend() dataChannel is null error

    use flutter dataChannel work fine when use 0.8.5 version when upgrade to 0.8.6 when try use dataChannel send() method get error that dataChannelSend() dataChannel is null , this error appear on call side that call createDataChannel method on peerConnetion and other side that recivied channel from .onDataChannel method is work fine and get send and recivied but the other side just can recivied message and can't send them at all

    • Flutter version: D:\Work\flutter\bin\flutter.bat doctor --verbose [√] Flutter (Channel stable, 2.10.5, on Microsoft Windows [Version 10.0.19044.1706], locale en-US) • Flutter version 2.10.5 at D:\Work\flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision 5464c5bac7 (4 weeks ago), 2022-04-18 09:55:37 -0700 • Engine revision 57d3bac3dd • Dart version 2.16.2 • DevTools version 2.9.2

    [√] Android toolchain - develop for Android devices (Android SDK version 32.0.0) • Android SDK at C:\Users\AmirShk\AppData\Local\Android\sdk • Platform android-32, build-tools 32.0.0 • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6842174) • All Android licenses accepted.

    [√] Chrome - develop for the web • Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

    [√] Visual Studio - develop for Windows (Visual Studio Enterprise 2019 16.11.8) • Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise • Visual Studio Enterprise 2019 version 16.11.32002.261 • Windows 10 SDK version 10.0.19041.0

    [√] Android Studio (version 4.2) • Android Studio at C:\Program Files\Android\Android Studio • 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.8+10-b944.6842174)

    [√] VS Code, 64-bit edition (version 1.67.1) • VS Code at C:\Program Files\Microsoft VS Code • Flutter extension can be installed from: https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

    [√] Connected device (4 available) • SM A515F (mobile) • R58N924NVAN • android-arm64 • Android 12 (API 31) • Windows (desktop) • windows • windows-x64 • Microsoft Windows [Version 10.0.19044.1706] • Chrome (web) • chrome • web-javascript • Google Chrome 101.0.4951.67 • Edge (web) • edge • web-javascript • Microsoft Edge 101.0.1210.32

    [√] HTTP Host Availability • All required HTTP hosts are available

    Process finished with exit code 0

    • Plugin version: 0.8.6
    • OS: Desktop
    • android 12
    • OS version: window 10
    Reviewed by AmirhosseinShk at 2022-05-14 14:29
  • 13. Attempt to invoke virtual method 'android.os.Handler org.webrtc.SurfaceTextureHelper.getHandler()' on a null object reference

    I will encounter this error after a few connections

    this: Attempt to invoke virtual method 'android.os.Handler org.webrtc.SurfaceTextureHelper.getHandler()' on a null object reference

    Reviewed by rezadevelopers2 at 2022-05-14 11:19
  • 14. webrtc datachannel event listener

    Can you please implement RTCDataChannel.bufferedAmount

    and Data channel event listener to listen for its event , some of the events I am concerned are as follows RTCDataChannel: bufferedamountlow RTCDataChannel.bufferedAmountLowThreshold

    OR Is there any callback I can use that says message has been sent ? await doesn't trigger on message deliver it triggers when the function completes.

    Can it be done please ? I need that feature to work with my current project.

    Reviewed by abhay-s-rawat at 2022-05-12 09:08
  • 15. NULL Error when RTCRtpTransceiver.setDirection

    Describe the bug Windows is normal, but in android 10 and 11 throw

    E/flutter ( 8201): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: Unable to RTCRtpTransceiver::setDirection: rtpTransceiverSetDirection(): transceiver is null
    E/flutter ( 8201): #0      RTCRtpTransceiverNative.setDirection (package:flutter_webrtc/src/native/rtc_rtp_transceiver_impl.dart:121:7)
    

    To Reproduce

    var transceivers = await _localPeerConnection.transceivers;
    for (RTCRtpTransceiver transceiver in transceivers) {
      await transceiver.setDirection(TransceiverDirection.SendOnly);
    }
    

    transceivers have two element and enter for loop, but transceiver.setDirection throw exception

    Platform information

    android 10

    • Flutter version:
    Flutter 2.10.4 • channel stable • https://github.com/flutter/flutter.git
    Framework • revision c860cba910 (7 weeks ago) • 2022-03-25 00:23:12 -0500
    Engine • revision 57d3bac3dd
    Tools • Dart 2.16.2 • DevTools 2.9.2
    
    • Plugin version:

    flutter_webrtc: ^0.8.6

    • OS:

    Android

    • OS version:

    10 and 11

    Reviewed by SELiOTe at 2022-05-11 10:42

Related

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

Jan 18, 2022
A Flutter application running on mobile, web and desktop. Stay tuned to see who will win the stars race!
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

Apr 27, 2021
Another way to build Flutter applications for mobile, web and desktop using the powerful of MVC Design Pattern.
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

May 4, 2022
Just collection of UI designs build with flutter. Can run on any mobile, web & desktop.
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:

May 21, 2022
Cross Platform app in Flutter with Firebase Auth and Firestore. Available for Mobile,Web,Desktop
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

May 21, 2022
Flathub-desktop - Unofficial Desktop Client for Flathub
Flathub-desktop - Unofficial Desktop Client for Flathub

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

Feb 5, 2022
Simple tool to open WhatsApp chat without saving the number, developed using Google's Flutter Framework. for Android/ IOS/ Desktop/ Web
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

Mar 5, 2022
Shortcuts and actions - Spice up your Flutter Desktop/Web apps with Shortcuts and Actions
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

Feb 27, 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

May 8, 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

Feb 8, 2022
Flutterweb-spotify - Interfaz Clone de Spotify Web-Desktop
Flutterweb-spotify - Interfaz Clone de Spotify Web-Desktop

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

Jan 22, 2022
Horizontal list - A horizontal list widget to use in mainly for web or desktop application
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

Feb 2, 2022
This plugin allows Flutter desktop apps to Retrieve information about screen size, displays, cursor position, etc.

screen_retriever This plugin allows Flutter desktop apps to Retrieve information about screen size, displays, cursor position, etc. screen_retriever P

May 5, 2022
Mobile, desktop and website Apps with the same code
Mobile, desktop and website Apps with the same code

Mobile, desktop and website Apps with the same code This project shows how the source code can be architectured to run on multiple devices. As of now,

May 27, 2022
A Full-Featured Mobile Browser App (such as the Google Chrome mobile browser) created using Flutter and the features offered by the flutter_inappwebview plugin.
A Full-Featured Mobile Browser App (such as the Google Chrome mobile browser) created using Flutter and the features offered by the flutter_inappwebview plugin.

Flutter Browser App A Full-Featured Mobile Browser App (such as the Google Chrome mobile browser) created using Flutter and the features offered by th

May 6, 2022
Google mobile ads applovin - AppLovin mediation plugin for Google Mobile Ads (Flutter).

AppLovin mediation plugin for Google Mobile Ads Flutter Google Mobile Ads Flutter mediation plugin for AppLovin. Use this package as a library depende

Jan 2, 2022
CARP Mobile Sensing for Flutter, including mobile sensing framework, data backend support, and the CARP mobile sensing app.
CARP Mobile Sensing for Flutter, including mobile sensing framework, data backend support, and the CARP mobile sensing app.

This repo hold the source code for the CACHET Research Platform (CARP) Mobile Sensing (CAMS) Flutter software. It contains the source code for CACHET

May 25, 2022
flutter web app with given code and example. Step by step teaching how to build a flutter web app with backend

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

May 26, 2022
Flutter-web-portfolio - A Basic web portfolio built using flutter
Flutter-web-portfolio - A Basic web portfolio built using flutter

My Flutter Web Portfolio It is a basic flutter web portfolio. 1. Home To use thi

Mar 10, 2022