int ReadConfigFile (const char *configFileName, CLiveConfig *pConfig) { char *addr = get_host_ip_address(); udp_set_multicast_src(addr); free(addr); try { pConfig->ReadFile(configFileName); #ifndef HAVE_ALSA if (strcmp(pConfig->GetStringValue(CONFIG_AUDIO_SOURCE_TYPE), AUDIO_SOURCE_ALSA) == 0) { error_message("Audio source from config is alsa, and not configured"); error_message("Switching to OSS"); pConfig->SetStringValue(CONFIG_AUDIO_SOURCE_TYPE, AUDIO_SOURCE_OSS); } #endif if (!pConfig->IsDefault(CONFIG_RECORD_MP4_OVERWRITE)) { pConfig->SetIntegerValue(CONFIG_RECORD_MP4_FILE_STATUS, FILE_MP4_APPEND); pConfig->SetToDefault(CONFIG_RECORD_MP4_OVERWRITE); } PrintDebugMessages = pConfig->GetBoolValue(CONFIG_APP_DEBUG); } catch (CConfigException* e) { delete e; return -1; } return 0; }
int parse_name_for_session (CPlayerSession *psptr, const char *name, char *errmsg, uint32_t errlen, control_callback_vft_t *cc_vft) { int err; #ifdef HAVE_IGMP_V3 // gross, but here for multiple files const char *mcast_src = config.get_config_string(CONFIG_MULTICAST_SRC); if (mcast_src != NULL) { udp_set_multicast_src(mcast_src); } else { udp_set_multicast_src("0.0.0.0"); } #endif ADV_SPACE(name); if (strncmp(name, "rtsp://", strlen("rtsp://")) == 0) { err = create_media_for_streaming_ondemand(psptr, name, errmsg, errlen, cc_vft); return (err); } if (strncmp(name, "http://", strlen("http://")) == 0) { err = create_media_for_http(psptr, name, errmsg, errlen, cc_vft); return (err); } int have_audio_driver; have_audio_driver = do_we_have_audio(); #ifndef _WIN32 if (strncmp(name, "iptv://", strlen("iptv://")) == 0) { err = create_media_for_iptv(psptr, name, errmsg, errlen, have_audio_driver, cc_vft); return err; } #endif #ifndef _WIN32 if (strncmp(name, "mpeg2t://", strlen("mpeg2t://")) == 0) { err = create_mpeg2t_session(psptr, name, NULL, errmsg, errlen, have_audio_driver, cc_vft); return (err); } struct stat statbuf; if (stat(name, &statbuf) != 0) { snprintf(errmsg, errlen, "File \'%s\' not found", name); return (-1); } if (!S_ISREG(statbuf.st_mode)) { snprintf(errmsg, errlen, "File \'%s\' is not a file", name); return (-1); } #else OFSTRUCT ReOpenBuff; if (OpenFile(name, &ReOpenBuff,OF_READ) == HFILE_ERROR) { snprintf(errmsg, errlen, "File %s not found", name); return (-1); } #endif err = -1; const char *suffix = strrchr(name, '.'); if (suffix == NULL) { snprintf(errmsg, errlen, "No useable suffix on file %s", name); return err; } if (strcasecmp(suffix, ".sdp") == 0) { err = create_media_from_sdp_file(psptr, name, errmsg, errlen, have_audio_driver, cc_vft); } else if ((strcasecmp(suffix, ".mov") == 0) || (strcasecmp(suffix, ".mp4") == 0) || (strcasecmp(suffix, ".3gp") == 0) || (strcasecmp(suffix, ".m4a") == 0)) { if (config.get_config_value(CONFIG_USE_OLD_MP4_LIB) == 0) { err = create_media_for_mp4_file(psptr, name, errmsg, errlen, have_audio_driver, cc_vft); } else err = -1; if (err < 0) { err = create_media_for_qtime_file(psptr, name, errmsg, errlen, have_audio_driver); } } else if (strcasecmp(suffix, ".avi") == 0) { err = create_media_for_avi_file(psptr, name, errmsg, errlen, have_audio_driver, cc_vft); } else if (strcasecmp(suffix, ".mpeg") == 0 || strcasecmp(suffix, ".mpg") == 0 || strcasecmp(suffix, ".vob") == 0) { #ifdef _WIN32 err = -1; #else err = create_media_for_mpeg2t_file(psptr, name, errmsg, errlen, have_audio_driver, cc_vft); if (err < 0) { err = create_media_for_mpeg_file(psptr, name, errmsg, errlen, have_audio_driver, cc_vft); } #endif } else { // raw files codec_data_t *cdata = NULL; double maxtime; char *desc[4]; bool is_video = false; codec_plugin_t *codec; desc[0] = NULL; desc[1] = NULL; desc[2] = NULL; desc[3] = NULL; if (have_audio_driver) { cdata = audio_codec_check_for_raw_file(name, &codec, &maxtime, desc, &config); } if (cdata == NULL) { cdata = video_codec_check_for_raw_file(name, &codec, &maxtime, desc, &config); is_video = true; } if (cdata == NULL) { err = -1; } else { CPlayerMedia *mptr; /* * Create the player media, and the bytestream */ mptr = new CPlayerMedia(psptr); COurInByteStreamFile *fbyte; fbyte = new COurInByteStreamFile(codec, cdata, maxtime); mptr->create(fbyte, is_video); mptr->set_plugin_data(codec, cdata, is_video ? get_video_vft() : NULL, is_video ? NULL : get_audio_vft()); for (int ix = 0; ix < 4; ix++) if (desc[ix] != NULL) psptr->set_session_desc(ix, desc[ix]); if (maxtime != 0.0) { psptr->session_set_seekable(1); } err = 0; } } if (err >= 0) { const char *temp; temp = psptr->get_session_desc(0); if (temp == NULL) { psptr->set_session_desc(0, name); } } return (err); }