00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <liveMedia.hh>
00024 #include "BasicUsageEnvironment.hh"
00025 #include "GroupsockHelper.hh"
00026
00027 UsageEnvironment* env;
00028
00029
00030
00031
00032 void startReplicaUDPSink(StreamReplicator* replicator, char const* outputAddressStr, portNumBits outputPortNum);
00033 void startReplicaFileSink(StreamReplicator* replicator, char const* outputFileName);
00034
00035 int main(int argc, char** argv) {
00036
00037 TaskScheduler* scheduler = BasicTaskScheduler::createNew();
00038 env = BasicUsageEnvironment::createNew(*scheduler);
00039
00040
00041 char const* inputAddressStr
00042 #ifdef USE_SSM
00043 = "232.255.42.42";
00044 #else
00045 = "239.255.42.42";
00046 #endif
00047 struct in_addr inputAddress;
00048 inputAddress.s_addr = our_inet_addr(inputAddressStr);
00049
00050 Port const inputPort(8888);
00051 unsigned char const inputTTL = 0;
00052
00053 #ifdef USE_SSM
00054 char* sourceAddressStr = "aaa.bbb.ccc.ddd";
00055
00056 struct in_addr sourceFilterAddress;
00057 sourceFilterAddress.s_addr = our_inet_addr(sourceAddressStr);
00058
00059 Groupsock inputGroupsock(*env, inputAddress, sourceFilterAddress, inputPort);
00060 #else
00061 Groupsock inputGroupsock(*env, inputAddress, inputPort, inputTTL);
00062 #endif
00063
00064
00065 FramedSource* source = BasicUDPSource::createNew(*env, &inputGroupsock);
00066
00067
00068 StreamReplicator* replicator = StreamReplicator::createNew(*env, source);
00069
00070
00071
00072 startReplicaUDPSink(replicator, "239.255.43.43", 4444);
00073
00074
00075
00076 startReplicaFileSink(replicator, "test.out");
00077
00078
00079 env->taskScheduler().doEventLoop();
00080
00081 return 0;
00082 }
00083
00084 void startReplicaUDPSink(StreamReplicator* replicator, char const* outputAddressStr, portNumBits outputPortNum) {
00085
00086 FramedSource* source = replicator->createStreamReplica();
00087
00088
00089 struct in_addr outputAddress;
00090 outputAddress.s_addr = our_inet_addr(outputAddressStr);
00091
00092 Port const outputPort(outputPortNum);
00093 unsigned char const outputTTL = 255;
00094
00095 Groupsock* outputGroupsock = new Groupsock(*env, outputAddress, outputPort, outputTTL);
00096
00097
00098 unsigned const maxPacketSize = 65536;
00099 MediaSink* sink = BasicUDPSink::createNew(*env, outputGroupsock, maxPacketSize);
00100
00101
00102 sink->startPlaying(*source, NULL, NULL);
00103 }
00104
00105 void startReplicaFileSink(StreamReplicator* replicator, char const* outputFileName) {
00106
00107 FramedSource* source = replicator->createStreamReplica();
00108
00109
00110 MediaSink* sink = FileSink::createNew(*env, outputFileName);
00111
00112
00113 sink->startPlaying(*source, NULL, NULL);
00114 }