static void handle_setup(rtsp_conn_info *conn, rtsp_message *req, rtsp_message *resp) { int cport, tport; char *hdr = msg_get_header(req, "Transport"); if (!hdr) return; char *p; p = strstr(hdr, "control_port="); if (!p) return; p = strchr(p, '=') + 1; cport = atoi(p); p = strstr(hdr, "timing_port="); if (!p) return; p = strchr(p, '=') + 1; tport = atoi(p); rtsp_take_player(); int sport = rtp_setup(&conn->remote, cport, tport); if (!sport) return; player_play(&conn->stream); char resphdr[128]={0}; snprintf(resphdr, sizeof(resphdr), "RTP/AVP/UDP;unicast;mode=record;server_port=%d;control_port=%d;timing_port=%d", sport, sport, sport); msg_add_header(resp, "Transport", resphdr); msg_add_header(resp, "Session", "1"); resp->respcode = 200; }
static void handle_setup(rtsp_conn_info *conn, rtsp_message *req, rtsp_message *resp) { int cport, tport; char *hdr = msg_get_header(req, "Transport"); if (!hdr) return; char *p; p = strstr(hdr, "control_port="); if (!p) return; p = strchr(p, '=') + 1; cport = atoi(p); p = strstr(hdr, "timing_port="); if (!p) return; p = strchr(p, '=') + 1; tport = atoi(p); rtsp_take_player(); int sport = rtp_setup(&conn->remote, cport, tport); if (!sport) return; player_play(&conn->stream); char *resphdr = malloc(strlen(hdr) + 20); strcpy(resphdr, hdr); sprintf(resphdr + strlen(resphdr), ";server_port=%d", sport); msg_add_header(resp, "Transport", resphdr); msg_add_header(resp, "Session", "1"); resp->respcode = 200; }
void rtsp_shutdown_stream(void) { rtsp_take_player(); pthread_mutex_unlock(&playing_mutex); }