Closed ibc closed 5 years ago
good news~
I am willing to participate in the effort of maintaining this plugin. I do, however, use only a part of WebRTC functionality in my projects. Handling video on iOS is something I don't currently do and developing/testing video related issues is something I am unlikely to have time for. For that reason additional people are needed.
We are using this plugin to allow developers to implement video applications using OpenVidu in Ionic4 in iOS. We can test video related features in ionic4 applications.
@jjahifi we can help you to maintain the project, but we have no experience with native iOS development and with cordova plugin development. Said that, we can help you in testing activities.
@ibc @saghul guys do you have a ballpark idea how much time it is for somebody working full time on this just to update it so that it works with the latest Xcode/ iOS/adapter.js (see this https://groups.google.com/forum/#!topic/cordova-plugin-iosrtc/T0pPCV46p9w)? Are we talking about days, weeks or months? Do you know anybody who would consider paid work contract to do it? We have two production applications depending on this plugin.
Thanks a bunch!
I'd say it a week of work. Alas I don't know who you could talk to.
@krneticz in our team we could try to update it. Please send me a private to openvidu [at] gmail.com for details
Hi Micael, do you mean also maintaining the full project?
Note that upgrading libwebrtc is not enough. The exposed API must be modernized to transceivers, etc.
@micaelgallego I will be happy to participate in the maintenance effort if your team can take the main responsibility. But, as I wrote earlier, I use only a part of the WebRTC api.
We don't have any experience with iOS development and it can be very difficult for us to improve this library.
If someone else leads the process, we can help to test it.
We are currently evaluating the possibility of moving to full native on both iOS and Android. If we decide not to do that, then I am willing to take the lead. Before taking the lead I have to get some positive policy decisions from our own organisation. Before those decisions I am unable to commit myself. I can promise participation before those decisions, but taking over is something else.
I'll try to get those decisions done as soon as possible.
Hi guys, thanks for your replies. Although there is people interested in helping here, the project obviously needs a leader (or team) that can deal with every aspect of the lib, including audio, video, new WebRTC API, iOS related stuff, etc.
We have decided to stay with Cordova for some time at least. Hence we have interest in keeping this library usable and up-to-date.
I have looked at the implementation of the library and upgrading/maintaining it does not look too complicated. Hence I am willing to participate in the effort. Unfortunately my interests are quite strictly limited to those WebRTC features we are using. In addition, I have not yet received permission to take responsibility on the whole library (company policy etc, you know).
In other words, other people would be required in addition to me. And that is supposing that I will get the permission to take the lead.
As previous comments, unlikely to be able to lead the project, but am certainly up for contributing. Am using this in a cordova project, and will need to support this for some time..
Anyone with experience with Swift? I can support in the JavaScript side. An update of the Swift version would be nice... come guys!
I have finally got the permission to take an active maintainer/lead role. There are, however, some caveats.
In other words: I can start maintaining this, but I will not be able to do it without help from others.
Thanks for volunteering @jjahifi ! Some thoughts:
* The time I can use for this is limited. Fast reactions should not be expected.
Understandable!
* I am not familiar with some of the tools used (we use other tools in-house), which makes some things a bit slow in the beginning.
Can you elaborate on the tools? We don't use anything exotic here IIRC.
* **Contributions from others are absolutely necessary!** I am unlikely to develop or test code for features we are not using. Without contributions some features of the full API are likely to break.
Sure, nobody expect a single person to fix all problems, but your second stement is unacceptable. which it's undertandable that areas you are using get more attention, breaking APIs or otherwise working code is not acceptable.
* If we decide to go for full native on iOS, then I will have to withdraw from maintaining this plugin.
Understandable!
Cheers,
Ah, bad wording from my part. What I intended to write is something like that an API may break without any action from my part, but due to changes in tools or in iOS. The most common reason that comes to mind is that Apple changes something in iOS or in Xcode and the code of the plugin requires corrective action. If the change is in something that we do not use, then such a change may break an API, but I may not even recognise the problem. This has happened before and is actually quite likely.
Understood, thanks for the clarification!
In that case, feel free to start sending PRs and as soon as a couple land we'll give you the commit bit.
@ibc How about we create a "dev" branch where all this new work goes and merge back to master and release once it's ready?
"dev" branch created.
@ibc wrote back in January,
Note that upgrading libwebrtc is not enough. The exposed API must be modernized to transceivers, etc.
I've been researching this for a client of mine. Would it be better to replace the libwebrtc static lib with the dynamic library from the native build process at https://webrtc.org/native-code/ios/ ? Building the static lib seems not to be documented, and blog articles describing the process are several years old. Presumably the dynamic lib would expose the same headers, so it would then be just a case of updating the plugin to match any API changes since the last libwebrtc build? Have you any insight into this? Would it still be better to update the static lib do you think?
Would it be better to replace the libwebrtc static lib with the dynamic library from the native build process at https://webrtc.org/native-code/ios/ ?
Probably, but this issue is about looking for maintainers.
Sure, apologies.
I originally wanted to simply fork via GitHub repo and use cordova plugin spec attribute with fix for Xcode 10.2 Swift 4.2 requirement provided via @albanonm (https://github.com/BasqueVoIPMafia/cordova-plugin-iosrtc/pull/356) but cordova plugin spec did not work on all cordova/npm version or platform, even without "git+http" and using "http://github..." in package.json and confix.xml it still ended up causing issues.
So, I ended up having to publishing an NPM package to get the fix out, I added couple of changes including Travis for iOS cordova/ionic using Xcode 10.2 and other minors changes. Any contribution welcome.
npm uninstall cordova-plugin-iosrtc --save
ionic cordova plugin remove cordova-plugin-iosrtc
ionic cordova plugin add https://github.com/simplyrtc/cordova-plugin-iosrtc.git
ionic cordova platform remove ios
ionic cordova platform add ios
Resulting into
Unable to load PlatformApi from platform. Error: Cannot find module 'cordova/exec'
Error: Unhandled "error" event. (The platform "cordova-plugin-iosrtc" does not appear to be a valid cordova platform. It is missing API.js. cordova-plugin-iosrtc not supported.)
[ERROR] Exception:
The command "ionic cordova platform add $CORDOVA_PLATFORM" exited with 1.
ionic cordova plugin remove cordova-plugin-iosrtc
ionic cordova plugin add cordova-plugin-iosrtc-simplyrtc
Then building using xcode 10.2 result in:
Processing settings for platform: ios
--save flag or autosave detected
Saving ios@~4.5.5 into config.xml file ...
iosrtc-swift-support.js [INFO] ".pbxproj" project file found: /home/me/platforms/ios/myApp.xcodeproj/project.pbxproj
iosrtc-swift-support.js [INFO] ".xcconfig" project file found: /home/me/platforms/ios/cordova/build.xcconfig
iosrtc-swift-support.js [INFO] fixing issues in the generated project files:
iosrtc-swift-support.js [INFO] - "Runpath Search Paths" to: "@executable_path/Frameworks"
iosrtc-swift-support.js [INFO] - "Objective-C Bridging Header" to: "myApp/Plugins/cordova-plugin-iosrtc/cordova-plugin-iosrtc-Bridging-Header.h"
iosrtc-swift-support.js [INFO] - "ENABLE_BITCODE" set to: "NO"
iosrtc-swift-support.js [INFO] - "SWIFT_VERSION" set to: "4.2"
iosrtc-swift-support.js [INFO] file correctly fixed: /home/me/platforms/ios/cordova/build.xcconfig
iosrtc-swift-support.js [INFO] file correctly fixed: /home/me/platforms/ios/myApp.xcodeproj/project.pbxproj
@albanonm if you want admin on npm and github for cordova-plugin-iosrtc-simplyrtc or any other Same for @ibc @saghul, but I think they looking for others to help here.
More info:
I don't think this is getting any success, am I wrong?
Looks like @hthetiot did the work, right?
It seems that I cannot live to my promise on maintaining this. Too much other work. Therefore I would definitely like somebody else having the main responsibility. I am likely to be a bit busy in the near future also. Therefore hthetiot or somebody else is likely to be a better maintainer.
I am sorry for this, but sometimes you cannot influence your employers priorities.
@hthetiot Hey there! Looks likeyou've doing some good work. Care to send a PR?
@saghul sure I can do that, but will it be merge? I don't like make PR that stay open. It prevent me to sleep :)
@ibc @saghul would you consider moving this repository to non-profit affiliated Github organisation such as https://github.com/simplyrtc if I decide to maintain it. I could have forked to a for-profit such as Sylaps or other company I work for in the space but it's not the way I see open-source.
For example Priologic refuse to make EasyRTC non-profit affiliated despite them not contributing or maintaining it since Sep 8, 2017, that why I dont support it anymore and they also refuse to provide NPM and Github full access. I would grant NPM and Github admin back of course to you also if you do that.
Here is the changes in a PR with v5.0.0 ready @saghul, please consider request above.
If you enable travis-ci.org on BasqueVoIPMafia you will also get a nice continuous integration.
I took a quick look and everything looks ok, thanks! I'll enable travis tonight.
As for the location, I don't have a strong preference TBH, but just FYI "BasqueVoIPMafia" is not a for profit organization of any sort, it's just us, a bunch of mates.
@ibc WDYT?
"BasqueVoIPMafia" is not a for profit organization of any sort
Works for me then.
Let me know if you interested for me to maintains this repository, I would need to be able to manage Github issues and release on NPM in order do to that overtime.
I really like to keep someone around from the original team to peer review before releases/merge major changes, I would definitely try to follow @ibc TODO listed here overtime https://github.com/BasqueVoIPMafia/cordova-plugin-iosrtc/issues/353#issue-390679954
I did a PR with following changes #363 Thank you @saghul for review.
#### Version 5.0.0
* Convert syntax to Swift 4.2 (#356) credit to @albanonm
* Uncomment, and fix, onGetStatsCallback closure (#305) credit to @iFeli
* Update NPM dependencies
* Add Travis build (Ionic, Cordova, Browser, Android, iOS Xcode 10.2) (https://travis-ci.org/simplyrtc/cordova-plugin-iosrtc-simplyrtc)
* Fix gulp browserify caused by old vinyl package version
* Migrate from jscs to eslint to fix vulnerabilities reported by npm audit
Here is my next tasks I would do next if I become officially maintainer.
LOOKING FOR NEW MAINTAINERS
notice.cc @ibc
P.S I love JsSIP (and FreeSWITCH :)
Sounds like a good plan! I'll take another look tomorrow and merge. Thanks a lot for your work!
Hi Harold, amazing work. BTW @saghul is doing a great job modernizing the JS API exposed by react-native-webrtc (moving from old stream based API to senders/receivers and transceivers, etc). You may want to take a look to his recent changes in order to modernize cordova-plugin-iosrtc if you wish.
@hthetiot may I know your NPM username?
This repo has been moved to https://github.com/cordova-rtc/cordova-plugin-iosrtc. @hthetiot you have been invited to that organization.
So:
$ git remote set-url origin git@github.com:cordova-rtc/cordova-plugin-iosrtc.git
I need your NPM username (to grant you NPM admin access in the package) and also your Google account to give you admin access to the cordova-plugin-iosrtc mailing list.
My NPM username is hthetiot
also :) I will make a pre-release on old iosrtc-simplyrtc
fork npm to be sure it works properly.
Thank you @ibc for trusting me with your project, it mean a lot coming from you.
I will look into react-native-webrtc and make a PR soon, I already have experience with ChromiumEmbedded build for OBS ;) I may try to make Travis build WebRTC I like having continuous integration.
I will review and tag existing issues also this week.
Note: travis-ci.org request for cordova-rtc
sent to owner (via GitHub Application Setting)
Cc @saghul
Thanks @hthetiot. Sorry, I forgot to add you as admin. I accepted Travic-ci in the meanwhile.
Also added to NPM so you should be able to publish now.
Thanks a lot!
Let’s close this then!
v5.0.0 has been released, thank you to all for warm welcome.
I have tagged all the issues, started libwebrtc update via rebase of
Happy RTC to all.
Any update on "addTransceiver" support? I was trying to use this plugin with mediasoup v3 and it fails on that.
@hnlpower do you think a closed issue, that as nothing to do with your topic is the best way to ask this question?
This kind of feature will require libwebrtc upgrade, that is planned for version 6.
Either way there is alternative to this addTransceiver if you know how to use WebRTC API.
Please create proper issue if you want this to be properly reported. Improper issue will be closed, be assured to describe the API and their usage if you want the feature request be properly handled.
@hnlpower do you think a closed issue, that as nothing to do with your topic is the best way to ask this question?
This kind of feature will require libwebrtc upgrade, that is planned for version 6.
Either way there is alternative to this addTransceiver if you know how to use WebRTC API.
Please create proper issue if you want this to be properly reported. Improper issue will be closed, be assured to describe the API and their usage if you want the feature request be properly handled.
Thank you so much @hthetiot , you saved my day! Thanks a lot for giving alternate solution
It is obvious that both @saghul and @ibc, maintainers of the cordova-plugin-iosrtc, no longer contribute to this project. We no longer use it professionally, we have other projects to maintain and the lack of time makes it impossible for us to participate in this project anymore.
So we are looking for new maintainers for cordova-plugin-iosrtc.
TODO
Here a list of tasks that IMHO this project needs to accomplish with:
Use the latest
libwebrtc
code.JS: Remove callback based API (it's from 2014) and just use the new promise based API (currently both are implemented, but the code looks a bit hard to maintain this way).
JS: Remove the the super-old-and-deprecated WebRTC stream-based API (
pc.addStream()
,pc.removeStream()
,pc.getRemoteStreams()
,pc.onaddstream
, etc). Instead modernize the exposed API to just deal with tracks and the new transceiver based API (pc.addTransceiver()
,transceiver.sender.replaceTrack()
, etc).JS: Modernize the code to be more ES6 friendly (use arrow functions,
const
andlet
instead ofvar
, avoidvar self = this
, etc).Update NPM dependencies. There are many that are super old (such as the
debug
module) and must be updated to avoid some well known vulnerabilities.Modernize Swift code to whichever the current stable/official version is.
When rendering audio/video into a HTML
<video>
element, make it possible to usevideoElem.srcObject = stream
beingstream
aMediaStream
generated by the plugin (viagetUserMedia()
or a locally generated stream (const stream = new MediaStream([ track1, track2... ]);
).MediaStream
objects generated by the plugin can be consumed by the app to render audio/video. The app should be able to create aMediaStream
instance, append tracks into it, and render it within a<video>
element.Other thoughts
cordova-plugin-iosrtc is supposed to provide a WebRTC 1.0 API for Cordova apps. This means that the plugin must not make assumptions or hardcode stuff just because "it works for my use case ©" (and personally I've seen many of them in some PRs).
Whether this plugin should also expose an API to select with iOS mic input and speaker output is unclear for me. Ideally, this should be achieved by the app which may even use another Cordova plugin for switching the audio input/output. The very same for requesting mic/cam permission. IMHO that should not be part of the plugin itself (this is a library, not an app).
RTCViews
are placed on top of the HTML view, so if the page scrolls up/down/left/right, the app must move the videos by calling the corresponding exposed "refresh" API. I've seen some PRs that call such a "refresh" function every second which does not make any sense if the HTML content does not move. This is another example of "it works for my use case ©" that IMHO should be avoided.New maintainers
People interested in become project maintainers, please comment into this issue. @saghul and me will consider any proposal and make a decision ASAP, and will give the corresponding rights in both GitHub and NPM ecosystems.