00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _MP3_AUDIO_FILE_SERVER_MEDIA_SUBSESSION_HH
00024 #define _MP3_AUDIO_FILE_SERVER_MEDIA_SUBSESSION_HH
00025
00026 #ifndef _FILE_SERVER_MEDIA_SUBSESSION_HH
00027 #include "FileServerMediaSubsession.hh"
00028 #endif
00029 #ifndef _MP3_ADU_INTERLEAVING_HH
00030 #include "MP3ADUinterleaving.hh"
00031 #endif
00032 #ifndef _MP3_ADU_HH
00033 #include "MP3ADU.hh"
00034 #endif
00035
00036 class MP3AudioFileServerMediaSubsession: public FileServerMediaSubsession{
00037 public:
00038 static MP3AudioFileServerMediaSubsession*
00039 createNew(UsageEnvironment& env, char const* fileName, Boolean reuseFirstSource,
00040 Boolean generateADUs, Interleaving* interleaving);
00041
00042
00043
00044 protected:
00045 MP3AudioFileServerMediaSubsession(UsageEnvironment& env,
00046 char const* fileName, Boolean reuseFirstSource,
00047 Boolean generateADUs,
00048 Interleaving* interleaving);
00049
00050 virtual ~MP3AudioFileServerMediaSubsession();
00051
00052 FramedSource* createNewStreamSourceCommon(FramedSource* baseMP3Source, unsigned mp3NumBytes, unsigned& estBitrate);
00053 void getBaseStreams(FramedSource* frontStream,
00054 FramedSource*& sourceMP3Stream, ADUFromMP3Source*& aduStream);
00055
00056 protected:
00057 virtual void seekStreamSource(FramedSource* inputSource, double& seekNPT, double streamDuration, u_int64_t& numBytes);
00058 virtual void setStreamSourceScale(FramedSource* inputSource, float scale);
00059 virtual FramedSource* createNewStreamSource(unsigned clientSessionId,
00060 unsigned& estBitrate);
00061 virtual RTPSink* createNewRTPSink(Groupsock* rtpGroupsock,
00062 unsigned char rtpPayloadTypeIfDynamic,
00063 FramedSource* inputSource);
00064 virtual void testScaleFactor(float& scale);
00065 virtual float duration() const;
00066
00067 protected:
00068 Boolean fGenerateADUs;
00069 Interleaving* fInterleaving;
00070 float fFileDuration;
00071 };
00072
00073 #endif