I have a URL that is working fine with Safari on iOS11 (Beta) Audio/Video is working fine.
But when I load this URL with WKWebView it gives me an error "Incompatible Browser" and when I check my browser version in WebKit it shows "WebKit based browser on iOS 11"
So the question really is, has Apple included this change in the WKWebview webkit (which should be the same as Safari) for the developer BETA of iOS 11?
Update: WebRTC Support is coming in iOS14.3 (Beta) 🎉
Learn more here: https://webkit.org/blog/11353/mediarecorder-api/
From iOS11+ :
WebRTC is partially supported in WKWebView, and fully supported in the Safari App browser.
Explained:
WebRTC has three main JavaScript APIs:
MediaStream (aka getUserMedia)
RTCPeerConnection
RTCDataChannel
For apps running inside Safari App, iOS11+, all WebRTC APIs are supported. That includes getUserMedia. Be sure to use adapter.js library for best compatibility, since each browser - including Safari - uses a different name for its implementation. For example, in Safari it's navigator.mediaDevices.getUserMedia().
But, when using WKWebView or SFSafariViewController, it's a different story:
Both RTCPeerConnection and RTCDataChannel are supported and working.
getUserMedia is not supported yet, for "security reasons". It most probably won't be available before the next major OS release, which would be iOS 12 in September 2018.
You can still stream video & audio from local storage or consume live media captured by a peer. Hopefully in iOS 12 we'll see some progress...
I did a bit of digging in the WebKit sources last night, and it looks like the WebRTC/MediaCapture stuff is all gated behind a preference that's only accessible via a private API. There was also a commit that mentioned something about apps needing to handle all the setup for A/V permissions.
In any case, the result is that getUserMedia doesn't work in WKWebView, even on iOS11 (beta 4, at least) :(
I've filed a radar (rdar://33571214 and http://www.openradar.me/33571214) and encourage everyone else to do the same.
I have done some tests with iOS Beta 4 and it seems that even WKWebview nor UIWebview don't support getUserMedia as a WebRTC API.
Can someone confirm this?
Related
I'm really intrigued with WebRTC and want to start building web based technologies that have access to hardware and other aspects of what a native application might have. My question is, how might I implement WebRTC into WebKit, without using High Sierra for macOS or Safari 11/Safari Preview? This goes beyond using Chrome or Firefox to test some WebRTC components. I want to be able to implement an instance of WebKit, maybe using webview in a macOS app, and include WebRTC.
Maybe even, a framework that I could use in Xcode and Swift for a macOS app or iOS app? That would be even more awesome!
What I've looked at so far:
https://webkit.org/blog/7763/a-closer-look-into-webrtc/
http://www.webrtcinwebkit.org
https://www.openwebrtc.org
https://webrtc.github.io/samples/
https://www.openwebrtc.org/bowser/
Also found this to be interesting:
http://thejackalofjavascript.com/node-webkit-webrtc-and-angularjs-a-video-chat-client/
I need to build video chat application with the option to record the video call. I think that most appropriate would be to use WebRTC, specifically Kurento. However, Safari does not support WebRTC at this moment, and the iOS client SDK's don't offer the ability to record the video. This is supported for a javascript client:
http://doc-kurento.readthedocs.io/en/stable/tutorials/java/tutorial-one2one-adv.html
So I was thinking to open a chrome browser inside my app just for the webRTC functionality. I read about Blink WebKit but I'm not sure if this is what I need.
P.S. Any other proposed solutions for the video call + recording features on an iOS app are welcome.
The simple answer is no, you can't use Chrome on IOS for webRTC. Apple for some reason don't like peer to peer technologies, and while they are rumoured to be working on it, there is no announcement yet.
There is this...
cordova-plugin-iosrtc
Cordova iOS plugin exposing the full WebRTC W3C JavaScript APIs.
Public Google Group (mailing list) for questions and discussions about
cordova-plugin-iosrtc. Bug Tracker for reporting issues and requesting
new features (please don't use the bug tracker for questions or
problems, use the mailing list instead). NPM package. Yet another
WebRTC SDK for iOS?
Absolutely not. This plugin exposes the WebRTC W3C API for Cordova iOS
apps (you know there is no WebRTC in iOS, right?), which means no need
to learn "yet another WebRTC API" and no need to use a specific
service/product/provider.
https://github.com/eface2face/cordova-plugin-iosrtc
Warning: Some assembly required
See this article for more details on the pitfalls:
http://ninjanetic.com/how-to-get-started-with-webrtc-and-ios-without-wasting-10-hours-of-your-life/
We have an offline-enabled web app that up until now has worked in both Chrome and Firefox on iOS (but not Safari).
We just tested with a new, up-to-date iPad and found that while Safari still has issues with incomplete indexedDB support Chrome and Firefox now don't operate offline at all.
Versions are iOS 9.2.1, Chrome 48.0.2564.104.
This thread seems to suggest that Chrome at least is now using WKWebView which doesn't support Application Cache.
https://bugs.chromium.org/p/chromium/issues/detail?id=582192&q=label%3AOS-iOS&colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Cr%20Status%20Owner%20Summary%20OS%20Modified
Can anyone confirm that my understanding of this is correct, ie that it's a fact that Chrome/Firefox on iOS just don't support Application Cache at all anymore, and that only Apple could change this?
Any suggestions on what we can do about it? The only thing I can think of right now is that we'll need to get the app working in Safari by using something other than indexedDB.
As you mentioned both Chrome and Firefox on iOS has issue with appCache, because both are WebKit based.
• The related bug is reported here: https://bugs.webkit.org/show_bug.cgi?id=152490
“Application cache is not supported by WKWebView, but window.applicationCache object exists! so web pages cann’t distinguish if applicationCache is not supported or it is not loaded yet.”
• http://arstechnica.com/apple/2016/01/new-chrome-for-ios-is-finally-as-fast-and-stable-as-safari/
"Chrome 48 on iOS will be as fast as Safari on iOS for the first time ever thanks to a switch from iOS ’UIWebView’ rendering engine to the ‘WKWebView’ engine”
Chrome iOS ver 48.x.x.x release date was 2016-01-27
• This version uses WKWebView, the latest rendering engine from Apple.
Instead of IndexDB you try to use localStorage to keep your data, just one of the possible suggestions.
Preface: there are questions (some good, some bad) already in existance on StackOverflow about webRTC support on various browsers and platforms, including iOS. However I couldn't find anything definitive that was more recent than ~2012, and this is a rapidly-changing field.
I'm working on a browser-based webapp that uses webRTC for minimal-latency peer-to-peer data transfer (not for audio/video, unlike most applications it would seem - all I need is DataChannel).
I hit a snag when I started testing the data-transfer part of the project and discovered that iOS devices still don't natively support this in their built-in browsers (despite some recent rumors).
Bowser is a free open-source browser App for iOS that purports to support webRTC on iOS. The problem is that when I try to open the app, it simply crashes and closes. I've tested this on an iPhone 5 and 5s. Googling has failed to turn up alternatives - even Chrome for iOS doesn't currently support webRTC it seems.
My questions:
1) Are there alternative browsers (even iOS-version restricted) that are currently supporting webRTC, or is there anything promising coming down the pipeline?
2) Does Bowser actually work (webRTC) on iOS devices where it doesn't crash immediately upon launch?
3) What strategies have other people used to work around this limitation?
As of iOS 11, WebRTC is now supported in Safari: https://developer.apple.com/library/archive/releasenotes/General/WhatsNewInSafari/Articles/Safari_11_0.html#//apple_ref/doc/uid/TP40014305-CH13-SW1
Check out crosswalk project ( https://crosswalk-project.org )
This Provides runtime of Chromium engine for native support in older devices.
1) Are there alternative browsers (even iOS-version restricted) that are currently supporting webRTC, or is there anything promising coming down the pipeline?
Answer:
There is a Browser called Bowser that supports webRTC.
2) Does Bowser actually work (webRTC) on iOS devices where it doesn't crash immediately upon launch?
Answer:
It's not crashing as of now.But I couldn't successfully test with anything so far.I have raised an issue about it
3) What strategies have other people used to work around this limitation?
Answer:
Apple is yet to support WebRTC in Webkit so as of now the only way would be develop a native or Hybrid app that would support the unsupported WebRTC APIs.
You can develop a hybrid app powered by OpenWebRTC or cordova-plugin-iosrtc
I am trying to build a audio/video streaming app that works cross platform on iOS and Android mobile devices.
No matter how deep I Google, I'm ending up with suggestions that point me towards OpenTok/TokBox API. But this is what I wish to avoid.
I've checked a few demo, but WebRTC/HTML5 do not seem to work with streaming video/audio in iOS browser. For example, the https://apprtc.appspot.com demo does not work in Safari or Opera Mini in iOS.
When I try http://dev.opera.com/articles/media-capture-in-mobile-browsers/demo/ ... I can capture image using the default iOS camera picker from my browser but streaming video fails.
It seems like the getUserMedia() stuff is not supported by any browser in iOS.
Moreover, I am planning to put this on a WebView in a native iOS app. This sounds like a really far cry.
I wish someone could point me towards something that helps me build a video streaming app (hopefully using HTML5), that works uniformly for iOS and android (without TokBox).
You might want to look into Ericsson's Bowser App http://www.ericsson.com/research-blog/context-aware-communication/bowser-openwebrtc-released-open-source. It claims to provide WebRTC on Android and IOS. Apparently the App is currently under review in the App Store so if you wait it may just be a case of downloading the App. However it's also open source so if you can't wait then you can build it yourself https://github.com/ericssonresearch/bowser.
getUserMedia and WebRTC Peer-to-peer connections APIs are not supported in iOS.
One of the reason is that at the moment efforts around WebRTC focus on VP8 video codec which Apple and Microsoft do not support natively. Support in the near future is unlikely with Microsoft pushing for its own standard.
Doing what you want on iOS requires you use a native iOS compatible solution like OpenCV which supports video capture. You can find on Google tutorials on how to implement a solution based on OpenCV.
good news, will be supported at Safari 11.0
https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Safari_11_0/Safari_11_0.html