static Bool MP3_CanHandleURL(GF_InputService *plug, const char *url) { char *sExt; sExt = strrchr(url, '.'); if (!sExt) return 0; if (gf_term_check_extension(plug, "audio/mpeg", "mp2 mp3 mpga mpega", "MP3 Music", sExt)) return 1; if (gf_term_check_extension(plug, "audio/x-mpeg", "mp2 mp3 mpga mpega", "MP3 Music", sExt)) return 1; return 0; }
static Bool AAC_CanHandleURL(GF_InputService *plug, const char *url) { char *sExt; sExt = strrchr(url, '.'); if (!sExt) return 0; if (gf_term_check_extension(plug, "audio/x-m4a", "aac", "MPEG-4 AAC Music", sExt)) return 1; if (gf_term_check_extension(plug, "audio/aac", "aac", "MPEG-4 AAC Music", sExt)) return 1; if (gf_term_check_extension(plug, "audio/aacp", "aac", "MPEG-4 AACPlus Music", sExt)) return 1; return 0; }
static Bool SAF_CanHandleURL(GF_InputService *plug, const char *url) { char *sExt; if (!plug || !url) return 0; sExt = strrchr(url, '.'); if (gf_term_check_extension(plug, SAF_MIME, SAF_MIME_EXT, SAF_MIME_DESC, sExt)) return 1; return 0; }
Bool MPD_CanHandleURL(GF_InputService *plug, const char *url) { u32 i; char *sExt; if (!plug || !url) return 0; sExt = strrchr(url, '.'); GF_LOG(GF_LOG_DEBUG, GF_LOG_DASH, ("[MPD_IN] Received Can Handle URL request from terminal for %s\n", url)); for (i = 0 ; GF_DASH_MPD_MIME_TYPES[i]; i++) { if (gf_term_check_extension(plug, GF_DASH_MPD_MIME_TYPES[i], MPD_MPD_EXT, MPD_MPD_DESC, sExt)) return 1; } for (i = 0 ; GF_DASH_M3U8_MIME_TYPES[i]; i++) { if (gf_term_check_extension(plug, GF_DASH_M3U8_MIME_TYPES[i], MPD_M3U8_EXT, MPD_M3U8_DESC, sExt)) return 1; } return gf_dash_check_mpd_root_type(url); }
static Bool AC3_CanHandleURL(GF_InputService *plug, const char *url) { char *sExt; u32 i; sExt = strrchr(url, '.'); for (i = 0 ; AC3_MIMES[i]; i++){ if (gf_term_check_extension(plug, AC3_MIMES[i], AC3_EXTS, AC3_DESC, sExt)) return 1; } return 0; }
Bool ISOR_CanHandleURL(GF_InputService *plug, const char *url) { char *ext; if (!strnicmp(url, "rtsp://", 7)) return 0; ext = strrchr(url, '.'); { u32 i; /* We don't start at 0 since first one is specific */ for (i = 3 ; ISOR_MIME_TYPES[i]; i+=3) if (gf_term_check_extension(plug, ISOR_MIME_TYPES[i], ISOR_MIME_TYPES[i+1], ISOR_MIME_TYPES[i+2], ext)) return 1; } if (ext && gf_isom_probe_file(url)) { gf_term_check_extension(plug, ISOR_MIME_TYPES[0], ext+1, ISOR_MIME_TYPES[2], ext); return 1; } return 0; }
static Bool VTT_CanHandleURL(GF_InputService *plug, const char *url) { const char *sExt; u32 i; if (!plug || !url) return GF_FALSE; sExt = strrchr(url, '.'); if (!sExt) return GF_FALSE; for (i = 0 ; VTT_MIME_TYPES[i]; i+=3){ if (gf_term_check_extension(plug, VTT_MIME_TYPES[i], VTT_MIME_TYPES[i+1], VTT_MIME_TYPES[i+2], sExt)) return GF_TRUE; } return GF_FALSE; }
static Bool TTIn_CanHandleURL(GF_InputService *plug, const char *url) { char *sExt; u32 i; if (!plug || !url) return 0; sExt = strrchr(url, '.'); if (!sExt) return 0; for (i = 0 ; TTIN_MIME_TYPES[i]; i+=3) { if (gf_term_check_extension(plug, TTIN_MIME_TYPES[i], TTIN_MIME_TYPES[i+1], TTIN_MIME_TYPES[i+2], sExt)) return 1; } return 0; }
static Bool MP3_CanHandleURL(GF_InputService *plug, const char *url) { char *sExt; if (!plug || !url) return 0; sExt = strrchr(url, '.'); if (!strnicmp(url, "rtsp://", 7)) return 0; { u32 i; for (i =0 ; MP3_MIME_TYPES[i] ; i++) if (gf_term_check_extension(plug, MP3_MIME_TYPES[i], MP3_EXTENSIONS, MP3_DESC, sExt)) return 1; } return 0; }
Bool DC_CanHandleURL(GF_InputService *plug, const char *url) { char *sExt; if (!plug || !url) return 0; sExt = strrchr(url, '.'); if (sExt) { Bool ok = 0; char *cgi_par; if (!strnicmp(sExt, ".gz", 3)) sExt = strrchr(sExt, '.'); if (!strnicmp(url, "rtsp://", 7)) return 0; cgi_par = strchr(sExt, '?'); if (cgi_par) cgi_par[0] = 0; { u32 i; for (i = 0 ; DC_MIME_TYPES[i] ; i+=3) if (0 != (ok = gf_term_check_extension(plug, DC_MIME_TYPES[i], DC_MIME_TYPES[i+1], DC_MIME_TYPES[i+2], sExt))) break; } if (cgi_par) cgi_par[0] = '?'; if (ok) return 1; } /*views:// internal URI*/ if (!strnicmp(url, "views://", 8)) return 1; if (!strncmp(url, "\\\\", 2)) return 0; if (!strnicmp(url, "file://", 7) || !strstr(url, "://")) { char *rtype = gf_xml_get_root_type(url, NULL); if (rtype) { Bool handled = 0; if (!strcmp(rtype, "SAFSession")) handled = 1; else if (!strcmp(rtype, "XMT-A")) handled = 1; else if (!strcmp(rtype, "X3D")) handled = 1; else if (!strcmp(rtype, "svg")) handled = 1; else if (!strcmp(rtype, "bindings")) handled = 1; else if (!strcmp(rtype, "widget")) handled = 1; gf_free(rtype); return handled; } } return 0; }
static Bool RP_CanHandleURL(GF_InputService *plug, const char *url) { char *sExt; if (!plug || !url) return 0; sExt = strrchr(url, '.'); if (sExt && gf_term_check_extension(plug, sdp_mime, sdp_exts, sdp_desc, sExt)) return 1; /*local */ if (strstr(url, "data:application/sdp")) return 1; /*embedded data*/ if (strstr(url, "data:application/mpeg4-od-au;base64") || strstr(url, "data:application/mpeg4-bifs-au;base64") || strstr(url, "data:application/mpeg4-es-au;base64")) return 1; /*we need rtsp/tcp , rtsp/udp or direct RTP sender (no control)*/ if (!strnicmp(url, "rtsp://", 7) || !strnicmp(url, "rtspu://", 8) || !strnicmp(url, "rtp://", 6)) return 1; /*we don't check extensions*/ return 0; }
static Bool M2TS_CanHandleURL(GF_InputService *plug, const char *url) { char *sExt; if (!plug || !url) return 0; if (!strnicmp(url, "udp://", 6) || !strnicmp(url, "mpegts-udp://", 13) || !strnicmp(url, "mpegts-tcp://", 13) #ifdef GPAC_HAS_LINUX_DVB || !strnicmp(url, "dvb://", 6) #endif ) { return 1; } sExt = strrchr(url, '.'); { int i=0; for (i = 0 ; NULL != MIMES[i]; i++) if (gf_term_check_extension(plug, MIMES[i], "ts m2t dmb", "MPEG-2 TS", sExt)) return 1; } return 0; }
static Bool FFD_CanHandleURL(GF_InputService *plug, const char *url) { Bool has_audio, has_video; s32 i; AVFormatContext *ctx; AVOutputFormat *fmt_out; Bool ret = 0; char *ext, szName[1000], szExt[20]; const char *szExtList; if (!plug || !url) return 0; /*disable RTP/RTSP from ffmpeg*/ if (!strnicmp(url, "rtsp://", 7)) return 0; if (!strnicmp(url, "rtspu://", 8)) return 0; if (!strnicmp(url, "rtp://", 6)) return 0; if (!strnicmp(url, "plato://", 8)) return 0; if (!strnicmp(url, "udp://", 6)) return 0; if (!strnicmp(url, "tcp://", 6)) return 0; if (!strnicmp(url, "data:", 5)) return 0; strcpy(szName, url); ext = strrchr(szName, '#'); if (ext) ext[0] = 0; ext = strrchr(szName, '?'); if (ext) ext[0] = 0; ext = strrchr(szName, '.'); if (ext && strlen(ext) > 19) ext = NULL; if (ext && strlen(ext) > 1) { strcpy(szExt, &ext[1]); strlwr(szExt); #ifndef FFMPEG_DEMUX_ENABLE_MPEG2TS if (!strcmp(szExt, "ts")) return 0; #endif /*note we forbid ffmpeg to handle files we support*/ if (!strcmp(szExt, "mp4") || !strcmp(szExt, "mpg4") || !strcmp(szExt, "m4a") || !strcmp(szExt, "m21") || !strcmp(szExt, "m4v") || !strcmp(szExt, "m4a") || !strcmp(szExt, "m4s") || !strcmp(szExt, "3gs") || !strcmp(szExt, "3gp") || !strcmp(szExt, "3gpp") || !strcmp(szExt, "3gp2") || !strcmp(szExt, "3g2") || !strcmp(szExt, "mp3") || !strcmp(szExt, "ac3") || !strcmp(szExt, "amr") || !strcmp(szExt, "bt") || !strcmp(szExt, "wrl") || !strcmp(szExt, "x3dv") || !strcmp(szExt, "xmt") || !strcmp(szExt, "xmta") || !strcmp(szExt, "x3d") || !strcmp(szExt, "jpg") || !strcmp(szExt, "jpeg") || !strcmp(szExt, "png") ) return 0; /*check any default stuff that should work with ffmpeg*/ { u32 i; for (i = 0 ; FFD_MIME_TYPES[i]; i+=3) { if (gf_term_check_extension(plug, FFD_MIME_TYPES[i], FFD_MIME_TYPES[i+1], FFD_MIME_TYPES[i+2], ext)) return 1; } } } ctx = NULL; if (open_file(&ctx, szName, NULL)<0) { AVInputFormat *av_in = NULL;; /*some extensions not supported by ffmpeg*/ if (ext && !strcmp(szExt, "cmp")) av_in = av_find_input_format("m4v"); if (open_file(&ctx, szName, av_in)<0) { return 0; } } if (!ctx || av_find_stream_info(ctx) <0) goto exit; /*figure out if we can use codecs or not*/ has_video = has_audio = 0; for(i = 0; i < (s32)ctx->nb_streams; i++) { AVCodecContext *enc = ctx->streams[i]->codec; switch(enc->codec_type) { case AVMEDIA_TYPE_AUDIO: if (!has_audio) has_audio = 1; break; case AVMEDIA_TYPE_VIDEO: if (!has_video) has_video= 1; break; default: break; } } if (!has_audio && !has_video) goto exit; ret = 1; #if LIBAVFORMAT_VERSION_MAJOR < 53 && LIBAVFORMAT_VERSION_MINOR < 45 fmt_out = guess_stream_format(NULL, url, NULL); #else fmt_out = av_guess_format(NULL, url, NULL); #endif if (fmt_out) gf_term_register_mime_type(plug, fmt_out->mime_type, fmt_out->extensions, fmt_out->name); else { ext = strrchr(szName, '.'); if (ext) { strcpy(szExt, &ext[1]); strlwr(szExt); szExtList = gf_modules_get_option((GF_BaseInterface *)plug, "MimeTypes", "application/x-ffmpeg"); if (!szExtList) { gf_term_register_mime_type(plug, "application/x-ffmpeg", szExt, "Other Movies (FFMPEG)"); } else if (!strstr(szExtList, szExt)) { u32 len; char *buf; len = (u32) (strlen(szExtList) + strlen(szExt) + 10); buf = gf_malloc(sizeof(char)*len); sprintf(buf, "\"%s ", szExt); strcat(buf, &szExtList[1]); gf_modules_set_option((GF_BaseInterface *)plug, "MimeTypes", "application/x-ffmpeg", buf); gf_free(buf); } } } exit: if (ctx) av_close_input_file(ctx); return ret; }