使用openh323开发(5)

2019-01-18 22:26

protected:

virtual BOOL ReadFrame(PINDEX amount);

virtual void CreateSilenceFrame(PINDEX amount); virtual void Synchronise(PINDEX amount); virtual BOOL IsWAVFileValid(PWAVFile *chan); BOOL AdjustFrame(void * buffer, PINDEX amount); PStringQueue playQueue;

MyH323Connection & conn; PMutex chanMutex; int silentCount; int totalData;

BOOL recordTrigger, hangupTrigger; BOOL closed; BOOL playOnce;

PAdaptiveDelay ogm_delay;

PBYTEArray frameBuffer; PINDEX frameLen, frameOffs; };

//这个是之读的文件是个g723编码的文件, 暂时不研究这个类相关的一切 class G7231_OGMChannel : public PCM_OGMChannel {

PCLASSINFO(G7231_OGMChannel, PCM_OGMChannel); public:

G7231_OGMChannel(MyH323Connection & conn); protected:

BOOL ReadFrame(PINDEX amount);

void CreateSilenceFrame(PINDEX amount); void Synchronise(PINDEX amount); BOOL IsWAVFileValid(PWAVFile *chan); };

//连接,都是从这个类实例出来的

class MyH323Connection : public H323Connection {

PCLASSINFO(MyH323Connection, H323Connection); public:

MyH323Connection(MyH323EndPoint &, unsigned); ~MyH323Connection();

// overrides from H323Connection

BOOL OpenAudioChannel(BOOL, unsigned, H323AudioCodec & codec);

AnswerCallResponse OnAnswerCall(const PString &, const H323SignalPDU &, H323Si

gnalPDU &);

BOOL OnStartLogicalChannel(H323Channel & channel); void OnUserInputString(const PString & value); // new functions

void StartRecording(); void Hangup();

void SetE164Number(const PString & _num) { e164Number = _num; } PString GetE164Number() const { return e164Number; }

protected:

void OnUserInputChar(char ch); BOOL StartMenu(int menuNumber);

BOOL ProcessMenuCmd(const PString & cmdStr); const MyH323EndPoint & ep; PString product; PTime callStartTime; PTime recordStartTime; PString basename; PFilePath recordFn;

PString transmitCodecName, receiveCodecName; BOOL recordTrigger; PMutex connMutex;

PCM_RecordFile * recordFile; PCM_OGMChannel * ogmChannel; PString digits, lastDigits; int currentMenu;

PStringList menuNames;

PString securityToken, e164Number; };

//是录音

class PCM_RecordFile : public PIndirectChannel

{

PCLASSINFO(PCM_RecordFile, PIndirectChannel)

public:

PCM_RecordFile(MyH323Connection & conn, const PFilePath & fn, unsigned callLim it);

~PCM_RecordFile();

BOOL Write(const void * buf, PINDEX len); BOOL Close();

void StartRecording();

virtual void DelayFrame(PINDEX len);

virtual BOOL WriteFrame(const void * buf, PINDEX len); BOOL WasRecordStarted() const { return recordStarted; } protected:

MyH323Connection & conn; PTime finishTime; PFilePath fn;

unsigned callLimit; BOOL recordStarted; BOOL timeLimitExceeded; BOOL closed; BOOL isPCM;

BOOL dataWritten; PAdaptiveDelay delay; PMutex pcmrecordMutex;

PFile *fileclass; // will point to a PWAVFile or PFile class };

//录的结果是个g723文件, 我们暂时不考虑这个类相关的一切 class G7231_RecordFile : public PCM_RecordFile {

PCLASSINFO(G7231_RecordFile, PCM_RecordFile);

public:

G7231_RecordFile(MyH323Connection & conn, const PFilePath & fn, unsigned callL imit);

void DelayFrame(PINDEX len);

BOOL WriteFrame(const void * buf, PINDEX len); };

#endif // _Voxilla_MAIN_H

// End of File

///////////////////////////////////////////////////////////////

这是main.cxx #include #include

#include \#include \#ifdef SPEEX_CODEC

#include \#endif

#include \#include \#include \PCREATE_PROCESS(OpenAm); #define new PNEW

//default 录音时间

#define DEFAULT_MSG_LIMIT 30

#define DEFAULT_CALL_LOG \#define G7231_SAMPLES_PER_BLOCK 240 #define CHECK_PCM 1 #define CHECK_G7231 2

#define MENU_PREFIX \

static PMutex logMutex; static PTextFile logFile;

static PFilePath logFilename = DEFAULT_CALL_LOG; PString G7231Ext = \PString WAVExt = \PString PCMExt = \

//关于log的一切先不用看

static void LogMessage(const PString & str) {

PTime now;

PString msg = now.AsString(\logMutex.Wait();

if (!logFile.IsOpen()) {

logFile.Open(logFilename, PFile::ReadWrite); logFile.SetPosition(0, PFile::End); }

logFile.WriteLine(msg); logFile.Close(); logMutex.Signal(); }

static void LogCall(const PFilePath & fn, const PString & from, const PString & user, unsigned len,

const PString & codec, const PString & product) {

PString addr = from;

LogMessage(addr & \& codec

& \}

/////////////////////////////////////////////////////////////// OpenAm::OpenAm()

: PProcess(\

MAJOR_VERSION, MINOR_VERSION, BUILD_TYPE, BUILD_NUMBER) { }

OpenAm::~OpenAm() { }


使用openh323开发(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:(2018年秋)人教版小学六年级语文上册第一单元1.山中访友 教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: