[vlc-devel] [PATCH] live555: retrieve RTSP track languages from SDP
Gilles Chanteperdrix
gilles.chanteperdrix at xenomai.org
Wed Dec 18 15:04:52 CET 2013
First for the "a=lang:" session attribute, then for each subsession
look for the same attribute, and use the session attribute if none
was found.
---
modules/access/live555.cpp | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/modules/access/live555.cpp b/modules/access/live555.cpp
index b9ed723..f417cb0 100644
--- a/modules/access/live555.cpp
+++ b/modules/access/live555.cpp
@@ -685,6 +685,8 @@ static int SessionsSetup( demux_t *p_demux )
unsigned int i_receive_buffer = 0;
int i_frame_buffer = DEFAULT_FRAME_BUFFER_SIZE;
unsigned const thresh = 200000; /* RTP reorder threshold .2 second (default .1) */
+ const char *p_sess_lang = NULL;
+ const char *p_lang;
b_rtsp_tcp = var_CreateGetBool( p_demux, "rtsp-tcp" ) ||
var_GetBool( p_demux, "rtsp-http" );
@@ -699,6 +701,22 @@ static int SessionsSetup( demux_t *p_demux )
return VLC_EGENERIC;
}
+ if (strcmp(p_sys->p_sdp, "m=") != 0) {
+ const char *p_sess_attr_end;
+
+ p_sess_attr_end = strstr(p_sys->p_sdp, "\nm=");
+ if (!p_sess_attr_end)
+ p_sess_attr_end = strstr(p_sys->p_sdp, "\rm=");
+
+ p_sess_lang = p_sess_attr_end ? strstr(p_sys->p_sdp, "a=lang:") : NULL;
+ if (p_sess_lang &&
+ p_sess_lang - p_sys->p_sdp > p_sess_attr_end - p_sys->p_sdp)
+ p_sess_lang = NULL;
+ }
+
+ no_session_lang:
+ fprintf(stderr, "SDP: %s\n", p_sys->p_sdp);
+
/* Initialise each media subsession */
iter = new MediaSubsessionIterator( *p_sys->ms );
while( ( sub = iter->next() ) != NULL )
@@ -1090,6 +1108,18 @@ static int SessionsSetup( demux_t *p_demux )
}
}
+ /* Try and parse a=lang: attribute */
+ p_lang = strstr(sub->savedSDPLines(), "a=lang:");
+ if (!p_lang)
+ p_lang = p_sess_lang;
+
+ if (p_lang) {
+ unsigned i_lang_len;
+ p_lang += 7;
+ i_lang_len = strcspn(p_lang, " \r\n");
+ tk->fmt.psz_language = strndup(p_lang, i_lang_len);
+ }
+
if( !tk->b_quicktime && !tk->b_muxed && !tk->b_asf )
{
tk->p_es = es_out_Add( p_demux->out, &tk->fmt );
--
1.8.5.1
More information about the vlc-devel
mailing list