⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shoutcast.c

📁 VLC Player Source Code
💻 C
📖 第 1 页 / 共 2 页
字号:
                if( !strcmp( psz_eltname, "genre" ) )                {                    char* psz_mrl;                    if( asprintf( &psz_mrl, SHOUTCAST_BASE_URL "?genre=%s",                             psz_name ) != -1 )                    {                        p_input = input_item_NewExt( p_demux, psz_mrl,                                                    psz_name, 0, NULL, -1 );                        input_item_CopyOptions( p_sys->p_current_input, p_input );                        free( psz_mrl );                        input_item_AddSubItem( p_sys->p_current_input, p_input );                        vlc_gc_decref( p_input );                    }                    FREENULL( psz_name );                }                FREENULL( psz_eltname );                break;        }    }    return 0;}/* radio stations: * <stationlist> *   <tunein base="/sbin/tunein-station.pls"></tunein> *   <station name="the name" *            mt="mime type" *            id="the id" *            br="bit rate" *            genre="A big genre string" *            ct="current track name/author/..." *            lc="listener count"></station> * </stationlist> * * TV stations: * <stationlist> *   <tunein base="/sbin/tunein-station.pls"></tunein> *   <station name="the name" *            id="the id" *            br="bit rate" *            rt="rating" *            load="server load ?" *            ct="current track name/author/..." *            genre="A big genre string" *            lc="listener count"></station> * </stationlist> **/static int DemuxStation( demux_t *p_demux ){    demux_sys_t *p_sys = p_demux->p_sys;    input_item_t *p_input;    char *psz_base = NULL; /* */    char *psz_name = NULL; /* genre name */    char *psz_mt = NULL; /* mime type */    char *psz_id = NULL; /* id */    char *psz_br = NULL; /* bit rate */    char *psz_genre = NULL; /* genre */    char *psz_ct = NULL; /* current track */    char *psz_lc = NULL; /* listener count */    /* If these are set then it's *not* a radio but a TV */    char *psz_rt = NULL; /* rating for shoutcast TV */    char *psz_load = NULL; /* load for shoutcast TV */    char *psz_eltname = NULL; /* tag name */    while( xml_ReaderRead( p_sys->p_xml_reader ) == 1 )    {        int i_type;        // Get the node type        i_type = xml_ReaderNodeType( p_sys->p_xml_reader );        switch( i_type )        {            // Error            case -1:                return -1;                break;            case XML_READER_STARTELEM:                // Read the element name                psz_eltname = xml_ReaderName( p_sys->p_xml_reader );                if( !psz_eltname ) return -1;                // Read the attributes                if( !strcmp( psz_eltname, "tunein" ) )                {                    while( xml_ReaderNextAttr( p_sys->p_xml_reader ) == VLC_SUCCESS )                    {                        char *psz_attrname = xml_ReaderName( p_sys->p_xml_reader );                        char *psz_attrvalue =                            xml_ReaderValue( p_sys->p_xml_reader );                        if( !psz_attrname || !psz_attrvalue )                        {                            free( psz_eltname );                            free( psz_attrname );                            free( psz_attrvalue );                            return -1;                        }                        GET_VALUE( base )                        else                        {                            msg_Warn( p_demux,                                      "unexpected attribure %s in element %s",                                      psz_attrname, psz_eltname );                        }                        free( psz_attrname );                        free( psz_attrvalue );                    }                }                else if( !strcmp( psz_eltname, "station" ) )                {                    while( xml_ReaderNextAttr( p_sys->p_xml_reader ) == VLC_SUCCESS )                    {                        char *psz_attrname = xml_ReaderName( p_sys->p_xml_reader );                        char *psz_attrvalue =                            xml_ReaderValue( p_sys->p_xml_reader );                        if( !psz_attrname || !psz_attrvalue )                        {                            free( psz_eltname );                            free( psz_attrname );                            free( psz_attrvalue );                            return -1;                        }                        GET_VALUE( name )                        else GET_VALUE( mt )                        else GET_VALUE( id )                        else GET_VALUE( br )                        else GET_VALUE( genre )                        else GET_VALUE( ct )                        else GET_VALUE( lc )                        else GET_VALUE( rt )                        else GET_VALUE( load )                        else                        {                            msg_Warn( p_demux,                                      "unexpected attribute %s in element %s",                                      psz_attrname, psz_eltname );                        }                        free( psz_attrname );                        free( psz_attrvalue );                    }                }                free( psz_eltname );                break;            case XML_READER_TEXT:                break;            // End element            case XML_READER_ENDELEM:                // Read the element name                psz_eltname = xml_ReaderName( p_sys->p_xml_reader );                if( !psz_eltname ) return -1;                if( !strcmp( psz_eltname, "station" ) &&                    ( psz_base || ( psz_rt && psz_load &&                    ( p_sys->b_adult || strcmp( psz_rt, "NC17" ) ) ) ) )                {                    char *psz_mrl = NULL;                    if( psz_rt || psz_load )                    {                        /* tv */                        psz_mrl = malloc( strlen( SHOUTCAST_TV_TUNEIN_URL )                                          + strlen( psz_id ) + 1 );                        sprintf( psz_mrl, SHOUTCAST_TV_TUNEIN_URL "%s",                                 psz_id );                    }                    else                    {                        /* radio */                        psz_mrl = malloc( strlen( SHOUTCAST_TUNEIN_BASE_URL )                            + strlen( psz_base ) + strlen( "?id=" )                            + strlen( psz_id ) + 1 );                        sprintf( psz_mrl, SHOUTCAST_TUNEIN_BASE_URL "%s?id=%s",                             psz_base, psz_id );                    }                    p_input = input_item_NewExt( p_demux, psz_mrl,                                                psz_name , 0, NULL, -1 );                    free( psz_mrl );                    input_item_CopyOptions( p_sys->p_current_input,                                                p_input );#define SADD_INFO( type, field ) if( field ) { input_item_AddInfo( \                    p_input, _("Shoutcast"), _(type), "%s", field ) ; }                    SADD_INFO( "Mime type", psz_mt );                    SADD_INFO( "Bitrate", psz_br );                    SADD_INFO( "Listeners", psz_lc );                    SADD_INFO( "Load", psz_load );                    if( psz_genre )                        input_item_SetGenre( p_input, psz_genre );                    if( psz_ct )                        input_item_SetNowPlaying( p_input, psz_ct );                    if( psz_rt )                        input_item_SetRating( p_input, psz_rt );                    input_item_AddSubItem( p_sys->p_current_input, p_input );                    vlc_gc_decref( p_input );                    FREENULL( psz_name );                    FREENULL( psz_mt );                    FREENULL( psz_id );                    FREENULL( psz_br );                    FREENULL( psz_genre );                    FREENULL( psz_ct );                    FREENULL( psz_lc );                    FREENULL( psz_rt );                }                free( psz_eltname );                break;        }    }    return 0;}static int Control( demux_t *p_demux, int i_query, va_list args ){    VLC_UNUSED(p_demux); VLC_UNUSED(i_query); VLC_UNUSED(args);    return VLC_EGENERIC;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -