00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _MPEG4ES_VIDEO_RTP_SINK_HH
00022 #define _MPEG4ES_VIDEO_RTP_SINK_HH
00023
00024 #ifndef _VIDEO_RTP_SINK_HH
00025 #include "VideoRTPSink.hh"
00026 #endif
00027
00028 class MPEG4ESVideoRTPSink: public VideoRTPSink {
00029 public:
00030 static MPEG4ESVideoRTPSink* createNew(UsageEnvironment& env,
00031 Groupsock* RTPgs, unsigned char rtpPayloadFormat,
00032 u_int32_t rtpTimestampFrequency = 90000);
00033 static MPEG4ESVideoRTPSink* createNew(UsageEnvironment& env,
00034 Groupsock* RTPgs, unsigned char rtpPayloadFormat, u_int32_t rtpTimestampFrequency,
00035 u_int8_t profileAndLevelIndication, char const* configStr);
00036
00037
00038
00039 protected:
00040 MPEG4ESVideoRTPSink(UsageEnvironment& env, Groupsock* RTPgs, unsigned char rtpPayloadFormat, u_int32_t rtpTimestampFrequency,
00041 u_int8_t profileAndLevelIndication = 0, char const* configStr = NULL);
00042
00043
00044 virtual ~MPEG4ESVideoRTPSink();
00045
00046 protected:
00047 virtual Boolean sourceIsCompatibleWithUs(MediaSource& source);
00048
00049 virtual void doSpecialFrameHandling(unsigned fragmentationOffset,
00050 unsigned char* frameStart,
00051 unsigned numBytesInFrame,
00052 struct timeval framePresentationTime,
00053 unsigned numRemainingBytes);
00054 virtual Boolean allowFragmentationAfterStart() const;
00055 virtual Boolean
00056 frameCanAppearAfterPacketStart(unsigned char const* frameStart,
00057 unsigned numBytesInFrame) const;
00058
00059 virtual char const* auxSDPLine();
00060
00061 protected:
00062 Boolean fVOPIsPresent;
00063
00064 private:
00065 u_int8_t fProfileAndLevelIndication;
00066 unsigned char* fConfigBytes;
00067 unsigned fNumConfigBytes;
00068
00069 char* fFmtpSDPLine;
00070 };
00071
00072 #endif