使用openh323开发(4)

2019-01-18 22:26

return TRUE;

cerr << \if (isEncoding)

cerr << GetSoundChannelRecordDevice(); else

cerr << GetSoundChannelPlayDevice();

cerr << \return FALSE; }

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

//////////////////////////////////////////////// EndPoint的实现分析完毕.

H323Connection的实现, 这个Connection的实现太简单了.可能不足以说明问题

我也没什么好说的了

/////////////////////////////////////////////////////////////// SimpleH323Connection::SimpleH323Connection(SimpleH323EndPoint & ep, unsigned r ef)

: H323Connection(ep, ref) { }

BOOL SimpleH323Connection::OnStartLogicalChannel(H323Channel & channel) {

if (!H323Connection::OnStartLogicalChannel(channel)) return FALSE;

cout << \switch (channel.GetDirection()) { case H323Channel::IsTransmitter : cout << \break;

case H323Channel::IsReceiver : cout << \break; default : break; }

cout << channel.GetCapability() << endl; return TRUE; }

void SimpleH323Connection::OnUserInputString(const PString & value) {

cout << \}

// End of File

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

总结一下基本的过程就是创建一个H323Endpoint的对象endpoint, 创建对象后这个程序就

有好多个小的线程被创建了.然后EndPoint开始监听来电, 之后判断是否直接呼叫另一个h

323的Endpoint. 然后就是一个for循环, 判断标准的输入, 并通过当前的token来lock一个

Connection, 每个连接会有唯一的一个token, lock的意思是说, 在被lock的期间是不能被

释放的. 根据输入的字符决定对得到的连接做什么.

OpenAM:

是个answer machine, 自动应答机, 或者是留言机. 实现的很简单, 里面对OpenH323使用 的思路很有价值.

./openam –n –-g711message sample_message.wav

这样运行, 用netmeeting 连接一下这个IP, netmeeting就会放一段简单的英语, 测测你的

英语听力, 他在讲什么?

这个程序是一个支持多连接和并发连接的Endpoint, 但是他没有使用真正的声音设备, 放

出的音从一个已有的wav文件中读出来, 远程用户的留言被录到一个文件里, 文件的名字表

示了是什么时间录制的.

主要的思路是给在连接打开声音通道的时候, 根据isEncoding的值区别是录音还是放音,如

果是录音, 将读文件的Channel附加在codec上, 相反写文件的Channel附件在codec上,注意 这是两个codec.

这个东西给了我们一个方法, 如何使用文件IO来代替声音设备的IO来使用OpenH323.

这是main.h

#ifndef _Voxilla_MAIN_H #define _Voxilla_MAIN_H #include #include #include #include #include #include #include

//主进程

class OpenAm : public PProcess {

PCLASSINFO(OpenAm, PProcess) public: OpenAm(); ~OpenAm();

void Main();

void RecordFile(PArgList & args); void PlayFile(PArgList & args);

protected:

long GetCodec(const PString & codecname);

OpalLineInterfaceDevice * GetDevice(const PString & device); };

//H323 端点

class MyH323EndPoint : public H323EndPoint

{

PCLASSINFO(MyH323EndPoint, H323EndPoint); public:

MyH323EndPoint(unsigned callLimit, const PString & runCmd, const PDirectory & dir, int flags);

// overrides from H323EndPoint

virtual H323Connection * CreateConnection(unsigned callReference); BOOL OnIncomingCall(H323Connection &, const H323SignalPDU &, H323SignalPDU &);

// new functions

BOOL Initialise(PConfigArgs & args);

PString GetGSMOGM() const { return gsmOgm; }

void SetGSMOGM(const PString & s) { gsmOgm = s; } PString GetG711OGM() const { return g711Ogm; }

void SetG711OGM(const PString & s) { g711Ogm = s; } PString GetLPC10OGM() const { return lpc10Ogm; }

void SetLPC10OGM(const PString & s) { lpc10Ogm = s; } #ifdef SPEEX_CODEC

PString GetSPEEXOGM() const { return speexOgm; }

void SetSPEEXOGM(const PString & s) { speexOgm = s; } #endif

PString GetG7231OGM() const { return g7231Ogm; }

void SetG7231OGM(const PString & s) { g7231Ogm = s; } unsigned GetCallLimit() const { return callLimit; } PString GetRunCmd() const { return runCmd; } PDirectory GetDirectory() const { return dir; } void SetRecordWav(const BOOL rec){ recordWav = rec; } BOOL GetRecordWav() const { return recordWav; } enum {

DeleteAfterRecord = 0x01, NoRecordG7231 = 0x02,

HangupAfterPlay = 0x04 };

BOOL GetDeleteAfterRecord() const { return flags & DeleteAfterRecord; } BOOL GetNoRecordG7231() const { return flags & NoRecordG7231; }

BOOL GetHangupAfterPlay() const { return flags & HangupAfterPlay; } protected:

unsigned callLimit;

PString pcmOgm, g711Ogm, gsmOgm, lpc10Ogm, g7231Ogm, runCmd; #ifdef SPEEX_CODEC PString speexOgm; #endif

PDirectory dir; int flags;

BOOL recordWav; };

class PCM_RecordFile; class MyH323Connection;

PQUEUE(PStringQueue, PString); // Out Going Channel OGM //就是发送语音的通道 //即是读文件的通道

class PCM_OGMChannel : public PIndirectChannel {

PCLASSINFO(PCM_OGMChannel, PIndirectChannel); public:

PCM_OGMChannel(MyH323Connection & conn); BOOL Read(void * buffer, PINDEX amount); void PlayFile(PFile * chan); BOOL Close();

void QueueFile(const PString & cmd); void FlushQueue(); void SetRecordTrigger(); void SetHangupTrigger();

void SetPlayOnce() { playOnce = TRUE; }


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

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

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

马上注册会员

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