00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _VORBIS_AUDIO_RTP_SINK_HH
00022 #define _VORBIS_AUDIO_RTP_SINK_HH
00023
00024 #ifndef _AUDIO_RTP_SINK_HH
00025 #include "AudioRTPSink.hh"
00026 #endif
00027
00028 class VorbisAudioRTPSink: public AudioRTPSink {
00029 public:
00030 static VorbisAudioRTPSink* createNew(UsageEnvironment& env,
00031 Groupsock* RTPgs,
00032 u_int8_t rtpPayloadFormat, u_int32_t rtpTimestampFrequency, unsigned numChannels,
00033
00034 u_int8_t* identificationHeader, unsigned identificationHeaderSize,
00035 u_int8_t* commentHeader, unsigned commentHeaderSize,
00036 u_int8_t* setupHeader, unsigned setupHeaderSize);
00037 static VorbisAudioRTPSink* createNew(UsageEnvironment& env,
00038 Groupsock* RTPgs,
00039 u_int8_t rtpPayloadFormat, u_int32_t rtpTimestampFrequency, unsigned numChannels,
00040 char const* configStr);
00041
00042
00043 protected:
00044 VorbisAudioRTPSink(UsageEnvironment& env, Groupsock* RTPgs,
00045 u_int8_t rtpPayloadFormat, u_int32_t rtpTimestampFrequency, unsigned numChannels,
00046 u_int8_t* identificationHeader, unsigned identificationHeaderSize,
00047 u_int8_t* commentHeader, unsigned commentHeaderSize,
00048 u_int8_t* setupHeader, unsigned setupHeaderSize,
00049 u_int32_t identField = 0xFACADE);
00050
00051
00052 virtual ~VorbisAudioRTPSink();
00053
00054 private:
00055 virtual char const* auxSDPLine();
00056
00057 virtual void doSpecialFrameHandling(unsigned fragmentationOffset,
00058 unsigned char* frameStart,
00059 unsigned numBytesInFrame,
00060 struct timeval framePresentationTime,
00061 unsigned numRemainingBytes);
00062 virtual Boolean frameCanAppearAfterPacketStart(unsigned char const* frameStart,
00063 unsigned numBytesInFrame) const;
00064 virtual unsigned specialHeaderSize() const;
00065 virtual unsigned frameSpecificHeaderSize() const;
00066 #endif
00067
00068 private:
00069 u_int32_t fIdent;
00070 char* fFmtpSDPLine;
00071 };