From 56632c4b32abc705f613475c3b78ae7a5dd4a3d2 Mon Sep 17 00:00:00 2001 From: deva Date: Thu, 13 Oct 2005 09:08:32 +0000 Subject: *** empty log message *** --- etc/miav.conf | 13 +++---------- src/Makefile.am | 2 ++ src/audio_encoder.cc | 2 +- src/miav_config.h | 2 +- src/mov_encoder.cc | 2 +- src/mov_encoder_thread.cc | 4 ++-- src/mov_encoder_thread.h | 2 +- src/mov_encoder_writer.cc | 32 ++++++++++++++++++++++---------- src/mov_encoder_writer.h | 2 +- src/multicast.cc | 37 ++++--------------------------------- src/server.cc | 5 ++++- 11 files changed, 42 insertions(+), 61 deletions(-) diff --git a/etc/miav.conf b/etc/miav.conf index 708b4f6..62f1e9a 100644 --- a/etc/miav.conf +++ b/etc/miav.conf @@ -20,6 +20,9 @@ screensize = 19.0 pixel_width = 1024 pixel_height = 768 +# mcast conf file +multicast_configurationfile= "../etc/multicast.conf" + # Set to 1 if client is slow ( less than 1.5 ghz ) player_skip_frames = 1 @@ -35,16 +38,6 @@ server_group = "miav" server_movie_root = "/home/miav/miav_movie_files" server_image_root = "/home/miav/miav_image_files" -# Multicast adresses: -# 224.0.0.1 All systems on this subnet -# 224.0.0.2 All routers on this subnet -# 224.0.0.5 OSPF routers -# 224.0.0.6 OSPF designated routers -# 224.0.0.12 DHCP server/relay agent -server_multicast = false -server_multicast_addr = "224.0.0.1" -server_multicast_port = 1234 - # Video output controls. A sequence of I and P, where I is keyframes # which is fast to create, but uses a lot of discspace. # B uses changes since last frame, is more cpu intensive, but uses a diff --git a/src/Makefile.am b/src/Makefile.am index effa384..6a72a0d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -35,6 +35,7 @@ miav_SOURCES = $(shell if [ $QT_CXXFLAGS ] ; then ../tools/MocList cc; fi ) \ mov_encoder_thread.cc \ mov_encoder_writer.cc \ multicast.cc \ + multicast_configuration.cc \ multiplexer.cc \ mutex.cc \ network.cc \ @@ -88,6 +89,7 @@ EXTRA_DIST = \ mov_encoder_thread.h \ mov_encoder_writer.h \ multicast.h \ + multicast_configuration.h \ multiplexer.h \ mutex.h \ network.h \ diff --git a/src/audio_encoder.cc b/src/audio_encoder.cc index 119268c..6e412c3 100644 --- a/src/audio_encoder.cc +++ b/src/audio_encoder.cc @@ -52,7 +52,7 @@ void AudioEncoder::thread_main() info->info("AudioEncoder::run"); // Run with slightly lower priority than MovEncoderWriter - // nice(2); + nice(1); Frame *in_frame = NULL; Frame *out_frame = NULL; diff --git a/src/miav_config.h b/src/miav_config.h index 45732c1..a8658f1 100644 --- a/src/miav_config.h +++ b/src/miav_config.h @@ -72,7 +72,7 @@ public: string *readString(char *node); float readFloat(char *node); -private: +protected: Info *info; string filename; diff --git a/src/mov_encoder.cc b/src/mov_encoder.cc index 1132b63..a4d3483 100644 --- a/src/mov_encoder.cc +++ b/src/mov_encoder.cc @@ -77,7 +77,7 @@ void MovEncoder::thread_main() // int insize = 0; // Run with slightly lower priority than MovEncoderWriter AND AudioEncoder - // nice(3); + nice(2); FrameVector *item; Frame *in_frame; diff --git a/src/mov_encoder_thread.cc b/src/mov_encoder_thread.cc index 2e4c16b..6c54191 100644 --- a/src/mov_encoder_thread.cc +++ b/src/mov_encoder_thread.cc @@ -29,7 +29,7 @@ #include #include "miav_config.h" -MovEncoderThread::MovEncoderThread(const char *cpr, Info *i) +MovEncoderThread::MovEncoderThread(const char *clientip, const char *cpr, Info *i) { info = i; info->info("MovEncoderThread"); @@ -79,7 +79,7 @@ MovEncoderThread::MovEncoderThread(const char *cpr, Info *i) audioenc->run(); // Create the multiplexer - writer = new MovEncoderWriter(cpr, + writer = new MovEncoderWriter(clientip, cpr, video_output_queue, audio_output_queue, info); diff --git a/src/mov_encoder_thread.h b/src/mov_encoder_thread.h index 3e7c1aa..201a332 100644 --- a/src/mov_encoder_thread.h +++ b/src/mov_encoder_thread.h @@ -49,7 +49,7 @@ using namespace std; class MovEncoderThread { public: - MovEncoderThread(const char *cpr, Info *info); + MovEncoderThread(const char *clientip, const char *cpr, Info *info); ~MovEncoderThread(); void encode(Frame* frame); diff --git a/src/mov_encoder_writer.cc b/src/mov_encoder_writer.cc index 7f3bfec..d533b81 100644 --- a/src/mov_encoder_writer.cc +++ b/src/mov_encoder_writer.cc @@ -46,7 +46,9 @@ using namespace std; #include "multiplexer.h" -MovEncoderWriter::MovEncoderWriter(const char* cpr, +#include "multicast_configuration.h" + +MovEncoderWriter::MovEncoderWriter(const char *clientip, const char* cpr, ThreadSafeQueuePriority *video_q, ThreadSafeQueuePriority *audio_q, Info *i) @@ -57,6 +59,7 @@ MovEncoderWriter::MovEncoderWriter(const char* cpr, // Create path and filename char fname[256]; string *server_root; + string *mcconfig_file; char birthmonth[3]; char date[32]; @@ -81,15 +84,24 @@ MovEncoderWriter::MovEncoderWriter(const char* cpr, file = new File(fname, "mpg", info); - if(config->readBool("server_multicast")) { - string *addr = config->readString("server_multicast_addr"); - int port = config->readInt("server_multicast_port"); - info->info("Enabling multicast %s : %d", addr->c_str(), port); - multicast = new Multicast(info, (char*)addr->c_str(), port); - } else { - info->info("Disabling multicast"); - multicast = NULL; - } + // Get multicast configuration filename + mcconfig_file = config->readString("multicast_configurationfile"); + + MulticastConfiguration mcconfig(info, (char*)mcconfig_file->c_str()); + + mcastconf_t mcclientconf = mcconfig.getConf((char*)clientip); + + info->info("Client: %s - Enabled: %s - Addr: %s - Port: %d", + mcclientconf.client.c_str(), + mcclientconf.enabled?"Yes\0":"No\0", + mcclientconf.addr.c_str(), + mcclientconf.port); + + + multicast = NULL; + if(mcclientconf.enabled) multicast = new Multicast(info, + (char*)mcclientconf.addr.c_str(), + mcclientconf.port); video_queue = video_q; audio_queue = audio_q; diff --git a/src/mov_encoder_writer.h b/src/mov_encoder_writer.h index 00d5262..eaf4fc8 100644 --- a/src/mov_encoder_writer.h +++ b/src/mov_encoder_writer.h @@ -44,7 +44,7 @@ using namespace std; class MovEncoderWriter : public Thread { public: - MovEncoderWriter(const char* cpr, + MovEncoderWriter(const char *clientip, const char* cpr, ThreadSafeQueuePriority *video_queue, ThreadSafeQueuePriority *audio_queue, Info *info); diff --git a/src/multicast.cc b/src/multicast.cc index 80be2ce..34c7241 100644 --- a/src/multicast.cc +++ b/src/multicast.cc @@ -35,22 +35,6 @@ Multicast::Multicast(Info *i, char *addr, int port) { - /* - Multicast adresses: - 224.0.0.1 All systems on this subnet - 224.0.0.2 All routers on this subnet - 224.0.0.5 OSPF routers - 224.0.0.6 OSPF designated routers - 224.0.0.12 DHCP server/relay agent -server_multicast = true -server_multicast_addr = "224.0.0.1" -server_multicast_port = 1234 - */ - - // Multicast to all systems on this subnet - // char addr[] = "224.0.0.1"; - // int port = 1234; - info = i; if(!UDPOpen(addr, port)) info->error("Error creating socket %s:%d", addr, port); } @@ -61,17 +45,9 @@ Multicast::~Multicast() void Multicast::Write(void* buf, int size) { - // char addr[] = "192.168.0.10"; - // int port = 1234; - - if(write(sock, buf, size) != size) { - info->error("Error Writing to socket."); - // if(!UDPOpen(addr, port)) info->error("Error creating socket %s:%d", addr, port); - } + if(write(sock, buf, size) != size) info->error("Error Writing to socket."); } -#define USE_MULTICAST - bool Multicast::is_address_multicast(unsigned long address) { if((address & 255) >= 224 && (address & 255) <= 239) { @@ -106,12 +82,10 @@ bool Multicast::UDPOpen(char *address, int port) if(setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *) &enable, sizeof(unsigned long int)) < 0) return false; -#ifdef USE_MULTICAST // If the address is multicast, register to the multicast group - if(is_address_multicast(stAddr.sin_addr.s_addr)) - { + if(is_address_multicast(stAddr.sin_addr.s_addr)) { struct ip_mreq stMreq; - + // Bind the socket to port stLclAddr.sin_family = AF_INET; stLclAddr.sin_addr.s_addr = htonl(INADDR_ANY); @@ -123,10 +97,7 @@ bool Multicast::UDPOpen(char *address, int port) stMreq.imr_interface.s_addr = INADDR_ANY; if(setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) & stMreq, sizeof(stMreq)) < 0) return false; - } - else -#endif - { + } else { // Bind the socket to port stLclAddr.sin_family = AF_INET; stLclAddr.sin_addr.s_addr = htonl(INADDR_ANY); diff --git a/src/server.cc b/src/server.cc index 29571d6..34f0b30 100644 --- a/src/server.cc +++ b/src/server.cc @@ -57,6 +57,7 @@ void newConnection(Socket *socket, Info *info) { char cpr[256]; + char clientip[64]; bool hasCpr = false; ServerStatus status(info); @@ -71,6 +72,8 @@ void newConnection(Socket *socket, Info *info) info->info("CONNECTION OPENED"); info->info("New connection (%s)", inet_ntoa(socket->socketaddr.sin_addr)); + sprintf(clientip, "%s", inet_ntoa(socket->socketaddr.sin_addr)); + Network network = Network(socket, info); while(int ret = network.recvPackage(&h, frame->data, frame->size)) { @@ -109,7 +112,7 @@ void newConnection(Socket *socket, Info *info) // This one must be last! if(h.header.h_data.record) { // if(!enc) enc = newMovEncoder(cpr); - if(!enc) enc = new MovEncoderThread(cpr, info); + if(!enc) enc = new MovEncoderThread(clientip, cpr, info); enc->encode(frame); } -- cgit v1.2.3