How can I ensure best video quality for video track sent by one specific participant?

TomohiroMaeda
TomohiroMaeda Member
edited November 2023 in Q&A

Hi,

I have an application where a teacher joins the call with callFrame and students join the call with callObject.

The students may also receive video/audio tracks from other students, but we would like not to sacrifice the quality of teacher's video track.

Teacher also receives videos from the student and see it on gallery view. In the previous calls we had our teacher had roughly 420k bps for sending 1500k bps for receiving (we would still like to get students videos for the teacher to see, but also would like improve sending bitrate)

Do you have any recommendation on how to do so?

Thanks!

Answers

  • mark_at_daily
    mark_at_daily Community Manager, Dailynista admin
    edited November 2023

    Daily provides the ability to modify both the send and receive settings for participants in a call. The APIs of interest are:

    There's no way to apply a "QoS" concept to individual participants streams. The best way to think about things is: 1) limiting the inbound and outbound traffic to reasonable limits, 2) adjusting settings so that participants of interest take up more of the available bandwidth. For 1), we would recommend limiting outbound bandwidth to around 1-1.5Mbps in total; this can vary based on the use case and users' networks but is a good rule of thumb. For 2), your UI can highlight participants of interest by having them displayed larger in your application. Participants that are larger will also need a higher resolution, frame rate, and bitrate. Also, it's a good rule of thumb to keep download bitrate less than 3Mbps.

    On the send side, we've provided presets to make it easy to select different send settings for each participant. So, in your application, perhaps the teacher should use a higher setting than students. Alternatively, on the receiving side, you should think about requesting different simulcast layers based on the size and prominence of each participants video tiles. For example, participants might request layer 2 (aka "high") from the teacher but layer 0 or 1 ("low" or "medium", respectively) for other students.

    Using all of these tricks will help you to optimize your application for the effect you're looking to achieve. You may have to "tune" things a bit for your app, but hopefully these ideas get you started!

    Also, one other thing to note since you're using a combination of Daily Prebuilt and your own custom app.

    • Daily Prebuilt handles much of the complexity for you and already does this optimization. You can't change the receive settings at all, but as I mentioned, Daily Prebuilt already does this. You can customize the send settings with Daily Prebuilt.
    • In a custom app, you have full control, so you can use the settings that best suit your app's experience.

  • @mark_at_daily

    Thanks for the detailed explanation.

    After digging into our code and call logs, we could identify the problem and improve the call quality.

    We found out that somehow the default video send setting had medium max quality. We used updateSendSetting to set maxQuality "high" for sending video and the call quality got so much better.

  • mark_at_daily
    mark_at_daily Community Manager, Dailynista admin

    Great to hear! 🎉