* Added the QuickTime RTSPtext redirect system. uses m3u, even though they are not related.
* Added the WM Server [Reference] redirects to the pls playlist demux. it's also INI based.
This fixes #690
int E_(Import_ASX)( vlc_object_t *p_this )
{
demux_t *p_demux = (demux_t *)p_this;
-
- char *psz_ext;
-
- psz_ext = strrchr ( p_demux->psz_path, '.' );
-
- if( ( psz_ext && !strcasecmp( psz_ext, ".asx") ) ||
- ( psz_ext && !strcasecmp( psz_ext, ".wax") ) ||
- ( psz_ext && !strcasecmp( psz_ext, ".wvx") ) ||
+ uint8_t *p_peek;
+ CHECK_PEEK( p_peek, 10 );
+
+ if( POKE( p_peek, "<asx", 4 ) || isExtension( p_demux, ".asx" ) ||
+ isExtension( p_demux, ".wax" ) || isExtension( p_demux, ".wvx" ) ||
isDemux( p_demux, "asx-open" ) )
{
;
}
else
- {
return VLC_EGENERIC;
- }
- STANDARD_DEMUX_INIT_MSG( "using ASX playlist reader" );
+
+ STANDARD_DEMUX_INIT_MSG( "found valid ASX playlist" );
p_demux->p_sys->psz_prefix = E_(FindPrefix)( p_demux );
p_demux->p_sys->psz_data = NULL;
p_demux->p_sys->i_data_len = -1;
int E_(Import_M3U)( vlc_object_t *p_this )
{
demux_t *p_demux = (demux_t *)p_this;
-
uint8_t *p_peek;
- char *psz_ext;
-
- if( stream_Peek( p_demux->s , &p_peek, 7 ) < 7 )
- {
- return VLC_EGENERIC;
- }
- psz_ext = strrchr ( p_demux->psz_path, '.' );
-
- if( !strncmp( (char *)p_peek, "#EXTM3U", 7 ) )
- {
- ;
- }
- else if( ( psz_ext && !strcasecmp( psz_ext, ".m3u") ) ||
- ( psz_ext && !strcasecmp( psz_ext, ".ram") ) ||
- ( psz_ext && !strcasecmp( psz_ext, ".rm") ) ||
- ( psz_ext && !strcasecmp( psz_ext, ".vlc") ) ||
- /* A .ram file can contain a single rtsp link */
- isDemux( p_demux, "m3u" ) )
+ CHECK_PEEK( p_peek, 8 );
+
+ if( POKE( p_peek, "#EXTM3U", 7 ) || POKE( p_peek, "RTSPtext", 8 ) ||
+ isExtension( p_demux, ".m3u" ) || isExtension( p_demux, ".vlc" ) ||
+ /* A .ram file can contain a single rtsp link */
+ isExtension( p_demux, ".ram" ) || isExtension( p_demux, ".rm" ) ||
+ isDemux( p_demux, "m3u" ) )
{
;
}
else
- {
return VLC_EGENERIC;
- }
+
STANDARD_DEMUX_INIT_MSG( "found valid M3U playlist" );
p_demux->p_sys->psz_prefix = E_(FindPrefix)( p_demux );
psz_option );
}
}
+ else if( !strncasecmp( psz_parse, "RTSPtext", sizeof("RTSPtext") -1 ) )
+ {
+ ;/* special case to handle QuickTime RTSPtext redirect files */
+ }
else if( *psz_parse )
{
char *psz_mrl;
{
demux_t *p_demux = (demux_t *)p_this;
uint8_t *p_peek;
- CHECK_PEEK( p_peek, 7 );
+ CHECK_PEEK( p_peek, 10 );
- if( POKE( p_peek, "[playlist]", 10 ) ||
+ if( POKE( p_peek, "[playlist]", 10 ) || POKE( p_peek, "[Reference]", 10 ) ||
isExtension( p_demux, ".pls" ) || isDemux( p_demux, "pls" ) )
{
;
char *psz_mrl = NULL;
char *psz_key;
char *psz_value;
- int i_position;
int i_item = -1;
int i_new_item = 0;
int i_key_length;
while( ( psz_line = stream_ReadLine( p_demux->s ) ) )
{
- if( !strncasecmp( psz_line, "[playlist]", sizeof("[playlist]")-1 ) )
+ if( !strncasecmp( psz_line, "[playlist]", sizeof("[playlist]")-1 ) ||
+ !strncasecmp( psz_line, "[Reference]", sizeof("[Reference]")-1 ) )
{
free( psz_line );
continue;
}
/* find the number part of of file1, title1 or length1 etc */
i_key_length = strlen( psz_key );
- if( i_key_length >= 5 ) /* file1 type case */
+ if( i_key_length >= 4 ) /* Ref1 type case */
{
- i_new_item = atoi( psz_key + 4 );
- if( i_new_item == 0 && i_key_length >= 6 ) /* title1 type case */
+ i_new_item = atoi( psz_key + 3 );
+ if( i_new_item == 0 && i_key_length >= 5 ) /* file1 type case */
{
- i_new_item = atoi( psz_key + 5 );
- if( i_new_item == 0 && i_key_length >= 7 ) /* length1 type case */
+ i_new_item = atoi( psz_key + 4 );
+ if( i_new_item == 0 && i_key_length >= 6 ) /* title1 type case */
{
- i_new_item = atoi( psz_key + 6 );
+ i_new_item = atoi( psz_key + 5 );
+ if( i_new_item == 0 && i_key_length >= 7 ) /* length1 type case */
+ {
+ i_new_item = atoi( psz_key + 6 );
+ }
}
}
}
i_item = i_new_item;
i_new_item = 0;
}
- if( !strncasecmp( psz_key, "file", sizeof("file") -1 ) )
+ if( !strncasecmp( psz_key, "file", sizeof("file") -1 ) ||
+ !strncasecmp( psz_key, "Ref", sizeof("Ref") -1 ) )
{
psz_mrl = E_(ProcessMRL)( psz_value, p_demux->p_sys->psz_prefix );
}