Cordova-plugin-iosrtc: [master] Outgoing video stream is no longer working on iOS 13 and Xcode 11 beta

Created on 30 Aug 2019  ·  86Comments  ·  Source: cordova-rtc/cordova-plugin-iosrtc

Hello,

I've just installed iOS 13.1 Beta on my iPhone and noticed that outgoing video is no longer working. After upgrading plugin to the latest version (previously used version is 4.0.2), the issue is still remaining. This does not seem to be a renderer issue, because I can see incoming video streams; the issues reproduces only for outgoing streams. A black square appears in place where should be my outgoing video view, and the other side cannot see my video, either.

Here is what's going on in logs when I enable the camera for an ongoing call:

2019-08-30 18:26:00.825844+0300 My App Name[1171:317447] iosrtcPlugin#getUserMedia()
2019-08-30 18:26:00.825981+0300 My App Name[1171:317447] PluginGetUserMedia#call()
2019-08-30 18:26:00.829510+0300 My App Name[1171:317447] PluginGetUserMedia#call() | video authorization: authorized
2019-08-30 18:26:00.830827+0300 My App Name[1171:317447] PluginGetUserMedia#call() | video requested (specified device id: 'com.apple.avfoundation.avcapturedevice.built-in_video:1')
2019-08-30 18:26:00.831406+0300 My App Name[1171:317447] PluginGetUserMedia#call() | chosen video device: <AVCaptureFigVideoDevice: 0x147e41bb0 [Front Camera][com.apple.avfoundation.avcapturedevice.built-in_video:1]>
2019-08-30 18:26:00.844505+0300 My App Name[1171:317447] PluginMediaStream#init()
2019-08-30 18:26:00.844641+0300 My App Name[1171:317447] PluginMediaStreamTrack#init()
2019-08-30 18:26:00.844842+0300 My App Name[1171:317447] PluginMediaStreamTrack#run() [kind:video, id:70DD33E1-6235-4D66-B68C-DFD29992BD41]
2019-08-30 18:26:00.844899+0300 My App Name[1171:317447] PluginMediaStream#run()
2019-08-30 18:26:00.845538+0300 My App Name[1171:317447] THREAD WARNING: ['iosrtcPlugin'] took '19.727295' ms. Plugin should use a background thread.
2019-08-30 18:26:00.852460+0300 My App Name[1171:317447] iosrtcPlugin#MediaStreamTrack_setListener()
2019-08-30 18:26:00.852668+0300 My App Name[1171:317467] PluginMediaStreamTrack#setListener() [kind:video, id:70DD33E1-6235-4D66-B68C-DFD29992BD41]
2019-08-30 18:26:00.852905+0300 My App Name[1171:317447] iosrtcPlugin#MediaStream_setListener()
2019-08-30 18:26:00.853019+0300 My App Name[1171:317467] PluginMediaStream#setListener()
2019-08-30 18:26:00.853221+0300 My App Name[1171:317447] iosrtcPlugin#RTCPeerConnection_addStream()
2019-08-30 18:26:00.853409+0300 My App Name[1171:317467] PluginRTCPeerConnection#addStream()
2019-08-30 18:26:00.854124+0300 My App Name[1171:317447] [TCCallKit] onVideoAdded
2019-08-30 18:26:00.855400+0300 My App Name[1171:317497] PluginRTCPeerConnection | onnegotiationeeded
2019-08-30 18:26:00.973638+0300 My App Name[1171:317447] THREAD WARNING: ['NativePageTransitions'] took '114.470947' ms. Plugin should use a background thread.
2019-08-30 18:26:00.975157+0300 My App Name[1171:317447] iosrtcPlugin#RTCPeerConnection_createOffer()
2019-08-30 18:26:00.975654+0300 My App Name[1171:317476] PluginRTCPeerConnection#createOffer()
2019-08-30 18:26:00.976804+0300 My App Name[1171:317476] PluginRTCPeerConnectionConstraints#init()
2019-08-30 18:26:00.976881+0300 My App Name[1171:317476] PluginRTCPeerConnectionConstraints#getConstraints()
2019-08-30 18:26:00.977921+0300 My App Name[1171:317476] PluginRTCPeerConnectionConstraints#deinit()
2019-08-30 18:26:00.978293+0300 My App Name[1171:317497] PluginRTCPeerConnection#createOffer() | success callback
2019-08-30 18:26:00.990259+0300 My App Name[1171:317447] iosrtcPlugin#RTCPeerConnection_setLocalDescription()
2019-08-30 18:26:00.990459+0300 My App Name[1171:317476] PluginRTCPeerConnection#setLocalDescription()
2019-08-30 18:26:00.995002+0300 My App Name[1171:317497] PluginRTCPeerConnection | onsignalingstatechange [signalingState:Optional("have-local-offer")]
2019-08-30 18:26:01.002659+0300 My App Name[1171:317497] PluginRTCPeerConnection#setLocalDescription() | success callback
2019-08-30 18:26:01.066928+0300 My App Name[1171:317447] iosrtcPlugin#new_MediaStreamRenderer()
2019-08-30 18:26:01.067339+0300 My App Name[1171:317447] PluginMediaStreamRenderer#init()
2019-08-30 18:26:01.083873+0300 My App Name[1171:317447] Metal GPU Frame Capture Enabled
2019-08-30 18:26:01.084272+0300 My App Name[1171:317447] Metal API Validation Enabled
2019-08-30 18:26:01.162637+0300 My App Name[1171:317447] PluginMediaStreamRenderer#run()
2019-08-30 18:26:01.162725+0300 My App Name[1171:317447] THREAD WARNING: ['iosrtcPlugin'] took '95.817871' ms. Plugin should use a background thread.
2019-08-30 18:26:01.163036+0300 My App Name[1171:317447] iosrtcPlugin#MediaStreamRenderer_refresh()
2019-08-30 18:26:01.163578+0300 My App Name[1171:317447] PluginMediaStreamRenderer#refresh() [elementLeft:185.0, elementTop:978.0, elementWidth:125.0, elementHeight:85.0, videoViewWidth:125.0, videoViewHeight:85.0, visible:true, opacity:1.0, zIndex:0.0, mirrored:false, clip:true, borderRadius:3.0]
2019-08-30 18:26:01.163920+0300 My App Name[1171:317447] iosrtcPlugin#MediaStreamRenderer_render()
2019-08-30 18:26:01.163991+0300 My App Name[1171:317447] PluginMediaStreamRenderer#render()
2019-08-30 18:26:01.193652+0300 My App Name[1171:317447] iosrtcPlugin#MediaStreamRenderer_refresh()
2019-08-30 18:26:01.193826+0300 My App Name[1171:317447] PluginMediaStreamRenderer#refresh() [elementLeft:185.0, elementTop:978.0, elementWidth:125.0, elementHeight:85.0, videoViewWidth:125.0, videoViewHeight:85.0, visible:true, opacity:1.0, zIndex:0.0, mirrored:false, clip:true, borderRadius:3.0]
2019-08-30 18:26:01.286278+0300 My App Name[1171:317447] iosrtcPlugin#RTCPeerConnection_setRemoteDescription()
2019-08-30 18:26:01.286527+0300 My App Name[1171:317476] PluginRTCPeerConnection#setRemoteDescription()
2019-08-30 18:26:01.298347+0300 My App Name[1171:317497] PluginRTCPeerConnection | onsignalingstatechange [signalingState:Optional("stable")]
2019-08-30 18:26:01.303718+0300 My App Name[1171:317497] PluginRTCPeerConnection#setRemoteDescription() | success callback
2019-08-30 18:26:01.317835+0300 My App Name[1171:317447] iosrtcPlugin#MediaStreamRenderer_refresh()
2019-08-30 18:26:01.318004+0300 My App Name[1171:317447] PluginMediaStreamRenderer#refresh() [elementLeft:185.0, elementTop:410.0, elementWidth:125.0, elementHeight:85.0, videoViewWidth:125.0, videoViewHeight:85.0, visible:true, opacity:1.0, zIndex:0.0, mirrored:false, clip:true, borderRadius:3.0]
2019-08-30 18:26:01.319030+0300 My App Name[1171:317447] iosrtcPlugin#MediaStreamRenderer_refresh()
2019-08-30 18:26:01.319208+0300 My App Name[1171:317447] PluginMediaStreamRenderer#refresh() [elementLeft:185.0, elementTop:410.0, elementWidth:125.0, elementHeight:85.0, videoViewWidth:125.0, videoViewHeight:85.0, visible:true, opacity:1.0, zIndex:0.0, mirrored:false, clip:true, borderRadius:3.0]

No obvious error messages, but no video, either.
Could you please take a look?

Thanks,
Andrey.

bug build libwebrtc

All 86 comments

I just noticed that 13.1 beta was added just yesterday, so I'm going to rollback to 13.0 and check if it works there.

Unfortunately, on iOS 13.0 the problem is remaining :(

@EternallLight Some other user have not the same issue using iOS 13

Would you mind trying to use this simple test script (should with with a basic cordova init app)

I will upgrade to iOS 13 in coming days and see if i can reproduce.

Hi @hthetiot,

I have tried the test script and had no positive results – both video frames are rendered as black squares.

@EternallLight Thank you, I will upgrade one of my device to iOS 13.
Unfortunately we would need to know why it does that, any clue is welcome.
cc @banditdevelopment

@EternallLight Are you using Xcode 11 ? Please provide exact version (currently I'm using XCode Version 10.3 - 10G8)

@hthetiot, yes, it's Version 11.0 beta 6 (11M392r)

@hthetiot, wow, that must be fresh. I installed beta 6 on Thursday and it was the latest one. Got to upgrade, thanks.
Seems like 11M392r is the latest build at the moment and they just forgot to change the beta version number in the about screen.

Thx @EternallLight will keep you posted on my discovery on my side.

Added Xcode 11 on travis and task/ios-13 branch to start debugging.

@EternallLight Can you see if you have proper hooks triggered on Xcode 11+
See Error in comment https://github.com/cordova-rtc/cordova-plugin-iosrtc/pull/376#issuecomment-527140490

You should see something like that if it's triggered.

Screen Shot 2019-09-04 at 10 31 46 PM

Make sure to remove and add platform to trigger the hook.

cordova platform remove ios --no-save
cordova platform add ios --no-save

I dont think cordova 7 or 8 support Xcode 11 I dont even think cordova 9 does support Xcode 11.
@EternallLight Can you tell me the cordova version you use ?

See WIP https://github.com/cordova-rtc/cordova-plugin-iosrtc/pull/376#issuecomment-528097790

@hthetiot
I've just created a brand new cordova/ionic project to test this from scratch. It's running on Cordova 9.0.0 ([email protected]) and cordova-ios 5.0.1 which seem to be the latest. I also installed the latest version of cordova-plugin-iortc from Github that includes your commits made 14 hours ago. ionic cordova run ios ends with * ARCHIVE SUCCEEDED * and * EXPORT SUCCEEDED * and freezes on native-run ios --app platforms/ios/build/device/MyApp.ipa --device. There's no "Build settings from the configuration file..." in the log, only this:

Build settings from command line:
    CONFIGURATION_BUILD_DIR = /Users/agrunev/Thirdlane/iosrtc-ios13/platforms/ios/build/device
    SHARED_PRECOMPS_DIR = /Users/agrunev/Thirdlane/iosrtc-ios13/platforms/ios/build/sharedpch

After pushing the app to the device, I run your test. It asked Camera and Microphone permission as it is supposed to but still a black square was moving across the screen. Cannot read property 'toLowerCase' of undefined did not show up anywhere, I think I would have noticed it in the first place.
If you want something more from my side, let's arrange a call with screen sharing, so I could make the tests in real time.
Thanks you very much for helping with this!

By the way, not sure if it will be helpful, but there's another plugin in my project that was broken by breaking API changes in iOS 13: https://github.com/j3k0/cordova-plugin-openwith/issues/67
What if there's some changes in the API that is used for camera stream capturing as well?

I still think its Xcode 11 issue, would you mind trying Xcode 10+ and run on ios 13.
I will leave that issue open and try to look into Cordova 9 and Xcode 11 support.

@hthetiot I couldn't run it from Xcode 10 – it says that no support files for iOS 13 found. I'm gonna check if there's a way to fix this and push app to an iOS 13 device from 10th Xcode.

Today, I've installed our production app from the AppStore on two devices with iOS 12.4 and 13.0, and tested – as expected, the outgoing video looks good on iOS 12.4, but there's a black view instead on iOS 13. I'm going to make a test build with the very latest version of the plugin and try it out on both devices now.
UPD: There's a new Xcode beta released yesterday, got to try it out too!

Just rebuilt the app with the yesterday's Xcode which by the way is no longer beta. Unfortunately, no changes

@EternallLight @hthetiot

Sorry, my English is not good.
This problem does not appear when the screen is horizontal.
The reason may be that the underlying library is too old.
My solution is
Use sfsafariviewcontroller on ios13
It also has a cordova plugin
Maybe you will meet
And iosrtc once it is connected to iosrtc will crash
Can be solved by deleting h264 in sdp

不好意思,我的英文不好
这个问题,横屏的时候不会出现
原因可能是底层的那个库太老了
我的解决方方法是
在ios13上用sfsafariviewcontroller
它也有cordova的插件
可能你们会遇到
和iosrtc一旦建立连接iosrtc会崩溃的问题
可通过在sdp中删除h264解决

@myhhx

This problem does not appear when the screen is horizontal.

I confirm.
Have you managed to fix it on cordova-plugin-iosrtc by switching to SFSafariViewController?

@EternallLight

Using SFSafariViewController is actually using safari's webrtc implementation.
In other words, your js application code can be run on safari without changing it.
At this time, it has nothing to do with cordova-plugin-iosrtc.

用SFSafariViewController实际上用的是safari的webrtc实现
也就是说你的js应用代码不用改就可以在safari上跑
这时已经和cordova-plugin-iosrtc没有关系了

@myhhx

I understand. It sounds like a lot of work. For the current plugin users, fixing the issue within the plugin would be much more acceptable.

@EternallLight

To fix it, I guess I need to recompile the latest webrtc library, which has a lot of work to do.

要修复它,我估计需要重新编译最新的webrtc库,这有许多工作要做

@myhhx
You mean libwebrtc? There's an instruction for that: https://github.com/cordova-rtc/cordova-plugin-iosrtc/blob/master/docs/BuildingLibWebRTC.md

To recompile libwebrtc we need to finish this PR , https://github.com/cordova-rtc/cordova-plugin-iosrtc/pull/366, has @myhhx said it's lot of work.

This comment provide lot of insight in what we need to do:

This comment is also a great solutions:
"Using SFSafariViewController is actually using safari's webrtc implementation.
In other words, your js application code can be run on safari without changing it.
At this time, it has nothing to do with cordova-plugin-iosrtc."
We need to consider it.

Thank you @myhhx

I'm still working on version 5.0.2, once I'm done I'm going to start working on version 6.0.x with iOS 13 and libwebrtc update.

@EternallLight Could you try this branch

Note you need to setup the build manually cause the hook fail:

Let me know if that fix iOS 13 build. @banditdevelopment mentioned to me he did build successfully on iOS 13 in the past.

@hthetiot
I've tested the branch you suggested both on iOS 13 Beta and iOS 13 Release and can confirm that it is working. And yes, I added #import "cordova-plugin-iosrtc-Bridging-Header.h" to the bridging header manually because it wasn't there after removing and adding the platform.
Thank you very much for working on this issue!
Can I use this branch for my project as a temporary solution or is there something you need to fix before?

Can I use this branch for my project as a temporary solution or is there something you need to fix before?

This branch is still a work in progress, is has many many changes and new features.
But I generally will try to keep it stable.

@myhhx we confirmed using recent webrtc-lib in PR https://github.com/cordova-rtc/cordova-plugin-iosrtc/pull/385#issue-317821094 does fixe the iOS 13 issues so fare.
Feel free to test using instructions.

Thank you @EternallLight for testing, Will notify of #385 changes here.

@hthetiot thanks for the update

Hi, can someone help me.
Install this plugin via capacitor and have error:
'AppKit/NSOpenGLView.h' file not found (RTCNSGLVideoView.h line 32)
when try to build project in Xcode

Version 5.0.3

@Qwedir wrong issue create another please and no we don't support capacitor

@smanuel this are experimental feature of version 6.0.0, if the function are missing it's because you did not properly remove and add iOS platform. Alternatively you pass selectAudioOutput("earpiece") or selectAudioOutput("speaker").

Too both of you @Qwedir and @smanuel stop poluting issue with unrelated topics if you continue your comments will be deleted.

The topic here is iOS 13 support, not capacitor not experimental non documented features.

@EternallLight I found why the hook what not called on Xcode 11, it's related to cordova-ios they fixed it on 5.0.1 see PR https://github.com/cordova-rtc/cordova-plugin-iosrtc/pull/376#issuecomment-535863756

To fix it localy simply do that

cordova platform remove cordova-ios
cordova platform add cordova-ios@latest

Also confirming commit 33e35d2 fixes outgoing video on iOS 13. But had to change deviceIDs used for front and back camera.

@pethessa please fill a separate issue, I will look into a fix before 5.0.4 release

i use this liowebrtc for our app, but there's no getUserMedia with ios wkwebview.

https://github.com/lazorfuzz/react-liowebrtc

so i install cordova-plugin-iosrtc to make getUserMedia working but the rest still use liowebrtc.

patching liowebrtc

if (device.platform === 'iOS') {
      if (!navigator.mediaDevices) {
        navigator.mediaDevices = {};
        navigator.mediaDevices.getUserMedia = cordova.plugins.iosrtc.getUserMedia;
      }
    }

its working fine on ios 12, but after testing on 13

the console print
TypeError: undefined is not an object (evaluating 'this.pc.addStream.bind')

@crapthings please make sure you actually have the issue with the topic of the issue or create another issue, I'm getting tired of people using the open first issue to report their specific problem unrelated to the issue and will start to delete unrelated comment if that continue.

Secondly you need to use cordova.plugins.iosrtc.registerGlobals() to expose the WebRTC SHIM that not new #RTFM, next addStream will be deprecated in favor of addTrack and your issue look unrelated to not only iOS 13, an finally no where in we do thid.pc.addStream.bind meaning your using iosRTC not only with WebRTC adapter but you are not exposing the SHIM with registerGlobals as you should have done if you actually had read the documentation or examples.

Stop reporting unrelated issue on the first opened issue, I will start to ignore and delete this comments if people don't make an effort on this behavior

@pethessa @crapthings @Qwedir You should respect other on this community and read the actual topic of the issue instead of reporting your personal problem on the first issue, you are wasting precious time and are making yourself look lamers by posting comments that are unrelated and simply create noise on an issue that was getting in the right directions, unless you change behavior your future comments will be deleted.

@hthetiot I totally agree with keeping issues focused and not introducing new bug reports in these comments. The other two comments you reference would be better moved to new issues.

However, we had (and likely many others have) spent significant time troubleshooting iosrtc for iOS 13 so I felt it was important to confirm to you and followers of this thread that someone else had confirmed it fixed. It was absolutely relevant to mention I had to change deviceIds as this was NOT a drop in fix for us. --In fact, I think it would have been misleading not to mention it had been required in our app.

And now to go really off topic, thanks for your leadership on this project. It was greatly needed and has breathed new life into the module.

Feel free to delete this whole post after reading, as ironically it's also not related to the issue.

@pethessa your issue had nothing to do with iOS 13, it's a change in the order of the array since 5.0.2 that should be handled by the developper normally as apple or any platform may change the order themselves (issue #392), see this comment for the fix to help people that don't sort the devices by labels that will be released on 5.0.4 outside of iOS 13 related fixes https://github.com/cordova-rtc/cordova-plugin-iosrtc/issues/392#issuecomment-536497520

@hthetiot May I ask when you plan to make this fix with updated libwebrtc available to install? I just installed #master, but this bug still exists on iOS 13.1.2 (iPhone 7, iPhone XS). It would be great if you could provide even temporary solution to fix it before you publish 6.0.0. Thanks!

@abardik To test iOS 13+ support you can use the task/libwebrtc-update branch like that that use M54 and that as been confirm to solve iOS 13+ support.

cordova plugin remove cordova-plugin-iosrtc --verbose
cordova plugin add https://github.com/cordova-rtc/cordova-plugin-iosrtc#task/libwebrtc-update --verbose
cordova platform remove ios --no-save
cordova platform add ios --no-save

OR in your case with Phonegap build.

    <plugin name="cordova-plugin-iosrtc" spec="https://github.com/cordova-rtc/cordova-plugin-iosrtc#task/libwebrtc-update" />

I'm in the process of going from WebRTC M54 to M69 it will take time as there is lot of changes and a new WebRTC build processs, I may release WebRTC M54 as part of 5.1.x once rtcDTMFSender restored in order to accelerate iOS 13+ support but M69 will be part of 6.0.x for sure.

Keep an eye on https://github.com/cordova-rtc/cordova-plugin-iosrtc/pull/385

@hthetiot Unfortunately, there is one error when building #task/libwebrtc-update on Phonegap Build:

/project/InRemote/Plugins/cordova-plugin-iosrtc/PluginRTCAudioOutputController.swift:70:41: error: 'setCategory' is unavailable in Swift
                                try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playAndRecord)
                                                                    ^~~~~~~~~~~
AVFoundation.AVAudioSession:23:15: note: 'setCategory' has been explicitly marked unavailable here
    open func setCategory(_ category: AVAudioSession.Category) throws
              ^

I use the same config as for 5.0.2+:

<preference name="swift-version" value="4.2"/>
<preference name="deployment-target" value="10.2"/>

How about WebRTC 69 Support with Renderer Canvas Capture also included ?

Can you test this PR with M69 to confirm it works on iOS 13+ ?
cc @pethessa @EternallLight @myhhx @abardik

@hthetiot #399 (8db4bc) compiles on Xcode 11.0 and runs on iOS 13.1.2 for me. I'm only testing basic connection, video & audio as we use. Haven't tried any of the canvas capture.

Thank you @pethessa

@abardik Stop reporting false positive here, or talking about fork, you are out of topic again (Xcode 11 and iOS 13 target is the topic) and making false assumption and comments that are unrelated and misleading to others despite you thinking they are relevant they are absolutely not.
I already asked you to stop 2 times.

  1. You are not using XCode 11 or even Xcode 10.3 when you use phonegap build that use and old version of Xcode 10.1
  2. You are not targeting ios 13 itself you building for 10.2 and running on 13 that different
  3. You are not triggering the hook properly and using another plugin that may create conflict and do not fully configure the project properly.

A simple google of the error, is proving that the Xcode on phonegap build do not match requirements, your issue is your environnent see "Issue is fixed in Xcode 10.2.", minimun Xcode is 10.3 for iosrtc.

Phonegap build use Xcode 10.1

Note: Any future misleading comment on this issue will be deleted without notice.

Only version 6.0.0 will officialy support iOS 13 and Xcode 11 once released.

@pethessa you can find sample for canvas API here for version 6.0.0:

You can get the reference to the video element renderer using HTMLVideoElement.render then use save function with callback (Me change to promise soon).

var ctx = canvasEl.getContext("2d");
  canvasEl.style.position = 'absolute';
  canvasEl.style.left = 0;
  canvasEl.style.bottom = 0;
  appContainer.appendChild(canvasEl);
  var image = new Image();
  image.addEventListener('load', function() {
    canvasEl.width = image.width;
    canvasEl.height = image.height;
    ctx.drawImage(image, 0, 0);
  });
  videoEl.render.save(function (data) {
    image.src = "data:image/jpg;base64," + data;
  });

I will documents new APIs for Audio and Canvas in the 6.0.0 documentation later, here is a preview from M69 PR #399 only.

cordova.plugins.iosrtc.turnOnSpeaker(true);
cordova.plugins.iosrtc.selectAudioOutput('speaker');
cordova.plugins.iosrtc.selectAudioOutput('earpiece');
cordova.plugins.iosrtc.requestPermission(true, true, function (result) {
    console.log('requestPermission.result', result);
});

I think M69 is ready for iOS 13, I tested many WebRTC third party library and even fixed know WebRTC implementation issues and the closed of all legacy issues if not most of them and implemented all features request at once (Yes Even Canvas support for video) via #399 PR (About 6K lines changed) this will be release for 6.0.0 next week while #402 and #404 will be part of 5.0.5 maintenance release that will not include iOS 13 support officialy (it does work partiatly actually) and both 5.0.5 changes will be merged on 6.0.0 also.

Note: I'm going to fix audio issue for AirPlay support and start updating libwebrtc and API documention tomorrow.

@pethessa @EternallLight Can you test #399 b47a8dc.

@hthetiot

I've just checked the _task/libwebrtc-update-m69-optional-peer-constraints_ branch, it's working for me

@EternallLight That has been merged into main branch task/libwebrtc-update-m69 thank you for testing.

I am testing task/libwebrtc-update-m69 and task/libwebrtc-update-m69-optional-peer-constraints branches over iOS 13.1.2, XCode 11.1(11A1027) and webrtc-adapter 6.4.8 and I have problems with the outgoing video. My third party library is janus.js

2019-10-11 10:44:18.609736+0200 MyApp[1307:415275] iosrtcPlugin#enumerateDevices()
2019-10-11 10:44:18.609959+0200 MyApp[1307:415513] PluginEnumerateDevices#call()
2019-10-11 10:44:18.700589+0200 MyApp[1307:415513] - device [uniqueID:'com.apple.avfoundation.avcapturedevice.built-in_video:0', localizedName:'Back Camera', facing:back, audio:false, video:true, connected:true]
2019-10-11 10:44:18.700686+0200 MyApp[1307:415513] - device [uniqueID:'com.apple.avfoundation.avcapturedevice.built-in_video:1', localizedName:'Front Camera', facing:front, audio:false, video:true, connected:true]
DEVICES =>  {
    devices =     {
        "Built-In Microphone" =         {
            deviceId = "Built-In Microphone";
            groupId = "";
            kind = audioinput;
            label = "iPhone Micr\U00f3fono";
        };
        "com.apple.avfoundation.avcapturedevice.built-in_video:0" =         {
            deviceId = "com.apple.avfoundation.avcapturedevice.built-in_video:0";
            groupId = "";
            kind = videoinput;
            label = "Back Camera";
        };
        "com.apple.avfoundation.avcapturedevice.built-in_video:1" =         {

            deviceId = "com.apple.avfoundation.avcapturedevice.built-in_video:1";
            groupId = "";
            kind = videoinput;
            label = "Front Camera";
        };
    };
}
2019-10-11 10:44:18.706773+0200 MyApp[1307:415275] iosrtcPlugin#getUserMedia()
2019-10-11 10:44:18.706857+0200 MyApp[1307:415275] PluginGetUserMedia#call()
2019-10-11 10:44:18.706943+0200 MyApp[1307:415275] PluginGetUserMedia#call() | video authorization: authorized
2019-10-11 10:44:18.706983+0200 MyApp[1307:415275] PluginGetUserMedia#call() | audio authorization: authorized
2019-10-11 10:44:18.707199+0200 MyApp[1307:415275] PluginGetUserMedia#call() | chosen video constraints: {
}
2019-10-11 10:44:18.708522+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#contraints width:0/0, height:00, aspectRatio: 0.0000000, frameRateRanges:0.000000/0.000000
2019-10-11 10:44:18.708606+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:192, height:144, aspectRatio: 1.333333, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.708643+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:192, height:144, aspectRatio: 1.333333, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.708816+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:352, height:288, aspectRatio: 1.222222, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.708857+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:352, height:288, aspectRatio: 1.222222, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.708999+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:480, height:360, aspectRatio: 1.333333, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.709154+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:480, height:360, aspectRatio: 1.333333, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.709457+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:640, height:480, aspectRatio: 1.333333, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.709493+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:640, height:480, aspectRatio: 1.333333, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.709524+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:640, height:480, aspectRatio: 1.333333, frameRateRanges:2.000000/60.000000
2019-10-11 10:44:18.709553+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:640, height:480, aspectRatio: 1.333333, frameRateRanges:2.000000/60.000000
2019-10-11 10:44:18.709583+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:960, height:540, aspectRatio: 1.777778, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.711286+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:960, height:540, aspectRatio: 1.777778, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.711574+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:1024, height:768, aspectRatio: 1.333333, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.711743+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:1024, height:768, aspectRatio: 1.333333, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.711798+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:1280, height:720, aspectRatio: 1.777778, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.711837+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:1280, height:720, aspectRatio: 1.777778, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.712177+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:1280, height:720, aspectRatio: 1.777778, frameRateRanges:2.000000/60.000000
2019-10-11 10:44:18.712574+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:1280, height:720, aspectRatio: 1.777778, frameRateRanges:2.000000/60.000000
2019-10-11 10:44:18.712635+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:1440, height:1080, aspectRatio: 1.333333, frameRateRanges:2.000000/60.000000
2019-10-11 10:44:18.712803+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:1440, height:1080, aspectRatio: 1.333333, frameRateRanges:2.000000/60.000000
2019-10-11 10:44:18.713063+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:1920, height:1080, aspectRatio: 1.777778, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.713270+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:1920, height:1080, aspectRatio: 1.777778, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.713428+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:1920, height:1440, aspectRatio: 1.333333, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.713479+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:1920, height:1440, aspectRatio: 1.333333, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.713520+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:3088, height:2320, aspectRatio: 1.331035, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.713587+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#format width:3088, height:2320, aspectRatio: 1.331035, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.713673+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#selectFormatForDevice width:3088, height:2320, aspectRatio: 1.331035, frameRateRanges:2.000000/30.000000
2019-10-11 10:44:18.713897+0200 MyApp[1307:415275] PluginRTCVideoCaptureController#startCapture Capture started, device:<AVCaptureFigVideoDevice: 0x118b193e0 [Front Camera][com.apple.avfoundation.avcapturedevice.built-in_video:1]>, format:<AVCaptureDeviceFormat: 0x2831613e0 'vide'/'420f' 3088x2320, { 2- 30 fps}, fov:54.201, max zoom:145.00 (upscales @1.00), ISO:23.0-2208.0, SS:0.000013-0.500000, supports wide color>
2019-10-11 10:44:18.716520+0200 MyApp[1307:415275] PluginGetUserMedia#call() | audio requested
2019-10-11 10:44:18.716740+0200 MyApp[1307:415275] PluginMediaStream#init()
2019-10-11 10:44:18.716794+0200 MyApp[1307:415275] PluginMediaStreamTrack#init()
2019-10-11 10:44:18.717057+0200 MyApp[1307:415275] PluginMediaStreamTrack#run() [kind:audio, id:E3C7C496-217B-4F14-A4DB-39197763C3AC]
2019-10-11 10:44:18.717136+0200 MyApp[1307:415275] PluginMediaStreamTrack#init()
2019-10-11 10:44:18.717372+0200 MyApp[1307:415275] PluginMediaStreamTrack#run() [kind:video, id:BCC0D3BF-8886-46BF-B177-BFC951C56E47]
2019-10-11 10:44:18.717407+0200 MyApp[1307:415275] PluginMediaStream#run()
2019-10-11 10:44:18.717788+0200 MyApp[1307:415275] THREAD WARNING: ['iosrtcPlugin'] took '11.029053' ms. Plugin should use a background thread.
2019-10-11 10:44:18.779311+0200 MyApp[1307:415275] iosrtcPlugin#MediaStream_setListener()
2019-10-11 10:44:18.779411+0200 MyApp[1307:415275] iosrtcPlugin#MediaStreamTrack_setListener()
2019-10-11 10:44:18.779428+0200 MyApp[1307:415513] PluginMediaStream#setListener()
2019-10-11 10:44:18.779454+0200 MyApp[1307:415275] iosrtcPlugin#MediaStreamTrack_setListener()
2019-10-11 10:44:18.779482+0200 MyApp[1307:415513] PluginMediaStreamTrack#setListener() [kind:audio, id:E3C7C496-217B-4F14-A4DB-39197763C3AC]
2019-10-11 10:44:18.779496+0200 MyApp[1307:415275] iosrtcPlugin#new_RTCPeerConnection()
2019-10-11 10:44:18.779517+0200 MyApp[1307:415513] PluginMediaStreamTrack#setListener() [kind:video, id:BCC0D3BF-8886-46BF-B177-BFC951C56E47]
2019-10-11 10:44:18.779531+0200 MyApp[1307:415275] PluginRTCPeerConnection#init()
2019-10-11 10:44:18.779844+0200 MyApp[1307:415275] PluginRTCPeerConnectionConfig#init()
2019-10-11 10:44:18.779970+0200 MyApp[1307:415275] PluginRTCPeerConnectionConstraints#init()
2019-10-11 10:44:18.780157+0200 MyApp[1307:415275] PluginRTCPeerConnectionConstraints#init() | [mandatoryConstraints:{
}, optionalConstraints:{
    DtlsSrtpKeyAgreement = 1;
}]
2019-10-11 10:44:18.780206+0200 MyApp[1307:415275] PluginRTCPeerConnection#run()
2019-10-11 10:44:18.780231+0200 MyApp[1307:415275] PluginRTCPeerConnectionConfig#getConfiguration()
2019-10-11 10:44:18.780254+0200 MyApp[1307:415275] PluginRTCPeerConnectionConstraints#getConstraints()
2019-10-11 10:44:18.781342+0200 MyApp[1307:415275] PluginMediaStream#init()
2019-10-11 10:44:18.781413+0200 MyApp[1307:415275] PluginMediaStream#run()
2019-10-11 10:44:18.781454+0200 MyApp[1307:415275] iosrtcPlugin#MediaStream_setListener()
2019-10-11 10:44:18.781510+0200 MyApp[1307:415275] iosrtcPlugin#RTCPeerConnection_addStream()
2019-10-11 10:44:18.781512+0200 MyApp[1307:415513] PluginMediaStream#setListener()
2019-10-11 10:44:18.781556+0200 MyApp[1307:415513] PluginRTCPeerConnection#addStream()
2019-10-11 10:44:18.781566+0200 MyApp[1307:415275] iosrtcPlugin#MediaStream_addTrack()
2019-10-11 10:44:18.781843+0200 MyApp[1307:415275] iosrtcPlugin#RTCPeerConnection_createOffer()
2019-10-11 10:44:18.781921+0200 MyApp[1307:415275] iosrtcPlugin#new_MediaStreamRenderer()
2019-10-11 10:44:18.781973+0200 MyApp[1307:415275] PluginMediaStreamRenderer#init()
2019-10-11 10:44:18.782604+0200 MyApp[1307:415490] PluginRTCPeerConnection | onnegotiationeeded
2019-10-11 10:44:18.800802+0200 MyApp[1307:415513] PluginMediaStream#addTrack()
2019-10-11 10:44:18.801624+0200 MyApp[1307:415490] PluginRTCPeerConnection | onnegotiationeeded
2019-10-11 10:44:18.801976+0200 MyApp[1307:415513] PluginMediaStream#addTrack() | audio track added
2019-10-11 10:44:18.802060+0200 MyApp[1307:415513] PluginRTCPeerConnection#addTrack()
2019-10-11 10:44:18.802396+0200 MyApp[1307:415513] PluginRTCPeerConnection#createOffer()
2019-10-11 10:44:18.802708+0200 MyApp[1307:415513] PluginRTCPeerConnectionConstraints#init()
2019-10-11 10:44:18.802912+0200 MyApp[1307:415513] PluginRTCPeerConnectionConstraints#init() | [mandatoryConstraints:{
    OfferToReceiveAudio = false;
    OfferToReceiveVideo = false;
}, optionalConstraints:{
}]
2019-10-11 10:44:18.802984+0200 MyApp[1307:415513] PluginRTCPeerConnectionConstraints#getConstraints()
2019-10-11 10:44:18.804399+0200 MyApp[1307:415513] PluginRTCPeerConnectionConstraints#deinit()
2019-10-11 10:44:18.805802+0200 MyApp[1307:415490] PluginRTCPeerConnection#createOffer() | success callback
2019-10-11 10:44:18.816686+0200 MyApp[1307:415275] PluginMediaStreamRenderer#run()
2019-10-11 10:44:18.816774+0200 MyApp[1307:415275] THREAD WARNING: ['iosrtcPlugin'] took '34.856201' ms. Plugin should use a background thread.
2019-10-11 10:44:18.816868+0200 MyApp[1307:415275] iosrtcPlugin#MediaStreamRenderer_refresh()
2019-10-11 10:44:18.816965+0200 MyApp[1307:415275] PluginMediaStreamRenderer#refresh() [elementLeft:0.0, elementTop:0.0, elementWidth:0.0, elementHeight:0.0, videoViewWidth:0.0, videoViewHeight:0.0, visible:false, opacity:1.0, zIndex:-1.0, mirrored:false, clip:true, borderRadius:0.0]
2019-10-11 10:44:18.817094+0200 MyApp[1307:415275] iosrtcPlugin#MediaStreamRenderer_render()
2019-10-11 10:44:18.817132+0200 MyApp[1307:415275] PluginMediaStreamRenderer#render()
2019-10-11 10:44:18.819071+0200 MyApp[1307:415275] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
    (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x28103bed0 h=--& v=--& UIView:0x103c7df90.width == 0   (active)>",
    "<NSAutoresizingMaskLayoutConstraint:0x28103b930 h=-&- v=-&- UIWebView:0x103c0f8b0.minX == 0   (active, names: '|':UIView:0x103c0e5f0 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x281039450 h=-&- v=-&- H:[UIWebView:0x103c0f8b0]-(0)-|   (active, names: '|':UIView:0x103c0e5f0 )>",
    "<NSLayoutConstraint:0x281029fe0 UIView:0x103c7df90.right == UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide'.right   (active)>",
    "<NSLayoutConstraint:0x281029e00 UIView:0x103c7df90.left == UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide'.left   (active)>",
    "<NSLayoutConstraint:0x2810380f0 'UIView-Encapsulated-Layout-Width' UIView:0x103c0e5f0.width == 375   (active)>",
    "<NSLayoutConstraint:0x281028ff0 'UIViewSafeAreaLayoutGuide-left' H:|-(0)-[UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide'](LTR)   (active, names: '|':UIWebView:0x103c0f8b0 )>",
    "<NSLayoutConstraint:0x281029310 'UIViewSafeAreaLayoutGuide-right' H:[UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide']-(0)-|(LTR)   (active, names: '|':UIWebView:0x103c0f8b0 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x281029fe0 UIView:0x103c7df90.right == UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide'.right   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
2019-10-11 10:44:18.819896+0200 MyApp[1307:415275] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
    (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x2810396d0 h=--& v=--& UIView:0x103c7df90.height == 0   (active)>",
    "<NSAutoresizingMaskLayoutConstraint:0x28103bac0 h=-&- v=-&- UIWebView:0x103c0f8b0.minY == 0   (active, names: '|':UIView:0x103c0e5f0 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x28103bbb0 h=-&- v=-&- V:[UIWebView:0x103c0f8b0]-(0)-|   (active, names: '|':UIView:0x103c0e5f0 )>",
    "<NSLayoutConstraint:0x281029220 UIView:0x103c7df90.top == UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide'.top   (active)>",
    "<NSLayoutConstraint:0x2810299a0 UIView:0x103c7df90.bottom == UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide'.bottom   (active)>",
    "<NSLayoutConstraint:0x281039f40 'UIView-Encapsulated-Layout-Height' UIView:0x103c0e5f0.height == 667   (active)>",
    "<NSLayoutConstraint:0x281028d20 'UIViewSafeAreaLayoutGuide-bottom' V:[UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide']-(0)-|   (active, names: '|':UIWebView:0x103c0f8b0 )>",
    "<NSLayoutConstraint:0x2810392c0 'UIViewSafeAreaLayoutGuide-top' V:|-(0)-[UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide']   (active, names: '|':UIWebView:0x103c0f8b0 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x2810299a0 UIView:0x103c7df90.bottom == UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide'.bottom   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
2019-10-11 10:44:18.830312+0200 MyApp[1307:415275] iosrtcPlugin#RTCPeerConnection_setLocalDescription()
2019-10-11 10:44:18.830433+0200 MyApp[1307:415275] iosrtcPlugin#MediaStreamRenderer_close()
2019-10-11 10:44:18.830472+0200 MyApp[1307:415275] PluginMediaStreamRenderer#close()
2019-10-11 10:44:18.830516+0200 MyApp[1307:415275] PluginMediaStreamRenderer#reset()
2019-10-11 10:44:18.830563+0200 MyApp[1307:415513] PluginRTCPeerConnection#setLocalDescription()
2019-10-11 10:44:18.830944+0200 MyApp[1307:415275] iosrtcPlugin#new_MediaStreamRenderer()
2019-10-11 10:44:18.831009+0200 MyApp[1307:415275] PluginMediaStreamRenderer#init()
2019-10-11 10:44:18.833228+0200 MyApp[1307:415275] PluginMediaStreamRenderer#run()
2019-10-11 10:44:18.833330+0200 MyApp[1307:415275] iosrtcPlugin#MediaStreamRenderer_refresh()
2019-10-11 10:44:18.833443+0200 MyApp[1307:415275] PluginMediaStreamRenderer#refresh() [elementLeft:0.0, elementTop:0.0, elementWidth:0.0, elementHeight:0.0, videoViewWidth:0.0, videoViewHeight:0.0, visible:false, opacity:1.0, zIndex:-1.0, mirrored:false, clip:true, borderRadius:0.0]
2019-10-11 10:44:18.833532+0200 MyApp[1307:415275] iosrtcPlugin#MediaStreamRenderer_render()
2019-10-11 10:44:18.833599+0200 MyApp[1307:415275] PluginMediaStreamRenderer#render()
2019-10-11 10:44:18.834105+0200 MyApp[1307:415490] PluginRTCPeerConnection | onsignalingstatechange [signalingState:Optional("have-local-offer")]
2019-10-11 10:44:18.834626+0200 MyApp[1307:415275] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
    (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x281010690 h=--& v=--& UIView:0x118b43bb0.width == 0   (active)>",
    "<NSAutoresizingMaskLayoutConstraint:0x28103b930 h=-&- v=-&- UIWebView:0x103c0f8b0.minX == 0   (active, names: '|':UIView:0x103c0e5f0 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x281039450 h=-&- v=-&- H:[UIWebView:0x103c0f8b0]-(0)-|   (active, names: '|':UIView:0x103c0e5f0 )>",
    "<NSLayoutConstraint:0x2810149b0 UIView:0x118b43bb0.right == UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide'.right   (active)>",
    "<NSLayoutConstraint:0x281014960 UIView:0x118b43bb0.left == UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide'.left   (active)>",
    "<NSLayoutConstraint:0x2810380f0 'UIView-Encapsulated-Layout-Width' UIView:0x103c0e5f0.width == 375   (active)>",
    "<NSLayoutConstraint:0x281028ff0 'UIViewSafeAreaLayoutGuide-left' H:|-(0)-[UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide'](LTR)   (active, names: '|':UIWebView:0x103c0f8b0 )>",
    "<NSLayoutConstraint:0x281029310 'UIViewSafeAreaLayoutGuide-right' H:[UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide']-(0)-|(LTR)   (active, names: '|':UIWebView:0x103c0f8b0 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x2810149b0 UIView:0x118b43bb0.right == UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide'.right   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
2019-10-11 10:44:18.835294+0200 MyApp[1307:415275] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
    (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x28103bac0 h=-&- v=-&- UIWebView:0x103c0f8b0.minY == 0   (active, names: '|':UIView:0x103c0e5f0 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x28103bbb0 h=-&- v=-&- V:[UIWebView:0x103c0f8b0]-(0)-|   (active, names: '|':UIView:0x103c0e5f0 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x2810105f0 h=--& v=--& UIView:0x118b43bb0.height == 0   (active)>",
    "<NSLayoutConstraint:0x2810148c0 UIView:0x118b43bb0.top == UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide'.top   (active)>",
    "<NSLayoutConstraint:0x281014910 UIView:0x118b43bb0.bottom == UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide'.bottom   (active)>",
    "<NSLayoutConstraint:0x281039f40 'UIView-Encapsulated-Layout-Height' UIView:0x103c0e5f0.height == 667   (active)>",
    "<NSLayoutConstraint:0x281028d20 'UIViewSafeAreaLayoutGuide-bottom' V:[UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide']-(0)-|   (active, names: '|':UIWebView:0x103c0f8b0 )>",
    "<NSLayoutConstraint:0x2810392c0 'UIViewSafeAreaLayoutGuide-top' V:|-(0)-[UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide']   (active, names: '|':UIWebView:0x103c0f8b0 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x281014910 UIView:0x118b43bb0.bottom == UILayoutGuide:0x280a7e5a0'UIViewSafeAreaLayoutGuide'.bottom   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
2019-10-11 10:44:18.840186+0200 MyApp[1307:415490] PluginRTCPeerConnection#setLocalDescription() | success callback
2019-10-11 10:44:18.840771+0200 MyApp[1307:415490] PluginRTCPeerConnection | onicegatheringstatechange [iceGatheringState:Optional("gathering")]
2019-10-11 10:44:18.841796+0200 MyApp[1307:415490] PluginRTCPeerConnection | onicecandidate [sdpMid:audio, sdpMLineIndex:0, candidate:candidate:1493399139 1 udp 2122260223 192.168.1.12 55614 typ host generation 0 ufrag UayC network-id 1 network-cost 10]
2019-10-11 10:44:18.947042+0200 MyApp[1307:415490] PluginRTCPeerConnection | onicecandidate [sdpMid:audio, sdpMLineIndex:0, candidate:candidate:394300051 1 tcp 1518280447 192.168.1.12 56767 typ host tcptype passive generation 0 ufrag UayC network-id 1 network-cost 10]
2019-10-11 10:44:18.947517+0200 MyApp[1307:415490] PluginRTCPeerConnection | onicegatheringstatechange [iceGatheringState:Optional("complete")]
2019-10-11 10:44:18.997378+0200 MyApp[1307:415275] iosrtcPlugin#RTCPeerConnection_setRemoteDescription()
2019-10-11 10:44:18.997506+0200 MyApp[1307:415916] PluginRTCPeerConnection#setRemoteDescription()
2019-10-11 10:44:18.999512+0200 MyApp[1307:415490] PluginRTCPeerConnection | onsignalingstatechange [signalingState:Optional("stable")]
2019-10-11 10:44:19.002267+0200 MyApp[1307:415490] PluginRTCPeerConnection | oniceconnectionstatechange [iceConnectionState:Optional("checking")]
2019-10-11 10:44:19.002587+0200 MyApp[1307:415490] PluginRTCPeerConnection#setRemoteDescription() | success callback
2019-10-11 10:44:19.179569+0200 MyApp[1307:415490] PluginRTCPeerConnection | oniceconnectionstatechange [iceConnectionState:Optional("connected")]
2019-10-11 10:44:19.180437+0200 MyApp[1307:415490] PluginRTCPeerConnection | oniceconnectionstatechange [iceConnectionState:Optional("completed")]
2019-10-11 10:44:19.182296+0200 MyApp[1307:415275] PluginMediaStreamRenderer | video size changed [width:2320.0, height:3088.0]
2019-10-11 10:44:19.240647+0200 MyApp[1307:415275] iosrtcPlugin#MediaStreamRenderer_refresh()
2019-10-11 10:44:19.240772+0200 MyApp[1307:415275] PluginMediaStreamRenderer#refresh() [elementLeft:0.0, elementTop:0.0, elementWidth:375.0, elementHeight:667.0, videoViewWidth:501.1139896373057, videoViewHeight:667.0, visible:true, opacity:1.0, zIndex:-1.0, mirrored:false, clip:true, borderRadius:0.0]
2019-10-11 10:44:19.603269+0200 MyApp[1307:415491] Audio device route changed!

@oscarvadillog

I am testing task/libwebrtc-update-m69 and task/libwebrtc-update-m69-optional-peer-constraints

task/libwebrtc-update-m69-optional-peer-constraints is merged in task/libwebrtc-update-m69 not need to make separate test anymore.

I have problems with the outgoing video.
2019-10-11 10:44:18.707199+0200 MyApp[1307:415275] PluginGetUserMedia#call() | chosen video constraints: {}

Can you describe your problem in more details, please. Like video is not sent, etc....
Also please update your web-adapter to 7.3.0 before comming back here.

Finally, this branch has been tested with many third party library and server (JsSIP, FreeSWICTH, etc..) it is most likelely and issue related to janus itself, please create separate issue with Janus and M69 in the title and I will try to assist you. Can you also try master to see if that a regression or an issue that was also present in 5.x, that would help a lot.

Note: "Will attempt to recover by breaking constraint" is not related and will not cause issue.

@oscarvadillog That might not help....

    OfferToReceiveAudio = false;
    OfferToReceiveVideo = false;

Also in the logs we only see audio track added not video track added meaning no video track is actually added to the PeerConnection...

You should have this logs entry if the video track was properly added:

PluginMediaStream#addTrack() | video track added

You should do something like this:

  // Note: Deprecated but supported
  //pc1.addStream(localStream);

  // Add local stream tracks to RTCPeerConnection
  localStream.getTracks().forEach(function (track) {
    console.log('addTrack', track);
    pc1.addTrack(track);
  });

Please create an issue for futher assistance, look to me the issue if WebRTC usage here.

@hthetiot are you planning to merge task/libwebrtc-update-m69 into master?

@oscarvadillog Only after 5.0.5 is released https://github.com/cordova-rtc/cordova-plugin-iosrtc/blob/master/CHANGELOG.md#version-505 and only once unified plan branch validated https://github.com/cordova-rtc/cordova-plugin-iosrtc/pull/407 and remaining tasks on https://github.com/cordova-rtc/cordova-plugin-iosrtc/pull/399 are close and tested/reviewed by the community like @cah-dunn

Newbie question here, apologies if the answer is stated somewhere else.

I'm working on a POC , using IONIC and trying to get WebRTC working so that we don't have to go to the React Native route. Our app is a video collaboration tool.

Which branch can I use to test WebRTC? Using IOS 13 and Xcode 11A1027.

Thanks in advance!

Jessee

@jesseer9

I'm working on a POC , using IONIC and trying to get WebRTC working so that we don't have to go to the React Native route. Our app is a video collaboration tool.

You may want to try to use #master (5b32d7108ea029b1b9c85a5ebd91b6025c725b1f this at date contains incoming 5.0.5) that will be released next, there is some know issue using 13 iOS with local freezing video on orientation changes and for some other no local video for some people.

This is being fixed via the branch for 6.0.x that contains a new unpatched WebRTC.framework M69 version via #399 aka #task/libwebrtc-update-m69 while depending that is your WebRTC and signaling solutions on use you may want to try #407 #task/libwebrtc-update-m69-unified-plan that is also M69 but with UnifiedPlan by default.

Travis does build and ionic build on every commit on Xcode11 branch Xcode 10.2 should be supported

Quick update #407 look pretty stable I think. (Thanks @oscarvadillog that tested Janus.js)

  • 757c36c72df553b69403ed423994584b7e665be6

@jesseer9
If you looking for basic WebRTC samples usage, I suggest

@oscarvadillog

@hthetiot are you planning to merge task/libwebrtc-update-m69 into master?

Now ca067c07404225f4ff5310f30ad60f4308cfc3d2

That is fast! Thanks @hthetiot !

My demo is using capacitor (and cocoapods) and having trouble compiling. Trying to figure if I need to bridge headers. Haven't had any luck finding documentation on mix and matching from both.

Jessee

@jesseer9
See https://github.com/cordova-rtc/cordova-plugin-iosrtc/issues/398 Other Section

Please do not comment on an open or closed issue out of topic problems, you will annoy me and the original reporter and confuse the resolution of the issue, this not the right way to get help. Instead create a new issue and I will help you as I have proven past weeks.

No we have no plan to support capacitor, if capacitor want to support cordova plugin they have to do it the right way, PR are welcome anyway.

See https://github.com/cordova-rtc/cordova-plugin-iosrtc/blob/master/docs/Building.md#building-steps

@hthetiot I'd be willing to take a stab, if I can find some documentation :)

Jessee

Please do not comment on an open or closed issue out of topic problems,

I will only close that issue aka #375 via master with https://github.com/cordova-rtc/cordova-plugin-iosrtc/blob/master/CHANGELOG.md#version-600

if @EternallLight @myhhx @cah-dunn @pethessa confirm it's fix iOS 13 and Xcode 11, I will close and release master (cd1a545a5bdbc6afec50713068833433dc89a1b7) as 6.0.0

I will make an issue Announcement] cordova-plugin-iosrtc Version 6.0.x notes like for 5.0.x (https://github.com/cordova-rtc/cordova-plugin-iosrtc/issues/398) but we need original reporters confirm and testing this

  • Cordova version: 8.1.2
  • cordova-ios: 4.5.5
  • Plugin version: 6.0.0 (master branch)
  • iOS version: 13.1.2
  • Xcode version: 11.1(11A1027)
  • webrtc-adapter: 7.3.0

@hthetiot I've been testing for about 3 days on iPad Pro, iPad Mini 4, and iPhone 11 Pro. The only difference is that I've been on [email protected] but I can bump that down for a few tests if needed. I might suggest we remove that 500ms interval call to refreshVideos() unless we still think it's needed for some reason. Otherwise, LGTM.

Thanks again for all of the time and effort!

I might suggest we remove that 500ms interval call to refreshVideos() unless we still think it's needed for some reason. Otherwise, LGTM.

@cah-dunn Done

I plan to release 6.0.0 in next 72 hours but I need help to test iOS 13 on real device, I have only an iPhone 6 and iPad Mini 3 both not eligible to iOS 13, I would need confirmation that master is ok on iOS 13 on real device that would help me. If you need VP8 you can try #416 if you need Unified Plan test #407, I plan to merge this 2 on 6.0.0 potential depending the demand of the community.

I would need confirmation that master is ok on iOS 13 on real device that would help me

I've got iPhone 7 which is a little newer :) Will test the master branch once 6.0.0 is released

Tested the latest master.
Had a call between iOS and Web Chrome.
At both sides we use 'lib-jitsi-meet'

iOS local video works fine, I can see it at both sides iOS & Chrome

But, have an issue with remote video stream from Chrome - it's simply a black video element is displayed

Our test case:

  1. setup audio call between iOS & Chome
  2. Enable video at Chrome side

In Xcode logs I can see the following after enabled a video stream at Chrome side:

2019-10-28 11:15:16.798468+0200 VideoTalkApp[454:47307] iosrtcPlugin#RTCPeerConnection_setRemoteDescription()
2019-10-28 11:15:16.798615+0200 VideoTalkApp[454:47555] PluginRTCPeerConnection#setRemoteDescription()
2019-10-28 11:15:16.800422+0200 VideoTalkApp[454:47524] PluginRTCPeerConnection | onsignalingstatechange [signalingState:Optional("have-remote-offer")]
2019-10-28 11:15:16.802469+0200 VideoTalkApp[454:47307] onsignalingstatechange have-remote-offer
2019-10-28 11:15:16.802549+0200 VideoTalkApp[454:47524] PluginRTCPeerConnection | onaddtrack
2019-10-28 11:15:16.802622+0200 VideoTalkApp[454:47524] PluginMediaStreamTrack#init()
2019-10-28 11:15:16.802734+0200 VideoTalkApp[454:47524] PluginMediaStreamTrack#deinit()
2019-10-28 11:15:16.802802+0200 VideoTalkApp[454:47524] PluginRTCPeerConnection | onaddstream
2019-10-28 11:15:16.802844+0200 VideoTalkApp[454:47524] PluginMediaStream#init()
2019-10-28 11:15:16.802894+0200 VideoTalkApp[454:47524] PluginMediaStreamTrack#init()
2019-10-28 11:15:16.802965+0200 VideoTalkApp[454:47524] PluginMediaStreamTrack#run() [kind:video, id:bec6b68b-ca43-4e72-a61d-8f8181326cd8-3]
2019-10-28 11:15:16.803033+0200 VideoTalkApp[454:47524] PluginMediaStream#run()
2019-10-28 11:15:16.803369+0200 VideoTalkApp[454:47524] PluginRTCPeerConnection#setRemoteDescription() | success callback
2019-10-28 11:15:16.805217+0200 VideoTalkApp[454:47307] iosrtcPlugin#MediaStream_setListener()
2019-10-28 11:15:16.805357+0200 VideoTalkApp[454:47307] iosrtcPlugin#MediaStreamTrack_setListener()
2019-10-28 11:15:16.805395+0200 VideoTalkApp[454:47555] PluginMediaStream#setListener()
2019-10-28 11:15:16.805564+0200 VideoTalkApp[454:47555] PluginMediaStreamTrack#setListener() [kind:video, id:bec6b68b-ca43-4e72-a61d-8f8181326cd8-3]
2019-10-28 11:15:16.805812+0200 VideoTalkApp[454:47307] setRemoteDescriptionOnSuccess
2019-10-28 11:15:16.806350+0200 VideoTalkApp[454:47307] iosrtcPlugin#RTCPeerConnection_createAnswer()
2019-10-28 11:15:16.806456+0200 VideoTalkApp[454:47883] PluginRTCPeerConnection#createAnswer()
2019-10-28 11:15:16.806528+0200 VideoTalkApp[454:47883] PluginRTCPeerConnectionConstraints#init()
2019-10-28 11:15:16.806627+0200 VideoTalkApp[454:47883] PluginRTCPeerConnectionConstraints#init() | [mandatoryConstraints:{
    OfferToReceiveAudio = true;
    OfferToReceiveVideo = true;
}, optionalConstraints:{
}]
2019-10-28 11:15:16.806684+0200 VideoTalkApp[454:47883] PluginRTCPeerConnectionConstraints#getConstraints()
2019-10-28 11:15:16.807071+0200 VideoTalkApp[454:47883] PluginRTCPeerConnectionConstraints#deinit()
2019-10-28 11:15:16.807150+0200 VideoTalkApp[454:47524] PluginRTCPeerConnection#createAnswer() | success callback
2019-10-28 11:15:16.811744+0200 VideoTalkApp[454:47307] iosrtcPlugin#RTCPeerConnection_setLocalDescription()
2019-10-28 11:15:16.811870+0200 VideoTalkApp[454:47883] PluginRTCPeerConnection#setLocalDescription()
2019-10-28 11:15:16.812355+0200 VideoTalkApp[454:47524] PluginRTCPeerConnection | onsignalingstatechange [signalingState:Optional("stable")]
2019-10-28 11:15:16.813066+0200 VideoTalkApp[454:47307] onsignalingstatechange stable
2019-10-28 11:15:16.813491+0200 VideoTalkApp[454:47524] PluginRTCPeerConnection#setLocalDescription() | success callback
2019-10-28 11:15:17.109846+0200 VideoTalkApp[454:47307] TPC[1,p2p:false] remote track added: 2ca9fc0b-977f-4875-9a4d-8b61c6e5cecc-3 video
2019-10-28 11:15:17.112307+0200 VideoTalkApp[454:47307] TPC[1,p2p:false] associated ssrc bf32cb05 567217713
2019-10-28 11:15:17.705576+0200 VideoTalkApp[454:47307] iosrtcPlugin#new_MediaStreamRenderer()
2019-10-28 11:15:17.705667+0200 VideoTalkApp[454:47307] PluginMediaStreamRenderer#init()
2019-10-28 11:15:17.898807+0200 VideoTalkApp[454:47524] PluginRTCDataChannel | utf8 message received
2019-10-28 11:15:17.906376+0200 VideoTalkApp[454:47307] Metal GPU Frame Capture Enabled
2019-10-28 11:15:17.907015+0200 VideoTalkApp[454:47307] Metal API Validation Enabled
2019-10-28 11:15:18.105387+0200 VideoTalkApp[454:47524] PluginRTCDataChannel | utf8 message received
2019-10-28 11:15:18.328860+0200 VideoTalkApp[454:47307] PluginMediaStreamRenderer#run()
2019-10-28 11:15:18.329245+0200 VideoTalkApp[454:47307] THREAD WARNING: ['iosrtcPlugin'] took '623.668213' ms. Plugin should use a background thread.
2019-10-28 11:15:18.330060+0200 VideoTalkApp[454:47307] iosrtcPlugin#MediaStreamRenderer_refresh()
2019-10-28 11:15:18.330437+0200 VideoTalkApp[454:47307] PluginMediaStreamRenderer#refresh() [elementLeft:125.0, elementTop:652.0, elementWidth:100.0, elementHeight:100.0, videoViewWidth:100.0, videoViewHeight:100.0, visible:true, opacity:1.0, zIndex:0.0, mirrored:false, clip:true, borderRadius:0.0]
2019-10-28 11:15:18.331062+0200 VideoTalkApp[454:47307] iosrtcPlugin#MediaStreamRenderer_render()
2019-10-28 11:15:18.331322+0200 VideoTalkApp[454:47307] PluginMediaStreamRenderer#render()
2019-10-28 11:15:18.331844+0200 VideoTalkApp[454:47307] (TIME) Render video:     51128
2019-10-28 11:15:18.332217+0200 VideoTalkApp[454:47307] (TIME) TTFM video:   47810
2019-10-28 11:15:18.332572+0200 VideoTalkApp[454:47307] iosrtcPlugin#new_MediaStreamRenderer()
2019-10-28 11:15:18.332844+0200 VideoTalkApp[454:47307] PluginMediaStreamRenderer#init()
2019-10-28 11:15:18.338289+0200 VideoTalkApp[454:47307] PluginMediaStreamRenderer#run()
2019-10-28 11:15:18.338547+0200 VideoTalkApp[454:47307] iosrtcPlugin#MediaStreamRenderer_refresh()
2019-10-28 11:15:18.338655+0200 VideoTalkApp[454:47307] PluginMediaStreamRenderer#refresh() [elementLeft:0.0, elementTop:103.0, elementWidth:414.0, elementHeight:537.0, videoViewWidth:414.0, videoViewHeight:537.0, visible:true, opacity:1.0, zIndex:0.0, mirrored:false, clip:true, borderRadius:0.0]
2019-10-28 11:15:18.338864+0200 VideoTalkApp[454:47307] iosrtcPlugin#MediaStreamRenderer_render()
2019-10-28 11:15:18.338911+0200 VideoTalkApp[454:47307] PluginMediaStreamRenderer#render()
2019-10-28 11:15:18.339636+0200 VideoTalkApp[454:47307] iosrtcPlugin#RTCPeerConnection_RTCDataChannel_sendString()
2019-10-28 11:15:18.339701+0200 VideoTalkApp[454:47307] iosrtcPlugin#RTCPeerConnection_getStats()
2019-10-28 11:15:18.339751+0200 VideoTalkApp[454:47307] iosrtcPlugin#enumerateDevices()
2019-10-28 11:15:18.339754+0200 VideoTalkApp[454:47883] PluginRTCPeerConnection#RTCDataChannel_sendString()
2019-10-28 11:15:18.339930+0200 VideoTalkApp[454:47307] Failed to bind EAGLDrawable: <CAEAGLLayer: 0x2832b31a0> to GL_RENDERBUFFER 1
2019-10-28 11:15:18.339960+0200 VideoTalkApp[454:47307] Failed to make complete framebuffer object 8cd6
2019-10-28 11:15:18.340231+0200 VideoTalkApp[454:47307] Failed to bind EAGLDrawable: <CAEAGLLayer: 0x2832bb900> to GL_RENDERBUFFER 1
2019-10-28 11:15:18.340253+0200 VideoTalkApp[454:47307] Failed to make complete framebuffer object 8cd6
2019-10-28 11:15:18.340490+0200 VideoTalkApp[454:47883] PluginRTCDataChannel#sendString()
2019-10-28 11:15:18.341009+0200 VideoTalkApp[454:47883] PluginRTCPeerConnection#getStats()
2019-10-28 11:15:18.341029+0200 VideoTalkApp[454:47307] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
    (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x281198a00 h=--& v=--& UIView:0x107ec7cd0.minX == 125   (active, names: '|':WKWebView:0x108012a00'Unread (3)' )>",
    "<NSAutoresizingMaskLayoutConstraint:0x281198a50 h=--& v=--& UIView:0x107ec7cd0.width == 100   (active)>",
    "<NSAutoresizingMaskLayoutConstraint:0x281198cd0 h=-&- v=-&- WKWebView:0x108012a00'Unread (3)'.minX == 0   (active, names: '|':UIView:0x10b202cc0 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x281198d20 h=-&- v=-&- H:[WKWebView:0x108012a00'Unread (3)']-(0)-|   (active, names: '|':UIView:0x10b202cc0 )>",
    "<NSLayoutConstraint:0x281180f50 UIView:0x107ec7cd0.right == UILayoutGuide:0x280bfc000'UIViewSafeAreaLayoutGuide'.right   (active)>",
    "<NSLayoutConstraint:0x281198e10 'UIView-Encapsulated-Layout-Width' UIView:0x10b202cc0.width == 414   (active)>",
    "<NSLayoutConstraint:0x281180b40 'UIViewSafeAreaLayoutGuide-right' H:[UILayoutGuide:0x280bfc000'UIViewSafeAreaLayoutGuide']-(0)-|(LTR)   (active, names: '|':WKWebView:0x108012a00'Unread (3)' )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x281180f50 UIView:0x107ec7cd0.right == UILayoutGuide:0x280bfc000'UIViewSafeAreaLayoutGuide'.right   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
2019-10-28 11:15:18.341513+0200 VideoTalkApp[454:47307] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
    (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x281198aa0 h=--& v=--& UIView:0x107ec7cd0.minY == 652   (active, names: '|':WKWebView:0x108012a00'Unread (3)' )>",
    "<NSAutoresizingMaskLayoutConstraint:0x281198af0 h=--& v=--& UIView:0x107ec7cd0.height == 100   (active)>",
    "<NSAutoresizingMaskLayoutConstraint:0x281198d70 h=-&- v=-&- WKWebView:0x108012a00'Unread (3)'.minY == 44   (active, names: '|':UIView:0x10b202cc0 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x281198dc0 h=-&- v=-&- V:[WKWebView:0x108012a00'Unread (3)']-(0)-|   (active, names: '|':UIView:0x10b202cc0 )>",
    "<NSLayoutConstraint:0x281180d70 UIView:0x107ec7cd0.bottom == UILayoutGuide:0x280bfc000'UIViewSafeAreaLayoutGuide'.bottom   (active)>",
    "<NSLayoutConstraint:0x281198e60 'UIView-Encapsulated-Layout-Height' UIView:0x10b202cc0.height == 896   (active)>",
    "<NSLayoutConstraint:0x281180af0 'UIViewSafeAreaLayoutGuide-bottom' V:[UILayoutGuide:0x280bfc000'UIViewSafeAreaLayoutGuide']-(34)-|   (active, names: '|':WKWebView:0x108012a00'Unread (3)' )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x281180d70 UIView:0x107ec7cd0.bottom == UILayoutGuide:0x280bfc000'UIViewSafeAreaLayoutGuide'.bottom   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
2019-10-28 11:15:18.341836+0200 VideoTalkApp[454:47307] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
    (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x281198aa0 h=--& v=--& UIView:0x107ec7cd0.minY == 652   (active, names: '|':WKWebView:0x108012a00'Unread (3)' )>",
    "<NSLayoutConstraint:0x281180d20 UIView:0x107ec7cd0.top == UILayoutGuide:0x280bfc000'UIViewSafeAreaLayoutGuide'.top   (active)>",
    "<NSLayoutConstraint:0x281180a50 'UIViewSafeAreaLayoutGuide-top' V:|-(0)-[UILayoutGuide:0x280bfc000'UIViewSafeAreaLayoutGuide']   (active, names: '|':WKWebView:0x108012a00'Unread (3)' )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x281180d20 UIView:0x107ec7cd0.top == UILayoutGuide:0x280bfc000'UIViewSafeAreaLayoutGuide'.top   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
2019-10-28 11:15:18.342009+0200 VideoTalkApp[454:47883] PluginEnumerateDevices#call()
2019-10-28 11:15:18.342162+0200 VideoTalkApp[454:47307] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
    (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x281198a00 h=--& v=--& UIView:0x107ec7cd0.minX == 125   (active, names: '|':WKWebView:0x108012a00'Unread (3)' )>",
    "<NSLayoutConstraint:0x281180eb0 UIView:0x107ec7cd0.left == UILayoutGuide:0x280bfc000'UIViewSafeAreaLayoutGuide'.left   (active)>",
    "<NSLayoutConstraint:0x281180aa0 'UIViewSafeAreaLayoutGuide-left' H:|-(0)-[UILayoutGuide:0x280bfc000'UIViewSafeAreaLayoutGuide'](LTR)   (active, names: '|':WKWebView:0x108012a00'Unread (3)' )>"
)

I think the issue relates to

 Failed to bind EAGLDrawable: <CAEAGLLayer: 0x2832b31a0> to GL_RENDERBUFFER 1
 Failed to make complete framebuffer object 8cd6

Is there any advice re this ?

@DaveLomber Try #416 see "Testing" section in the PR description.
I do not reproduce this issue even without #416
Do you know if you force codec ?
What version of Chrome are you using ?
What version of iOS are you using?
Also Chrome do not support video resultion 1080x960 can you try with GetUserMedia with specific resolution (See #419 for fix)

iOS local video works fine, I can see it at both sides iOS & Chrome
VS
But, have an issue with remote video stream from Chrome - it's simply a black video element is displayed

What do you mean by "iOS local video works fine, I can see it at both sides iOS & Chrome" and "have an issue with remote video stream from Chrome " this is contradictory, do you even have a TURN server stup ? Please create dedicated issue, the this is getting out of topic.

Thanks, I will try the mentioned branch

Do you know if you force codec ?

we do no force it, use default logic

What version of Chrome are you using ?

OS X, 77 ver

Also Chrome do not support video resultion 1080x960 can you try with GetUserMedia with specific resolution (See #419 for fix)

We simply use:

constraints: {
        video: {
          height: {
            ideal: 240,
            min: 180,
            max: 480
          }
        }
      }

I upgraded to the master branch cause we got an issue with iOS 13.
Previously with iOS 12 our current code worked well

@EternallLight did you had time to test iOS 13 ?

@hthetiot Yes, I tested with the test script you provided on a clear Ionic app – it worked ok in both portrait and landscape modes.
Unfortunately, I had issues with integrating the latest version of the plugin with our main app. We have multiple app extensions and have to handle custom changes in cordova build scripts – otherwise it'd add the WebRTC framework to the extension target. Once I get it working, I'll let you know if there are other issues remaining.

@DaveLomber ideal+min+max is not supported yet, see WIP #419

constraints: {
        video: {
          height: {
            ideal: 240,
            min: 180,
            max: 480
          }
        }
      }

Will result in video: {min: 240, max: 240}, 240 do not match any available resolution on iOS.

Try this first:

constraints: {
        video: {
          width: 640,
          height: 480
        }
      }

@EternallLight I do not have any issues with local iOS stream, it is displayed well, even with these constrains
The issue we face is with remote video stream from Chrome - it's black at iOS side.
Do you think by changing this constraints at Chrome side can help make it displayable at iOS side?

@DaveLomber Please create dedicated issue. I do not reproduce this issue.
The main reason this issue exist is for "Rendering local stream on iOS 13", you are getting out of topic.

Also you are using MCU/SFU (jitsi) that can be the reason "Real" peer to peer do not have this problem. Also do you use TURN ?

I do not have any issues with local iOS stream, it is displayed well, even with these constrains

Yes on master but currently fail on #419 prior update

We have multiple app extensions and have to handle custom changes in cordova build scripts

@EternallLight Can you fill a separate issue, the hook is supose to handle multiple extensions.
See https://github.com/cordova-rtc/cordova-plugin-iosrtc/blob/master/extra/hooks/iosrtc-swift-support.js#L202

I'm closing for now since @EternallLight said it's ok and he is the original reporter.

PLEASE ONLY COMMENT if pure iOS 13 issue and you do Peer To Peer only (No MCU/SFU here see #416 for MCU/SFU janus/jisti and co.)

@hthetiot I can confirm as well that a local video stream started working well under iOS 13 with the master branch

Re constraints - I think either jitsi-lib or adapter.js converts it into supported format, so hence no issues with it at my side

Re remote video stream is showing as black square - will file a separated issue

Thank you 👍

@hthetiot
The initial issue has been solved. Thank you very much for your help!
Regarding the hook, I'll do some additional debugging and file an issue as you suggested

@hthetiot btw, not sure what's changed
but this MR fixed my issue https://github.com/cordova-rtc/cordova-plugin-iosrtc/pull/416
So I can finally see a remote Chrome video stream at iOS side 🥇

@DaveLomber VP8 and VP9 support if you use jisti you do MCU/SFU make sure to mention it when you give feedback. (This PR with VP8 support was made for Janus support, will be merge soon)

Was this page helpful?
0 / 5 - 0 ratings