FreeSWITCH第一课记实
刚刚结束了易灵微课平台上的 FreeSWITCH第一课,感觉还不错,简单总结下。
易灵微课是caoz大侠(不认识的自行到知乎上搜)推出的网课平台,主要亮点是便于退款(这。。。。)
微课采用图文+音频的形式,以前在其它平台上上过类似的课,倒还熟悉,不过,来的学员表示不太熟悉,这也正常,其实上过一次就熟悉了。
这种形式的课程主要依赖于图文课件,所以临场发挥时间有些来不及,还是要多花时间提前准备才好。
另外,在线上讲课跟线下讲课最大的区别就是看不到学员的神情,用老罗的话来说,激情不够,施展不开。不过,既然选择了远方,也只能风雨兼程。还是需要慢慢找到适应的方式。
平台功能已经做得不错了,略有小问题,比如录音状态是模态窗口,在录音时就不能进行任何其它的操作。这个应该改进,其它的倒没什么不方便的。当然,为了讲课流畅,课前好好准备还是很有必要的。这次,由于时间仓促,我大约也只拿了两个小时的时间准备,做了几页图片(在Mac上用Keynote页面可以直接粘贴成图片,还是很方便的),其它的就现场发挥了。
在上课之前,平台工作人员通知我刚上线了备课功能,我抓紧用了一下,还不错,把提前准备好的一些内容放上去,上课时直接点击就能发送,如果用好了应该也比较流畅。
课程结束,大约用了一个半小时,查看后台数据,报名人数60,听课人数55,退款6。虽然人数不多,但上课率还是感觉很不错的。由于是第一次开课,我们也没有大量宣传,但这个数据已非常不错,足以支持我们继续做下去。
我们后续还会推出更多课程。
感谢各位学员的支持和信任,感谢平台工作人员细心的支持,感谢caoz大侠提供平台和机会,感谢所有TV。
课程虽已结束,但课件和录音都在,课后也有72小时的交流。所以,没赶上的同学也还可以继续上课。
课程中部分图片如下:
用到的部分代码如下:
<extension name="echo">
<condition field="destination_number" expression="^1$">
<action application="answer"/>
<action application="record" data="/tmp/test.wav"/>
</condition>
</extension>
<extension name="echo">
<condition field="destination_number" expression="^2$">
<action application="answer"/>
<action application="playback" data="/tmp/test.wav"/>
</condition>
</extension>
<condition field="destination_number" expression="^3$">
<action application="bridge" data="user/1001"/>
</condition>
<condition field="destination_number" expression="^4$">
<action application="conference" data="3000"/>
</condition>
<condition field="destination_number" expression="^1020$">
<action application="bridge" data="user/1020"/>
</condition>
期待下一次课尽快到来。
最后,讲点技术:
在课上,有学员提到一个问题:1.6.18的mod_flite模块安装一直报错,是什么原因?
标准答案是不知道。但是在课上我不能说不知道啊,我就说,你需要告诉我更多的信息,至少告诉我报什么错,我才能分析原因。
后来了解到错误信息是这样的:
/usr/bin/ld: /usr/local/lib/libflite.a(cst_wave.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
这个问题其实根本不是问题,因为,出错信息里已经提示了答案,那就是 -- recompile with -fPIC 。
当然,要理解这个答案还得理解什么是PIC。
简单来讲,这个问题会在64位平台上编译动态库(.so)但又要链接静态库(.a)的情况下出现。
PIC表示生成位置无关代码(Position Independent Code)。也就是说,依赖的静态库要提供位置无关代码才能在动态库中用。
有了上面这些信息应该足够解决这一问题了。如果想知道PIC更详细的原理,Google一下或百度一下我就不多讲了。
下载libflite源代码,执行 ./configure && make 编译通过。然后,执行 ./configure -h 可以看到帮助信息中有:
--with-pic with pic
解决方案显而易见了,那就是:
./configure --with-pic