📄 wavaudiofileservermediasubsession.cpp
字号:
// WAVAudioFileServerMediaSubsession.cpp: implementation of the WAVAudioFileServerMediaSubsession class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "WAVAudioFileServerMediaSubsession.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
WAVAudioFileServerMediaSubsession * WAVAudioFileServerMediaSubsession::createNew(const char * fileName, Boolean reuseFirstSource,
const char * SDPMediaTypeString,Boolean convertToULaw)
{
return new WAVAudioFileServerMediaSubsession(fileName,
reuseFirstSource,SDPMediaTypeString,convertToULaw);
}
WAVAudioFileServerMediaSubsession::WAVAudioFileServerMediaSubsession(char const* fileName, Boolean reuseFirstSource,
const char * SDPMediaTypeString,Boolean convertToULaw) :
ServerMediaSubsession(SDPMediaTypeString,fileName),fConvertToULaw(convertToULaw)
{
}
WAVAudioFileServerMediaSubsession::~WAVAudioFileServerMediaSubsession()
{
}
FramedSource * WAVAudioFileServerMediaSubsession::createNewStreamSource(unsigned clientSessionId, unsigned& estBitrate)
{
do {
WAVAudioFileSource* wavSource
= WAVAudioFileSource::createNew(fFileName);
if (wavSource == NULL) break;
// Get attributes of the audio source:
fBitsPerSample = wavSource->bitsPerSample();
if (fBitsPerSample != 8 && fBitsPerSample != 16) {
//envir() << "The input file contains " << fBitsPerSample
// << " bit-per-sample audio, which we don't handle\n";
break;
}
fSamplingFrequency = wavSource->samplingFrequency();
fNumChannels = wavSource->numChannels();
unsigned bitsPerSecond
= fSamplingFrequency*fBitsPerSample*fNumChannels;
fFileDuration = (float)((8.0*wavSource->numPCMBytes())
/(fSamplingFrequency*fNumChannels*fBitsPerSample));
estBitrate = (bitsPerSecond+500)/1000; // kbps
festBitrate = estBitrate;
return wavSource;
} while (0);
return NULL;
}
RTPSink * WAVAudioFileServerMediaSubsession::createNewRTPSink(unsigned char rtpPayloadTypeIfDynamic, FramedSource* inputSource)
{
do {
char* mimeType;
unsigned char payloadFormatCode;
if (fBitsPerSample == 16) {
if (fConvertToULaw) {
mimeType = "PCMU";
if (fSamplingFrequency == 8000 && fNumChannels == 1) {
payloadFormatCode = 0; // a static RTP payload type
} else {
payloadFormatCode = rtpPayloadTypeIfDynamic;
}
} else {
mimeType = "L16";
if (fSamplingFrequency == 44100 && fNumChannels == 2) {
payloadFormatCode = 10; // a static RTP payload type
} else if (fSamplingFrequency == 44100 && fNumChannels == 1) {
payloadFormatCode = 11; // a static RTP payload type
} else {
payloadFormatCode = rtpPayloadTypeIfDynamic;
}
}
} else { // fBitsPerSample == 8
mimeType = "L8";
payloadFormatCode = rtpPayloadTypeIfDynamic;
}
return new RTPSink(payloadFormatCode,fSamplingFrequency,fNumChannels);
} while (0);
// An error occurred:
return NULL;
}
float WAVAudioFileServerMediaSubsession::duration()
{
return fFileDuration;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -