WebRTC plugin for Flutter Mobile/Desktop/Web

Last update: Aug 18, 2022

Flutter-WebRTC

Financial Contributors on Open Collective pub package Gitter

WebRTC plugin for Flutter Mobile/Desktop/Web


Sponsored with 💖   by
Stream Chat
Enterprise Grade APIs for Feeds & Chat. Try the Flutter Chat tutorial đŸ’Ŧ


Functionality

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

Usage

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

iOS

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

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

This entry allows your app to access camera and microphone.

Android

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

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

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

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

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

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

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

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

Important reminder

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

Contributing

The project is inseparable from the contributors of the community.

Example

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

Contributors

Code Contributors

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

Financial Contributors

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

Individuals

Organizations

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

GitHub

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

    Reviewed by aki25 at 2021-10-04 12:32
  • 2. 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
  • 3. 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 magiccDev at 2020-09-30 19:20
  • 4. 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

    Reviewed by cloudwebrtc at 2021-12-06 22:41
  • 5. 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
  • 6. 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
  • 7. 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

    Reviewed by LucMoreau33560 at 2020-10-27 21:35
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. Switch mobile speakers not working

    I want to switch mobile speakers from earpiece to loudspeaker and vice versa.

    I tried the provided solution but its not working on Android 12. https://github.com/flutter-webrtc/flutter-webrtc-demo/issues/73#issuecomment-616553610

    Platform information

    Engine â€ĸ revision e85ea0e79c Tools â€ĸ Dart 2.17.6 â€ĸ DevTools 2.12.2

    [✓] Flutter (Channel stable, 3.0.5, on macOS 12.5 21G72 darwin-x64, locale en-US) [✓] Xcode - develop for iOS and macOS (Xcode 13.3) [✓] Chrome - develop for the web [✓] Android Studio (version 2021.2) [✓] Connected device (4 available) [✓] HTTP Host Availability

    Reviewed by ehsan097 at 2022-08-12 10:46
  • 13. Building on iOS causes "WebRTC/WebRTC.h file not found" (appearing in 0.9.2, works well in 0.9.1)

    Cannot build on iOS with flutter build ipa in 0.9.2. Its working well in 0.9.1 however.

    Lexical or Preprocessor Issue (Xcode): 'WebRTC/WebRTC.h' file not found
    

    I've tried both with and without the suggested solution in the discussion regarding this error.

    Workaround Simply specifying version 0.9.1 in pubspec.yaml works.

    Platform information

    • Flutter version: 3.0.5
    • Plugin version: 0.9.2
    • OS: iOS
    • OS version: 15
    Reviewed by simonbengtsson at 2022-08-10 19:51
  • 14. [macOS,Windows] Screen sharing takes too long to generate a thumbnail, causing UI blocking.

    When getting the enumerated window/screen source, the synchronous mode is used when getting the thumbnail, causing the first call to getSources to block for a long time when there are 10 or more windows

    Solutions:

    1. When enumerating sources for the first time, only id, title, and type are returned. A blank image placeholder is displayed on the UI
    2. Create an asynchronous thread to intercept thumbnails, compress thumbnails, Emit desktopSourceThumbnailChanged to update to the latest thumbnail
    Reviewed by cloudwebrtc at 2022-08-06 04:56
  • 15. Critical bug: No way to select iOS external audio input

    On iOS there's no external microphone to select, only the internal one. Makes the whole library useless since a lot of people use Airpods for video calls etc. (phone in the pocket, meeting booths, on-the-go, etc)

    Permissions for microphone are enabled. Info.plist has the entry for microphone access for iOS.

    Tested on Mac/Web and it works just fine, on iPad and iPhone it breaks.

    Calling

    List<MediaDeviceInfo> devices = await navigator.mediaDevices.enumerateDevices();

    We can see below that the Airpods are missing, they are on the device. Even after restarting the app/device. They don't show. devices missing

    Only the built-in microphone is returned in the "audioinput"

    2022-08-05 14 58 47 2022-08-05 14 58 37

    Reviewed by ollydixon at 2022-08-05 13:38
  • 16. I don't want to switch speaker in webrtc

    Is your feature request related to a problem? Please describe.

    In my project, I want to control speaker by myself. thus i can do anything.

    So, I recommend adding a switch control to turn off WEBRTC audio controls, especially on IOS

    Describe the solution you'd like

    navigator.enableAudioControls(false)
    

    Describe alternatives you've considered

    myStream?.getAudioTracks()[0].enableAudioControls(enable)
    
    Reviewed by nikohpng at 2022-08-05 03:11

Related

Video call with WebRTC and Flutter
Video call with WebRTC and Flutter

This is sandbox video call application using Flutter and WebRTC, you can call from browser to browser, phone to phone, browser to phone and opposite.

Apr 27, 2022
Demo for flutter-webrtc
Demo for flutter-webrtc

flutter-webrtc-demo Flutter WebRTC plugin Demo Online Demo: https://demo.cloudwebrtc.com:8086/ Usage git clone https://github.com/cloudwebrtc/flutter-

Aug 8, 2022
Sandbox video call application using Flutter and WebRTC
Sandbox video call application using Flutter and WebRTC

Video Call Flutter App ?? Description: This is sandbox video call application using Flutter and WebRTC, you can call from browser to browser, phone to

Apr 27, 2022
A simple audio room using WebRTC P2P mesh network.
A simple audio room using WebRTC P2P mesh network.

P2P Audio Room A simple audio room using peer to peer technology with WebRTC mesh network. Download the app from here Here I have used:- flutter_webrt

May 19, 2022
Flutter plugin for use Video.js in flutter web
Flutter plugin for use Video.js in flutter web

Flutter Video.js player Flutter plugin for use Video.js in flutter web Installation Add it to your package's pubspec.yaml file dependencies: video_j

Aug 9, 2022
Flutter (web-only at this moment) plugin for recording audio (using the microphone).

Microphone Flutter (web-only at this moment) plugin for recording audio (using the microphone). Getting started To learn more about the plugin and get

Jan 1, 2022
A Flutter audio plugin (Swift/Java) to play remote or local audio files on iOS / Android / MacOS and Web
A Flutter audio plugin (Swift/Java) to play remote or local audio files on iOS / Android / MacOS and Web

AudioPlayer A Flutter audio plugin (Swift/Java) to play remote or local audio files on iOS / Android / MacOS and Web. Online demo Features Android / i

Aug 1, 2022
Spotube - A lightweight free Spotify desktop-client built using flutter
Spotube - A lightweight free Spotify desktop-client built using flutter

Spotube is a Flutter based lightweight spotify client. It utilizes the power of

Aug 12, 2022
Play simultaneously music/audio from assets/network/file directly from Flutter, compatible with android / ios / web / macos, displays notifications
Play simultaneously music/audio from assets/network/file directly from Flutter, compatible with android / ios / web / macos, displays notifications

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

Aug 6, 2022
Apps For streaming audio via url (Android, iOS & Web ). Developed with Dart & Flutter ❤
Apps For streaming audio via url (Android, iOS & Web ). Developed with Dart & Flutter ❤

Flutter Sleep App (Dicoding Submission : Learn to Make Flutter Apps for Beginners) Stream Great collection of high-definition sounds that can be mixed

Aug 9, 2022
Just_audio: a feature-rich audio player for Android, iOS, macOS and web
Just_audio: a feature-rich audio player for Android, iOS, macOS and web

just_audio just_audio is a feature-rich audio player for Android, iOS, macOS and web. Mixing and matching audio plugins The flutter plugin ecosystem c

Jun 28, 2022
This Flutter plugin created to show how to use OpenCV and ZXing C++ libraries natively in Flutter with Dart FFI using the camera stream

OpenCV and ZXing C++ libraries natively in Flutter with Dart FFI using the camera stream

Aug 14, 2022
Flutter plugin that can support audio recording and level metering
Flutter plugin that can support audio recording and level metering

flutter_audio_recorder English | įŽ€äŊ“中文 Flutter Audio Record Plugin that supports Record Pause Resume Stop and provide access to audio level metering pr

Jun 16, 2022
Flutter plugin for sound. Audio recorder and player.
Flutter plugin for sound. Audio recorder and player.

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

Aug 4, 2022
A flutter plugin to handle Android / iOS camera
A flutter plugin to handle Android / iOS camera

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

Aug 15, 2022
A Flutter plugin to use speech recognition on iOS & Android (Swift/Java)
A Flutter plugin to use speech recognition on iOS & Android (Swift/Java)

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

Jun 18, 2022
A Flutter audio-plugin to playing and recording sounds
A Flutter audio-plugin to playing and recording sounds

medcorder_audio Flutter record/play audio plugin. Developed for Evrone.com Funded by Medcorder Medcorder.com Getting Started For help getting started

Jul 2, 2022
Playify is a Flutter plugin for play/pause/seek songs, fetching music metadata, and browsing music library.
Playify is a Flutter plugin for play/pause/seek songs, fetching music metadata, and browsing music library.

Playify Playify is a Flutter plugin for play/pause/seek songs, fetching music metadata, and browsing music library. Playify was built using iOS's Medi

Jul 18, 2022
Flutter plugin for selecting multiple images from the Android and iOS image library
Flutter plugin for selecting multiple images from the Android and iOS image library

Flutter plugin for selecting multiple images from the Android and iOS image library, taking new pictures with the camera, and edit them before using such as rotating, cropping, adding sticker/filters.

Aug 9, 2022