Wowza Community

Dynamic Bandwidth Detection (BWCheck)

Yes, send to richard.lanham@gmail.com

I think I see the problem. You have to re-order the flow.

When onBWDone returns kbitdown is when you should call createPlayStream.

Also you are closing the connection onBWDone, don’t do that.

There are 3 changes below should do it:

nc.onBWDone = function(kbitDown, deltaDown, deltaTime, latency) {
trace("onBWDone: kbitDown:"+kbitDown+" deltaDown:"+deltaDown+" deltaTime:"+deltaTime+" latency:"+latency);
// app logic based on the bandwidth detected follows here
detected_bw = kbitDown;
createPlayStream(); // insert this here
// close the Netconnection to bwcheck
//this.close();
}
function doConnect()
....
enablePlayControls(true);
// createPlayStream(); // comment this out
videoLastW = 0;
videoLastH = 0;

When do you call this function from the client? It might be too soon. You should wait till you get “NetStream.Play.Start” notification in your NetStatus event handler. Something like:

protected function statusHandler(evt:NetStatusEvent):void {
	switch (evt.info.code) {
		case  'NetStream.Play.Start'
		netconnection.call("getStreamStats",new Responder(handleResponse),"someStream");
...

Richard

The approach is to use the bandwidth checker to determine available bandwidth to the client, then use that information to play a video with appropriate bit rate for that connection. The buffer is not something you want to adjust for this purpose.

And bandwidth checking is not automatic. And what you do with the results of the bandwidth checking is not automatic. You have to add the module to Application.xml, and you have to run the bandwith checking functions in the player, and you have to take the result and do something with it: play a version of the video that you have encoded to a bit rate for that connection speed.

http://www.wowza.com/community/t/-/31

Richard

Yes, the source code for bandwidth checker is in first post of this thread. You can compile your own version in the Wowza IDE to make adjustments.

Richard

Did you add the jar file to wowza/lib folder then restart Wowza, and did you add the module to Application.xml. You want to connect to the Wowza server that you added that jar to, and to the application that you added the Module to.

Richard

There is a Actionscript 3 version of ctosbwcheck in [wowza-install-dir]/examples/BWCheck/CtoSBWCheck.fla

The results of the bwcheck do vary from moment to moment, which is normal result of varying network conditions.

Richard

It should be here:

[install dir]\examples\BWChecker\client\CtoSBWCheck.fla

I’ll send it to that email too.

Richard

There is a working AS3 example here:

[wowza-install-dir]/examples/BWChecker/client/bwchecker.fla

Richard

It’s on page 2 of this thread. You have to build it in the Wowza IDE

It tests from client to server. The default one at the top tests from server to client.

Richard

I don’t understand the question. Can you explain?

Richard

I think you are talking about using Netstream.play2() and netstreaminfo object. This what is used to implement Flash Dynamic Streaming, for example JW Player’s implementation

You can search around but here is one article that looks useful

http://help.adobe.com/en_US/flashmediaserver/devguide/WSae44d1d92c7021ff-1f5381712889cd7b56-8000.html

Here is how the simple, before connect method to check bandwidth

https://www.wowza.com/docs/how-to-test-server-to-client-bandwidth-for-rtmp-clients

I think that camera.setQuality() will have an affect on a stream after you do netstream.publish()

Richard

You’re English is great. Thanks for the update.

Richard

i’m having some problems with converting the BWChecker to AS3.

this is what i’ve got :

var constring="rtmp://localhost/bwcheck";
var detected_bw:String;
var counter:Number=0;
var nc:NetConnection=new NetConnection;
nc.client=this;
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler );
function netStatusHandler (e:NetStatusEvent):void{
	trace("Level: "+e.info.level+" Code: "+e.info.code);
	if (e.info.code == "NetConnection.Connect.Success") {
		trace("--- connected to: " + nc.uri);	//this.uri
	}
}
function onBWCheck(latency:String):Number{
	trace("in onBWCheck");
	return ++counter; // Serverside, just ignore any return value, For now return the call count
}
function onBWDone(kbitDown, deltaDown, deltaTime, latency):void{
	trace("==>in onBW_DONE");
	trace("onBWDone: kbitDown:"+kbitDown+" deltaDown:"+deltaDown+" deltaTime:"+deltaTime+" latency:"+latency);
	//detected_bw = kbitDown;
	nc.close();
}
nc.connect(constring, true);
stop();

and i get this as a result (haven’t changed anything to serverside code, or is it necessary that i do that?):

in onBWCheck

Level: status Code: NetConnection.Connect.Success

— connected to: rtmp://localhost/bwcheck

ok , works like a charm now. Thanks a lot !

Hi Craigweb,

You may find netlimiter useful:

http://www.netlimiter.com

Regards,

Dean

Hi Charlie,

like balint.pelhos , I need to calculate the actual bandwidth after the stream has started without start another connection and generating an extra traffic.

I read your reply about it, but I’m not able to use IOPerformanceCounter interface like you suggested…

Is it possible have some indication or some reference how to implement it (server side and client side).

Thanks!

For using the bandwidth checker module, the instruction (posted below) asks for the FLVPlayback module to be removed. I would like to know why this needs to be done?

thanks

maple01

Configuration:

Create a folder named [install-dir]/applications/bwcheck

Create a folder named [install-dir]/conf/bwcheck

Copy [install-dir]/conf/Application.xml into new bwcheck config folder

Edit copied Application.xml file and remove the module reference to ModuleFLVPlayback and add the module reference below as the last entry in the section (it is important that it is the last entry):

A complete built version can be downloaded from here. Follow Charlie’s instructions at the top of the page to install.

Please let me know if there are any problems.

Roger.

This link is dead, can anyone help? Ive tried to compile it myself but im ignorant when it comes java. Thanks.

-jason

thanks! you guys are top notch support - jason