00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "MPEG2TransportFileServerMediaSubsession.hh"
00023 #include "SimpleRTPSink.hh"
00024 #include "ByteStreamFileSource.hh"
00025 #include "MPEG2TransportStreamFramer.hh"
00026
00027 MPEG2TransportFileServerMediaSubsession*
00028 MPEG2TransportFileServerMediaSubsession::createNew(UsageEnvironment& env,
00029 char const* fileName,
00030 Boolean reuseFirstSource) {
00031 return new MPEG2TransportFileServerMediaSubsession(env, fileName, reuseFirstSource);
00032 }
00033
00034 MPEG2TransportFileServerMediaSubsession
00035 ::MPEG2TransportFileServerMediaSubsession(UsageEnvironment& env,
00036 char const* fileName, Boolean reuseFirstSource)
00037 : FileServerMediaSubsession(env, fileName, reuseFirstSource) {
00038 }
00039
00040 MPEG2TransportFileServerMediaSubsession
00041 ::~MPEG2TransportFileServerMediaSubsession() {
00042 }
00043
00044 #define TRANSPORT_PACKET_SIZE 188
00045 #define TRANSPORT_PACKETS_PER_NETWORK_PACKET 7
00046
00047
00048 FramedSource* MPEG2TransportFileServerMediaSubsession
00049 ::createNewStreamSource(unsigned , unsigned& estBitrate) {
00050 estBitrate = 5000;
00051
00052
00053 unsigned const inputDataChunkSize
00054 = TRANSPORT_PACKETS_PER_NETWORK_PACKET*TRANSPORT_PACKET_SIZE;
00055 ByteStreamFileSource* fileSource
00056 = ByteStreamFileSource::createNew(envir(), fFileName, inputDataChunkSize);
00057 if (fileSource == NULL) return NULL;
00058 fFileSize = fileSource->fileSize();
00059
00060
00061 return MPEG2TransportStreamFramer::createNew(envir(), fileSource);
00062 }
00063
00064 RTPSink* MPEG2TransportFileServerMediaSubsession
00065 ::createNewRTPSink(Groupsock* rtpGroupsock,
00066 unsigned char ,
00067 FramedSource* ) {
00068 return SimpleRTPSink::createNew(envir(), rtpGroupsock,
00069 33, 90000, "video", "mp2t",
00070 1, True, False );
00071 }