MPEG1or2FileServerDemux Class Reference

#include <MPEG1or2FileServerDemux.hh>

Inheritance diagram for MPEG1or2FileServerDemux:

Inheritance graph
[legend]
Collaboration diagram for MPEG1or2FileServerDemux:

Collaboration graph
[legend]

Public Member Functions

ServerMediaSubsessionnewAudioServerMediaSubsession ()
ServerMediaSubsessionnewVideoServerMediaSubsession (Boolean iFramesOnly=False, double vshPeriod=5.0)
ServerMediaSubsessionnewAC3AudioServerMediaSubsession ()
unsigned fileSize () const
float fileDuration () const
UsageEnvironmentenvir () const
char const * name () const
virtual Boolean isSource () const
virtual Boolean isSink () const
virtual Boolean isRTCPInstance () const
virtual Boolean isRTSPClient () const
virtual Boolean isRTSPServer () const
virtual Boolean isMediaSession () const
virtual Boolean isServerMediaSession () const
virtual Boolean isDarwinInjector () const

Static Public Member Functions

static MPEG1or2FileServerDemuxcreateNew (UsageEnvironment &env, char const *fileName, Boolean reuseFirstSource)
static Boolean lookupByName (UsageEnvironment &env, char const *mediumName, Medium *&resultMedium)
static void close (UsageEnvironment &env, char const *mediumName)
static void close (Medium *medium)

Protected Member Functions

TaskTokennextTask ()

Private Member Functions

 MPEG1or2FileServerDemux (UsageEnvironment &env, char const *fileName, Boolean reuseFirstSource)
virtual ~MPEG1or2FileServerDemux ()
MPEG1or2DemuxedElementaryStreamnewElementaryStream (unsigned clientSessionId, u_int8_t streamIdTag)

Private Attributes

char const * fFileName
unsigned fFileSize
float fFileDuration
Boolean fReuseFirstSource
MPEG1or2DemuxfSession0Demux
MPEG1or2DemuxfLastCreatedDemux
u_int8_t fLastClientSessionId

Friends

class MPEG1or2DemuxedServerMediaSubsession

Detailed Description

Definition at line 31 of file MPEG1or2FileServerDemux.hh.


Constructor & Destructor Documentation

MPEG1or2FileServerDemux::MPEG1or2FileServerDemux ( UsageEnvironment env,
char const *  fileName,
Boolean  reuseFirstSource 
) [private]

Definition at line 35 of file MPEG1or2FileServerDemux.cpp.

References env, fFileDuration, fFileName, fFileSize, MPEG1or2ProgramStreamFileDuration(), and strDup().

Referenced by createNew().

MPEG1or2FileServerDemux::~MPEG1or2FileServerDemux (  )  [private, virtual]

Definition at line 44 of file MPEG1or2FileServerDemux.cpp.

References Medium::close(), fFileName, and fSession0Demux.

00044                                                   {
00045   Medium::close(fSession0Demux);
00046   delete[] (char*)fFileName;
00047 }


Member Function Documentation

MPEG1or2FileServerDemux * MPEG1or2FileServerDemux::createNew ( UsageEnvironment env,
char const *  fileName,
Boolean  reuseFirstSource 
) [static]

Definition at line 26 of file MPEG1or2FileServerDemux.cpp.

References env, and MPEG1or2FileServerDemux().

Referenced by createNewSMS(), and main().

00027                                                              {
00028   return new MPEG1or2FileServerDemux(env, fileName, reuseFirstSource);
00029 }

ServerMediaSubsession * MPEG1or2FileServerDemux::newAudioServerMediaSubsession (  ) 

Definition at line 50 of file MPEG1or2FileServerDemux.cpp.

References MPEG1or2DemuxedServerMediaSubsession::createNew(), and fReuseFirstSource.

Referenced by createNewSMS(), and main().

00050                                                        {
00051   return MPEG1or2DemuxedServerMediaSubsession::createNew(*this, 0xC0, fReuseFirstSource);
00052 }

ServerMediaSubsession * MPEG1or2FileServerDemux::newVideoServerMediaSubsession ( Boolean  iFramesOnly = False,
double  vshPeriod = 5.0 
)

Definition at line 55 of file MPEG1or2FileServerDemux.cpp.

References MPEG1or2DemuxedServerMediaSubsession::createNew(), and fReuseFirstSource.

Referenced by createNewSMS(), and main().

00056                                                                          {
00057   return MPEG1or2DemuxedServerMediaSubsession::createNew(*this, 0xE0, fReuseFirstSource,
00058                                                          iFramesOnly, vshPeriod);
00059 }

ServerMediaSubsession * MPEG1or2FileServerDemux::newAC3AudioServerMediaSubsession (  ) 

Definition at line 62 of file MPEG1or2FileServerDemux.cpp.

References MPEG1or2DemuxedServerMediaSubsession::createNew(), and fReuseFirstSource.

Referenced by main().

00062                                                           {
00063   return MPEG1or2DemuxedServerMediaSubsession::createNew(*this, 0xBD, fReuseFirstSource);
00064   // because, in a VOB file, the AC3 audio has stream id 0xBD
00065 }

unsigned MPEG1or2FileServerDemux::fileSize (  )  const [inline]

Definition at line 43 of file MPEG1or2FileServerDemux.hh.

References fFileSize.

Referenced by MPEG1or2DemuxedServerMediaSubsession::seekStreamSource().

00043 { return fFileSize; }

float MPEG1or2FileServerDemux::fileDuration (  )  const [inline]

Definition at line 44 of file MPEG1or2FileServerDemux.hh.

References fFileDuration.

Referenced by MPEG1or2DemuxedServerMediaSubsession::duration().

00044 { return fFileDuration; }

MPEG1or2DemuxedElementaryStream * MPEG1or2FileServerDemux::newElementaryStream ( unsigned  clientSessionId,
u_int8_t  streamIdTag 
) [private]

Definition at line 68 of file MPEG1or2FileServerDemux.cpp.

References MPEG1or2Demux::createNew(), ByteStreamFileSource::createNew(), Medium::envir(), False, fFileName, fLastClientSessionId, fLastCreatedDemux, fSession0Demux, MPEG1or2Demux::newElementaryStream(), NULL, and True.

Referenced by MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource().

00069                                                                    {
00070   MPEG1or2Demux* demuxToUse;
00071   if (clientSessionId == 0) {
00072     // 'Session 0' is treated especially, because its audio & video streams
00073     // are created and destroyed one-at-a-time, rather than both streams being
00074     // created, and then (later) both streams being destroyed (as is the case
00075     // for other ('real') session ids).  Because of this, a separate demux is
00076     // used for session 0, and its deletion is managed by us, rather than
00077     // happening automatically.
00078     if (fSession0Demux == NULL) {
00079       // Open our input file as a 'byte-stream file source':
00080       ByteStreamFileSource* fileSource
00081         = ByteStreamFileSource::createNew(envir(), fFileName);
00082       if (fileSource == NULL) return NULL;
00083       fSession0Demux = MPEG1or2Demux::createNew(envir(), fileSource, False/*note!*/);
00084     }
00085     demuxToUse = fSession0Demux;
00086   } else {
00087     // First, check whether this is a new client session.  If so, create a new
00088     // demux for it:
00089     if (clientSessionId != fLastClientSessionId) {
00090       // Open our input file as a 'byte-stream file source':
00091       ByteStreamFileSource* fileSource
00092         = ByteStreamFileSource::createNew(envir(), fFileName);
00093       if (fileSource == NULL) return NULL;
00094 
00095       fLastCreatedDemux = MPEG1or2Demux::createNew(envir(), fileSource, True);
00096       // Note: We tell the demux to delete itself when its last
00097       // elementary stream is deleted.
00098       fLastClientSessionId = clientSessionId;
00099       // Note: This code relies upon the fact that the creation of streams for
00100       // different client sessions do not overlap - so one "MPEG1or2Demux" is used
00101       // at a time.
00102     }
00103     demuxToUse = fLastCreatedDemux;
00104   }
00105 
00106   if (demuxToUse == NULL) return NULL; // shouldn't happen
00107 
00108   return demuxToUse->newElementaryStream(streamIdTag);
00109 }

Boolean Medium::lookupByName ( UsageEnvironment env,
char const *  mediumName,
Medium *&  resultMedium 
) [static, inherited]

Definition at line 65 of file Media.cpp.

References env, False, MediaLookupTable::lookup(), NULL, MediaLookupTable::ourMedia(), UsageEnvironment::setResultMsg(), and True.

Referenced by ServerMediaSession::lookupByName(), RTSPServer::lookupByName(), RTSPClient::lookupByName(), RTCPInstance::lookupByName(), MediaSource::lookupByName(), MediaSink::lookupByName(), MediaSession::lookupByName(), and DarwinInjector::lookupByName().

00066                                                          {
00067   resultMedium = MediaLookupTable::ourMedia(env)->lookup(mediumName);
00068   if (resultMedium == NULL) {
00069     env.setResultMsg("Medium ", mediumName, " does not exist");
00070     return False;
00071   }
00072 
00073   return True;
00074 }

void Medium::close ( UsageEnvironment env,
char const *  mediumName 
) [static, inherited]

Definition at line 76 of file Media.cpp.

References env, MediaLookupTable::ourMedia(), and MediaLookupTable::remove().

Referenced by afterPlaying(), Medium::close(), closeMediaSinks(), OnDemandServerMediaSubsession::closeStreamSource(), continueAfterTEARDOWN(), WAVAudioFileSource::createNew(), QuickTimeFileSink::createNew(), QCELPAudioRTPSource::createNew(), MP3HTTPSource::createNew(), MP3FileSource::createNew(), AVIFileSink::createNew(), AMRAudioRTPSource::createNew(), WAVAudioFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), MediaSubsession::deInitiate(), MediaSubsession::initiate(), MPEG1or2ProgramStreamFileDuration(), MPEG1or2Demux::noteElementaryStreamDeletion(), ByteStreamMultiFileSource::onSourceClosure1(), StreamState::reclaim(), RTSPServer::removeServerMediaSession(), OnDemandServerMediaSubsession::sdpLines(), H264VideoRTPSink::stopPlaying(), subsessionAfterPlaying(), ClientTrickPlayState::updateStateOnScaleChange(), AMRDeinterleaver::~AMRDeinterleaver(), ByteStreamMultiFileSource::~ByteStreamMultiFileSource(), DarwinInjector::~DarwinInjector(), FramedFilter::~FramedFilter(), H264VideoRTPSink::~H264VideoRTPSink(), InputESSourceRecord::~InputESSourceRecord(), MPEG1or2Demux::~MPEG1or2Demux(), ~MPEG1or2FileServerDemux(), MPEG2TransportFileServerMediaSubsession::~MPEG2TransportFileServerMediaSubsession(), MPEG2TransportStreamFromPESSource::~MPEG2TransportStreamFromPESSource(), ServerMediaSession::~ServerMediaSession(), and ServerMediaSubsession::~ServerMediaSubsession().

00076                                                           {
00077   MediaLookupTable::ourMedia(env)->remove(name);
00078 }

void Medium::close ( Medium medium  )  [static, inherited]

Definition at line 80 of file Media.cpp.

References Medium::close(), Medium::envir(), Medium::name(), and NULL.

00080                                  {
00081   if (medium == NULL) return;
00082 
00083   close(medium->envir(), medium->name());
00084 }

UsageEnvironment& Medium::envir (  )  const [inline, inherited]

Definition at line 59 of file Media.hh.

References Medium::fEnviron.

Referenced by QuickTimeFileSink::addArbitraryString(), FileSink::addData(), RTCPInstance::addStreamSocket(), MPEG2IFrameIndexFromTransportStream::addToTail(), StreamParser::afterGettingBytes(), MultiFramedRTPSink::afterGettingFrame1(), InputESSourceRecord::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG2IFrameIndexFromTransportStream::afterGettingFrame1(), HTTPSink::afterGettingFrame1(), BasicUDPSink::afterGettingFrame1(), MPEG4VideoFileServerMediaSubsession::afterPlayingDummy1(), MPEG4VideoStreamParser::analyzeVOLHeader(), announceStream(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), Medium::close(), MPEG2IFrameIndexFromTransportStream::compactParseBuffer(), RTSPClient::connectionHandler1(), RTSPClient::connectToServer(), QuickTimeFileSink::continuePlaying(), HTTPSink::continuePlaying(), H264VideoRTPSink::continuePlaying(), AVIFileSink::continuePlaying(), MPEG4VideoFileServerMediaSubsession::createNewRTPSink(), MPEG2TransportFileServerMediaSubsession::createNewRTPSink(), MPEG1or2VideoFileServerMediaSubsession::createNewRTPSink(), MPEG1or2DemuxedServerMediaSubsession::createNewRTPSink(), H263plusVideoFileServerMediaSubsession::createNewRTPSink(), DVVideoFileServerMediaSubsession::createNewRTPSink(), AMRAudioFileServerMediaSubsession::createNewRTPSink(), ADTSAudioFileServerMediaSubsession::createNewRTPSink(), MPEG4VideoFileServerMediaSubsession::createNewStreamSource(), MPEG2TransportFileServerMediaSubsession::createNewStreamSource(), MPEG1or2VideoFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), H263plusVideoFileServerMediaSubsession::createNewStreamSource(), DVVideoFileServerMediaSubsession::createNewStreamSource(), AMRAudioFileServerMediaSubsession::createNewStreamSource(), ADTSAudioFileServerMediaSubsession::createNewStreamSource(), MPEG2IFrameIndexFromTransportStream::deliverIndexRecord(), SegmentQueue::dequeue(), WAVAudioFileSource::doGetNextFrame(), MPEG2IFrameIndexFromTransportStream::doGetNextFrame(), MP3FileSource::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), ByteStreamMultiFileSource::doGetNextFrame(), ByteStreamFileSource::doGetNextFrame(), BasicUDPSource::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), MP3FileSource::doGetNextFrame1(), ADUFromMP3Source::doGetNextFrame1(), SIPClient::doInviteStateMachine(), ByteStreamFileSource::doReadFromFile(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), MP3ADURTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), ByteStreamFileSource::doStopGettingFrames(), BasicUDPSource::doStopGettingFrames(), SegmentQueue::enqueueNewSegment(), StreamParser::ensureValidBytes1(), MediaSubsession::env(), SubsessionIOState::envir(), RTSPServer::RTSPClientSession::envir(), RTSPOverHTTPServer::HTTPClientConnection::envir(), RTPInterface::envir(), AVISubsessionIOState::envir(), ServerMediaSession::generateSDPDescription(), RTPSource::getAttributes(), MP3FileSource::getAttributes(), MP3ADUTranscoder::getAttributes(), MediaSource::getAttributes(), MPEG4VideoFileServerMediaSubsession::getAuxSDPLine(), getMPEG1or2TimeCode(), FramedSource::getNextFrame(), getOptions(), DVVideoStreamFramer::getProfile(), SIPClient::getResponse(), SIPClient::getResponseCode(), getSDPDescription(), OnDemandServerMediaSubsession::getStreamParameters(), RTSPClient::handleGET_PARAMETERResponse(), RTSPClient::handleIncomingRequest(), RTSPClient::handlePLAYResponse(), RTSPClient::handleRequestError(), RTSPClient::handleResponseBytes(), RTSPClient::handleSETUPResponse(), RTSPServer::incomingConnectionHandler1(), RTSPOverHTTPServer::incomingConnectionHandler1(), RTSPClient::incomingDataHandler1(), RTCPInstance::incomingReportHandler1(), MP3FileSource::initializeStream(), MediaSession::initializeWithSDP(), MediaSession::initiateByMediaType(), SIPClient::invite1(), DynamicRTSPServer::lookupServerMediaSession(), MPEG4GenericRTPSource::MPEG4GenericRTPSource(), newElementaryStream(), MPEG1or2Demux::newElementaryStream(), MPEG4GenericBufferedPacket::nextEnclosedFrameSize(), AMRBufferedPacket::nextEnclosedFrameSize(), RTSPClient::openConnection(), MPEG2TransportStreamIndexFile::openFid(), MPEG2IFrameIndexFromTransportStream::parseFrame(), AC3AudioStreamParser::parseFrame(), MPEGProgramStreamParser::parsePackHeader(), MPEGProgramStreamParser::parsePESPacket(), SIPClient::parseResponseCode(), MediaSession::parseSDPLine(), MPEG1or2VideoStreamParser::parseSlice(), MPEGProgramStreamParser::parseSystemHeader(), MPEG4VideoStreamParser::parseVideoObjectLayer(), MPEG4VideoStreamParser::parseVideoObjectPlane(), MPEG4VideoStreamParser::parseVisualObject(), AC3AudioRTPSource::processSpecialHeader(), SIPClient::processURL(), AC3AudioStreamParser::readAndSaveAFrame(), MPEG1or2Demux::registerReadInterest(), RTCPInstance::reschedule(), RTSPClient::resendCommand(), RTSPClient::resetTCPSockets(), RTSPClient::responseHandlerForHTTP_GET1(), RTSPServer::rtspURLPrefix(), RTCPInstance::schedule(), OnDemandServerMediaSubsession::sdpLines(), SIPClient::sendACK(), SIPClient::sendBYE(), SIPClient::sendINVITE(), MultiFramedRTPSink::sendPacketIfNecessary(), SIPClient::sendRequest(), RTSPClient::sendRequest(), DarwinInjector::setDestination(), RTSPClient::setupHTTPTunneling1(), QuickTimeFileSink::setWord(), AVIFileSink::setWord(), QuickTimeFileSink::setWord64(), SIPClient::SIPClient(), AMRAudioRTPSink::sourceIsCompatibleWithUs(), QuickTimeFileSink::startPlaying(), StreamState::startPlaying(), MediaSink::startPlaying(), AVIFileSink::startPlaying(), startPlayingSession(), PassiveServerMediaSubsession::startStream(), MediaSink::stopPlaying(), tearDownSession(), SIPClient::timerAHandler(), SIPClient::timerBHandler(), SIPClient::timerDHandler(), ClientTrickPlayState::updateStateOnScaleChange(), MPEG2TransportStreamFramer::updateTSPacketDurationEstimate(), BasicUDPSource::~BasicUDPSource(), ByteStreamFileSource::~ByteStreamFileSource(), RTSPOverHTTPServer::HTTPClientConnection::~HTTPClientConnection(), and RTSPServer::~RTSPServer().

00059 {return fEnviron;}

char const* Medium::name (  )  const [inline, inherited]

Definition at line 61 of file Media.hh.

References Medium::fMediumName.

Referenced by QuickTimeFileSink::addAtom_hdlr2(), Medium::close(), MP3ADUTranscoder::createNew(), MP3FromADUSource::createNew(), ADUFromMP3Source::createNew(), and MP3FileSource::initializeStream().

00061 {return fMediumName;}

Boolean Medium::isSource (  )  const [virtual, inherited]

Reimplemented in MediaSource.

Definition at line 86 of file Media.cpp.

References False.

Referenced by MediaSource::lookupByName().

00086                                {
00087   return False; // default implementation
00088 }

Boolean Medium::isSink (  )  const [virtual, inherited]

Reimplemented in MediaSink.

Definition at line 90 of file Media.cpp.

References False.

Referenced by MediaSink::lookupByName().

00090                              {
00091   return False; // default implementation
00092 }

Boolean Medium::isRTCPInstance (  )  const [virtual, inherited]

Reimplemented in RTCPInstance.

Definition at line 94 of file Media.cpp.

References False.

Referenced by RTCPInstance::lookupByName().

00094                                      {
00095   return False; // default implementation
00096 }

Boolean Medium::isRTSPClient (  )  const [virtual, inherited]

Reimplemented in RTSPClient.

Definition at line 98 of file Media.cpp.

References False.

Referenced by RTSPClient::lookupByName().

00098                                    {
00099   return False; // default implementation
00100 }

Boolean Medium::isRTSPServer (  )  const [virtual, inherited]

Reimplemented in RTSPServer.

Definition at line 102 of file Media.cpp.

References False.

Referenced by RTSPServer::lookupByName().

00102                                    {
00103   return False; // default implementation
00104 }

Boolean Medium::isMediaSession (  )  const [virtual, inherited]

Reimplemented in MediaSession.

Definition at line 106 of file Media.cpp.

References False.

Referenced by MediaSession::lookupByName().

00106                                      {
00107   return False; // default implementation
00108 }

Boolean Medium::isServerMediaSession (  )  const [virtual, inherited]

Reimplemented in ServerMediaSession.

Definition at line 110 of file Media.cpp.

References False.

Referenced by ServerMediaSession::lookupByName().

00110                                            {
00111   return False; // default implementation
00112 }

Boolean Medium::isDarwinInjector (  )  const [virtual, inherited]

Reimplemented in DarwinInjector.

Definition at line 114 of file Media.cpp.

References False.

Referenced by DarwinInjector::lookupByName().

00114                                        {
00115   return False; // default implementation
00116 }

TaskToken& Medium::nextTask (  )  [inline, protected, inherited]

Definition at line 77 of file Media.hh.

References Medium::fNextTask.

Referenced by BasicUDPSink::afterGettingFrame1(), MPEG4VideoFileServerMediaSubsession::afterPlayingDummy1(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), WAVAudioFileSource::doGetNextFrame(), MP3FileSource::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), ByteStreamFileSource::doReadFromFile(), RTCPInstance::reschedule(), RTCPInstance::schedule(), MultiFramedRTPSink::sendPacketIfNecessary(), and MediaSink::stopPlaying().

00077                         {
00078         return fNextTask;
00079   }


Friends And Related Function Documentation

friend class MPEG1or2DemuxedServerMediaSubsession [friend]

Definition at line 53 of file MPEG1or2FileServerDemux.hh.


Field Documentation

char const* MPEG1or2FileServerDemux::fFileName [private]

Definition at line 58 of file MPEG1or2FileServerDemux.hh.

Referenced by MPEG1or2FileServerDemux(), newElementaryStream(), and ~MPEG1or2FileServerDemux().

unsigned MPEG1or2FileServerDemux::fFileSize [private]

Definition at line 59 of file MPEG1or2FileServerDemux.hh.

Referenced by fileSize(), and MPEG1or2FileServerDemux().

float MPEG1or2FileServerDemux::fFileDuration [private]

Definition at line 60 of file MPEG1or2FileServerDemux.hh.

Referenced by fileDuration(), and MPEG1or2FileServerDemux().

Boolean MPEG1or2FileServerDemux::fReuseFirstSource [private]

Definition at line 61 of file MPEG1or2FileServerDemux.hh.

Referenced by newAC3AudioServerMediaSubsession(), newAudioServerMediaSubsession(), and newVideoServerMediaSubsession().

MPEG1or2Demux* MPEG1or2FileServerDemux::fSession0Demux [private]

Definition at line 62 of file MPEG1or2FileServerDemux.hh.

Referenced by newElementaryStream(), and ~MPEG1or2FileServerDemux().

MPEG1or2Demux* MPEG1or2FileServerDemux::fLastCreatedDemux [private]

Definition at line 63 of file MPEG1or2FileServerDemux.hh.

Referenced by newElementaryStream().

u_int8_t MPEG1or2FileServerDemux::fLastClientSessionId [private]

Definition at line 64 of file MPEG1or2FileServerDemux.hh.

Referenced by newElementaryStream().


The documentation for this class was generated from the following files:
Generated on Fri Sep 3 02:37:31 2010 for live by  doxygen 1.5.2