Issue with low connectivity

Hi Team,
We are using Flashphoner for last several months and one common complaint from our clients is the video streaming does not work with low connectivity. Is there anything we can do to improve this experience. What are the network considerations or minimum bandwidth required to have smooth viewing experience. What is the minimum upload speed required to stream. What should be our server configuration.
The current server has 16GB RAM and 64GB disk space and our clients stream for around 200-300 people at the same time.
We are currently using HLS player on the client side and WEB RTC to start live stream from the host side.
 

Max

Administrator
Staff member
Each broadcast creates a load on the channel corresponding to the bitrate. Bandwidth calculations are very simple
Code:
1 broadcast with a bit rate of 1Mbps takes 1 Mbps of a communication channel.
For bad channels, you need to reduce the bit rate and stream resolution.
If necessary, you can use transcoding, but if you use transcoding, the load on the server processor increases.

The bitrate can be set globally for all broadcasts on your server using the settings in flashphoner.properties file
Code:
webrtc_cc_min_bitrate = 30000
webrtc_cc_max_bitrate = 1000000
parameters are given in bits per second.

Or set the bitrate on the client browser side via WebSDK
Code:
constraints.video.minBitrate = 600
constraints.video.maxBitrate = 600
on the browser side, the bitrate is set in kilobits per second

More details

Stream resolution can be controlled at the browser side via WebSDK:
Code:
constraints.video.width = 640
constraints.video.height = 480
Or you can control stream parameters using transcoding.
Sample REST request for transcoding a stream:
Code:
{
"uri": "transcoder: // tcode1",
"localStreamName": "testT",
"remoteStreamName": "stream1",
"encoder": {
"width": 640,
"height": 480,
"keyFrameInterval": 30,
"fps": 30}
}
More details

Or use a separate node for transcoding as part of the CDN
More details:
https://flashphoner.com/embedding-streaming-transcoding/
 
Ok understood.
What do you reckon should be the bitrate configuration if the consumer's bandwidth varies from 0.5 Mbps to 2 Mbps.

Right now we are using following bitrates on the client side... do they look good?

360p
constraints.video.height = 360;
constraints.video.width = 640;
constraints.video.minBitrate = 600;
constraints.video.maxBitrate = 1000;
480p
constraints.video.height = 480;
constraints.video.width = 854;
constraints.video.minBitrate = 1500;
constraints.video.maxBitrate = 2500;
720p
constraints.video.height = 720;
constraints.video.width = 1280;
constraints.video.minBitrate = 3500;
constraints.video.maxBitrate = 5000;
constraints.video.frameRate = 30;

I need the streaming to work best under low connectivity like 0.5 Mbps for the consumer. Right now it either disconnects or freezes very frequently.
 

Max

Administrator
Staff member
I need the streaming to work best under low connectivity like 0.5 Mbps for the consumer. Right now it either disconnects or freezes very frequently.
In the case of a 0.5 Mbps channel bandwidth only 360p stream can be played with acceptable quality.
In this case, the upper limit of the bitrate must be reduced for this resolution to 400 kbps, and the lower to 100 kbps.

For WebRTC subscribers, we have a channel quality detector. Focusing on it, you can request a 360p stream in case of poor channel quality (indicator in the BAD value).
For HLS subscribers, you should provide a switch for your customers to choose 360p stream to play.

More:
https://docs.flashphoner.com/display/WCS52EN/Publisher+and+player+channel+quality+control
https://flashphoner.com/channel-quality-indicator-for-server-webrtc-over-tcp/
 

Max

Administrator
Staff member
I don't see any switch option
In the attached archive there is an example of the code of an HLS player based on video.js with an additional button for a 360p stream.

For testing, publish the stream «stream1». Then post the same stream with constraints:
Code:
constraints.video.width = 640
constraints.video.height = 360
and name the second stream «stream1-360p»
In the minimal example code, the «Play» button plays the original «Stream1». Button «360p» plays stream «stream1-360p»
 

Attachments

Top