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

📄 wispcmaudioservermediasubsession.cpp

📁 采用公司系列的芯片
💻 CPP
字号:
/* * Copyright (C) 2005 WIS Technologies International Ltd. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and the associated README documentation file (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */// A "ServerMediaSubsession" subclass for on-demand unicast streaming// of PCM audio from a WIS GO7007 capture device.// Implementation#include "WISPCMAudioServerMediaSubsession.hh"#include <uLawAudioFilter.hh>#include <SimpleRTPSink.hh>WISPCMAudioServerMediaSubsession* WISPCMAudioServerMediaSubsession::createNew(UsageEnvironment& env, WISInput& wisInput,	    unsigned samplingFrequency, unsigned numChannels,	    Boolean inputIsLittleEndian, Boolean convertToULaw) {  return new WISPCMAudioServerMediaSubsession(env, wisInput,						  samplingFrequency, numChannels,						  inputIsLittleEndian, convertToULaw);}WISPCMAudioServerMediaSubsession::WISPCMAudioServerMediaSubsession(UsageEnvironment& env, WISInput& wisInput,				       unsigned samplingFrequency, unsigned numChannels,				       Boolean inputIsLittleEndian, Boolean convertToULaw)  : WISServerMediaSubsession(env, wisInput,			     fSamplingFrequency*(fConvertToULaw ? 8 : 16)*fNumChannels),  fSamplingFrequency(samplingFrequency), fNumChannels(numChannels),  fInputIsLittleEndian(inputIsLittleEndian), fConvertToULaw(convertToULaw) {}WISPCMAudioServerMediaSubsession::~WISPCMAudioServerMediaSubsession() {}FramedSource* WISPCMAudioServerMediaSubsession::createNewStreamSource(unsigned /*clientSessionId*/, unsigned& estBitrate) {  FramedSource* pcmSource = fWISInput.audioSource();    // Add in any filter necessary to transform the data prior to streaming:  FramedSource* resultSource;  if (fConvertToULaw) { // stream u-law    // Add a filter that converts from raw 16-bit PCM audio    // to 8-bit u-law audio:    resultSource = uLawFromPCMAudioSource::createNew(envir(), pcmSource);  } else { // stream raw PCM    if (fInputIsLittleEndian) {      // The 16-bit samples are in little-endian order.  Add a filter      // that converts them to network (i.e., big-endian) order:      resultSource = EndianSwap16::createNew(envir(), pcmSource);    } else {      // The 16-bit samples are already in big-endian order:      resultSource = pcmSource;    }  }  estBitrate = fEstimatedKbps;    return resultSource;}RTPSink* WISPCMAudioServerMediaSubsession::createNewRTPSink(Groupsock* rtpGroupsock, unsigned char rtpPayloadTypeIfDynamic,		   FramedSource* /*inputSource*/) {  setAudioRTPSinkBufferSize();  char* mimeType;  unsigned char payloadFormatCode = rtpPayloadTypeIfDynamic; // by default  if (fConvertToULaw) { // stream u-law    mimeType = "PCMU";    if (fSamplingFrequency == 8000 && fNumChannels == 1) {      payloadFormatCode = 0; // a static RTP payload type    }  } else { // stream raw PCM    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    }  }  return SimpleRTPSink::createNew(envir(), rtpGroupsock,				  payloadFormatCode,				  fSamplingFrequency,				  "audio", mimeType,				  fNumChannels);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -