Hi,
  I have been trying to debug an issue with a program I have written by looking 
at examples from the testProgs folder, where I  receive a H264 ES over RTP & 
store it into a file. I have noticed that if I run the program after I start 
the RTP source, I can successfully receive the stream and dump it into a file. 
However, if I run my program prior to launching the RTP source, I am unable to 
receive the stream and dump it into a file.
   Any help in debugging the issue will be greatly appreciated. Source follows.

Thanks,
Roshan
---------------------------------------------------------------------

#include <liveMedia.hh>
#include <BasicUsageEnvironment.hh>
#include <GroupsockHelper.hh>

UsageEnvironment* env;
char const* outputFileName = "rx_file.264";

const unsigned short inputPortNum = 15000;

// A structure to hold the state of the current session.
// It is used in the "afterPlaying()" function to clean up the session.
struct sessionState_t {
  RTPSource* source;
  H264VideoFileSink* sink;
};

struct sessionState_t sessionState;


void afterPlaying(void *);

int main() {
  // Begin by setting up our usage environment:
  TaskScheduler* scheduler = BasicTaskScheduler::createNew();
  env = BasicUsageEnvironment::createNew(*scheduler);
     
  // Create the data sink
  sessionState.sink = H264VideoFileSink::createNew(*env, outputFileName, NULL, 
100000);
  
  char const* sessionAddressStr = "0.0.0.0";

  const unsigned char ttl = 255;

  struct in_addr sessionAddress;
  sessionAddress.s_addr = our_inet_addr(sessionAddressStr);
  const Port rtpPort(inputPortNum);

  Groupsock* rtpGroupsock = new Groupsock(*env, sessionAddress, rtpPort, ttl);

  OutPacketBuffer::maxSize = 100000;

  // Create the data source
  sessionState.source = H264VideoRTPSource::createNew(*env, rtpGroupsock, 96);

  // Finally, start receiving the stream:
  *env << "Beginning receiving stream...\n";

  FramedSource* framedSource;
  framedSource = H264VideoStreamDiscreteFramer::createNew(*env, 
sessionState.source);

  sessionState.sink->startPlaying(*framedSource, afterPlaying, NULL);
 

  env->taskScheduler().doEventLoop(); // does not return

  return 0; // only to prevent compiler warning

}

void afterPlaying(void *) {
  *env << "...done receiving\n";

  // End by closing the media:
  Medium::close(sessionState.sink);
  Medium::close(sessionState.source);
}
_______________________________________________
live-devel mailing list
[email protected]
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to