Peer-to-Peer (P2P) techniques for multimedia streaming have been shown to be a good enhancement to the traditional client/server methods when trying to reduce costs and increase robustness. Due to the fact that P2P systems are highly dynamic, the main challenge that has to be addressed remains supporting the general resilience of the system. Various challenges arise when building a resilient P2P streaming system, such as network failures and system dynamics. In this paper, we first classify the different challenges that face P2P streaming and then present and analyze the possible countermeasures. We classify resilience mechanisms as either core mechanisms, which are part of the system, or as cross-layer mechanisms that use information from different communication layers, which might inflict additional costs. We analyze and present resilience mechanisms from an engineering point of view, such that a system engineer can use our analysis as a guide to build a resilient P2P streaming system with different mechanisms and for various application scenarios.