Comments (4)
Thanks for the insight. Your comment made me curious if the built-in browser RTCPeerConnection
behaved the same way under the poor conditions, and lo and behold it does. The issue definitely seems to be the SCTP protocol itself rather than Godot, so thanks for the details surrounding that. I will keep my eye on get_buffered_amount
and use it once it's generally available.
For reference, I've included the projects I was testing with. One is the Godot code exported to HTML5, and the other is a pure JavaScript implementation of the same thing.
RtcPerformance.zip
from webrtc-native.
After some more testing, I was also able to reproduce the issue by exporting the project to HTML5 (I should have tried this sooner, apologies), so I'm not sure if the issue is in the Godot engine proper or this plugin.
I also tried adjusting the Max Channel In Buffer Kb project setting, but could not notice a difference with a larger buffer.
from webrtc-native.
I haven't ever seen this manifest as a "frame rate" or "performance" problem, but I can say that WebRTC is hyper sensitive to packet loss. In my testing, if you introduce even a little bit of packet loss (like 2%) you'll see messages get really delayed, way more than you'd expect, and certainly more than compared to ENet (which I've also done comparison testing with).
I believe is caused by the flow control that's built into the SCTP protocol (which is what WebRTC uses for data channels). I think it's detecting the packet loss, and then holding back messages, probably because the protocol is assuming the packet loss is caused by network congestion. And if you try to send more messages after it's entered "flow control mode," it'll actually exacerbate the problem, and cause it to hold back the message even longer. I've observed this with both HTML5 and with the native plugin.
Perhaps this just looks like a frame rate or performance problem because your game objects are moving in fits and starts rather than smoothly?
I've had some success by checking WebRTCDataChannel.get_buffered_amount()
and having my code avoid sending if there's any data buffered, which appears to get back out of "flow control mode" quicker. However, that function was only just added in this PR:
... so, there isn't a pre-compiled binary that you can download. (Also, this appears to work more effectively with the native plugin than it does in HTML5, at least in my testing.)
Hopefully @Faless will make a new release of the native plugin shortly after Godot 3.4 stable is released. :-)
from webrtc-native.
The description on this PR has some decent references about WebRTC, its flow control and bufferedAmount
: godotengine/godot#50658
from webrtc-native.
Related Issues (20)
- NixOS error: libstdc++.so.6: cannot open shared object file: No such file or directory
- Can't establish a communication in NakamaWebRTC project HOT 1
- WebRtcPeerConnection is failing half the time on C# HOT 5
- Can't load WebRTC native plugin on the Mac HOT 2
- Plugin is available in the AssetLib but installs wrongly. HOT 3
- Exporting .ipa to appstore fails HOT 2
- Extension crashes on startup HOT 6
- MacOS, The developer cannot be verified HOT 10
- ICE exchange does not work properly when a native client creates an offer to a browser HOT 5
- Can't build with Godot 4.2-rc1 and MSVC HOT 2
- Crash when using along other GDExtensions HOT 32
- `Invalid candidate format` When adding an ice candidate generated from browser WebRTC HOT 3
- Error when exporting for Web: No suitable library found for GDExtension HOT 3
- Godot 4.0 beta 5 crashes when loading extension HOT 2
- Calling WebRTCPeerConnection.CreateDataChannel in C# throws External component has thrown an exception. HOT 2
- When runing function create_offer() of WebRTCPeerConnection from the editor 1-10000 times, there is approximately 1 and more constant error _create_offer: Failed to gather local ICE candidates HOT 3
- Exporting to MacOS creates an error.
- Make builds for major and minor releases HOT 3
- Linux: bad glibc version HOT 3
- Release export crash HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from webrtc-native.