⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wavaudiofileservermediasubsession.cpp

📁 rtsp协议的主要实现代码.对开发流媒体
💻 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 + -