The media router obtains a route controller for a route whenever it needs
to control a route. When a route is selected, the media router invokes
the onSelect() method of its route controller. While selected,
the media router may call other methods of the route controller to
request that it perform certain actions to the route. When a route is
unselected, the media router invokes the onUnselect() method of its
route controller. When the media route no longer needs the route controller
it will invoke the onRelease() method to allow the route controller
to free its resources.

There may be multiple route controllers simultaneously active for the
same route. Each route controller will be released separately.

All operations on the route controller are asynchronous and
results are communicated via callbacks.