A "PeerStreamer" provides receiver-driven peer-to-peer (P2P) media
streaming for loosely coupled P2P networks. Peers in the network perform
only simple operations, may cache all or part of the streaming media, do
not collaborate with other peers, may be unreliable, and may drop offline
or come online during any given streaming session. Clients in the network
operate in real-time to coordinate peers, stream media from multiple
peers, perform load balancing, handle online/offline states of peers, and
perform decoding and rendering the streaming media. In one embodiment,
the PeerStreamer uses high rate erasure resilient coding to allow
multiple serving peers to hold partial media without conflict, such that
clients simply retrieve fixed numbers of erasure coded blocks regardless
of where and what specific blocks are retrieved. In another embodiment,
the PeerStreamer uses embedded coded media to vary streaming bitrates
according to available serving bandwidths and client queue status.