Asterisk媒体处理分析

合集下载

《Asterisk 使用资料》

《Asterisk 使用资料》

Asterisk目录及配置文件/etc/asterisk/Asterisk主目录,包含其它关于Asterisk的配置文件;*zaptel.conf这个配置文件放在/etc,因为其它软件也可以使用Zaptel这个硬件及其驱动,所以不是放在/etc/asterisk里./usr/lib/asterisk/modules/这个目录包含所有可以加载Asterisk模块(应用程序\编辑器\格式和有用通道),在Asterisk启运时会加载这些模块(可以编辑modules.conf)./var/lib/asterisk/比较重要的是astdb文件与agi-bin目录;astdb包含Asterisk当地数据库信息.sounds/所有声音提示的文件在里面,包括Asterisk原代码中的sounds.txt文件mohmp3/如果配置了音乐保持,应用程序会在这个目录下查找mp3(用CBR从文件中去除身份标签).keys/使用公钥和私钥系统认证与一个由RSA数字签名形成的一对等连接.公钥和私钥的扩展名分别为.pub和.keyfirmware/这个目录含了很多Asterisk相兼容的设备固件,它只有iax/这个子目录,其中有Digium的IAXy的二进制固件镜像.images/只有在较多的支持并且利用图解式的图像设备被发布,这个目录将会与相应的目录有更大的关联./var/lib/asterisk/agi-bin agi-bin包含所有脚本,可以通过许多已经建立的AGI应用程序与Asterisk连接./var/spool/asteriskoutgoing/gcall/tmp/voicemail/================配置文件================/etc/asterisk/asterisk.conf主要配置文件,/etc/zaptel.conf硬件接口的基本层.修改这个配置文件要用modprobe装载Linux Kernel使用模块./etc/asterisk/zapata.conf为硬件配置Asterisk的接口./etc/asterisk/extensions.conf拨号方案./etc/asterisk/sip.conf SIP协议配置文件/etc/asterisk/iax.conf呼入和呼出IAX通道/etc/asterisk/extensions.conf拨号方案配置文件/etc/asterisk/moduprobe.conf加载模块配置文件Asterisk developer\'s documentation 翻译计划by serva今天,Asterisk已经成为一个VOIP业界使用最广泛的一个集成电信级别P BX的工具,IPPBX如今已经成为VOIP商家争夺的一块重要市场,在我们越来越熟悉使用Asterisk的同时,我们希望能够越来越深入的了解asterisk,特别是对于开发人员,如果有自己特定的需求,在复杂的asterisk文件夹和asteri sk的源代码文件中迷失了方向,不知所措。

ASTER数据处理

ASTER数据处理

ASTER数据处理引言概述:ASTER(Advanced Spaceborne Thermal Emission and Reflection Radiometer)是一种遥感卫星传感器,具有高分辨率和多波段的特点。

在地球科学、地质勘探、环境监测等领域,ASTER数据的处理和分析对于获取准确的地表信息至关重要。

本文将介绍ASTER数据处理的基本步骤和常用方法。

一、数据获取与预处理1.1 数据源:ASTER数据可从美国地质调查局(USGS)的全球地球观测系统(GEOSS)获取。

通过GEOSS平台,可以免费获取ASTER Level 1A和Level 1B 数据,其中Level 1B数据已经进行了几何校正。

1.2 数据格式:ASTER数据通常以HDF(Hierarchical Data Format)格式存储,其中包含了多个波段的信息。

1.3 预处理:在进行数据处理之前,需要进行一些预处理步骤,如大气校正、辐射定标和几何校正等,以确保数据的准确性和一致性。

二、数据解译与分类2.1 数据解译:ASTER数据包含了多个波段,可以用于提取地表特征信息。

通过对不同波段的分析,可以解译出地表的植被、水体、岩石等特征。

2.2 数据分类:根据不同的应用需求,可以使用不同的分类方法对ASTER数据进行分类,如基于像元的分类、基于对象的分类和基于混合像元的分类等。

2.3 特征提取:通过图象处理技术,可以从ASTER数据中提取出各种地表特征,如植被指数、土壤湿度、地表温度等。

这些特征可以用于地表环境监测和资源调查等领域。

三、数据融合与模型建立3.1 数据融合:ASTER数据可以与其他遥感数据进行融合,以提高数据的精度和可靠性。

常用的数据融合方法包括主成份分析、小波变换和多尺度分析等。

3.2 模型建立:通过对ASTER数据进行分析和处理,可以建立各种模型来预测和摹拟地表的特征和变化。

例如,可以建立植被生长模型、土壤侵蚀模型等,以支持农业生产和环境保护等决策。

ASTER数据处理

ASTER数据处理

ASTER数据处理一、引言ASTER(Advanced Spaceborne Thermal Emission and Reflection Radiometer)是一种由美国宇航局(NASA)和日本航空航天研究开发机构(JAXA)合作开发的遥感卫星传感器。

ASTER数据处理是指对由ASTER传感器获取的遥感数据进行处理和分析的过程。

本文将详细介绍ASTER数据处理的标准格式,包括数据获取、预处理、几何校正、辐射校正、影像拼接和应用等方面。

二、数据获取ASTER数据可以从NASA的地球观测系统数据处理与信息技术项目(EOSDIS)中获取。

用户需要注册EOSDIS账号,并根据需要选择相应的ASTER数据集。

数据集包括高程数据、地表温度数据、地表反射率数据等。

三、预处理1. 数据格式转换:将ASTER数据从原始格式(HDF)转换为常用的栅格数据格式,如GeoTIFF。

2. 数据子集选择:根据研究需求,选择感兴趣的区域进行子集提取,以减少处理数据的大小。

3. 云去除:使用云检测算法,将云覆盖的像素从数据中去除,以提高后续处理的准确性。

四、几何校正1. 大气校正:根据ASTER传感器的观测原理,对数据进行大气校正,消除大气影响,得到大气校正反射率数据。

2. 几何校正:根据地面控制点(GCPs)和地形高程数据,进行几何校正,纠正数据的位置和形状,以提高数据的精度。

五、辐射校正1. 辐射校正:根据辐射定标系数和大气校正反射率数据,进行辐射校正,将数据转换为辐射亮度值。

2. 温度计算:根据辐射亮度值和辐射定标系数,计算地表温度,得到地表温度数据。

六、影像拼接1. 影像配准:对多个ASTER影像进行配准,使其在地理空间上对应。

2. 影像拼接:根据配准结果,将多个ASTER影像拼接成一个无缝的大区域影像。

七、应用ASTER数据处理后,可以应用于以下领域:1. 地质研究:利用ASTER高程数据和地表反射率数据,进行地质构造和地貌分析。

ASTER数据处理 (2)

ASTER数据处理 (2)

ASTER数据处理一、介绍ASTER(Advanced Spaceborne Thermal Emission and Reflection Radiometer)是一种遥感传感器,由美国宇航局(NASA)和日本宇宙航空研究开发机构(JAXA)联合开发。

它能够获取地球表面的高光谱和热红外数据,提供了丰富的地表信息。

ASTER数据处理是指对从ASTER传感器获取的数据进行处理和分析的过程,以提取有用的地理信息和进行科学研究。

二、ASTER数据处理的步骤1. 数据获取首先,需要获取ASTER传感器获取的数据。

ASTER数据以多光谱和热红外图像的形式提供,可以通过卫星数据下载网站或专门的数据提供机构获得。

数据通常以标准格式(如GeoTIFF)存储,并包含地理坐标和辐射值等信息。

2. 数据预处理在进行后续分析之前,需要对获取的ASTER数据进行预处理。

预处理包括校正、大气校正和几何校正等步骤。

校正可以消除传感器和大气等因素引入的误差,确保数据的准确性和可比性。

几何校正可以将数据投影到地理坐标系统中,以便进行空间分析。

3. 数据融合ASTER数据包含多光谱和热红外信息,可以通过数据融合技术将它们融合为一幅综合图像。

数据融合可以提高地物分类和信息提取的精度。

常用的数据融合方法包括主成分分析(PCA)和多分辨率分析(MRA)等。

4. 地物分类地物分类是ASTER数据处理的重要任务之一。

通过对融合后的ASTER图像进行分类,可以将地表分为不同的类别,如植被、水体、建筑物等。

常用的分类方法有最大似然分类、支持向量机(SVM)和人工神经网络等。

5. 特征提取特征提取是指从ASTER数据中提取有用的地理信息和特征参数。

通过分析不同波段的光谱反射率和热红外辐射温度等数据,可以获取植被指数、土壤湿度、地表温度等地理参数。

这些参数对于农业、环境和资源管理等领域具有重要意义。

6. 数据分析ASTER数据处理还包括对提取的地理信息进行分析。

Asterisk媒体通道

Asterisk媒体通道

可 自定义 、程序化 P X的控制逻辑在 A t s B s r k中被称为呼 e i 叫方案 。呼 叫方 案被保存在一个 名为 et s n.of x ni scn 的文本文 e o
件 中 。这 个 文 件 用 于 建 立 通道 与应 用 的关 联 。用 户 在 呼 叫 方 案
的部分 ,因此 ,本文 特别介绍 了 A trk的系统 结构 ,媒体通 si es 道 的结 构。并以 N K AN 7 O I 7 0设备 为例 详细介绍 了这部分 的移


E E D D Y T 啊P O 咖 MB D E s E R G S
MN IG……………………………………………………………………………
| j




毫|
- 。| :
杨 广翔
摘 要 本 文首 先 介 绍 了 A tr k系统 中媒 体 通 道 模 块 的 结构 组成 ,并 以 G t a e 库媒 si es s em r r
包 一些非 常简单 的命令 ,如 G t,也包 括一些非 常复 杂的命 o o
令 ,如 V i M i 语 音 邮 件 ) M e e 电 话 会 议 ) 。 通 过 这 些 o e al e ( , et ( m 等
命令 ,可 以程序 化地建立 P X 的逻辑 ,从而 建立丰富 的语 音 B
可 以 提 供各 类语 音业 务 ,通 过 自定 义 流程 ,可 以实 现 令 人 惊 异
的电话功能 。通常 它运 行在 P C机之上 ,借 助硬 件的支持 ,它 可以使 P c机接入到各类通信 网络 ,从传统 的 PT S N到 V I 。 OP
它既可 以使 P c成 为 语 音 通 信 的 终 端 ,也 可 以使 P C成 为 支 撑 语 音业 务 的服 务 器 。 Lnx的 发 展 推 动 了 各 种 类 型 的 Lnx设 备 的 出 现 。 不 仅 iu i u

深入浅出asterisk(三)_chan_sip代码分析2

深入浅出asterisk(三)_chan_sip代码分析2

现在回过头来把焦点转移到sipsock_read()函数。

所有到来的sip包都在这里开始处理,在处理sip包期间,s ipsock_read需要对sip的拥有者channel上锁,sipsock_read成功则返回0,失败则返回1。

它解析sip包并且找到所在的dialog,或者创建新的dialog。

并且把解析好的包交给handle_request()处理。

sipsock_read第一步接收socket数据,存到结构sip_request的data域中。

15062 res = recvfrom(sipsock, req.data, sizeof(req.data) - 1, 0, (struct sockaddr *)&sin, &len);解析SIP包,获取sip request method,如INVITE, BYE等15086 parse_request(&req);15087 req.method = find_sip_method(req.rlPart1);随后找到对应的sip_pvt结构,或者创建新的sip_pvt结构,结构指针返回到变量p中。

15099 /* Find the active SIP dialog or create a new one */15100 p = find_call(&req, &sin, req.method); /* returns p locked */在进一步操作之前,需要对p->owner上锁,这个操作会最多尝试100次直至成功。

15107 /* Go ahead and lock the owner if it has one -- we may need it */15108 /* becaues this is deadlock-prone, we need to try and unlock if failed */15109 if (!p->owner || !ast_channel_trylock(p->owner))15110 break; /* locking succeeded */如果上锁操作失败,将会返回503 sip消息。

Asterisk配置文详解

Asterisk配置文详解

Asterisk配置文详解当安装完Asterisk,验证启动无误,就需要开始配置PBX了,首先需要告诉Asterisk那些类型的电话连接(手持设备,交换设备等,不管是通过电路还是IP),这些被称为通道。

Asterisk 的通道配置下一步任务是配置拨号方案,拨号方案控制进入系统的呼叫根据设定的各种应用的走向,直到完成目标。

Asterisk 的拨号方案配置现在已经运行了Asterisk,但是否需要一些额外的铃音或提示音?Music on Hold (音乐保持)Call Parking (呼叫停泊)Billing (计费)Management interfaces (管理接口)模板可以帮助避免在配置文件中出现重复项目。

STS模板引擎可以从模板中生成 Asterisk 配置文件。

Alternative Methods of Configuration•GUI or Web based setup tools, see Asterisk GUI•MySQL etc databases主配置文件:•asterisk.conf,通知Asterisk 环境目录位置,包含其他所有配置文件所包含的目录,缺省Asterisk 会在"/etc/asterisk/"目录下找"asterisk.conf"文件,也可以通过命令参数使用不同的"asterisk.conf"配置Asterisk通道:•adtranvofr.conf: 配置帧中继语音通道•agents.conf: 配置代理通道•h323.conf: 配置H323 通道•iax.conf: 配置IAX 通道•mgcp.conf: 配置MGCP 通道(媒体网关控制协议,应用于多媒体网关单元之间)•modem.conf: 配置Modem 通道(使用ISDN,不是modem)•phone.conf: 配置电话通道(linux电话设备)•sip.conf: 配置SIP 通道•sip_notify.conf: 配置 SIP 消息通知•skinny.conf: 配置Cisco SCCP 通道 (Cisco SCCP)•vpb.conf: 配置Voicetronix 卡通道(是澳大利亚的开放源码的CTI专业制造厂商)•zapata.conf: 配置 ZAP 卡通道配置模拟显示服务接口:•adsi.conf•asterisk.adsi•telcordia-1.adsiConfiguration of the Dialplan:•extensions.conf: 拨号方案•extensions.ael: 扩展拨号方案语言•parking.conf: 配置呼叫停泊,文件名字已被修改为features.conf•extconfig.conf: 通过res_data 方式部署扩展配置,例如通过ODBC配置特殊拨号方案命令:•alarmreceiver.conf: 警报接收配置•enum.conf: 电话号码映射查找配置•dundi.conf: 分布式全球号码发现(DUNDi)是一个对等(P2P)协议,用于提供等价于那些由电子号码(ENUM)提供的服务。

Asterisk-相关知识与应用

Asterisk-相关知识与应用

DialPlan (拨号方案)
dial : 它是Asterisk 很有价值的一功能,当来电者使用不同的通信方式时,它可以进行转换并进 行呼叫连接,如SIP电话到PSTN呼叫
Contexts : 拨号方案(DialPlan)进入部分我我们称为Contexts,每个Contexts 有一些extensions(扩展)构成,来实现一系列相关服务。
举一个例子如下: [default]
在extensions.conf 配制文件中, [default]上下文是拨号方案默认的进入部分
DialPlan (拨号方案)
goto 功能是发送呼叫到拨号方案中的其它context部分.
语法: goto(context,extension,priority)
[default] exten => 123,1,Answer() exten => 123,n,Background(main-menu) exten => 1,1,Playback(digits/1)
支持一条线路,只需要增32KB 的带宽,但是需要网络 质量良好。 Asterisk可支持成千的客户端(需要板卡与带宽支持)
asterisk 安装与启动
1从官方网站下载 asterisk-1.2.26.tar包,拷备到LINUX 下的用户目录. 2 用tar xzvf asterisk-1.2.26.tar 解压到当目录. 3 进入 asterisk 目录 执行如下命令
/usr/lib/asterisk/modules/ 这个目录包含所有可以加载Asterisk模块(应用程序\ 编辑器\格式和有用 通道),在Asterisk启运时会加载这些模块(可以编辑 modules.conf).
/var/lib/asterisk 比较重要的是astdb文件与agi-bin目录;astdb包含Asterisk当地数 据库信息. sounds/ 所有声音提示的文件在里面 mohmp3/ 如果配置了音乐保持,应用程序会在这个目录下查找mp3 keys/ 使用公钥和私钥系统认证与一个由RSA数字签名形成的一对等 连接.公钥和私钥的扩展名分别为.pub和.key
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Asterisk媒体处理分析1 媒体转换过程以下讲媒体转换有两种方式除外:⏹两端编码方式一致如两端语音编码都是g729;⏹一端是g711a,另一端是g711u时Asterisk媒体处理过程与业务无关,是一个统一的过程,处理对象有RTP和File,不管外界RTP或File输入格式如何,进入Asterisk后默认转换为signed linear格式,从Asterisk 输出(发送或写文件)时再从slinear格式转换为外界RTP或File格式(细节参见RTP Translate):上图分为四个方向1. RTP to RTP(正常通话流程)2. RTP to File(录音流程)3. File to RTP(放音流程)4. File to File(文件格式转换流程)复杂业务的媒体处理可以分解为以上四个方向处理流程,复杂业务可能包含其中几种流程,每个业务的媒体处理可以用下图表示:1设置channel媒体转换路径(如g723=>gsm)2 源媒体转换为slinear格式(如g723=>slinear)4 Slinear转换为目的格式(如slinear=>gsm)3 媒体处理(如混音)5 发送/写文件1. 设置转换路径,即设置源媒体格式与目的媒体格式;2. 把输入媒体格式进行转换为slinear,如果输入媒体为slinear可省略本步骤;3. 媒体处理,如混音等,一般可以省略;4. 把slinear格式媒体转换为目的媒体格式,如果目的媒体格式为slinear可省略本步骤;5. 把转换后的媒体打包发送或写到本地文件。

1.1 RTP to RTPRTP to RTP适用于正常通话流程。

Channel收到RTP包时经过分析可以得到媒体格式,每个channel保存读和写的媒体格式信息,读RTP时使用步骤1和2,发送RTP时使用步骤4和5,channel的结构参见媒体转换相关结构,channel里保存媒体转换信息结构ast_trans_pvt和文件流描述结构ast_filestream(见文件流)。

下图为一个正常通话的编码转换过程,通话一端适用ilbc编码另一端使用gsm编码:从上图看出,通话两端的语音编码进入asterisk后都转换为asterisk内部编码slinear后,发送时再被转换为目的语音编码。

下图说明一端使用g711a,另一端使用g711u时不需要转换为asterisk内部编码slinear,而是alaw和ulaw两种编码直接进行转换:1.2 RTP to FileRTP to File适用录音流程,包含步骤1、2、4、5。

例:g729.cap语音还原为gsm格式文件过程:File to RTP适用于放音流程,与RTP to File流程一样也包含步骤1、2、4、5。

1.4 File to FileFile to File适用于文件格式转换,与RTP to File/File to RTP一样也包含步骤1、2、4、5。

具体实例可参见附录。

1.5 混合流程混合流程用到以上四个流程中的某几个复杂的业务有可能是混合流程,如Voicemail包含File to RTP和RTP to File流程,具体参见voicemail函数调用过程。

2 RTP处理2.1 RTP init在创建sip_channel时,rtp fd同时被创建并加进channel的fds,通过poll进行监控。

sip_new -> tmp->fds[0] = ast_rtp_fd(i->rtp);2.2 RTP ReadPoll监控到rtp fd有读事件时进行read;ast_rtp_read中进行RTP解包;读RTP过程中会调用ast_translate函数进行媒体转换,一般转换为slinear格式。

具体函数调用过程如下:wait_for_answer -> ast_waitfor_n(watchers, pos, to); -> ast_waitfor_nandfds->poll-> f = ast_read(winner) -> struct ast_frame *ast_read(struct ast_channel *chan) -> static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio) ->f = chan->tech->read(chan)即static struct ast_frame *sip_read(struct ast_channel*ast) / ast_translate ->static struct ast_frame*sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p, int *faxdetect) -> ast_set_read_format/ast_set_write_format/f =ast_rtp_read(p->rtp) RTP解包-> recvfrom发送RTP时会调用ast_translate函数进行媒体转换,从slinear格式转换为目的媒体格式,ast_rtp_raw_write函数中对RTP进行组包。

具体函数调用流程如下:wait_for_answer-> f = ast_read(winner) ->int ast_write(struct ast_channel *chan, struct ast_frame *fr) ->ast_set_write_format/ast_translate/res = chan->tech->write(chan, f) 即static intsip_write(struct ast_channel *ast, struct ast_frame *frame) ->int ast_rtp_write(struct ast_rtp *rtp, struct ast_frame *_f) ->ast_rtp_raw_write(rtp, f, codec) RTP组包-> sendto2.4 RTP translate2.4.1 媒体转换相关结构ast_channel结构中writetrans和readtrans指向ast_trans_pvt结构,writetrans和readtrans 通过ast_translator_build_path创建;ast_translator 结构中保存媒体转换源编码格式(srcfmt),目的编码格式(dstfmt),转换回调(framein frameout):以g729编码为例初时化ast_translator结构:2.4.2 媒体转换流程2.4.2.1 注册编码把某种编码ast_translator注册到tr_matrix全局变量:ast_register_translator(t) (如res = ast_register_translator(&g729tolin)) ->int __ast_register_translator(struct ast_translator *t, struct ast_module *module) -> static void rebuild_matrix(int samples)2.4.2.2 设置编码转换路径static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p, int *faxdetect) -> int ast_set_read_format(struct ast_channel *chan, int fmt) / int ast_set_write_format(struct ast_channel *chan, int fmt) ->static int set_format(struct ast_channel *chan, int fmt, int *rawformat, int *format,struct ast_trans_pvt **trans, const int direction) ->struct ast_trans_pvt *ast_translator_build_path(int dest, int source)调用ast_translator_build_path函数,在全局变量tr_matrix中查找对应的ast_translator 创建ast_trans_pvt并返回:2.4.2.3 编码转换调用ast_translate函数实现编码转换:3 T38Asterisk支持pass-through方式T38传真,asterisk不发起reinvite,只是代理T38。

T38 reinvite经过asterisk时SDP协商的纠错方式,频率等信息可能被修改,T38包经过asterisk 时UDPTLPacket被解析,具体T30内容不会被修改。

4 附录4.1 文件流API4.1.1 文件流操作函数●struct ast_filestream *ast_readfile(const char *filename, const char *type, const char*comment, int flags, int check, mode_t mode)打开一个可读文件流,类似以只读方式fopen。

●struct ast_filestream *ast_writefile(const char *filename, const char *type, const char*comment, int flags, int check, mode_t mode)打开一个可写文件流,类似以写方式fopen。

●struct ast_frame *ast_readframe(struct ast_filestream *s)读取文件流数据,类似fread。

●int ast_writestream(struct ast_filestream *fs, struct ast_frame *f)往文件流中写数据,类似fwrite如果读和写的格式不一致会调用ast_translate进行转换。

●int ast_closestream(struct ast_filestream *f)关闭文件流,类似fclose。

相关文档
最新文档