1 /**********
2 This library is free software; you can redistribute it and/or modify it under
3 the terms of the GNU Lesser General Public License as published by the
4 Free Software Foundation; either version 3 of the License, or (at your
5 option) any later version. (See <http://www.gnu.org/copyleft/lesser.html>.)
6 
7 This library is distributed in the hope that it will be useful, but WITHOUT
8 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
9 FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
10 more details.
11 
12 You should have received a copy of the GNU Lesser General Public License
13 along with this library; if not, write to the Free Software Foundation, Inc.,
14 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
15 **********/
16 // "liveMedia"
17 // Copyright (c) 1996-2020 Live Networks, Inc.  All rights reserved.
18 // A 'ServerMediaSubsession' object that creates new, unicast, "RTPSink"s
19 // on demand, from an WAV audio file.
20 // C++ header
21 
22 #ifndef _WAV_AUDIO_FILE_SERVER_MEDIA_SUBSESSION_HH
23 #define _WAV_AUDIO_FILE_SERVER_MEDIA_SUBSESSION_HH
24 
25 #ifndef _FILE_SERVER_MEDIA_SUBSESSION_HH
26 #include "FileServerMediaSubsession.hh"
27 #endif
28 
29 class WAVAudioFileServerMediaSubsession: public FileServerMediaSubsession{
30 public:
31   static WAVAudioFileServerMediaSubsession*
32   createNew(UsageEnvironment& env, char const* fileName, Boolean reuseFirstSource,
33 	    Boolean convertToULaw = False);
34       // If "convertToULaw" is True, 16-bit audio streams are converted to
35       // 8-bit u-law audio prior to streaming.
36 
37 protected:
38   WAVAudioFileServerMediaSubsession(UsageEnvironment& env, char const* fileName,
39 				    Boolean reuseFirstSource, Boolean convertToULaw);
40       // called only by createNew();
41   virtual ~WAVAudioFileServerMediaSubsession();
42 
43 protected: // redefined virtual functions
44   virtual void seekStreamSource(FramedSource* inputSource, double& seekNPT, double streamDuration, u_int64_t& numBytes);
45   virtual void setStreamSourceScale(FramedSource* inputSource, float scale);
46   virtual void setStreamSourceDuration(FramedSource* inputSource, double streamDuration, u_int64_t& numBytes);
47 
48   virtual FramedSource* createNewStreamSource(unsigned clientSessionId,
49 					      unsigned& estBitrate);
50   virtual RTPSink* createNewRTPSink(Groupsock* rtpGroupsock,
51                                     unsigned char rtpPayloadTypeIfDynamic,
52 				    FramedSource* inputSource);
53   virtual void testScaleFactor(float& scale);
54   virtual float duration() const;
55 
56 protected:
57   Boolean fConvertToULaw;
58 
59   // The following parameters of the input stream are set after
60   // "createNewStreamSource" is called:
61   unsigned char fAudioFormat;
62   unsigned char fBitsPerSample;
63   unsigned fSamplingFrequency;
64   unsigned fNumChannels;
65   float fFileDuration;
66 };
67 
68 #endif
69