#include "liveMedia.hh"#include "BasicUsageEnvironment.hh"#include "GroupsockHelper.hh"Include dependency graph for testMPEG4VideoStreamer.cpp:

Go to the source code of this file.
Functions | |
| void | play () |
| int | main (int argc, char **argv) |
| void | afterPlaying (void *) |
Variables | |
| UsageEnvironment * | env |
| char const * | inputFileName = "test.m4e" |
| MPEG4VideoStreamFramer * | videoSource |
| RTPSink * | videoSink |
| void afterPlaying | ( | void * | ) |
Definition at line 97 of file testMPEG4VideoStreamer.cpp.
References Medium::close(), env, play(), MediaSink::stopPlaying(), videoSink, and videoSource.
00097 { 00098 *env << "...done reading from file\n"; 00099 00100 videoSink->stopPlaying(); 00101 Medium::close(videoSource); 00102 // Note that this also closes the input file that this source read from. 00103 00104 // Start playing once again: 00105 play(); 00106 }
| int main | ( | int | argc, | |
| char ** | argv | |||
| ) |
Definition at line 32 of file testMPEG4VideoStreamer.cpp.
References RTSPServer::addServerMediaSession(), ServerMediaSession::addSubsession(), chooseRandomIPv4SSMAddress(), PassiveServerMediaSubsession::createNew(), ServerMediaSession::createNew(), RTSPServer::createNew(), RTCPInstance::createNew(), MPEG4ESVideoRTPSink::createNew(), BasicUsageEnvironment::createNew(), BasicTaskScheduler::createNew(), TaskScheduler::doEventLoop(), env, exit, UsageEnvironment::getResultMsg(), inputFileName, Groupsock::multicastSendOnly(), NULL, play(), rtspServer, RTSPServer::rtspURL(), UsageEnvironment::taskScheduler(), True, and videoSink.
00032 { 00033 // Begin by setting up our usage environment: 00034 TaskScheduler* scheduler = BasicTaskScheduler::createNew(); 00035 env = BasicUsageEnvironment::createNew(*scheduler); 00036 00037 // Create 'groupsocks' for RTP and RTCP: 00038 struct in_addr destinationAddress; 00039 destinationAddress.s_addr = chooseRandomIPv4SSMAddress(*env); 00040 // Note: This is a multicast address. If you wish instead to stream 00041 // using unicast, then you should use the "testOnDemandRTSPServer" 00042 // test program - not this test program - as a model. 00043 00044 const unsigned short rtpPortNum = 18888; 00045 const unsigned short rtcpPortNum = rtpPortNum+1; 00046 const unsigned char ttl = 255; 00047 00048 const Port rtpPort(rtpPortNum); 00049 const Port rtcpPort(rtcpPortNum); 00050 00051 Groupsock rtpGroupsock(*env, destinationAddress, rtpPort, ttl); 00052 rtpGroupsock.multicastSendOnly(); // we're a SSM source 00053 Groupsock rtcpGroupsock(*env, destinationAddress, rtcpPort, ttl); 00054 rtcpGroupsock.multicastSendOnly(); // we're a SSM source 00055 00056 // Create a 'MPEG-4 Video RTP' sink from the RTP 'groupsock': 00057 videoSink = MPEG4ESVideoRTPSink::createNew(*env, &rtpGroupsock, 96); 00058 00059 // Create (and start) a 'RTCP instance' for this RTP sink: 00060 const unsigned estimatedSessionBandwidth = 500; // in kbps; for RTCP b/w share 00061 const unsigned maxCNAMElen = 100; 00062 unsigned char CNAME[maxCNAMElen+1]; 00063 gethostname((char*)CNAME, maxCNAMElen); 00064 CNAME[maxCNAMElen] = '\0'; // just in case 00065 RTCPInstance* rtcp 00066 = RTCPInstance::createNew(*env, &rtcpGroupsock, 00067 estimatedSessionBandwidth, CNAME, 00068 videoSink, NULL /* we're a server */, 00069 True /* we're a SSM source */); 00070 // Note: This starts RTCP running automatically 00071 00072 RTSPServer* rtspServer = RTSPServer::createNew(*env, 8554); 00073 if (rtspServer == NULL) { 00074 *env << "Failed to create RTSP server: " << env->getResultMsg() << "\n"; 00075 exit(1); 00076 } 00077 ServerMediaSession* sms 00078 = ServerMediaSession::createNew(*env, "testStream", inputFileName, 00079 "Session streamed by \"testMPEG4VideoStreamer\"", 00080 True /*SSM*/); 00081 sms->addSubsession(PassiveServerMediaSubsession::createNew(*videoSink, rtcp)); 00082 rtspServer->addServerMediaSession(sms); 00083 00084 char* url = rtspServer->rtspURL(sms); 00085 *env << "Play this stream using the URL \"" << url << "\"\n"; 00086 delete[] url; 00087 00088 // Start the streaming: 00089 *env << "Beginning streaming...\n"; 00090 play(); 00091 00092 env->taskScheduler().doEventLoop(); // does not return 00093 00094 return 0; // only to prevent compiler warning 00095 }
| void play | ( | ) |
Definition at line 25 of file testMPEG4VideoStreamer.cpp.
| char const* inputFileName = "test.m4e" |
Definition at line 26 of file testMPEG4VideoStreamer.cpp.
Definition at line 28 of file testMPEG4VideoStreamer.cpp.
Definition at line 27 of file testMPEG4VideoStreamer.cpp.
1.5.2