Peer-assisted streaming is a promising way for service providers to offer high-quality IPTV to consumers at reasonable cost. In peerassisted streaming, the peers exchange video chunks with one another, and receive additional data from the central server as needed. In this paper, we analyze how to provision resources for the streaming system, in terms of the server capacity, the video quality, and the depth of the distribution trees that deliver the content. We derive the performance bounds for minimum server load, maximum streaming rate, and minimum tree depth under different peer selection constraints. Furthermore, we show that our performance bounds are actually tight, by presenting algorithms for constructing trees that achieve our bounds. Categories and Subject Descriptors C.4 [Performance of Systems]: [Performance attributes] General Terms Algorithms, Design, Performance Keywords peer-to-peer, video, streaming, tree construction, IPTV