GithubHelp home page GithubHelp logo

flutter-webrtc / flutter-webrtc Goto Github PK

View Code? Open in Web Editor NEW
4.0K 111.0 1.1K 407.73 MB

WebRTC plugin for Flutter Mobile/Desktop/Web

License: MIT License

Java 27.18% Ruby 0.36% Objective-C 22.12% Dart 17.89% C 0.22% Shell 0.01% CMake 1.98% C++ 29.11% Kotlin 0.86% Swift 0.11% HTML 0.16%
flutter webrtc android ios web voip sip desktop webrtc-plugin

flutter-webrtc's Introduction

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, & Video. Try the Flutter Video tutorial 💬


LiveKit
LiveKit - Open source WebRTC infrastructure

Functionality

Feature Android iOS Web macOS Windows Linux Embedded Fuchsia
Audio/Video ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ [WIP]
Data Channel ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ [WIP]
Screen Capture ✔️ ✔️(*) ✔️ ✔️ ✔️ ✔️ [WIP]
Unified-Plan ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ [WIP]
Simulcast ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ [WIP]
MediaRecorder ⚠️ ⚠️ ✔️
End to End Encryption ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Insertable Streams

Additional platform/OS support from the other community

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.

Note for iOS.

The WebRTC.xframework compiled after the m104 release no longer supports iOS arm devices, so need to add the config.build_settings['ONLY_ACTIVE_ARCH'] = 'YES' to your ios/Podfile in your project

ios/Podfile

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
     target.build_configurations.each do |config|
      # Workaround for https://github.com/flutter/flutter/issues/64502
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'YES' # <= this line
     end
  end
end

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" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />

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 23 (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]

flutter-webrtc's People

Contributors

amantoux avatar aryzhov avatar ashellunts avatar ayman-kortobaa avatar cloudwebrtc avatar coreycole avatar davidliu avatar davidzhao avatar duyhungtnn avatar ened avatar frobthebuilder avatar hicodeboy avatar hiroshihorie avatar huulbaek avatar jaemin-virnect avatar jjpark-edito avatar linusu avatar maanas avatar mohamedrisaldarta avatar mouesam avatar mralek avatar rostopira avatar techno-disaster avatar wanchao-xu avatar wbarnard avatar wer-mathurin avatar xyzbilal avatar ycherniavskyi avatar ziminghua avatar zjzhang-cn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flutter-webrtc's Issues

MissingPluginException

Hi again,
I'm trying to use RTCPeerConnection,

var peerConnection = RTCPeerConnection("{'iceServers': []}");

problem is, just add this line show an error message on flutter :

Another exception was thrown: MissingPluginException(No implementation found for method listen on channel cloudwebrtc.com/WebRTC/peerConnectoinEvent{'iceServers': []})

Anything wrong?

Cant get SessionDescription to work on another JavaScript Side

I try to build a Electron Application but I cant parse the Session Description or the RemoteDescription.
'DOMException: Failed to execute 'setRemoteDescription' on 'RTCPeerConnection': Failed to parse SessionDescription.'

Code:
var sdp = { "type": data.descriptiontype, "description": data.descriptionsdp };
console.log(sdp)
peerConnection.setRemoteDescription(sdp)

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 ?

Cant access Camera

I try to get the MediaStream from the Camera with:
`navigator.getUserMedia(mediaConstraints).then((stream) {
_localRenderer.srcObject = stream;
});

final Map<String, dynamic> mediaConstraints = {
"video": true,
"optional": []
}`

I tried the MediaConstraints from the demo and everything and even tried navigator.getSources() but even there is a error. Im using this on a Epson Moverio BT-300 could that be the error, but there is android installed by default, so it should work.

And sadly get the Error:
nable to getUserMedia: Failed to create new track E/flutter ( 4168): #0 navigator.getUserMedia (package:flutter_webrtc/get_user_media.dart:20:7) E/flutter ( 4168): <asynchronous suspension> E/flutter ( 4168): #1 _HomePageState.getContent.<anonymous closure> (package:remoteworker/pages/HomePage.dart:246:25) E/flutter ( 4168): #2 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14) E/flutter ( 4168): #3 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30) E/flutter ( 4168): #4 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24) E/flutter ( 4168): #5 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9) E/flutter ( 4168): #6 TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7) E/flutter ( 4168): #7 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9) E/flutter ( 4168): #8 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12) E/flutter ( 4168): #9 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11) E/flutter ( 4168): #10 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:180:19) E/flutter ( 4168): #11 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22) E/flutter ( 4168): #12 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7) E/flutter ( 4168): #13 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7) E/flutter ( 4168): #14 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7) E/flutter ( 4168): #15 _invoke1 (dart:ui/hooks.dart:168:13) E/flutter ( 4168): #16 _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)

P2P not working on s7 edge

When connecting any device to s7 edge clients gets connected but no video output occurs on either sides. Data channels pretty much the same, connected->no output. Tried emulators real devices, android pairs, android/ios pairs. Flutter doctor all good.

Would appreciate any advice since iam lost on this case. What can prevent device from showing video?

By the way, when testing api on loopback it works fine and loops video without problems..

screenshot_20190204-163744

2019-02-04 16:43:57.422 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: Camera2Session: Auto-focus is not available.
2019-02-04 16:43:57.423 14731-15562/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: NetworkMonitorAutoDetect: capabilities changed: [ Transports: WIFI Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&FOREGROUND LinkUpBandwidth>=1048576Kbps LinkDnBandwidth>=1048576Kbps SignalStrength: -63]
2019-02-04 16:43:57.426 14731-14852/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: onIceCandidate
2019-02-04 16:43:57.427 14731-14852/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: onIceCandidate
2019-02-04 16:43:57.430 14731-14852/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: onIceCandidate
2019-02-04 16:43:57.431 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: send: {"to":"050526","candidate":{"sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:1198843472 1 udp 2122260223 192.168.81.49 33063 typ host generation 0 ufrag D0CK network-id 3 network-cost 10"},"session_id":"071607-050526","type":"candidate"}
2019-02-04 16:43:57.431 14731-14852/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: onIceCandidate
2019-02-04 16:43:57.433 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: send: {"to":"050526","candidate":{"sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:559267639 1 udp 2122202367 ::1 59904 typ host generation 0 ufrag D0CK network-id 2"},"session_id":"071607-050526","type":"candidate"}
2019-02-04 16:43:57.433 14731-15562/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: NetworkMonitorAutoDetect: link properties changed: {InterfaceName: wlan0 LinkAddresses: [fe80::62f1:89ff:fe18:13ee/64,192.168.81.49/20,] Routes: [fe80::/64 -> :: wlan0,192.168.80.0/20 -> 0.0.0.0 wlan0,0.0.0.0/0 -> 192.168.80.1 wlan0,] DnsAddresses: [212.59.1.1,212.59.2.2,] Domains: null MTU: 0 TcpBufferSizes: 524288,1048576,4525824,524288,1048576,4525824}
2019-02-04 16:43:57.433 14731-14852/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: onIceCandidate
2019-02-04 16:43:57.434 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: send: {"to":"050526","candidate":{"sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:1510613869 1 udp 2122129151 127.0.0.1 44899 typ host generation 0 ufrag D0CK network-id 1"},"session_id":"071607-050526","type":"candidate"}
2019-02-04 16:43:57.435 14731-14852/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: onIceCandidate
2019-02-04 16:43:57.436 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: send: {"to":"050526","candidate":{"sdpMLineIndex":1,"sdpMid":"video","candidate":"candidate:1198843472 1 udp 2122260223 192.168.81.49 41074 typ host generation 0 ufrag D0CK network-id 3 network-cost 10"},"session_id":"071607-050526","type":"candidate"}
2019-02-04 16:43:57.443 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: send: {"to":"050526","candidate":{"sdpMLineIndex":1,"sdpMid":"video","candidate":"candidate:559267639 1 udp 2122202367 ::1 35449 typ host generation 0 ufrag D0CK network-id 2"},"session_id":"071607-050526","type":"candidate"}
2019-02-04 16:43:57.445 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: send: {"to":"050526","candidate":{"sdpMLineIndex":1,"sdpMid":"video","candidate":"candidate:1510613869 1 udp 2122129151 127.0.0.1 56304 typ host generation 0 ufrag D0CK network-id 1"},"session_id":"071607-050526","type":"candidate"}
2019-02-04 16:43:57.453 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: Camera2Session: Camera device successfully started.
2019-02-04 16:43:57.453 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraCapturer: Create session done. Switch state: IDLE
2019-02-04 16:43:57.454 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: SurfaceTextureHelper: Setting listener to org.webrtc.Camera2Session$CaptureSessionCallback$$Lambda$0@b76002c
2019-02-04 16:43:57.463 14731-14852/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: onIceCandidate
2019-02-04 16:43:57.465 14731-14852/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: onIceCandidate
2019-02-04 16:43:57.466 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: send: {"to":"050526","candidate":{"sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:842163049 1 udp 1686052607 88.119.136.101 33063 typ srflx raddr 192.168.81.49 rport 33063 generation 0 ufrag D0CK network-id 3 network-cost 10"},"session_id":"071607-050526","type":"candidate"}
2019-02-04 16:43:57.468 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: send: {"to":"050526","candidate":{"sdpMLineIndex":1,"sdpMid":"video","candidate":"candidate:842163049 1 udp 1686052607 88.119.136.101 41074 typ srflx raddr 192.168.81.49 rport 41074 generation 0 ufrag D0CK network-id 3 network-cost 10"},"session_id":"071607-050526","type":"candidate"}
2019-02-04 16:43:57.527 14731-14852/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: onIceCandidate
2019-02-04 16:43:57.530 14731-14852/com.cloudwebrtc.flutterwebrtcdemo I/chatty: uid=10770(u0_a770) signaling_threa identical 1 line
2019-02-04 16:43:57.531 14731-14852/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: onIceCandidate
2019-02-04 16:43:57.532 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: send: {"to":"050526","candidate":{"sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:1876313031 1 tcp 1518222591 ::1 39752 typ host tcptype passive generation 0 ufrag D0CK network-id 2"},"session_id":"071607-050526","type":"candidate"}
2019-02-04 16:43:57.533 14731-14852/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: onIceCandidate
2019-02-04 16:43:57.538 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: send: {"to":"050526","candidate":{"sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:344579997 1 tcp 1518149375 127.0.0.1 42642 typ host tcptype passive generation 0 ufrag D0CK network-id 1"},"session_id":"071607-050526","type":"candidate"}
2019-02-04 16:43:57.540 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: send: {"to":"050526","candidate":{"sdpMLineIndex":1,"sdpMid":"video","candidate":"candidate:1876313031 1 tcp 1518222591 ::1 41894 typ host tcptype passive generation 0 ufrag D0CK network-id 2"},"session_id":"071607-050526","type":"candidate"}
2019-02-04 16:43:57.541 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: send: {"to":"050526","candidate":{"sdpMLineIndex":1,"sdpMid":"video","candidate":"candidate:344579997 1 tcp 1518149375 127.0.0.1 45286 typ host tcptype passive generation 0 ufrag D0CK network-id 1"},"session_id":"071607-050526","type":"candidate"}
2019-02-04 16:43:58.203 14731-15540/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: CameraEventsHandler.onFirstFrameAvailable
2019-02-04 16:43:59.217 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: Recivied data: {"type":"answer","data":{"from":"050526","to":"071607","description":{"sdp":"v=0\r\no=- 6752792958379108837 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS 17275731-B47B-4F40-9657-516BCA44A110\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:METF\r\na=ice-pwd:3g0C8LePZXwIgvQNqidzgEYI\r\na=ice-options:trickle renomination\r\na=fingerprint:sha-256 AA:7A:98:FF:7A:64:56:9D:7A:EA:BF:EA:33:26:23:0B:2B:56:5D:3E:18:69:E0:3A:47:58:C9:E1:57:48:96:DC\r\na=setup:active\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=sendrecv\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:102 ILBC/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpm
2019-02-04 16:43:59.240 14731-14731/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: peerConnectionSetRemoteDescription() start
2019-02-04 16:43:59.254 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: WebRtcAudioRecordExternal: enableBuiltInAEC(false)
2019-02-04 16:43:59.255 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: WebRtcAudioEffectsExternal: setAEC(false)
2019-02-04 16:43:59.256 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: WebRtcAudioRecordExternal: enableBuiltInNS(true)
2019-02-04 16:43:59.256 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: WebRtcAudioEffectsExternal: setNS(true)
2019-02-04 16:43:59.259 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: WebRtcAudioTrackExternal: initPlayout(sampleRate=48000, channels=1)
2019-02-04 16:43:59.260 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: WebRtcAudioTrackExternal: byteBuffer.capacity: 960
2019-02-04 16:43:59.264 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: WebRtcAudioTrackExternal: AudioTrack.getMinBufferSize: 7696
2019-02-04 16:43:59.265 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: WebRtcAudioTrackExternal: createAudioTrackOnLollipopOrHigher
2019-02-04 16:43:59.266 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: WebRtcAudioTrackExternal: nativeOutputSampleRate: 48000
2019-02-04 16:43:59.277 14731-14851/com.cloudwebrtc.flutterwebrtcdemo D/AudioTrack: Client defaulted notificationFrames to 1924 for frameCount 3848
2019-02-04 16:43:59.286 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: WebRtcAudioTrackExternal: AudioTrack: session ID: 3697, channels: 1, sample rate: 48000, max gain: 1.0
2019-02-04 16:43:59.286 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: WebRtcAudioTrackExternal: AudioTrack: buffer size in frames: 3848
2019-02-04 16:43:59.287 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: WebRtcAudioTrackExternal: AudioTrack: buffer capacity in frames: 3848
2019-02-04 16:43:59.288 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: VolumeLogger: start@[name=worker_thread - 14851, id=18368]
2019-02-04 16:43:59.290 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: VolumeLogger: audio mode is: MODE_NORMAL
2019-02-04 16:43:59.295 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: WebRtcAudioTrackExternal: startPlayout
2019-02-04 16:43:59.381 14731-15599/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: WebRtcAudioTrackExternal: AudioTrackThread@[name=AudioTrackJavaThread, id=18383]
2019-02-04 16:43:59.381 14731-15599/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: WebRtcAudioTrackExternal: AudioTrackThread@[name=AudioTrackJavaThread, id=18383]
2019-02-04 16:43:59.398 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: AndroidVideoDecoder: ctor name: OMX.Exynos.vp8.dec type: VP8 color format: 19 context: org.webrtc.EglBase14$Context@f0e96fb
2019-02-04 16:43:59.407 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: AndroidVideoDecoder: ctor name: OMX.Exynos.vp9.dec type: VP9 color format: 19 context: org.webrtc.EglBase14$Context@f0e96fb
2019-02-04 16:43:59.410 14731-14851/com.cloudwebrtc.flutterwebrtcdemo W/VideoCapabilities: Unrecognized profile 2130706433 for video/avc
2019-02-04 16:43:59.411 14731-14851/com.cloudwebrtc.flutterwebrtcdemo W/VideoCapabilities: Unrecognized profile 2130706434 for video/avc
2019-02-04 16:43:59.414 14731-14851/com.cloudwebrtc.flutterwebrtcdemo W/VideoCapabilities: Unrecognized profile 2130706433 for video/avc
2019-02-04 16:43:59.415 14731-14851/com.cloudwebrtc.flutterwebrtcdemo W/VideoCapabilities: Unrecognized profile 2130706434 for video/avc
2019-02-04 16:43:59.417 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: AndroidVideoDecoder: ctor name: OMX.Exynos.avc.dec type: H264 color format: 19 context: org.webrtc.EglBase14$Context@f0e96fb
2019-02-04 16:43:59.417 14731-15600/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: HardwareVideoEncoder: initEncode: 640 x 480. @ 300kbps. Fps: 60 Use surface mode: true
2019-02-04 16:43:59.418 14731-14851/com.cloudwebrtc.flutterwebrtcdemo W/VideoCapabilities: Unrecognized profile 2130706433 for video/avc
2019-02-04 16:43:59.418 14731-14851/com.cloudwebrtc.flutterwebrtcdemo W/VideoCapabilities: Unrecognized profile 2130706434 for video/avc
2019-02-04 16:43:59.423 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: AndroidVideoDecoder: ctor name: OMX.google.h264.decoder type: H264 color format: 19 context: org.webrtc.EglBase14$Context@f0e96fb
2019-02-04 16:43:59.424 14731-14851/com.cloudwebrtc.flutterwebrtcdemo W/VideoCapabilities: Unrecognized profile 2130706433 for video/avc
2019-02-04 16:43:59.425 14731-14851/com.cloudwebrtc.flutterwebrtcdemo W/VideoCapabilities: Unrecognized profile 2130706434 for video/avc
2019-02-04 16:43:59.426 14731-15600/com.cloudwebrtc.flutterwebrtcdemo I/ACodec: [] Now uninitialized
2019-02-04 16:43:59.426 14731-14851/com.cloudwebrtc.flutterwebrtcdemo W/VideoCapabilities: Unrecognized profile 2130706433 for video/avc
2019-02-04 16:43:59.426 14731-14851/com.cloudwebrtc.flutterwebrtcdemo W/VideoCapabilities: Unrecognized profile 2130706434 for video/avc
2019-02-04 16:43:59.428 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: AndroidVideoDecoder: ctor name: OMX.Exynos.avc.dec type: H264 color format: 19 context: org.webrtc.EglBase14$Context@f0e96fb
2019-02-04 16:43:59.429 14731-14851/com.cloudwebrtc.flutterwebrtcdemo W/VideoCapabilities: Unrecognized profile 2130706433 for video/avc
2019-02-04 16:43:59.429 14731-14851/com.cloudwebrtc.flutterwebrtcdemo W/VideoCapabilities: Unrecognized profile 2130706434 for video/avc
2019-02-04 16:43:59.433 14731-15603/com.cloudwebrtc.flutterwebrtcdemo I/ACodec: [] onAllocateComponent
2019-02-04 16:43:59.434 14731-14851/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: AndroidVideoDecoder: ctor name: OMX.google.h264.decoder type: H264 color format: 19 context: org.webrtc.EglBase14$Context@f0e96fb
2019-02-04 16:43:59.440 14731-14852/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: onAddTrack
2019-02-04 16:43:59.444 14731-14852/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: onAddTrack
2019-02-04 16:43:59.447 14731-15603/com.cloudwebrtc.flutterwebrtcdemo I/OMXClient: Treble IOmx obtained
2019-02-04 16:43:59.454 14731-14731/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: peerConnectionSetRemoteDescription() end
2019-02-04 16:43:59.454 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 19.
2019-02-04 16:43:59.481 14731-14731/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Releasing.
2019-02-04 16:43:59.483 14731-15499/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: eglBase detach and release.
2019-02-04 16:43:59.492 14731-15603/com.cloudwebrtc.flutterwebrtcdemo I/ACodec: [OMX.Exynos.VP8.Encoder] Now Loaded
2019-02-04 16:43:59.493 14731-14731/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Releasing done.
2019-02-04 16:43:59.493 14731-15499/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Quitting render thread.
2019-02-04 16:43:59.494 14731-14731/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Initializing EglRenderer
2019-02-04 16:43:59.496 14731-15608/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: EglBase.create shared context
2019-02-04 16:43:59.497 14731-15608/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglBase14: SDK version: 26. isEGL14Supported: true
2019-02-04 16:43:59.501 14731-15608/com.cloudwebrtc.flutterwebrtcdemo V/Surface: sf_framedrop debug : 0x4f4c, game : false, logging : 0
2019-02-04 16:43:59.501 14731-15608/com.cloudwebrtc.flutterwebrtcdemo D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, egl_color_buffer_format *, EGLBoolean) returns 0x3000, [1x1]-format:2
2019-02-04 16:43:59.503 14731-15600/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: HardwareVideoEncoder: Format: {color-format=2130708361, i-frame-interval=100, mime=video/x-vnd.on2.vp8, width=640, bitrate-mode=2, bitrate=300000, frame-rate=60, height=480}
2019-02-04 16:43:59.507 14731-15603/com.cloudwebrtc.flutterwebrtcdemo W/ACodec: recording-mode has no value at here
2019-02-04 16:43:59.509 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: Recivied data: {"type":"candidate","data":{"from":"050526","to":"071607","candidate":{"sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:3758877619 1 udp 2122260223 192.168.81.77 65362 typ host generation 0 ufrag METF network-id 1 network-cost 10"}}}
2019-02-04 16:43:59.513 14731-15603/com.cloudwebrtc.flutterwebrtcdemo W/OMXUtils: do not know color format 0x7f000011 = 2130706449
2019-02-04 16:43:59.514 14731-15603/com.cloudwebrtc.flutterwebrtcdemo W/OMXUtils: do not know color format 0x10 = 16
2019-02-04 16:43:59.514 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: Recivied data: {"type":"candidate","data":{"from":"050526","to":"071607","candidate":{"sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:1686167635 1 udp 2122194687 169.254.235.139 60942 typ host generation 0 ufrag METF network-id 2 network-cost 10"}}}
2019-02-04 16:43:59.515 14731-15603/com.cloudwebrtc.flutterwebrtcdemo W/OMXUtils: do not know color format 0x7f00a000 = 2130747392
2019-02-04 16:43:59.515 14731-14731/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: peerConnectionAddICECandidate() start
2019-02-04 16:43:59.516 14731-15603/com.cloudwebrtc.flutterwebrtcdemo W/OMXUtils: do not know color format 0x7f000789 = 2130708361
2019-02-04 16:43:59.519 14731-15603/com.cloudwebrtc.flutterwebrtcdemo I/ACodec: app-name : com.cloudwebrtc.flutterwebrtcdemo
2019-02-04 16:43:59.520 14731-14731/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: peerConnectionAddICECandidate() end
2019-02-04 16:43:59.520 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: Recivied data: {"type":"candidate","data":{"from":"050526","to":"071607","candidate":{"sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:1631841543 1 udp 1686052607 88.119.136.101 65362 typ srflx raddr 192.168.81.77 rport 65362 generation 0 ufrag METF network-id 1 network-cost 10"}}}
2019-02-04 16:43:59.522 14731-15603/com.cloudwebrtc.flutterwebrtcdemo I/ACodec: [OMX.Exynos.VP8.Encoder] cannot encode HDR static metadata. Ignoring.
2019-02-04 16:43:59.522 14731-15603/com.cloudwebrtc.flutterwebrtcdemo I/ACodec: setupVideoEncoder succeeded
2019-02-04 16:43:59.522 14731-15603/com.cloudwebrtc.flutterwebrtcdemo I/ACodec: [OMX.Exynos.VP8.Encoder] configure, AMessage : AMessage(what = 'conf', target = 1) = {
int32_t color-format = 2130708361
int32_t i-frame-interval = 100
string mime = "video/x-vnd.on2.vp8"
int32_t width = 640
int32_t bitrate-mode = 2
int32_t bitrate = 300000
int32_t frame-rate = 60
int32_t height = 480
int32_t encoder = 1
}
2019-02-04 16:43:59.523 14731-14731/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: peerConnectionAddICECandidate() start
2019-02-04 16:43:59.525 14731-14731/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: peerConnectionAddICECandidate() end
2019-02-04 16:43:59.527 14731-14731/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: peerConnectionAddICECandidate() start
2019-02-04 16:43:59.530 14731-14731/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: peerConnectionAddICECandidate() end
2019-02-04 16:43:59.531 14731-15603/com.cloudwebrtc.flutterwebrtcdemo W/OMXUtils: do not know color format 0x7f000789 = 2130708361
2019-02-04 16:43:59.548 14731-15600/com.cloudwebrtc.flutterwebrtcdemo V/Surface: sf_framedrop debug : 0x4f4c, game : false, logging : 0
2019-02-04 16:43:59.551 14731-15600/com.cloudwebrtc.flutterwebrtcdemo D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, egl_color_buffer_format *, EGLBoolean) returns 0x3000, [640x480]-format:1
2019-02-04 16:43:59.553 14731-15603/com.cloudwebrtc.flutterwebrtcdemo I/ACodec: [OMX.Exynos.VP8.Encoder] Now Loaded->Idle
2019-02-04 16:43:59.572 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: Recivied data: {"type":"candidate","data":{"from":"050526","to":"071607","candidate":{"sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:2928154435 1 tcp 1518280447 192.168.81.77 65186 typ host tcptype passive generation 0 ufrag METF network-id 1 network-cost 10"}}}
2019-02-04 16:43:59.574 14731-14808/com.cloudwebrtc.flutterwebrtcdemo I/flutter: Recivied data: {"type":"candidate","data":{"from":"050526","to":"071607","candidate":{"sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:704847011 1 tcp 1518214911 169.254.235.139 65187 typ host tcptype passive generation 0 ufrag METF network-id 2 network-cost 10"}}}
2019-02-04 16:43:59.575 14731-14731/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: peerConnectionAddICECandidate() start
2019-02-04 16:43:59.590 14731-14731/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: peerConnectionAddICECandidate() end
2019-02-04 16:43:59.591 14731-14731/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: peerConnectionAddICECandidate() start
2019-02-04 16:43:59.593 14731-15603/com.cloudwebrtc.flutterwebrtcdemo I/ACodec: [OMX.Exynos.VP8.Encoder] Now Idle->Executing
2019-02-04 16:43:59.595 14731-15603/com.cloudwebrtc.flutterwebrtcdemo I/ACodec: [OMX.Exynos.VP8.Encoder] Now Executing
2019-02-04 16:43:59.607 14731-14731/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: peerConnectionAddICECandidate() end
2019-02-04 16:44:01.311 14731-15541/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4008 ms. Frames received: 89. Dropped: 0. Rendered: 88. Render fps: 22.0. Average render time: 4448 us. Average swapBuffer time: 2399 us.
2019-02-04 16:44:01.455 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 28.
2019-02-04 16:44:03.456 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2019-02-04 16:44:03.509 14731-15608/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4008 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2019-02-04 16:44:04.068 14731-14737/com.cloudwebrtc.flutterwebrtcdemo I/zygote64: Do full code cache collection, code=124KB, data=91KB
2019-02-04 16:44:04.069 14731-14737/com.cloudwebrtc.flutterwebrtcdemo I/zygote64: After code cache collection, code=113KB, data=70KB
2019-02-04 16:44:05.319 14731-15541/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4008 ms. Frames received: 120. Dropped: 0. Rendered: 121. Render fps: 30.2. Average render time: 4084 us. Average swapBuffer time: 2133 us.
2019-02-04 16:44:05.458 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2019-02-04 16:44:07.460 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2019-02-04 16:44:07.521 14731-15608/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4011 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2019-02-04 16:44:09.330 14731-15541/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4010 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 29.9. Average render time: 4123 us. Average swapBuffer time: 2148 us.
2019-02-04 16:44:09.468 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 31.
2019-02-04 16:44:10.695 14731-14737/com.cloudwebrtc.flutterwebrtcdemo I/zygote64: Do partial code cache collection, code=124KB, data=83KB
2019-02-04 16:44:10.696 14731-14737/com.cloudwebrtc.flutterwebrtcdemo I/zygote64: After code cache collection, code=124KB, data=83KB
2019-02-04 16:44:10.696 14731-14737/com.cloudwebrtc.flutterwebrtcdemo I/zygote64: Increasing code cache capacity to 512KB
2019-02-04 16:44:11.472 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2019-02-04 16:44:11.535 14731-15608/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4014 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2019-02-04 16:44:13.340 14731-15541/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4011 ms. Frames received: 121. Dropped: 0. Rendered: 120. Render fps: 29.9. Average render time: 4409 us. Average swapBuffer time: 2223 us.
2019-02-04 16:44:13.473 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2019-02-04 16:44:15.474 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2019-02-04 16:44:15.546 14731-15608/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4011 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2019-02-04 16:44:17.353 14731-15541/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4011 ms. Frames received: 120. Dropped: 0. Rendered: 121. Render fps: 30.2. Average render time: 4261 us. Average swapBuffer time: 2389 us.
2019-02-04 16:44:17.475 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2019-02-04 16:44:19.477 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2019-02-04 16:44:19.560 14731-15608/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4014 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2019-02-04 16:44:21.361 14731-15541/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4009 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 29.9. Average render time: 4063 us. Average swapBuffer time: 2256 us.
2019-02-04 16:44:21.479 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2019-02-04 16:44:23.480 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2019-02-04 16:44:23.583 14731-15608/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4022 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2019-02-04 16:44:25.370 14731-15541/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4008 ms. Frames received: 121. Dropped: 0. Rendered: 121. Render fps: 30.2. Average render time: 4231 us. Average swapBuffer time: 2469 us.
2019-02-04 16:44:25.482 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2019-02-04 16:44:27.484 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2019-02-04 16:44:27.593 14731-15608/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4010 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2019-02-04 16:44:29.377 14731-15541/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4006 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 29.9. Average render time: 4022 us. Average swapBuffer time: 2422 us.
2019-02-04 16:44:29.487 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2019-02-04 16:44:31.492 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 31.
2019-02-04 16:44:31.599 14731-15608/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4005 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2019-02-04 16:44:33.390 14731-15541/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4012 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 29.9. Average render time: 3663 us. Average swapBuffer time: 2051 us.
2019-02-04 16:44:33.493 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2019-02-04 16:44:35.495 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2019-02-04 16:44:35.611 14731-15608/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4011 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2019-02-04 16:44:37.199 14731-14852/com.cloudwebrtc.flutterwebrtcdemo D/FlutterWebRTCPlugin: onIceGatheringChangeCOMPLETE
2019-02-04 16:44:37.400 14731-15541/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: EglRenderer: Duration: 4010 ms. Frames received: 121. Dropped: 0. Rendered: 121. Render fps: 30.2. Average render time: 3822 us. Average swapBuffer time: 2293 us.
2019-02-04 16:44:37.496 14731-15540/com.cloudwebrtc.flutterwebrtcdemo I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.

Firebase

Can this be used with firebase?

Ambiguous facing mode config (different for iOS and Android)

Following code enables rear camera on iOS but still uses front camera on Android

  final Map<String, dynamic> mediaConstraints = {
      'audio': true,
      'video': {
        'mandatory': {
          'minWidth': '1280',
          'minHeight': '720',
          'minFrameRate': '24'
        }
      },
      'facingMode': 'environment',
      'optional': []
    };
    _localStream = await navigator.getUserMedia(mediaConstraints);

Tested on Samsung Galaxy S8+ with Oreo 8.0 and on OnePlus 5T with custom rom 9.0

Update WebRTC framework

Currently I'm trying to update WebRTC
Goal is to make this plugin easily updatable with rolling dependency version
I've removed WebRTC.framework in root, and using CocoaPods dependency (just set s.dependency 'GoogleWebRTC' in podspec)
However I'm stuck at updating FlutterRTCMediaStream.m

Following code not working

    if (videoDevice) {
        RTCVideoSource *videoSource = [self.peerConnectionFactory videoSource];
        
        // FIXME The effort above to find a videoDevice value which satisfies the
        // specified constraints was pretty much wasted. Salvage facingMode for
        // starters because it is kind of a common and hence important feature on
        // a mobile device.
        
        RTCCameraVideoCapturer *capt = [[RTCCameraVideoCapturer alloc] initWithDelegate:videoSource];
        AVCaptureDeviceFormat *selectedFormat = nil;
        int currentDiff = INT_MAX;
        int targetWidth = 1280;
        int targetHeight = 720;
        for (AVCaptureDeviceFormat *format in [RTCCameraVideoCapturer supportedFormatsForDevice:videoDevice]) {
            CMVideoDimensions dimension = CMVideoFormatDescriptionGetDimensions(format.formatDescription);
            FourCharCode pixelFormat = CMFormatDescriptionGetMediaSubType(format.formatDescription);
            int diff = abs(targetWidth - dimension.width) + abs(targetHeight - dimension.height);
            if (diff < currentDiff) {
                selectedFormat = format;
                currentDiff = diff;
            } else if (diff == currentDiff && pixelFormat == [capt preferredOutputPixelFormat]) {
                selectedFormat = format;
            }
        }
        //NSLog(@"test %@", [(NSString *)selectedFormat lowercaseString]);
        if (selectedFormat == nil) {
            NSLog(@"Capture format fucked up. Fallback");
            selectedFormat = [RTCCameraVideoCapturer supportedFormatsForDevice:videoDevice].firstObject;
        }
        [capt startCaptureWithDevice:videoDevice format:selectedFormat fps:30 completionHandler:^(NSError *error) {
            NSLog(@"Start capture error: %@", [error localizedDescription]);
        }];
        
        NSString *trackUUID = [[NSUUID UUID] UUIDString];
        RTCVideoTrack *videoTrack = [self.peerConnectionFactory videoTrackWithSource:videoSource trackId:trackUUID];
        [mediaStream addVideoTrack:videoTrack];
        
        successCallback(mediaStream);
    } else {
        // According to step 6.2.3 of the getUserMedia() algorithm, if there is no
        // source, fail with a new OverconstrainedError.
        errorCallback(@"OverconstrainedError", /* errorMessage */ nil);
    }

UnsatisfiedLinkError

Hello,
While trying out your example app I have ran into a problem. On Android i get the UnsatisfiedLinkError
whole stacktrace:

com.cloudwebrtc.webrtcexample E/org.webrtc.Logging: NativeLibrary: Failed to load native library: jingle_peerconnection_so
    NativeLibrary: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.cloudwebrtc.webrtcexample-zASNzno6_zbJwbicSb0Dpg==/base.apk"],nativeLibraryDirectories=[/data/app/com.cloudwebrtc.webrtcexample-zASNzno6_zbJwbicSb0Dpg==/lib/x86_64, /system/fake-libs64, /data/app/com.cloudwebrtc.webrtcexample-zASNzno6_zbJwbicSb0Dpg==/base.apk!/lib/x86_64, /system/lib64]]] couldn't find "libjingle_peerconnection_so.so"

The app works great on iOS, but I cant get around this on Android. Every suggestion would help.

Application is unknown to FrontBoard.

After a little while of leaving the app open, I see this error.

flutter: RTCIceGatheringState.RTCIceGatheringStateComplete
flutter: RTCIceConnectionState.RTCIceConnectionStateClosed
flutter: RTCSignalingState.RTCSignalingStateClosed
Exit code 1 from: /usr/bin/xcrun simctl launch BCB474A8-D3F1-4389-B509-AD7962E67F6F "com.cloudwebrtc.flutter-example" --enable-dart-profiling --enable-checked-mode --start-paused --observatory-port=0:
"com.cloudwebrtc.flutter-example": -1
An error was encountered processing the command (domain=FBSOpenApplicationServiceErrorDomain, code=1):
The request to open ""com.cloudwebrtc.flutter-example"" failed.
The request was denied by service delegate (SBMainWorkspace) for reason: NotFound ("Application ""com.cloudwebrtc.flutter-example"" is unknown to FrontBoard").
Underlying error (domain=FBSOpenApplicationErrorDomain, code=4):
	The operation couldn’t be completed. Application ""com.cloudwebrtc.flutter-example"" is unknown to FrontBoard.
	Application ""com.cloudwebrtc.flutter-example"" is unknown to FrontBoard.

minSDK version error

After I add flutter webrtc plugin to pubspec.yaml

dependencies:
  flutter:
    sdk: flutter
    flutter_webrtc: ^0.0.1

I'm getting error

uses-sdk:minSdkVersion 16 cannot be smaller than version 21 declared in library [:flutter_webrtc] 
/Users/user/Documents/Test/my_first_app/build/flutter_webrtc/intermediates/manifests/full/
debug/AndroidManifest.xml as the library might be using APIs not available in 16
	Suggestion: use a compatible library with a minSdk of at most 16,
		or increase this project's minSdk version to at least 21,
		or use tools:overrideLibrary="com.cloudwebrtc.webrtc" to force usage
                (may lead to runtime failures)

FAILURE: Build failed with an exception.

It is build on Android Emulator. Not tested on Ios yet.
How to change minSdk on flutter?
Can somebody help me solve this?

CAMERA not working in simulator

I am using the latest GIT version of flutter-webrtc plugin. Followed the documentation to install the plugin and tried running the plugin in an app I am writing. The app is running in a simulator. It looks like the camera does not work. In the simulator on a Mac OS machine, I see a dark screen (for the main screen) and a multi-colored pixelated mini screen. Looks like a bug to me.

Does flutter-webrtc work with iOS and Android simulators? These simulators are an essential part of development using Flutter

iOS: The plugin is incompatible with use_frameworks in Podfile

Some Flutter plugins require to add use_frameworks! directive to Podfile. In my case, I need to use Crashlytics, which requires use_frameworks!. To reproduce the issue, add use_frameworks! to the Podfile of the example project and run pod install. It will produce the following:

$ pod install
Analyzing dependencies
Fetching podspec for `Flutter` from `Pods/.symlinks/flutter/ios`
Fetching podspec for `flutter_webrtc` from `Pods/.symlinks/plugins/flutter_webrtc/ios`
Downloading dependencies
Using Flutter (1.0.0)
Using GoogleWebRTC (1.1.25821)
Installing flutter_webrtc 0.0.1
Using libyuv-iOS (1.0.2)
[!] The 'Pods-Runner' target has transitive dependencies that include static binaries: (/Users/alex/code/flutter-webrtc/example/ios/Pods/libyuv-iOS/lib/libyuv.a)

Publish to pub.dartlang.org

I notice this package is not published to pub.dartlang.org.

Is there a reason it hasn't been published?

thanks!

Something is hanging in the memory after the completion of the video call

After the completion of the call, the following message appears in the log at intervals of a second or two:
I/org.webrtc.Logging(13858): EglRenderer: Duration: 4004 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: ,0. Average render time: NA. Average swapBuffer time: NA.
My Dispose method:

@override
  void dispose() {
    if (_localStream != null) {
      if (_peerConnection != null)
        _peerConnection.removeStream(_localStream);
      _localStream.dispose().then((value){
        _localStream = null;
      });
    }
    super.dispose();
    print("+++ CallScreen Dispose +++");
  }

What did I forget?

Can't run in iOS simulator

I'm pretty new to flutter on iOS, so this might be a total newbie mistake, but here's what I see:

flutter run
Running "flutter packages get" in example...                10.8s
Launching lib/main.dart on iPhone XS Max in debug mode...
Running pod install...                                       1.4s
Starting Xcode build...
Xcode build done.                                            1.8s
Failed to build iOS app
Error output from Xcode build:
↳
    ** BUILD FAILED **

Xcode's output:
↳
    error: Multiple commands produce '/Users/johnjelinek/Documents/code/flutter-webrtc/example/build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework':
    1) Target 'Runner' has copy command from '/Users/johnjelinek/Documents/code/flutter-webrtc/example/ios/Flutter/Flutter.framework' to '/Users/johnjelinek/Documents/code/flutter-webrtc/example/build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework'
    2) That command depends on command in Target 'Runner': script phase “[CP] Embed Pods Frameworks”
    warning: ignoring duplicated output file: '/Users/johnjelinek/Documents/code/flutter-webrtc/example/build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework' (in target 'Runner')
    note: Using new build systemnote: Planning buildnote: Constructing build description
Could not build the application for the simulator.
Error launching application on iPhone XS Max.

Any ideas how to troubleshoot this?

Widget Capture

Thank you for awesome library.

Any possibilities implement to send widget's video.

Server

Could you add the server code link ?
Easier to test

Switch audio output from phone audio to speaker audio.

Hi,

I have greatly appreciated this framework. Thank you.

I'm wondering if anyone would know how to switch the audio output to speakerphone instead of phone audio; currently, during a video chat, the audio from the video is played through the phone's ear speaker and not through the main speaker or the 'speakerphone.'

I think this would be a necessary functionality for video calls on mobile.

Screen Capture

Hey, Thanks for the plugin.

This issue is about implementing Screen Capture, I did notice it is on the todo list and there is already a bit of implementation with MediaProjection on android side, can you let us know the status if its ready to use

Backend server

Can you tell me the backend and codecs ?

Thanks for this great GUI

FAILURE - build and deploy to iOS

  • Added flutter_webrtc to the pubpsec.yaml

  • Updated /ios/Runner/Info.plist

  • Updated /android/app/src/main/AndroidManifest.xml

Then ran

flutter run -d all


Launching lib/main.dart on iPhone XR in debug mode...
2018-12-05 11:52:15.156 defaults[36085:1311989]
The domain/default pair of (/Users/lvadaked/src/flexlive/app/flexlive/ios/Runner/Info, CFBundleIdentifier) does not exist
E/flutter (25587): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter (25587): NoSuchMethodError: The getter 'uid' was called on null.
E/flutter (25587): Receiver: null
E/flutter (25587): Tried calling: uid
E/flutter (25587): #0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
E/flutter (25587): #1      Auth.getCurrentUser (package:flexlive/auth.dart:26:17)
E/flutter (25587): <asynchronous suspension>
E/flutter (25587): #2      _RootPageState.initState (package:flexlive/root_page.dart:26:17)
E/flutter (25587): #3      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3830:58)
E/flutter (25587): #4      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
E/flutter (25587): #5      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter (25587): #6      Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter (25587): #7      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
E/flutter (25587): #8      Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
E/flutter (25587): #9      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
E/flutter (25587): #10     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
E/flutter (25587): #11     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter (25587): #12     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter (25587): #13     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
E/flutter (25587): #14     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter (25587): #15     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter (25587): #16     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
E/flutter (25587): #17     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
E/flutter (25587): #18     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
E/flutter (25587): #19     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
E/flutter (25587): #20     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter (25587): #21     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter (25587): #22     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
E/flutter (25587): #23     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter (25587): #24     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter (25587): #25     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
E/flutter (25587): #26     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter (25587): #27     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter (25587): #28     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
E/flutter (25587): #29     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter (25587): #30     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter (25587): #31     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
E/flutter (25587): #32     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter (25587): #33     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter (25587): #34     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
E/flutter (25587): #35     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
E/flutter (25587): #36     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
E/flutter (25587): #37     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3848:11)
E/flutter (25587): #38     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
E/flutter (25587): #39     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter (25587): #40     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter (25587): #41     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
E/flutter (25587): #42     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
E/flutter (25587): #43     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
E/flutter (25587): #44     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
E/flutter (25587): #45     Element.inflateWidget (package:flutter/src/widgets/framew
Starting Xcode build...
 ├─Assembling Flutter resources...                    1.8s

 └─Compiling, linking and signing...                  2.4s

Xcode build done.                                            6.7s
Failed to build iOS app
Error output from Xcode build:
↳
    ** BUILD FAILED **


Xcode's output:
↳
    === BUILD TARGET Runner OF PROJECT Runner WITH CONFIGURATION Debug ===
    The use of Swift 3 @objc inference in Swift 4 mode is deprecated. Please address deprecated @objc inference warnings, test your code
    with “Use of deprecated Swift 3 @objc inference” logging enabled, and then disable inference by changing the "Swift 3 @objc Inference"
    build setting to "Default" for the "Runner" target.
    === BUILD TARGET Runner OF PROJECT Runner WITH CONFIGURATION Debug ===
    While building module 'flutter_webrtc' imported from
    /Users/lvadaked/src/flexlive/app/flexlive/ios/Runner/GeneratedPluginRegistrant.m:7:
    In file included from <module-includes>:1:
    In file included from
    /Users/lvadaked/src/flexlive/app/flexlive/build/ios/Debug-iphonesimulator/flutter_webrtc/flutter_webrtc.framework/Headers/flutter_webr
    tc-umbrella.h:13:
    /Users/lvadaked/src/flexlive/app/flexlive/build/ios/Debug-iphonesimulator/flutter_webrtc/flutter_webrtc.framework/Headers/ARDVideoDeco
    derFactory.h:12:9: fatal error: 'WebRTC/RTCVideoCodecFactory.h' file not found
    #import "WebRTC/RTCVideoCodecFactory.h"
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 error generated.
    /Users/lvadaked/src/flexlive/app/flexlive/ios/Runner/GeneratedPluginRegistrant.m:7:9: fatal error: could not build module
    'flutter_webrtc'
    #import <flutter_webrtc/FlutterWebRTCPlugin.h>
     ~~~~~~~^
    2 errors generated.

Could not build the application for the simulator.
Error launching application on iPhone XR.
 3.6s

RTCVideoView might have a bug

between send offer success and unreceived target answer,I show _localRander full screen

new Stack(children: <Widget>[
  new Positioned(
	  left: 0.0,
	  right: 0.0,
	  top: 0.0,
	  bottom: 0.0,
	  child: new Container(
		margin: new EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 0.0),
		width: MediaQuery.of(context).size.width,
		height: MediaQuery.of(context).size.height,
		child: new RTCVideoView(_localRenderer),
		decoration: new BoxDecoration(color: Colors.black54),
	  )),
	])

it work well.

when I receive target answer, I want show _remoteRenderer full screen.

new Stack(children: <Widget>[
                  new Positioned(
                      left: 0.0,
                      right: 0.0,
                      top: 0.0,
                      bottom: 0.0,
                      child: new Container(
                        margin: new EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 0.0),
                        width: MediaQuery.of(context).size.width,
                        height: MediaQuery.of(context).size.height,
                        child: new RTCVideoView(_remoteRenderer),
                        decoration: new BoxDecoration(color: Colors.black54),
                      )),])

it work fail. it also show _localRenderer full screen.
but when I change code like this:

new Stack(children: <Widget>[
          new Positioned(
                      left: 0.0,
                      right: 0.0,
                      top: 0.0,
                      bottom: 0.0,
                      child: new Container(
                        margin: new EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 0.0),
                        width: MediaQuery.of(context).size.width,
                        height: MediaQuery.of(context).size.height,
                        child: new RTCVideoView(_remoteRenderer),
                        decoration: new BoxDecoration(color: Colors.black54),
                      )),
                  new Positioned(
                      left: 0.0,
                      right: 0.0,
                      top: 0.0,
                      bottom: 0.0,
                      child: new Container(
                        margin: new EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 0.0),
                        width: MediaQuery.of(context).size.width,
                        height: MediaQuery.of(context).size.height,
                        child: new RTCVideoView(_remoteRenderer),
                        decoration: new BoxDecoration(color: Colors.black54),
                      )),])

just add Positioned Widget again.it work well,show _remoteRenderer now.

Android: getUserMedia does not work for capturing audio only

When I specify "video": false in constraints, I get an NPE on Android when attempting to call the method getUserMedia. Below is the stack trace:

E/MethodChannel#cloudwebrtc.com/WebRTC.Method( 8994): Failed to handle method call
E/MethodChannel#cloudwebrtc.com/WebRTC.Method( 8994): java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.cloudwebrtc.webrtc.utils.ConstraintsMap.hasKey(java.lang.String)' on a null object reference
E/MethodChannel#cloudwebrtc.com/WebRTC.Method( 8994): 	at com.cloudwebrtc.webrtc.GetUserMediaImpl.getUserMedia(GetUserMediaImpl.java:328)
E/MethodChannel#cloudwebrtc.com/WebRTC.Method( 8994): 	at com.cloudwebrtc.webrtc.FlutterWebRTCPlugin.getUserMedia(FlutterWebRTCPlugin.java:665)
E/MethodChannel#cloudwebrtc.com/WebRTC.Method( 8994): 	at com.cloudwebrtc.webrtc.FlutterWebRTCPlugin.onMethodCall(FlutterWebRTCPlugin.java:118)
E/MethodChannel#cloudwebrtc.com/WebRTC.Method( 8994): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:200)
E/MethodChannel#cloudwebrtc.com/WebRTC.Method( 8994): 	at io.flutter.view.FlutterNativeView.handlePlatformMessage(FlutterNativeView.java:163)
E/MethodChannel#cloudwebrtc.com/WebRTC.Method( 8994): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#cloudwebrtc.com/WebRTC.Method( 8994): 	at android.os.MessageQueue.next(MessageQueue.java:323)
E/MethodChannel#cloudwebrtc.com/WebRTC.Method( 8994): 	at android.os.Looper.loop(Looper.java:136)
E/MethodChannel#cloudwebrtc.com/WebRTC.Method( 8994): 	at android.app.ActivityThread.main(ActivityThread.java:6351)
E/MethodChannel#cloudwebrtc.com/WebRTC.Method( 8994): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#cloudwebrtc.com/WebRTC.Method( 8994): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:896)
E/MethodChannel#cloudwebrtc.com/WebRTC.Method( 8994): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:786)

Omitting the "video" attribute does not help.

Voice chat

Hi, Thanks for developing this library
I want to implement an audio chat with this library
is this possible?
tried to

  1. remove video tracks after stream creation but no success.
    E/flutter ( 3259): MissingPluginException(No implementation found for method mediaStreamRemoveTrack on channel cloudwebrtc.com/WebRTC.Method)
  2. removing video from constraints map
    null exception error

Support volume control for recorded audio

Since webrtc encapsulates audio capture, it's desirable to control the volume (or gain) of the recorded audio track. I propose to add method MediaStreamTrack.setVolume(double volume), which would apply a gain multiplier to an audio track. The underlying WebRTC API has the corresponding volume control methods, which are platform-specific and exist for both iOS and Android.

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?

Rendering fails when video width < 720

Hi dear.
I wonder why this has changed.
If it changes like this, no video will be output.
After that, however, the video is output again.
Please answer me. ;(

[envoronment]
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel beta, v1.0.0, on Mac OS X 10.14.2 18C54, locale ko-KR)
[✓] Android toolchain - develop for Android devices (Android SDK 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
[✓] Android Studio (version 3.2)
[✓] VS Code (version 1.30.2)
[✓] Connected device (1 available)

[mediaconstraint code]
Map<String, dynamic> mediaConstraints = {
'audio': true,
'video': {
'mandatory': {
'minWidth': '640',
'minHeight': '480',
'minFrameRate': 30,
},
'facingMode': 'environment',
'optional': [],
}
};
try {
await navigator.getUserMedia(mediaConstraints).then((stream) async {
_localStream = stream;
});
} catch (e) {
debugPrint(e.toString());
}

[create peerconnection]
Future goCreatePeerConnection() async {
_pc = await createPeerConnection(_iceServers, _config);

_pc.onIceCandidate = (candidate) {      
  RTCIceCandidate newCandidate;
  if(candidate == null) {
    debugPrint('candidate is null');
  } else {
    newCandidate = new RTCIceCandidate(
      candidate.candidate, 
      candidate.sdpMid, 
      candidate.sdpMlineIndex);
  }
  sendCandidate(newCandidate);
};

**_pc.addStream(_localStream);  <---- I think this code is problem.**

}

[rtc_video_view.dart]
...
initialize() async {
final Map<dynamic, dynamic> response =
await _channel.invokeMethod('createVideoRenderer', {});
_textureId = response['textureId'];
_eventSubscription = _eventChannelFor(_textureId)
.receiveBroadcastStream()
.listen(eventListener, onError: errorListener);
_eventSubscription.onData((dynamic data) {
debugPrint('--=-=-=-=-=-eventSubscription data:$data');
});
}
...

[console log]
flutter: --=-=-=-=-=-eventSubscription data:{id: 0, event: didTextureChangeVideoSize, width: 480.0, height: 640.0}
flutter: --=-=-=-=-=-eventSubscription data:{event: didTextureChangeRotation, id: 0, rotation: 90}
flutter: --=-=-=-=-=-eventSubscription data:{id: 0, event: didTextureChangeVideoSize, width: 360.0, height: 480.0} <----- This change
flutter: --=-=-=-=-=-eventSubscription data:{id: 0, event: didTextureChangeVideoSize, width: 480.0, height: 640.0}

Error building the app

App compilation failed with following error.

flutter-webrtc\android\src\main\java\com\cloudwebrtc\webrtc\FlutterWebRTCPlugin.java:21: error: cannot find symbol
  private final GetUserMediaImpl getUserMediaImpl;
                ^
  symbol:   class GetUserMediaImpl
  location: class FlutterWebRTCPlugin
1 error

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':webrtc:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

BUILD FAILED in 5s
Finished with error: Gradle build failed: 1

No Audio while Video streaming

Hi, I want to thanks for this plugin! It's cool man!
I've able to streaming a video now.
Why there's no audio?
Edit : Ok, it is a audio codex then! Thank you!

Getting access to raw audio data

Just wondering if there is anyway to intercept the audio data as a raw data stream of sorts. Need raw audio data so that some signal processing (silence removal) can be done. Thanks!

Documentation

without documentation It makes it difficult to work with it

At least one of the methods is a documentary, such as the sound of the camera switch between two cameras and set the default camera setting or send a message

compileOptions breaks the apk.

I added these compileOptions as suggested in the app level build.gradle file to make it build in my Android Studio.
But the .apk I build will crash on my android test phone.
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Any solution?

Enable/disable torch

I'm currently implementing torch feature for my needs
Should I provide PR for that?
If yes, how this API should look like?
Method on mediastream or general static method?

proper idea to use webrtc

I'm having a p2p chat app in flutter using firebase firestore. I want to have p2p video call in that app when user user clicks video call button they both should able to make video call. but I'm unable to get started, as I can't understand signalling server, ice, turn and other things.🤯🤯 can you please elaborate the things that how can I start using firestore to make video call feature possible in app. just using the plugin will make it possible or what I have to do!

great job.

since Flutter is new to us but popular in the near future what you did is actually great job. 很厉害

Cant get MediaStream twice

Getting the MediaStream for the first time is no problem at all and adding it to a PeerConnection. The second time I add the same stream to another PeerConnection it says the Camera is already in Usage. Is there an Method to disable the camera? To dispose the Stream doesn't work out for me.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.