iOS SDK : Help top param stream for low bandwith

Hello,

I am using Wowza Cloud, wuith ULL.

Here is my Config of my iOS Gocoder SDK :

[goCoderBroadcastConfigsetVideoFrameRate:24 ];

[goCoderBroadcastConfigsetVideoKeyFrameInterval:48];

[goCoderBroadcastConfigsetVideoBitrate:650*1024];

But I have an issue when i am in a place with bad network, so low bandwith : the playback is slow, video stuck etc…

I see that we can use param to the broadcastConfig to prevent this. I see 3 params :

setVideoFrameBufferSizeMultiplier

setVideoFrameRateLowBandwidthSkipCount

setVideoBitrateLowBandwidthScalingFactor

I have 2 questions :

- Which of theses params must i have to use ? and which value is the best ?

- If the bandwitdh go slow and after go back fast, my previous param will be set again ?

thanks you in advance :slight_smile:

Hi @Jeremie PERERA,

The current GoCoder SDK release has some ABR capabilities as you mentioned and that you can look into which may help in this case, where the device is going into a low-bandwidth scenario.

In the WZMediaConfig class of the GoCoder SDK:

The LowBandwidthScalingFactor property is the factor by which to scale the desired bitrate in low bandwidth conditions. Valid range is 0.0 to 1.0; any other value will be ignored. Setting a value of 0.0 indicates that the encoder should choose the best value; setting a value of 1.0 indicates that bitrate will never be throttled. The default is 0.75.

The FrameBufferSizeMultiplier property is the value by which to multiply the video frame rate to derive the number of video frames to buffer before the encoder starts to throttle bitrate and/or frame rate. For example: if the frame rate is 30 and the videoFrameBufferSizeMultiplier is 5, the encoder will buffer 150 (5 * 30) frames before throttling. Setting a value of 0 indicates that the encoder should choose the best value. The default value is 4.

The FrameRateLowBandwidthSkipCount property is the number of frames to skip when the encoder cannot keep up with the broadcaster. In low bandwidth conditions the encoder will skip frames to conserve bandwidth, but still send consistent frames so the encoder can produce smooth playback.

The maximum number of frames that can be skipped is equal to the key frame interval minus one - i.e. setting this to 29 with a key frame interval of 30 will produce a key frame only stream, setting to 1 will never skip frames. The default is 4 meaning skip 1 of every 4 frames.

Thank you for your answer.

But your are not answer my question.

Especially this :

  • If the bandwitdh go slow and after go back fast, my previous param will be set again ?

And then i see and read what you mention, but i don’t know the best way to do…

Someone was testing these param ? What do you propose to use ?

No problem Jeremie, It was my understanding if is best to adjust all 3, but let me speak with the engineers to get the answer about the parameters back to original settings when network conditions improve.

Per the engineers @Jeremie PERERA

You would need to reload those settings if you change them, basically restarting the broadcast object, however, these are not really params that need to be adjusted on the fly, those values would only matter if the broadcaster is struggling with keeping up with the encoder; if it’s not, those values are not going to matter really.

But, the use case for those params is that your end-users who will be using your app should have a UI setting where they can enable low bandwidth streaming, and it would trigger all those params; it should not be set dynamically.

Does that help?

ok.

Just another question about low bandwith : stream with low bandwith may work, but the Wowza player ULL can’t handle this… do you have a way to buffer the stream on the client side ? so the player ?