ABR supported in WebRTC #1066
Replies: 18 comments 4 replies
-
Hello |
Beta Was this translation helpful? Give feedback.
-
Hello, does WebRTC ABR take advantage of the WebRTC simulcast: https://www.w3.org/TR/webrtc-svc/#simulcasttemporal-example* ? On SFUs that implement this logic, there is no server-side transcoding, it's the "producer" that sends the same stream with several dimensions. Is is the same here ? On the other hand, for an RTMP source, I imagine that we take advantage of the server-side transcoding. |
Beta Was this translation helpful? Give feedback.
-
@nums Supporting simulcast for WebRTC Provider is a low priority as there are not many cases of using WebRTC input with OME yet. Most OME users still use RTMP, SRT, MPEG-TS and RTSP inputs. The link you wrote is SVC, not simulcast. SVC is also a standard that should be supported someday. |
Beta Was this translation helpful? Give feedback.
-
@getroot Sorry, the link anchor was missing, I made the edit in my previous comment. One last question, is the management of the connection / disconnection to the WebRTC stream no longer dependent on the WebSocket connection? I think there was a feed on it but I can't find it anymore. I will carry out tests on my side with a hundred simultaneous connections |
Beta Was this translation helpful? Give feedback.
-
@nums |
Beta Was this translation helpful? Give feedback.
-
Do there exist any rough estimates how much ABR / the changed code impacts CPU or memory requirements in a use case of few concurrent streams but many concurrent viewers? |
Beta Was this translation helpful? Give feedback.
-
@basisbit WebRTC ABR is not affected by this. So it's probably not much different from what you tested at the end of last year. However, there have been several patches to improve performance in recent months, so the latest version may have reduced CPU usage. |
Beta Was this translation helpful? Give feedback.
-
We've been testing a couple of days now. It works as intended. As mentioned above will require contineous improvement, however I think with the current implementation it's worth to push an official release. |
Beta Was this translation helpful? Give feedback.
-
I have tested with some different setup, it's working great. |
Beta Was this translation helpful? Give feedback.
-
I tested it today. FWIW Simulcast based ABR works much better. When there are multiple transcoded tracks available in WebRTC stream, browser handles (?) stream switching automatically and it happens smoothly. |
Beta Was this translation helpful? Give feedback.
-
@mpisat And ABR is that the server transmits a suitable track according to the viewer's estimated bandwidth among multiple video tracks. This has nothing to do with simulcast. For bandwidth estimation, use REMB or transport-cc specifications. What specifically does Simulcast based ABR better mean? video quality? Or an accurate bandwidth estimate? |
Beta Was this translation helpful? Give feedback.
-
@getroot I've seen ABR implementation via MediaSoup at an adult entertainment cam site. Resolution changes were happening without any stutter when you limit your bandwidth with netlimiter (win) or network link conditioner (xcode tool -- mac). For example: Stats graphs for RTCInboundRTPAudioStream_557470284 (inbound-rtp) These tracks are transcoded on the server side and fed to MediaSoup, which is the SFU and handles media playback requests from the visitors. I'm no simulcast expert here, but from what I understand, the browser was selecting the video/audio track according to the browser's estimated bandwidth or network speed and handling video playback. |
Beta Was this translation helpful? Give feedback.
-
Perhaps OME's ABR and MediaSoup's ABR will estimate bandwidth and switch tracks in the same way. I don't think it's a problem caused by the difference between the encoder encoding method (Simulcast) and the server encoding method. Do you have problems with stutter when switching ABR in OME? |
Beta Was this translation helpful? Give feedback.
-
@getroot I used the sample from WebRTC ABR help page, and it consists of entirely transcoded tracks (video + audio), no bypass (raw) video in the list. When I inspect webrtc-internals page on Chrome, it only contains one video + audio track (not simulcast) Stats graphs for RTCInboundRTPAudioStream_2100345181 (inbound-rtp) The difference between Mediasoup + Simulcast ABR vs OME implementation is the number of audio / video tracks and who is switching them (browser vs frontend?) Please don't get me wrong, I already love OME WebRTC ABR. One of the biggest players in Streaming doesn't even have this feature built in (Wowza). |
Beta Was this translation helpful? Give feedback.
-
When I tested WebRTC ABR today, the stutter was unnoticeable during stream switching. It happens under 200 ms (give or take) and I'm very satisfied with how it performs. Perhaps I had some connectivity issues when I tested it yesterday. I have 180 ms latency to my server in France so I guess that's the culprit. |
Beta Was this translation helpful? Give feedback.
-
I am getting issues with web sessions disconnects when selecting 1080 on one browser while another browser on 720 and another at 480. Log: |
Beta Was this translation helpful? Give feedback.
-
Is it possible to ingest a already encoded ABR stream to OvenMediaEngine? |
Beta Was this translation helpful? Give feedback.
-
WebRTC ABR is giving some weird quality downgrades here. The setup is as follows: I've configured 3 qualities (all with the same opus audio track): bypass / 720p 30fps @ 3.5Mbps / 480p 30fps @ 1.5Mbps So the 1080p RTMP stream is coming in over the internet, but WebRTC from OvenMediaEngine to OvenPlayer is going through Gbit LAN across the room. Sometimes OvenPlayer will still fall back to a lower quality despite the network being excellent and no apparent bottlenecks in processing anywhere. On the server running OME Any way I could debug what's causing the downgrades? |
Beta Was this translation helpful? Give feedback.
-
Finally, ABR is available for WebRTC.
You can test it with the latest master branch.
WebRTC ABR only works with the latest OvenPlayer.
Please refer to the manual for how to use it.
https://airensoft.gitbook.io/ovenmediaengine/v/master-1/streaming/webrtc-publishing#adaptive-bitrates-streaming-abr
The algorithm of Auto ABR (a function that automatically switches rendition by measuring the bandwidth of the player session on the server) must be continuously improved. This needs more testing. If you would like to contribute to improving this feature, you can start with the code below.
OvenMediaEngine/src/projects/publishers/webrtc/rtc_session.cpp
Line 801 in 0d09b5b
Thanks a lot for your feedback. (The information "It works well" is also very helpful.)
Beta Was this translation helpful? Give feedback.
All reactions