00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "AACAudioMatroskaFileServerMediaSubsession.hh"
00023 #include "MPEG4GenericRTPSink.hh"
00024 #include "MatroskaDemuxedTrack.hh"
00025
00026 AACAudioMatroskaFileServerMediaSubsession* AACAudioMatroskaFileServerMediaSubsession
00027 ::createNew(MatroskaFileServerDemux& demux, unsigned trackNumber) {
00028 return new AACAudioMatroskaFileServerMediaSubsession(demux, trackNumber);
00029 }
00030
00031 AACAudioMatroskaFileServerMediaSubsession
00032 ::AACAudioMatroskaFileServerMediaSubsession(MatroskaFileServerDemux& demux, unsigned trackNumber)
00033 : FileServerMediaSubsession(demux.envir(), demux.fileName(), False),
00034 fOurDemux(demux), fTrackNumber(trackNumber) {
00035
00036
00037 MatroskaTrack* track = fOurDemux.lookup(fTrackNumber);
00038 fConfigStr = new char[2*track->codecPrivateSize + 1];
00039 for (unsigned i = 0; i < track->codecPrivateSize; ++i) sprintf(&fConfigStr[2*i], "%02X", track->codecPrivate[i]);
00040 }
00041
00042 AACAudioMatroskaFileServerMediaSubsession
00043 ::~AACAudioMatroskaFileServerMediaSubsession() {
00044 delete[] fConfigStr;
00045 }
00046
00047 float AACAudioMatroskaFileServerMediaSubsession::duration() const { return fOurDemux.fileDuration(); }
00048
00049 void AACAudioMatroskaFileServerMediaSubsession
00050 ::seekStreamSource(FramedSource* inputSource, double& seekNPT, double , u_int64_t& ) {
00051 ((MatroskaDemuxedTrack*)inputSource)->seekToTime(seekNPT);
00052 }
00053
00054 FramedSource* AACAudioMatroskaFileServerMediaSubsession
00055 ::createNewStreamSource(unsigned clientSessionId, unsigned& estBitrate) {
00056 estBitrate = 96;
00057
00058 return fOurDemux.newDemuxedTrack(clientSessionId, fTrackNumber);
00059 }
00060
00061 RTPSink* AACAudioMatroskaFileServerMediaSubsession
00062 ::createNewRTPSink(Groupsock* rtpGroupsock, unsigned char rtpPayloadTypeIfDynamic, FramedSource* ) {
00063 MatroskaTrack* track = fOurDemux.lookup(fTrackNumber);
00064 return MPEG4GenericRTPSink::createNew(envir(), rtpGroupsock,
00065 rtpPayloadTypeIfDynamic,
00066 track->samplingFrequency,
00067 "audio", "AAC-hbr", fConfigStr,
00068 track->numChannels);
00069 }