|
|
|
@ -557,6 +557,26 @@ static int fill_stream_rtcp(struct stream_input *si, struct sdp_media *media, in |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
static enum transport_protocol transport_protocol(str *s) { |
|
|
|
switch (s->len) { |
|
|
|
case 7: |
|
|
|
if (!str_cmp(s, "RTP/AVP")) |
|
|
|
return PROTO_RTP_AVP; |
|
|
|
break; |
|
|
|
case 8: |
|
|
|
if (!str_cmp(s, "RTP/SAVP")) |
|
|
|
return PROTO_RTP_SAVP; |
|
|
|
if (!str_cmp(s, "RTP/AVPF")) |
|
|
|
return PROTO_RTP_AVPF; |
|
|
|
break; |
|
|
|
case 9: |
|
|
|
if (!str_cmp(s, "RTP/SAVPF")) |
|
|
|
return PROTO_RTP_SAVPF; |
|
|
|
break; |
|
|
|
} |
|
|
|
return PROTO_UNKNOWN; |
|
|
|
} |
|
|
|
|
|
|
|
int sdp_streams(const GQueue *sessions, GQueue *streams, GHashTable *streamhash, struct sdp_ng_flags *flags) { |
|
|
|
struct sdp_session *session; |
|
|
|
struct sdp_media *media; |
|
|
|
@ -566,6 +586,7 @@ int sdp_streams(const GQueue *sessions, GQueue *streams, GHashTable *streamhash, |
|
|
|
int i, num; |
|
|
|
str s; |
|
|
|
struct sdp_attribute *attr; |
|
|
|
enum transport_protocol tp; |
|
|
|
|
|
|
|
num = 0; |
|
|
|
for (l = sessions->head; l; l = l->next) { |
|
|
|
@ -573,6 +594,7 @@ int sdp_streams(const GQueue *sessions, GQueue *streams, GHashTable *streamhash, |
|
|
|
|
|
|
|
for (k = session->media_streams.head; k; k = k->next) { |
|
|
|
media = k->data; |
|
|
|
tp = transport_protocol(&media->transport); |
|
|
|
|
|
|
|
si = NULL; |
|
|
|
for (i = 0; i < media->port_count; i++) { |
|
|
|
@ -589,6 +611,7 @@ int sdp_streams(const GQueue *sessions, GQueue *streams, GHashTable *streamhash, |
|
|
|
|
|
|
|
si->stream.num = ++num; |
|
|
|
si->consecutive_num = (i == 0) ? media->port_count : 1; |
|
|
|
si->protocol = tp; |
|
|
|
|
|
|
|
g_hash_table_insert(streamhash, si, si); |
|
|
|
g_queue_push_tail(streams, si); |
|
|
|
@ -610,6 +633,8 @@ int sdp_streams(const GQueue *sessions, GQueue *streams, GHashTable *streamhash, |
|
|
|
goto error; |
|
|
|
si->stream.num = ++num; |
|
|
|
si->consecutive_num = 1; |
|
|
|
si->is_rtcp = 1; |
|
|
|
si->protocol = tp; |
|
|
|
|
|
|
|
g_hash_table_insert(streamhash, si, si); |
|
|
|
g_queue_push_tail(streams, si); |
|
|
|
|