Difference between revisions of "Porting/Zoom"
(11 intermediate revisions by the same user not shown) | |||
Line 8: | Line 8: | ||
</gallery> | </gallery> | ||
− | + | 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 == | == 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 | + | 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"''' | ||
Line 18: | Line 18: | ||
== Analysis == | == Analysis == | ||
− | Here is the console log when video fails, with the Chrome version at its default 117.0.0.0. | + | 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. | + | 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: | 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" | + | "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: | 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: | ||
Line 66: | 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
Contents
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.
- 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:
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.