void live_session_shutdown(LiveSession *livesess) { gf_seng_terminate(livesess->seng); if (livesess->streams) { while (gf_list_count(livesess->streams)) { RTPChannel *rtpch = gf_list_get(livesess->streams, 0); gf_list_rem(livesess->streams, 0); gf_rtp_streamer_del(rtpch->rtp); if (rtpch->carousel_data) gf_free(rtpch->carousel_data); gf_free(rtpch); } gf_list_del(livesess->streams); } }
GF_EXPORT void gf_isom_streamer_del(GF_ISOMRTPStreamer *streamer) { GF_RTPTrack *track = streamer->stream; while (track) { GF_RTPTrack *tmp = track; if (track->au) gf_isom_sample_del(&track->au); if (track->rtp) gf_rtp_streamer_del(track->rtp); track = track->next; gf_free(tmp); } if (streamer->isom) gf_isom_close(streamer->isom); gf_free(streamer->dest_ip); gf_free(streamer); }