摘要: esl inbound client,内部有一个canSend()方法: 1 2 3 public boolean canSend() { return channel != null && channel.isConnected() && authenticated; } 大多数情况下(之所以说大 阅读全文
posted @ 2023-02-07 18:13 阿风小子 阅读(342) 评论(0) 推荐(0)
摘要: 这一篇用esl实战一把,利用esl client来实现一个小型呼叫中心的原型,先看看下面这张图: 企业通常会对外公布一个400之类的服务电话,当用户拨打这个电话时,实际上背后是一堆客服妹纸带着耳麦通过电脑连着自己的电话分机。客人进线时,系统会根据一定的规则(比如挑1个当前空闲的客服),然后把电话转接 阅读全文
posted @ 2023-02-07 18:12 阿风小子 阅读(459) 评论(0) 推荐(0)
摘要: 电话会议是一个常用功能,freeswitch当然支持,下面是基本用法: 一、发起会议 1 conference test bgdial user/1004 上面的命令表示,发起1个名为test的会话,同时拨打1004用户,如果该用户接听了,就相当于加入会议。注:如果1004是第1个加入会议的人,此时 阅读全文
posted @ 2023-02-07 18:11 阿风小子 阅读(1027) 评论(0) 推荐(0)
摘要: 来电时,播放音乐是一个很常用的功能,下面是一些相关的命令: 一、单次播放playback 1 originate user/1000 &playback(ivr/8000/ivr-welcome_to_freeswitch.wav) 二、指定次数的循环播放loop_playback 注:这个方式,直 阅读全文
posted @ 2023-02-07 18:10 阿风小子 阅读(1312) 评论(0) 推荐(0)
摘要: github上的esl-client已经N年未更新了,上面有一堆bug,记录一下: 一、内存泄露 org.freeswitch.esl.client.transport.message.EslFrameDecoder 这个类,使用了netty的ByteBuf,对netty有了解的同学应该知道,net 阅读全文
posted @ 2023-02-07 18:08 阿风小子 阅读(591) 评论(0) 推荐(0)
摘要: 关于这个功能,esl-client 上给出的源码示例极具误导性,根本跑不起来,见: https://github.com/esl-client/esl-client/blob/master/src/test/java/OutboundTest.java 正确姿势:必须在事件订阅的回调里,才能拿到用户 阅读全文
posted @ 2023-02-07 18:07 阿风小子 阅读(227) 评论(0) 推荐(0)
摘要: Freeswitch官网太慢了,经常还打不开,把电话挂断原因大全复制一份到这里,方便日常查看 ITU-TQ.850 CodeSIP Equiv.EnumerationCauseDescription 0 UNSPECIFIED Unspecified. No other cause codes ap 阅读全文
posted @ 2023-02-07 18:06 阿风小子 阅读(376) 评论(0) 推荐(0)
摘要: 友情提示:初次接触SIP(Session Initiation Protocol)协议的同学,强烈建议先将文末参考文章中的链接,先看至少二遍! 一、SIP协议是一个文本协议 言外之意:不同于二进制难以阅读,SIP是仅凭肉眼就能看懂大意的协议。来一个示例: INVITE的请求示例: 1 2 3 4 5 阅读全文
posted @ 2023-02-07 18:05 阿风小子 阅读(210) 评论(0) 推荐(0)
摘要: 虽然freeswitch已经内置了一些标识的事件,比如:CHANNEL_CREATE(发起呼叫时触发),CHANNEL_HANGUP_COMPLETE(电话挂断时触发)...,但是有时候我们想根据业务需求,新增一些自定义的事件,比如:客人进线后,如果分配到了一个空闲的客服,希望触发一个特定的事件。 阅读全文
posted @ 2023-02-07 18:04 阿风小子 阅读(196) 评论(0) 推荐(0)
摘要: 一、origiante时指定主叫号码 正常情况下,如果在freeswitch控制台,输入类似下面 命令: originate user/1000 &park 被叫收到振铃提示时,显示的号码类似下面这样 如果希望指定主叫的显示名称及号码,可以加参数: 1 originate {origination_ 阅读全文
posted @ 2023-02-07 18:02 阿风小子 阅读(731) 评论(0) 推荐(0)
摘要: 默认情况下,freeswitch内置了1000-1019这20个用户,如果需要添加更多用户,可以按如下步骤操作: 一、复制用户文件 \FreeSWITCH\conf\directory\default 下有1000.xml ~ 1019.xml 这20个用户的配置文件,以1000.xml为例: 1 阅读全文
posted @ 2023-02-07 18:00 阿风小子 阅读(389) 评论(0) 推荐(0)
摘要: outbound外联模式下,可以参考我先前写的文章:freeswitch: ESL中如何自定义事件及自定义事件的监听,使用export导出变量。但是inbound模式下,ESL client并未封装export命令,如果要给某条腿附加一个变量值,可以借助uuid_setvar命令。 一、命令行验证 阅读全文
posted @ 2023-02-07 17:58 阿风小子 阅读(243) 评论(0) 推荐(0)
摘要: 很多时候我们打电话到公司前台,会听到类似“欢迎致电XXX,办公电话请直拨分机,咨询XX请按1,咨询YY请按2”这样的语音提示。在一些特定流程中,系统自动发起呼叫打到前台,希望实现自动按键(即:不用人手动按键),FreeSwitch提供了2个基本命令: send_dtmf及uuid_send_dtmf 阅读全文
posted @ 2023-02-07 17:56 阿风小子 阅读(493) 评论(0) 推荐(0)
摘要: 虽然freeswitch已经内置了一些标识的事件,比如:CHANNEL_CREATE(发起呼叫时触发),CHANNEL_HANGUP_COMPLETE(电话挂断时触发)...,但是有时候我们想根据业务需求,新增一些自定义的事件,比如:客人进线后,如果分配到了一个空闲的客服,希望触发一个特定的事件。 阅读全文
posted @ 2023-02-07 17:32 阿风小子 阅读(522) 评论(0) 推荐(0)
摘要: 摘要 在很多情况下,我们需要对GStreamer创建的Pipeline进行调试,来了解其运行机制以解决所遇到的问题。为此,GStreamer提供了相应的调试机制,方便我们快速定位问题。 查看调试日志 使用GST_DEBUG环境变量查看日志 GStreamer框架以及其插件提供了不同级别的日志信息,日 阅读全文
posted @ 2023-02-07 17:03 阿风小子 阅读(499) 评论(0) 推荐(0)
摘要: 摘要 GStreamer提供了不同的命令行工具用于快速的查看信息以及验证Pipeline的是否能够正确运行,在平时的开发过程中,我们也优先使用GStreamer的命令行工具验证,再将Pipeline集成到应用中。本文将介绍gst-inspect-1.0,gst-discoverer-1.0,gst- 阅读全文
posted @ 2023-02-07 17:02 阿风小子 阅读(1480) 评论(0) 推荐(0)
摘要: 摘要 通常我们的播放引擎需要和GUI进行集成,在使用GStreamer时,GStreamre会负责媒体的播放及控制,GUI会负责处理用户的交互操作以及创建显示的窗口。本例中我们将结合QT介绍如何指定GStreamer将视频输出到指定窗口,以及如何利用GStreamer上报的信息去更新GUI。 与GU 阅读全文
posted @ 2023-02-07 16:59 阿风小子 阅读(1297) 评论(0) 推荐(0)
摘要: 摘要 我们把直接从网络播放一个媒体文件的方式称为在线播放(Online Streaming),我们已经在以往的例子中体验了GStreamer的在线播放功能,当我们指定播放URI为 http:// 时,GStreamer内部会自动通过网络获取媒体数据。在今天的示例中,我们将进一步了解如何处理由网络问题 阅读全文
posted @ 2023-02-07 16:57 阿风小子 阅读(487) 评论(0) 推荐(0)
摘要: 摘要 在我们前面的文章中,我们的Pipline都是使用GStreamer自带的插件去产生/消费数据。在实际的情况中,我们的数据源可能没有相应的gstreamer插件,但我们又需要将数据发送到GStreamer Pipeline中。GStreamer为我们提供了Appsrc以及Appsink插件,用于 阅读全文
posted @ 2023-02-07 16:55 阿风小子 阅读(1753) 评论(0) 推荐(0)
摘要: 摘要 GStreamer框架会自动处理多线程的逻辑,但在某些情况下,我们仍然需要根据实际的情况自己将部分Pipeline在单独的线程中执行,本文将介绍如何处理这种情况。 GStreamer多线程 GStreamer框架是一个支持多线程的框架,线程会根据Pipeline的需要自动创建和销毁,例如,将媒 阅读全文
posted @ 2023-02-07 16:54 阿风小子 阅读(354) 评论(0) 推荐(0)
摘要: 摘要 在常见的媒体播放器中,通常可以看到快进,快退,慢放等功能,这部分功能被称为“特技模式(Trick Mode)”,这些模式有个共同点:都通过修改播放的速率来达到相应的目的。 本文将介绍如何通过GStreamer去实现快进,快退,慢放以及单帧播放。 GStreamer Seek与Step事件 快进 阅读全文
posted @ 2023-02-07 16:53 阿风小子 阅读(731) 评论(0) 推荐(0)
摘要: 摘要 在常见的媒体文件中,通常包含一些数据(例如:歌手,专辑,编码类型等),用于描述媒体文件。通常称这些数据为元数据(Metadata:data that provides information about other data)。我们可以通过这些元数据对媒体进行归类,同时可以在播放的过程中通过界 阅读全文
posted @ 2023-02-07 16:52 阿风小子 阅读(341) 评论(0) 推荐(0)
摘要: 简介 在多媒体应用中,我们通常需要查询媒体文件的总时间、当前播放位置,以及跳转到指定的时间点。GStreamer提供了相应的接口来实现此功能,在本文中,我们将通过示例了解如何查询时间信息,以及如何进行跳转到指定位置。 GStreamer查询机制 GStreamer提供了GstQuery的查询机制,用 阅读全文
posted @ 2023-02-07 16:51 阿风小子 阅读(551) 评论(0) 推荐(0)
摘要: 摘要 在以前的文章中,我们了解到了2种播放文件的方式:一种是在知道了文件的类型及编码方式后,手动创建所需Element并构造Pipeline;另一种是直接使用playbin,由playbin内部动态创建所需Element并连接Pipeline。很明显使用playbin的方式更加灵活,我们不需要在一开 阅读全文
posted @ 2023-02-07 16:50 阿风小子 阅读(498) 评论(0) 推荐(0)
摘要: 摘要 在上一篇文章中,我们介绍了如何将多个element连接起来构造一个pipline,进行数据传输。那么GStreamer是通过何种方式保证element之间能正常的进行数据传输?今天就将介绍GStreamer是如何利用Pad来控制数据的传输。 Pad 我们知道,pad是element之间的数据的 阅读全文
posted @ 2023-02-07 16:49 阿风小子 阅读(489) 评论(0) 推荐(0)
摘要: 摘要 在 Gstreamer基础教程01 - Hello World中,我们介绍了如何快速的通过一个字符串创建一个简单的pipeline。为了能够更好的控制pipline中的element,我们需要单独创建element,然后再构造pipeline,下面将介绍GStreamer的一些基本概念并展示p 阅读全文
posted @ 2023-02-07 16:47 阿风小子 阅读(664) 评论(0) 推荐(0)
摘要: 摘要 在面对一个新的软件库时,第一步通常实现一个“hello world”程序,来了解库的用法。对于GStreamer,我们可以实现一个极简的播放器,来了解GStreamer的使用。 环境配置 为了快速掌握Gstreamer相关的知识,我们优先选择Ubuntu作为我们的开发环境,其他平台的开发会在后 阅读全文
posted @ 2023-02-07 16:46 阿风小子 阅读(634) 评论(0) 推荐(0)
摘要: 什么是Gstreamer? Gstreamer是一个支持Windows,Linux,Android, iOS的跨平台的多媒体框架,应用程序可以通过管道(Pipeline)的方式,将多媒体处理的各个步骤串联起来,达到预期的效果。每个步骤通过元素(Element)基于GObject对象系统通过插件(pl 阅读全文
posted @ 2023-02-07 16:44 阿风小子 阅读(621) 评论(0) 推荐(1)
摘要: 1,logging包 python的一个包,专门用来写日志的。 官方一共划分了6个等级的log类型,分别对应重要性等级50,40,30,20,10,0: 级别排序:CRITICAL > ERROR > WARNING > INFO > DEBUG >NOTSET 2,logging打印日志到控制台( 阅读全文
posted @ 2023-02-07 15:03 阿风小子 阅读(346) 评论(0) 推荐(0)
摘要: 1,crontab是个啥? ubuntu系统自带cron工具,cron是一个系统上的定时工具,用它的好处在于,不同的程序可以用同一个计时器,这样就省得不同程序各自sleep了,另外它还支持比较多的个性化功能,比如每月1号执行一次, 2,crontab怎么用? crontab是一个和当前用户绑定的命令 阅读全文
posted @ 2023-02-07 14:53 阿风小子 阅读(1797) 评论(0) 推荐(0)
摘要: 1,typedef字面意思,自定义一种数据类型 语法:typedef 类型名称 类型标识符; 1),基本用法: (1) 为基本数据类型定义新的类型名。 (2) 为自定义数据类型(结构体、公用体和枚举类型)定义简洁的类型名称。 (3) 为数组定义简洁的类型名称。 (4) 为指针定义简洁的名称。 简单使 阅读全文
posted @ 2023-02-07 14:44 阿风小子 阅读(325) 评论(0) 推荐(0)
摘要: 1,播放教程playbin #include <gst/gst.h> #include <stdio.h> /* Structure to contain all our information, so we can pass it around */ typedef struct _CustomD 阅读全文
posted @ 2023-02-07 14:31 阿风小子 阅读(280) 评论(0) 推荐(0)
摘要: 1,gstream是个啥? GStreamer 是用来构建流媒体应用的开源多媒体框架,实际上就是可以用来解码mp4的一个东东。 2,编译安装 我的开发模块的ubuntu18.04系统自带gstream,并且交由pkg-config管理,灰常方便。就不用编译安装等一通操作了。 gstreamer的各种 阅读全文
posted @ 2023-02-07 14:15 阿风小子 阅读(1801) 评论(0) 推荐(0)
摘要: busybox自带的FTP服务器 启动方法1: #tcpsvd 0 21 ftpd -w /root & // 上面的0表示对所有ip地址都进行侦听 // ftpd -w这里的参数-w表示client可以对目录执行写操作 // 21指定ftp服务器的默认端口 // 可以使用-t和-T参数设置clie 阅读全文
posted @ 2023-02-07 14:04 阿风小子 阅读(129) 评论(0) 推荐(0)
摘要: 一、i2c 指令 i2c --help: i2c指令帮助 i2c bus:获取i2c总线信息 i2c dev:查看当前i2c设备 i2c dev 0:将i2c0作为当前设备 i2c md 0x6A 0x06.1 0x01:0x6A-->设备地址,0x06.1-->寄存器地址为0x06,寄存器宽度为1 阅读全文
posted @ 2023-02-07 11:58 阿风小子 阅读(1201) 评论(0) 推荐(0)
摘要: 官方案例地址:https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1010303572/Zynq+UltraScale+MPSoC+VCU+TRD+2020.2+-+Quad+Sensor+MIPI+CSI+Video+Capture+and+ 阅读全文
posted @ 2023-02-07 11:55 阿风小子 阅读(1580) 评论(0) 推荐(0)
摘要: I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址,主从设备之间就通过这个地址来确定与哪个器件进行通信,在通常的应用中,我们把CPU带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。I2C总线上可挂接的设备数量受总线的最大电容400pF 限 阅读全文
posted @ 2023-02-07 11:52 阿风小子 阅读(392) 评论(0) 推荐(0)
摘要: linux 通过device和driver分别管理系统中的设备和驱动,用bus将设备和驱动关联起来,bus可以看成是设备和驱动的媒介,可以匹配设备和驱动。这样设备和驱动可以独立加载,互不影响。sysfs是一个基于内存的文件系统,它的作用是将内核信息以文件的方式提供给用户程序使用。我们都知道设备和对应 阅读全文
posted @ 2023-02-07 11:49 阿风小子 阅读(606) 评论(0) 推荐(0)
摘要: 一、log4cplus源码下载 1、进入log4cplus网站:https://sourceforge.net/projects/log4cplus/ 2、点击File-->log4cplus-statble 3、这里选择下载2.0.6版本,点进去下载log4cplus-2.0.6.zip即可 二、 阅读全文
posted @ 2023-02-07 11:43 阿风小子 阅读(391) 评论(0) 推荐(0)
摘要: 上文中说到假设从100的不同的地方取外卖,那么epoll相当于一部手机,当外卖到达后,送货员能够通知你。从而达到每去必得,少走非常多路。它是怎样实现这些作用的呢? epoll的功能 epoll是select/poll的强化版。同是多路复用的函数,epoll有了非常大的改进。 支持监听大数目的sock 阅读全文
posted @ 2023-02-07 10:36 阿风小子 阅读(260) 评论(0) 推荐(0)