void SrsSource::on_unpublish()
{
#ifdef SRS_HLS
	hls->on_unpublish();
#endif

#ifdef SRS_FFMPEG
	encoder->on_unpublish();
#endif

	// close all forwarders
	std::vector<SrsForwarder*>::iterator it;
	for (it = forwarders.begin(); it != forwarders.end(); ++it) {
		SrsForwarder* forwarder = *it;
		forwarder->on_unpublish();
		srs_freep(forwarder);
	}
	forwarders.clear();

	gop_cache->clear();

	srs_freep(cache_metadata);
	frame_rate = sample_rate = 0;
	
	srs_freep(cache_sh_video);
	srs_freep(cache_sh_audio);
	
	srs_trace("clear cache/metadata/sequence-headers when unpublish.");
	
	_can_publish = true;
}
void SrsSource::destroy_forwarders()
{
	std::vector<SrsForwarder*>::iterator it;
	for (it = forwarders.begin(); it != forwarders.end(); ++it) {
		SrsForwarder* forwarder = *it;
		forwarder->on_unpublish();
		srs_freep(forwarder);
	}
	forwarders.clear();
}