00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "AC3AudioMatroskaFileServerMediaSubsession.hh"
00023 #include "AC3AudioRTPSink.hh"
00024 #include "MatroskaDemuxedTrack.hh"
00025
00026 AC3AudioMatroskaFileServerMediaSubsession* AC3AudioMatroskaFileServerMediaSubsession
00027 ::createNew(MatroskaFileServerDemux& demux, unsigned trackNumber) {
00028 return new AC3AudioMatroskaFileServerMediaSubsession(demux, trackNumber);
00029 }
00030
00031 AC3AudioMatroskaFileServerMediaSubsession
00032 ::AC3AudioMatroskaFileServerMediaSubsession(MatroskaFileServerDemux& demux, unsigned trackNumber)
00033 : FileServerMediaSubsession(demux.envir(), demux.fileName(), False),
00034 fOurDemux(demux), fTrackNumber(trackNumber) {
00035 }
00036
00037 AC3AudioMatroskaFileServerMediaSubsession
00038 ::~AC3AudioMatroskaFileServerMediaSubsession() {
00039 }
00040
00041 float AC3AudioMatroskaFileServerMediaSubsession::duration() const { return fOurDemux.fileDuration(); }
00042
00043 void AC3AudioMatroskaFileServerMediaSubsession
00044 ::seekStreamSource(FramedSource* inputSource, double& seekNPT, double , u_int64_t& ) {
00045 ((MatroskaDemuxedTrack*)inputSource)->seekToTime(seekNPT);
00046 }
00047
00048 FramedSource* AC3AudioMatroskaFileServerMediaSubsession
00049 ::createNewStreamSource(unsigned clientSessionId, unsigned& estBitrate) {
00050 estBitrate = 48;
00051
00052 return fOurDemux.newDemuxedTrack(clientSessionId, fTrackNumber);
00053 }
00054
00055 RTPSink* AC3AudioMatroskaFileServerMediaSubsession
00056 ::createNewRTPSink(Groupsock* rtpGroupsock, unsigned char rtpPayloadTypeIfDynamic, FramedSource* ) {
00057 MatroskaTrack* track = fOurDemux.lookup(fTrackNumber);
00058 return AC3AudioRTPSink::createNew(envir(), rtpGroupsock, rtpPayloadTypeIfDynamic, track->samplingFrequency);
00059 }