static __inline__ gint __rtp_pkt_send_rot(RTP_session *session, RTP_transport *transport, RTP_packet *packet, gsize packet_size) { GstRTSPMessage *msg; gst_rtsp_message_new_data(&msg, transport->rtp_ch); gst_rtsp_message_set_body(msg, (const guint8*)packet, packet_size); rtp_watch_write_message((RTP_watch*)transport->passby, msg); gst_rtsp_message_free(msg); return 0; }
static __inline__ gint __rtp_pkt_send_ror(RTP_session *session, RTP_transport *transport, RTP_packet *packet, gsize packet_size) { GstRTSPMessage *msg; extern gint rtsp_client_send_message(RTSP_Client *client, GstRTSPMessage *msg); gst_rtsp_message_new_data(&msg, transport->rtp_ch); gst_rtsp_message_set_body(msg, (const guint8*)packet, packet_size); rtsp_client_send_message((RTSP_Client*)transport->passby, msg); gst_rtsp_message_free(msg); return 0; }
static gint create_and_send_ANNOUNCE_message2(GstRTSPsink* sink, GTimeVal *timeout, char **szSessionNumber) { const gchar *url_client_ip_str = "0.0.0.0";//"192.168.2.104"; const gchar *url_server_str_full = g_strdup_printf("rtsp://%s:%d/%s", sink->host, sink->port, sink->stream_name); //"rtsp://192.168.2.108:1935/live/1"; //conn = sink->conn; GstRTSPMessage msg = { 0 }; GstSDPMessage *sdp; GstRTSPMethod method; GstRTSPResult res; guint num_ports = 1; guint rtp_port = 5006; char *szPayloadType = g_strdup_printf("%d", sink->payload); method = GST_RTSP_ANNOUNCE ; res = gst_rtsp_message_init_request(&msg, method, url_server_str_full); if (res < 0) return res; /* set user-agent */ if (sink->user_agent) gst_rtsp_message_add_header(&msg, GST_RTSP_HDR_USER_AGENT, sink->user_agent); gst_rtsp_message_add_header(&msg, GST_RTSP_HDR_CONTENT_TYPE, "application/sdp"); // allocate sdp messege buffer... res = gst_sdp_message_new(&sdp); //v=.. res = gst_sdp_message_set_version(sdp, "0"); //o=... res = gst_sdp_message_set_origin(sdp, "-", "0", "0", "IN", "IP4", "0.0.0.0"); //s=.. if (sink->session_name) res = gst_sdp_message_set_session_name(sdp, "Unnamed"); //i=.. if (sink->information) res = gst_sdp_message_set_information(sdp, "N/A"); //c=... res = gst_sdp_message_set_connection(sdp, "IN", "IP4", url_client_ip_str, 0, 0); //a=... res = gst_sdp_message_add_attribute(sdp, "recvonly", NULL); // create media GstSDPMedia *media; res = gst_sdp_media_new(&media); res = gst_sdp_media_init(media); //m=... res = gst_sdp_media_set_media(media, "video"); res = gst_sdp_media_set_port_info(media, rtp_port, num_ports); res = gst_sdp_media_set_proto(media, "RTP/AVP"); res = gst_sdp_media_add_format(media, szPayloadType); //a=... char *rtpmap = g_strdup_printf("%s %s/%d", szPayloadType, sink->encoding_name, sink->clock_rate); res = gst_sdp_media_add_attribute(media, "rtpmap", rtpmap); res = gst_sdp_media_add_attribute(media, "fmtp", szPayloadType); res = gst_sdp_media_add_attribute(media, "control", "streamid=0"); // insert media into sdp res = gst_sdp_message_add_media(sdp, media); gchar * sdp_str = gst_sdp_message_as_text(sdp); int size = g_utf8_strlen(sdp_str, 500); gst_sdp_message_free(sdp); gst_sdp_media_free(media); res = gst_rtsp_message_set_body(&msg, sdp_str, size); sink->responce = &msg; // Send our packet receive server answer and check some basic checks. if ((res = sendReceiveAndCheck(sink->conn, timeout, &msg, sink->debug)) != GST_RTSP_OK) { return res; } // get session number *szSessionNumber = extractSessionNumberFromMessage(&msg); return GST_RTSP_OK; }