When Windows Media Player connects to a Windows Media server the player tries to use the most efficient protocol for the job. However, the player is not always able to connect with the first protocol it tries. This is usually due to either a firewall issue or the version of the client and server that are being used together.
Below is a table that illustrates the possible connections that WMP can make to a WMS server. This does not mean that in some circumstances the player will not try a different protocol; this is just what is possible.
Windows Media Player Version
Windows Media Services Version
If Fast Cache Enabled
6.4 thru 8
MMSU, MMST, HTTP
9 and 10
9 thru 12
RTSPU, RTSPT, HTTP
To fully understand this table you have to know a bit about the history of the player and server. We start with Windows Media Player 6.4. This was the first version of the player that carried the name Windows Media. At the time the main protocol that was used was Microsoft Media Server (MMS). This and HTTP were the only way the player and server could communicate. That's the way it was through WMP 8 which came in the box with Windows XP. You'll note that HTTP is always an option for all versions of the player and server. That is because it's the most common protocol used on the Internet and most firewalls have its port (80) open.
Starting with WMP 9 Microsoft added Real Time Streaming Protocol (RTSP) support. At the same time WMS 9 added RTSP as well. In both the player and server the older MMS protocol was retained for backwards compatibility. This allowed a WMP 9 client to natively communicate with MMS to a 4.1 server and similarly allowed WMP 8 to communicate with WMS 9 via MMS. However, WMP 9 and 10 preferred using RTSP when communicating to a WMS 9 server so that's what they started with for protocol rollover. One interesting thing about the v9 player and v9 server is that while both are capable of using MMS, when they are talking to each other they will not communicate via MMS. Once the v9 player found out that it was talking to a v9 server via MMS it would rollover to RTSP. This helped to deprecate the MMS protocol.
Windows Media Player 11 dropped the MMS protocol as protocol option. This means that for the older WMS 4.1 server that the only common protocol is HTTP. This further deprecates the MMS protocol.
From a server perspective a similar track took place. WMS 4.1 only supported MMS and HTTP. With WMS 9, all three possible protocols MMS, RTSP, and HTTP were available. Finally with WMS 9.5 the MMS protocol was removed and only supports RTSP and HTTP.
How the Player Decides
As discussed above, the table represents how Windows Media Player is capable of connecting to WMS. Depending on the player version it may attempt a connection to a server using a protocol that the server does not support. For example, if you use WMP 6.4 to connect to WMS 9.5, the player will first try to make a TCP connection to port 1755 (the default port for MMS). The WMS 9.5 server will not be listening on that port so the player will quickly roll to the next available protocol which in that case would be HTTP.
In general UDP is a preferred transport vs. TCP because of the lower network overhead for the protocol. However, the player must first establish a TCP connection to the server to setup the session and negotiate how to stream UDP. If a TCP connection is not possible then the player will roll to the next available protcol.
MMS is not only a protocol, it's also a moniker. It is important to distinguish between the two since the moniker is still in use and the protocol is deprecated. Microsoft still recommends using the MMS moniker (mms://) when referring to a URI for a Windows Media server. This allows the player to use protocol rollover as per the table above.
Explicitly Specifying the Protocol
Windows Media Player also allows you to explicitly specify the protocol you want to use when connecting to a server. Instead of using the mms:// moniker you can use MMSU (MMS over UDP), MMST (MMS over TCP), RTSPU (RTSP over UDP), RTSPT (RTSP over TCP) and HTTP. If you use one of these 5 monikers it locks the player into the protocol and does not go through rollover. Explicitly setting the protocol generally should only be used in testing. Allowing the player to utilize protocol rollover by specifying the mms:// moniker is best when in production.
<edited on 11/18/09 to include WMP12>