Este es el código del error.
Código:
root@admon-virtual-machine:/home/admon/Escritorio/UltraGrid-nightly# make g++ -g -O2 -I. -std=gnu++11 -fPIC -msse4 -I/usr/include/groupsock -I/usr/include/liveMedia -I/usr/include/BasicUsageEnvironment -I/usr/include/UsageEnvironment -g -DHAVE_CONFIG_H -DPATH_PREFIX='"/usr/local"' -DLIB_DIR='"/usr/local/lib"' -Wall -Wextra -Wpointer-arith -DGF_BITS=16 -D_GNU_SOURCE -Isrc -I. -I./src -I./test -Idxt_compress -I./speex-1.2rc1/include -c src/rtsp/BasicRTSPOnlySubsession.cpp -o src/rtsp/BasicRTSPOnlySubsession.o src/rtsp/BasicRTSPOnlySubsession.cpp: In member function ‘virtual void BasicRTSPOnlySubsession::startStream(unsigned int, void*, void (*)(void*), void*, short unsigned int&, unsigned int&, void (*)(void*, u_int8_t), void*)’: src/rtsp/BasicRTSPOnlySubsession.cpp:243:11: error: ‘struct msg_sender’ has no member named ‘port’ msgV1->port = ntohs(Vdestination->rtpPort.num()); ^ src/rtsp/BasicRTSPOnlySubsession.cpp:272:11: error: ‘struct msg_sender’ has no member named ‘port’ msgA1->port = ntohs(Adestination->rtpPort.num()); ^ src/rtsp/BasicRTSPOnlySubsession.cpp: In member function ‘virtual void BasicRTSPOnlySubsession::deleteStream(unsigned int, void*&)’: src/rtsp/BasicRTSPOnlySubsession.cpp:304:11: error: ‘struct msg_sender’ has no member named ‘port’ msgV1->port = rtp_port; ^ src/rtsp/BasicRTSPOnlySubsession.cpp:334:11: error: ‘struct msg_sender’ has no member named ‘port’ msgA1->port = rtp_port_audio; ^ make: *** [src/rtsp/BasicRTSPOnlySubsession.o] Error 1
Código:
/* * FILE: BasicRTSPOnlyServer.cpp * AUTHORS: David Cassany <[email protected]> * Gerard Castillo <[email protected]> * * Copyright (c) 2005-2010 Fundació i2CAT, Internet I Innovació Digital a Catalunya * * Redistribution and use in source and binary forms, with or without * modification, is permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * * This product includes software developed by the Fundació i2CAT, * Internet I Innovació Digital a Catalunya. This product also includes * software developed by CESNET z.s.p.o. * * 4. Neither the name of the University nor of the Institute may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO * EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ #include "rtsp/BasicRTSPOnlyServer.hh" #include "rtsp/BasicRTSPOnlySubsession.hh" BasicRTSPOnlyServer *BasicRTSPOnlyServer::srvInstance = NULL; BasicRTSPOnlyServer::BasicRTSPOnlyServer(int port, struct module *mod, rtps_types_t avType, audio_codec_t audio_codec, int audio_sample_rate, int audio_channels, int audio_bps, int rtp_port, int rtp_port_audio){ if(mod == NULL){ exit(1); } this->fPort = port; this->mod = mod; this->avType = avType; this->audio_codec = audio_codec; this->audio_sample_rate = audio_sample_rate; this->audio_channels = audio_channels; this->audio_bps = audio_bps; this->rtp_port = rtp_port; this->rtp_port_audio = rtp_port_audio; this->rtspServer = NULL; this->env = NULL; this->srvInstance = this; } BasicRTSPOnlyServer* BasicRTSPOnlyServer::initInstance(int port, struct module *mod, rtps_types_t avType, audio_codec_t audio_codec, int audio_sample_rate, int audio_channels, int audio_bps, int rtp_port, int rtp_port_audio){ if (srvInstance != NULL){ return srvInstance; } return new BasicRTSPOnlyServer(port, mod, avType, audio_codec, audio_sample_rate, audio_channels, audio_bps, rtp_port, rtp_port_audio); } BasicRTSPOnlyServer* BasicRTSPOnlyServer::getInstance(){ if (srvInstance != NULL){ return srvInstance; } return NULL; } int BasicRTSPOnlyServer::init_server() { if (env != NULL || rtspServer != NULL || mod == NULL || (avType >= NUM_RTSP_FORMATS && avType < 0)){ exit(1); } //setting livenessTimeoutTask unsigned reclamationTestSeconds = 60; TaskScheduler* scheduler = BasicTaskScheduler::createNew(); env = BasicUsageEnvironment::createNew(*scheduler); UserAuthenticationDatabase* authDB = NULL; #ifdef ACCESS_CONTROL // To implement client access control to the RTSP server, do the following: authDB = new UserAuthenticationDatabase; authDB->addUserRecord("i2cat", "ultragrid"); // replace these with real strings // Repeat the above with each <username>, <password> that you wish to allow // access to the server. #endif if (fPort == 0){ fPort = 8554; } rtspServer = RTSPServer::createNew(*env, fPort, authDB, reclamationTestSeconds); if (rtspServer == NULL) { *env << "Failed to create RTSP server: " << env->getResultMsg() << "\n"; exit(1); } ServerMediaSession* sms; sms = ServerMediaSession::createNew(*env, "ultragrid", "UltraGrid RTSP server enabling standard transport", "UltraGrid RTSP server"); if(avType == av){ sms->addSubsession(BasicRTSPOnlySubsession ::createNew(*env, True, mod, audio, audio_codec, audio_sample_rate, audio_channels, audio_bps, rtp_port, rtp_port_audio)); sms->addSubsession(BasicRTSPOnlySubsession ::createNew(*env, True, mod, video, audio_codec, audio_sample_rate, audio_channels, audio_bps, rtp_port, rtp_port_audio)); }else if(avType == audio){ sms->addSubsession(BasicRTSPOnlySubsession ::createNew(*env, True, mod, audio, audio_codec, audio_sample_rate, audio_channels, audio_bps, rtp_port, rtp_port_audio)); }else if(avType == video){ sms->addSubsession(BasicRTSPOnlySubsession ::createNew(*env, True, mod, video, audio_codec, audio_sample_rate, audio_channels, audio_bps, rtp_port, rtp_port_audio)); }else{ *env << "\n[RTSP Server] Error when trying to play stream type: \"" << avType << "\"\n"; exit(1); } rtspServer->addServerMediaSession(sms); char* url = rtspServer->rtspURL(sms); *env << "\n[RTSP Server] Play this stream using the URL \"" << url << "\"\n"; delete[] url; return 0; } void *BasicRTSPOnlyServer::start_server(void *args){ char* watch = (char*) args; BasicRTSPOnlyServer* instance = getInstance(); if (instance == NULL || instance->env == NULL || instance->rtspServer == NULL){ return NULL; } instance->env->taskScheduler().doEventLoop(watch); Medium::close(instance->rtspServer); delete &instance->env->taskScheduler(); instance->env->reclaim(); return NULL; }