Пример #1
0
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;
}
Пример #2
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);
}