Difference between revisions of "Porting/Zoom"

From RCS Wiki
Jump to navigation Jump to search
(Created page with "In Debian ppc64le Chromium versions as of October 2023, video fails in the [https://zoom.us/test Zoom test meeting] and in Zoom calls. The user-visible symptom is the ''Stop...")
 
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
In Debian ppc64le Chromium versions as of October 2023, video fails in the [https://zoom.us/test Zoom test meeting] and in Zoom calls. The user-visible symptom is the ''Stop Video'' spinner spins indefinitely:
+
== Problem ==
 +
In Debian ppc64le Chromium as of October 2023, video fails in the Zoom web client.  To replicate the issue, click the "Join from Your Browser" link on the [https://zoom.us/test Zoom test meeting page] (after clicking the "Join" button and dismissing the "xdg-open" pop-up).
 +
 
 +
The user-visible symptom is the ''Stop Video'' spinner spins indefinitely:
  
 
<gallery>
 
<gallery>
Screenshot_2023-10-04_09-36-21.png|Video Spinner
+
Screenshot_2023-10-04_09-36-21.png|Video Spinner Spinning
 
</gallery>
 
</gallery>
  
The Zoom JavaScript code checks the Chrome version.  If that version is less than or equal to 100.0, video works.  Read on for failure details.
+
With some user-agent string testing, I determined that the Zoom JavaScript code checks the Chrome version.  If that version is less than or equal to 100.0, video works.
  
The workaround is to modify the user-agent string to reduce the Chrome version to 100.0.0.0.  For example, copy the ''User Agent'' value from [[chrome://version|the Chromium version page]] and use Chromium's undocumented command line switch to set the user agent:
+
== Workaround ==
 +
 
 +
The workaround is to modify the user-agent string to reduce the Chrome version to 100.0.0.0.  For example, copy the ''User Agent'' value from '''chrome://version''' and use Chromium's undocumented command line switch to set the user agent:
  
 
'''chromium --user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.0.0 Safari/537.36"'''
 
'''chromium --user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.0.0 Safari/537.36"'''
  
 +
== Analysis ==
 +
 +
Here is the console log when video fails, with the Chrome version at its default 117.0.0.0: [[File:App.zoom.us-1696427386203.log]].
 +
 +
Here is the console log when video succeeds, with the Chrome version reduced to 100.0.0.0: [[File:App.zoom.us-1696427455868.log]].
  
 +
I encountered this exception while stepping through the JavaScript debugger in the failing case:
 +
 +
"Error from video decode worker: Failed to instantiate WASM <nowiki>https://st1.zoom.us/web-media/mtxkwfl/video.mtsimd.wasm</nowiki> Message: WebAssembly.instantiate(): Compiling function #7437 failed: Wasm SIMD unsupported @+1486482 Stack: CompileError: WebAssembly.instantiate(): Compiling function #7437 failed: Wasm SIMD unsupported @+1486482 Name: Error"
 +
 +
I think what is happening is: the Zoom JavaScript code checks the Chrome version, and if it is greater than 100.0.0.0, it assumes that WASM-SIMD is supported, and so tries to load the WASM version of the video library.  However, ppc64le Chromium does not have support for WASM SIMD yet.  This [https://wasm-feature-detect.surma.technology/ WASM feature detect page] shows:
 +
 +
<gallery>
 +
Screenshot_2023-10-04_10-08-04.png|WASM SIMD not supported yet on ppc64le Chromium 117.0.0.0
 +
</gallery>
 +
 +
I didn't debug further, but I suspect the failure to load this library is what results in the "Uncaught TypeError: video_set_websocket_speed is not a function".  That exception repeats and results in the video spinner spinning indefinitely.
 +
 +
== Next Steps ==
 +
 +
* ppc64le Chromium needs to implement WASM SIMD.
 +
 +
* Zoom could do a finer-grained check, perhaps the same one that https://wasm-feature-detect.surma.technology/ uses, to determine whether to load the WASM-SIMD version of the video library.
 +
 +
== Firefox ==
 +
 +
I also tested Debian ppc64le Firefox-ESR.  It hangs on the "Joining Meeting..." spinner with a JavaScript exception about r.ZP.callOutCountry.  I have a nightly version of Firefox with some in-development JIT patches from https://talospace.com that gets much farther, but then the tab crashes.  I will add Zoom to my Firefox-JIT testing list as I follow along with its development.
 +
 +
== Test Details ==
  
 
Tested October 4, 2023.  Test browser details:
 
Tested October 4, 2023.  Test browser details:
Line 27: Line 60:
 
| User Agent        || Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36
 
| User Agent        || Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36
 
|-
 
|-
| Command Line        || /usr/lib/chromium/chromium --desktop-startup-id=xfce4-panel/|usr|bin|chromium/4029293-82-orcamain_TIME851498275 --disable-nacl --disable-pings --enable-gpu-rasterization --enable-remote-extensions --load-extension --media-router=0 --no-default-browser-check --origin-trial-disabled-features=WebGPU --show-component-extension-options --restart --flag-switches-begin --flag-switches-end --disable-nacl
+
| Command Line        || /usr/lib/chromium/chromium --desktop-startup-id=xfce4-panel/,usr,bin,chromium/4029293-82-localhost_TIME851498275 --disable-nacl --disable-pings --enable-gpu-rasterization --enable-remote-extensions --load-extension --media-router=0 --no-default-browser-check --origin-trial-disabled-features=WebGPU --show-component-extension-options --restart --flag-switches-begin --flag-switches-end --disable-nacl
 
|-
 
|-
 
| Executable Path        || /usr/lib/chromium/chromium
 
| Executable Path        || /usr/lib/chromium/chromium
Line 33: Line 66:
 
| Profile Path        || ~/.config/chromium/Default
 
| Profile Path        || ~/.config/chromium/Default
 
|}
 
|}
 +
 +
== Video Quality ==
 +
 +
During a call, check the Zoom video settings.  By default, sending video is hardware accelerated (the check box is checked), but receiving video is NOT hardware accelerated for some reason (the check box is unchecked).  I checked the box, and video quality seemed to improve -- specifically, my video would not pause briefly from time-to-time.
 +
 +
== Audio Quality ==
 +
 +
I noticed that when I talk, the other participant is completely muted.  This might be something to do with my audio set up, but maybe it's generally true.  Something to be aware of, in case others may be trying to speak while you're speaking.
 +
 +
[[Category:Ports]]

Latest revision as of 17:06, 5 October 2023

Problem

In Debian ppc64le Chromium as of October 2023, video fails in the Zoom web client. To replicate the issue, click the "Join from Your Browser" link on the Zoom test meeting page (after clicking the "Join" button and dismissing the "xdg-open" pop-up).

The user-visible symptom is the Stop Video spinner spins indefinitely:

With some user-agent string testing, I determined that the Zoom JavaScript code checks the Chrome version. If that version is less than or equal to 100.0, video works.

Workaround

The workaround is to modify the user-agent string to reduce the Chrome version to 100.0.0.0. For example, copy the User Agent value from chrome://version and use Chromium's undocumented command line switch to set the user agent:

chromium --user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.0.0 Safari/537.36"

Analysis

Here is the console log when video fails, with the Chrome version at its default 117.0.0.0: File:App.zoom.us-1696427386203.log.

Here is the console log when video succeeds, with the Chrome version reduced to 100.0.0.0: File:App.zoom.us-1696427455868.log.

I encountered this exception while stepping through the JavaScript debugger in the failing case:

"Error from video decode worker: Failed to instantiate WASM https://st1.zoom.us/web-media/mtxkwfl/video.mtsimd.wasm Message: WebAssembly.instantiate(): Compiling function #7437 failed: Wasm SIMD unsupported @+1486482 Stack: CompileError: WebAssembly.instantiate(): Compiling function #7437 failed: Wasm SIMD unsupported @+1486482 Name: Error"

I think what is happening is: the Zoom JavaScript code checks the Chrome version, and if it is greater than 100.0.0.0, it assumes that WASM-SIMD is supported, and so tries to load the WASM version of the video library. However, ppc64le Chromium does not have support for WASM SIMD yet. This WASM feature detect page shows:

I didn't debug further, but I suspect the failure to load this library is what results in the "Uncaught TypeError: video_set_websocket_speed is not a function". That exception repeats and results in the video spinner spinning indefinitely.

Next Steps

  • ppc64le Chromium needs to implement WASM SIMD.

Firefox

I also tested Debian ppc64le Firefox-ESR. It hangs on the "Joining Meeting..." spinner with a JavaScript exception about r.ZP.callOutCountry. I have a nightly version of Firefox with some in-development JIT patches from https://talospace.com that gets much farther, but then the tab crashes. I will add Zoom to my Firefox-JIT testing list as I follow along with its development.

Test Details

Tested October 4, 2023. Test browser details:

Chromium 117.0.5938.132 (Official Build) built on Debian 12.1, running on Debian 12.1 (64-bit)
Revision fa569fb226df361d676b60404623b17b16dddc8a-refs/branch-heads/5938@{#1462}
OS Linux
JavaScript V8 11.7.439.19
User Agent Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36
Command Line /usr/lib/chromium/chromium --desktop-startup-id=xfce4-panel/,usr,bin,chromium/4029293-82-localhost_TIME851498275 --disable-nacl --disable-pings --enable-gpu-rasterization --enable-remote-extensions --load-extension --media-router=0 --no-default-browser-check --origin-trial-disabled-features=WebGPU --show-component-extension-options --restart --flag-switches-begin --flag-switches-end --disable-nacl
Executable Path /usr/lib/chromium/chromium
Profile Path ~/.config/chromium/Default

Video Quality

During a call, check the Zoom video settings. By default, sending video is hardware accelerated (the check box is checked), but receiving video is NOT hardware accelerated for some reason (the check box is unchecked). I checked the box, and video quality seemed to improve -- specifically, my video would not pause briefly from time-to-time.

Audio Quality

I noticed that when I talk, the other participant is completely muted. This might be something to do with my audio set up, but maybe it's generally true. Something to be aware of, in case others may be trying to speak while you're speaking.