Jitsi for android

Hi,
I want to use a modified version of webrtc inside android.
I’m seeing that jitsi meet for android uses react native webrtc project, but I don’t understand which implementation of webrtc it is using.
is it using the webrtc inside chrome/webview?
Thank you very much

Hi,

It’s using native WebRTC stack, currently in the M67 version. You can see a commit here which does the update:

Now the exact sources for WebRTC version we use are here on the M67 branch:

Hi,
thank you very much
could you tell me how I can compile react webrtc and how I can use it in jitsi for android?

youtube, official channel.(Mobile Tutorial)
@saghul explain about iOS and Android app, SDK

my only problem is how I can use modified webrtc in jitsi.
in libwebrtc.java I don’t see libwebrtc*.a libs.

Anyway, after building webrtc stuffs, Do I only copy all the react-native-webrtc in node modules inside jitsi-meet?

Thank you very much

The last thing:
could you tell me the required cherry-picks for the m67 branch of webrtc?
Thanks

All you need to do is build these 2 files and replace them: https://github.com/jitsi/react-native-webrtc/tree/master/android/libs

As for what version of WebRTC we are running it’s this one: https://github.com/jitsi/webrtc/tree/M67

Which is upstream M67 plus 4 custom fixes.

Out of curiosity, what changes are you making to WebRTC that you need to build it yourself?

Hi,
thanks for your info.
we are trying to change the rtc sockets with another technology. it is a preliminary study about this thing.

I noticed that the python script downloads webrtc from the chromium repository.
can I substitute the src folder “brutally” with your webrtc code?
Thank you very much
Angelo

I’m not sure you can do that. gclient will download dependencies into the webrtc tree, so as long you provide those things should work, but you are on your own, I’m afraid.

I followed the “…/react-native-webrtc/Documentation/BuildingWebRTC.md”. I used M67. Not sure if I need to use any cherry-picks for it? Any pointers? Thanks!

I suggest you use this branch as your starting point, since it’s the one we use for releases: https://github.com/jitsi/webrtc/tree/M69

So I should use “git checkout -b build-M69 refs/remotes/branch-heads/69”
for selecting the branch as per BuildingWebRTC.md? I’m very new to both jitsi and webrtc, so I may not be even asking the right questions. Thanks.

Let’s start from the beginning then: why do you need to build the WebRTC framework yourself?

I’m trying to modify the DEFAULT_WIDTH/HEIGHT/FPS for my otherwise vanilla Jitsi APK. I’ve read in this forum that the config.js is not properly being read for android apps and VideoCaptureController.java is what is being used by the apps.

I have been able to generate the “libjingle_peerconnection.so.jar” and “libwebrtc.jar” as per the docs, however, when I use the new JARs and place them in the node_modules for react-native-webrtc and do the android build, I’m getting the following error. Not updating the JARs, I can create the APK fine.

Error:

react-native run-android
info Starting JS server…
info Building and installing the app on the device (cd android && ./gradlew app:installDebug)…
Configure project :react-native-webview
:react-native-webview:reactNativeAndroidRoot /home/sarwar/jitsi-meet/node_modules/react-native/android
Task :react-native-webrtc:compileDebugJavaWithJavac FAILED
/home/sarwar/jitsi-meet/node_modules/react-native-webrtc/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java:61: error: cannot find symbol
.setEnableVideoHwAcceleration(eglContext != null)
^
symbol: method setEnableVideoHwAcceleration(boolean)
location: class Builder
/home/sarwar/jitsi-meet/node_modules/react-native-webrtc/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java:86: error: cannot find symbol
mFactory.setVideoHwAccelerationOptions(eglContext, eglContext);
^
symbol: method setVideoHwAccelerationOptions(Context,Context)
location: variable mFactory of type PeerConnectionFactory
/home/sarwar/jitsi-meet/node_modules/react-native-webrtc/android/src/main/java/com/oney/WebRTCModule/GetUserMediaImpl.java:90: error: incompatible types: VideoCapturer cannot be converted to boolean
VideoSource videoSource = pcFactory.createVideoSource(videoCapturer);
^
Note: /home/sarwar/jitsi-meet/node_modules/react-native-webrtc/android/src/main/java/com/oney/WebRTCModule/PeerConnectionObserver.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: /home/sarwar/jitsi-meet/node_modules/react-native-webrtc/android/src/main/java/com/oney/WebRTCModule/PeerConnectionObserver.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
3 errors
FAILURE: Build failed with an exception.
What went wrong:
Execution failed for task ‘:react-native-webrtc:compileDebugJavaWithJavac’.
Compilation failed; see the compiler error output for details.
Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
Get more help at https://help.gradle.org
Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use ‘–warning-mode all’ to show the individual deprecation warnings.
See https://docs.gradle.org/4.10.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD FAILED in 2s

You don’t need to recompile WebRTC for that, just react-native-webrtc. You can continue to use the already provided WebRTC binaries.

Right, that is what I have been trying to do. I’m trying to build the “libjingle_peerconnection.so.jar” and “libwebrtc.jar” and then place them inside react-native-webrtc in node_modules. The rest of the node-Modules are whatever I get using “npm install”. The problem is when I do and then try to build the apk, I’m getting the above error. Am I missing anything?

@saghul

I’m also looking to patch Jitsi WebRTC. Would like to include patch for this WebRTC issue. Enable Android and IOS to work with Proxy server.

https://bugs.chromium.org/p/webrtc/issues/detail?id=5826&q=proxy&colspec=ID%20Pri%20Stars%20M%20Component%20Status%20Owner%20Summary%20Modified

Looks like Jitsi has it’s own version of WebRTC. https://github.com/jitsi/webrtc

How do I go about building this version of WebRTC?

I found the documentation at

After running following step…

python build-webrtc.py --setup --android ~/src/

How do I go about getting the code from https://github.com/jitsi/webrtc. Should code from repo replaced with all the code ~/src/, which is from chromium repo.

Thanks for your help.

After running setup with the Python script you can go into the src directory and change the remote to match Jitsi/WebRTC at M69.

Cheers,

Thanks @saghul. Can you please confirm that these are the correct steps after running the setup with python script.

cd ~/src/build_webrtc/webrtc/ios/src/
git remote set-url origin https://github.com/jitsi/webrtc.git
git checkout M69

After this steps…i try to run the python script for build but I get errors.

python build-webrtc.py --build --ios ~/src/
Running cmd: gclient sync
Syncing projects: 66% ( 8/12) src/third_party

src/ios (ERROR)

[0:00:01] Started.

Error: 5>
5> ____ src/ios at 2222541c3d8e127712327887d749a19ede064e28
5> You have unstaged changes.
5> Please commit, stash, or reset.

Hi @saghul,

I tried few other options as well and having hard time figuring out. Found that there’s a .glient file in

cd ~/src/build_webrtc/webrtc/ios/src/

Not sure if I need to change anything in that file to change the remote to match Jitsi/WebRTC at M69. Spent an entire day to figure out how to build Jitsi / Webrtc.

Will really appreciate your guidance on this.

Cheers,
Sanjay