Replies: 1 comment 1 reply
-
I am afraid that we need some more information to be able to help you. I mean, for the webrtc part of your pipeline bandwidth is dynamically managed by the bandwidth estimation feature based currently on REMB feedback. So, the browser is the one that is in command for the bandwidth sent according to the estimation received from REMB feedback. I guess that this is working ok, because as you are saying if you record on WebM (VP8) quality improves. Transcoding cannot improve quality, so what is happening is that the video from WebRTC comes at good quality and transcoding just may lower it just a little bit. So, my guess that something on the pipeline is forcing the 500 kbps bandwidth when using MP4. To be able to analyse that we would need logs from your Kurento server and also it would provide very valuabel information a GStreamer dot dump. You can generate one with the getGstreamerDot API from pipeline (https://doc-kurento.readthedocs.io/en/latest/_static/client-javadoc/org/kurento/client/MediaPipeline.html#getGstreamerDot() or https://doc-kurento.readthedocs.io/en/latest/_static/client-jsdoc/module-core.MediaPipeline.html) If you can provide that it may be useful to determine the cause for your issue. |
Beta Was this translation helpful? Give feedback.
-
I'm using KMS 7.0 for an application with the following structure:
PlayerEndpoint -> RecorderEndpoint
-> WebRtcEndpoint
For this test, the PlayerEndpoint receives a h264 video on 1080p, then passes it to a RecorderEndpoint that stores it on an MP4 file, and also sends it to a single WebRtcEndpoint that consumes it.
The SDP of the WebRtc client application is edited to prefer h264 over VP8, so the whole chain requires no transcoding.
However, this runs into the problem that the quality on the client and recording is awful, and the problem seems to be the bitrate, which is capped to roughly 500k:
If I change the container of the RecorderEndpoint to .webm, my understanding is that this forces a transcoding to VP8, and in doing that the quality massively improves not only on the recording but also on the client (which, as shown above, is not directly connected to the RecorderEndpoint), with the bitrate being higher:
It's my understanding that Kurento has some default bitrate caps, however I've had very little success when changing them, I've tried calling SetMin/MaxRecvBandwith methods on the WebRtcEndpoint and changing the encoderBitrate parameter on the MediaElement configuration, and I haven't noticed any effect whatsoever.
My guess for this is that the encoderBitrate parameter only applies when there's transcoding needed, case in which it overrides the default value (although I can't explain the bitrate received as according to the conf file the default encoderBitrate value is 300 kbps). Then I'm left wondering how to override the default bitrate cap, as I've tried to look for APIs to change bitrates on both WebRtcEndpoint and PlayerEndpoint to no avail.
Thanks in advance.
Beta Was this translation helpful? Give feedback.
All reactions