Flowplayer and JW Player both have dynamic switching solutions to accomplish this. They use BWCheck in the beginning, but only once, then use NetStream.info object, the “QoS” (quality of service) metrics to decide when to switch streams.
I’ve not worked with the Flowplayer implementation, but I have used the JW player one. The tutorial is here:
http://www.longtailvideo.com/support/tutorials/Bitrate-Switching
You need versions of a video that are Keyframe and timecode aligned. The MS Expresssion encoder seems to be able to do that.
Richard