- 博客(111)
- 资源 (13)
- 收藏
- 关注
原创 Android binder 设计思想
Android 的binder算得上十分复杂,各个击破固然能解决,但是我觉得其实当你理解了binder的设计思想后再去看代码感觉其实会发现binder不过如此而已:1.binder中能跨进程通信的只有int/string/boolean等普通数据结构及IBinder的子类,如果需要跨进程传一个数据结构需要他是Parcelable的子类,即类似Java中的可序列化的。2.一个类,继承了Bin
2015-03-31 14:25:28 694
转载 WebRTC直播技术(二)-ICE/STUN/TURN
原文:http://imweb.io/topic/5a4a6cb2a192c3b460fce37f 首先要掌握WebRTC连接建立过程,需要掌握几个知识点: NAT, ICE, STUN, TURN, DTLS等。如果之前有接触过P2P相关技术的同学可能就会比较容易理解。WebRTC是一个基于浏览器与浏览器之间的实时音视频通话方案,那么有于公网ip地址有限的问题,用户的浏览器常常位于NAT后,那...
2018-07-12 11:22:51 2121 1
原创 libsrtp rtpw 例子代码分析
libsrtp安装下载:https://github.com/cisco/libsrtp.git cd your path/libsrtp-master ./configure make make runtest make install测试的方法是:cd test ./rtpw_test.sh 其实分析里面的实现主要是创建了两个进程: ./rtpw -b Ky7cU...
2018-06-11 19:50:17 1930
原创 libnice simple-example 分析
编译安装直接从git上下载源码,然后编译安装,开始遇到很多依赖问题,最后采用下载老版本的分支编译。发起端输出root@iZbp1bp634mlawwh9rif75Z:~/libnice-0.1.9# simple-example 0 stunserver.orgCopy this line to remote client: qgbF 7ghYVTRnQ8xzqV7TWmC+M...
2018-06-08 18:05:21 3317
转载 (转)WebRTC手记之初探
WebRTC是HTML5支持的重要特性之一,有了它,不再需要借助音视频相关的客户端,直接通过浏览器的Web页面就可以实现音视频对聊功能。而且WebRTC项目是开源的,我们可以借助WebRTC源码快速构建自己的音视频对聊功能。无论是使用前端JS的WebRTC API接口,还是在WebRTC源码上构建自己的对聊框架,都需要遵循以下执行流程: 上述序列中,WebRTC并不提供Stun服务器和Sig...
2018-06-06 16:13:28 268
原创 MRCP UA的创建及SIP信令处理
在mrcp_sofia_task_initialize中调用nua_create一个UA(User agent)这个跟freeswitch SIP信令的接收,是一样的。在nua_create的时候会设置回调函数:mrcp_sofia_event_callback()。接下来的处理都是一样的,只是有事件的时候的回调不一样。现在调用的是mrcp_sofia_event_callback()。/...
2018-04-11 11:19:12 2267 1
转载 NAT穿越原理——STUN
STUN是RFC3489规定的一种NAT穿透方式,它采用辅助的方法探测NAT的IP和端口。毫无疑问的,它对穿越早期的NAT起了巨大的作用,并且还将继续在ANT穿透中占有一席之地。 STUN的探测过程需要有一个公网IP的STUN server,在NAT后面的UAC必须和此server配合,互相之间发送若干个UDP数据包。UDP包中包含有UAC需要了解的信息,比如NAT外网 IP,PORT等等。U...
2018-03-14 15:34:18 922
原创 freeswitch SIP信令的接收
freeswitch SIP信令的处理在mod_sofia中 首先在模块的加载(mod_sofia_load)里面会创建一个处理SIP消息的线程: /* start one message thread */ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Starting initial message th
2018-01-29 17:28:21 4133 1
原创 freeswitch mrcp 源码分析--数据包的发送
在MRCP 开始语音识别后会调用recog_channel_start()函数static switch_status_t recog_channel_start(speech_channel_t *schannel){ switch_status_t status = SWITCH_STATUS_SUCCESS; switch_hash_index_t *egk;
2018-01-08 19:26:22 3449
原创 freeswitch Session dtmf callback的触发过程
在创建一个Session后会调用switch_core_session_thread_launch()创建一个对应的线程
2018-01-02 22:52:32 2190
原创 freeswitch lua/luarun的执行过程
在mod_lua.cpp文件中定义了两个api SWITCH_STANDARD_APP(lua_function) SWITCH_STANDARD_API(luarun_api_function) 分别对应lua和luarun命令,所有以宏SWITCH_STANDARD_API定义的都是freeswitch暴露的api接口。 我们这里以luarun为例分析SWITCH_STANDA
2018-01-02 15:15:29 3138
原创 freeswitch.Session的实现过程
一.创建Session在lua中通过调用 freeswitch.Session()可以创建一个Session对象。按源码里的注释,他包括四个原型: LUA::Session::Session() LUA::Session::Session(char ,CoreSession ) LUA::Session::Session(char *) LUA::Session::Session(sw
2017-12-31 02:47:58 4164
原创 freeswitch mrcp 源码分析--event事件产生
event事件的构建主要在speech_thread()函数里面。static void *SWITCH_THREAD_FUNC speech_thread(switch_thread_t *thread, void *obj){ struct speech_thread_handle *sth = (struct speech_thread_handle *) obj; swit
2017-12-23 19:52:03 3389
原创 freeswitch mrcp 源码分析--数据接收(下)
在前两篇我们介绍了mrcp接收后的处理,最后会调用apr_queue_push扔到消息队列里面。 对应的,在apt_consumer_task.apt_consumer_task_run()中会循环调用pr_queue.apr_queue_pop()从队列里面取出数据:apt_consumer_task.apt_consumer_task_run –> apr_queue.apr_queue_p
2017-12-22 21:03:23 3415
原创 freeswitch mrcp 源码分析--数据接收(上)
apt_poller_tas.apt_poller_task_run–> mrcp_client_connection.mrcp_client_poller_signal_process–> sendrecv.apr_socket_recv –> mrcp_stream.mrcp_parser_run –> mrcp_client_connection.mrcp_client_message_
2017-12-22 17:20:36 2504
原创 coredump分析
static void *audio_bridge_thread(switch_thread_t *thread, void *obj){ switch_ivr_bridge_data_t *data = obj; int stream_id = 0, pre_b = 0, ans_a = 0, ans_b = 0, originator = 0; switch_input_callbac
2017-12-21 14:16:38 6985 1
原创 freeswitch mrcp 源码分析--数据解析
/** Parse message by raising corresponding event handlers */APT_DECLARE(apt_message_status_e) apt_message_parser_run(apt_message_parser_t *parser, apt_text_stream_t *stream, void **message){ const
2017-12-20 20:12:06 1927 2
原创 freeswitch 使用的问题
1.呼叫另一台主机的命令originate sofia/external/1000@11.239.168.3 &echo报错:[ERR] sofia_reg.c:2616 Cannot locate any authentication credentials to complete an authentication request for realm '"11.239.161.25
2017-11-24 18:10:41 4360 2
原创 freeswitch 在redhat 7.0/centos 7.0上的编译安装
参考官方文档:https://freeswitch.org/confluence/display/FREESWITCH/CentOS+7https://freeswitch.org/confluence/display/FREESWITCH/CentOS+7+and+RHEL+71) Make sure yum update is run and CentOS is u
2017-11-14 17:27:43 2055 1
原创 ibatis执行过程
1.初始化SqlMapClient对象,主要设置DataSource,读取ibatis的xml配置文件将里面的信息转化为一个个数据对象2.调用SqlMapClientTemplate的对应的方法比如queryForObject3.调用SqlMapSessionImpl().queryForObject()方法4.调用 SqlMapExecutorDelegate的queryForObj
2017-07-31 17:41:30 618
原创 TensorFlow word2vec_basic 代码分析
将字母向量化(即 word embedding)是NLP的基础,在TensorFlow中有一个简单的实现即word2vec(这篇文章主要关注他的基本实现,demo在这个目录下:tensorflow/examples/tutorials/word2vec/word2vec_basic.py)。关于word2vec的介绍非常多理论也一堆一堆的,下面是本文参考的几篇主要的理论文章:http://ww
2017-06-15 11:35:17 5836 3
转载 神经网络中 BP 算法的原理与 PYTHON 实现源码解析
最近这段时间系统性的学习了 BP 算法后写下了这篇学习笔记,因为能力有限,若有明显错误,还请指正。什么是梯度下降和链式求导法则假设我们有一个函数 J(w),如下图所示。梯度下降示意图现在,我们要求当 w 等于什么的时候,J(w) 能够取到最小值。从图中我们知道最小值在初始位置的左边,也就意味着如果想要使 J(w) 最小,w的值需要减小。而
2017-06-08 10:27:12 2682
原创 Android 渲染过程分析
1.每一个View对应一个RenderNode2.父视图的DisplayList包含所有子视图的DisplayList。3.硬件加速和非硬件加速的时候Canvas是不一样的,前者是一个真的Canvas后者是一个GLES20RecordingCanvas对象,在GLES20RecordingCanvas上执行绘图命令时并没有真正绘制,而是将这些命令封装成一个个DrawOp对象。最后添加到Di
2017-05-09 15:15:39 1530
原创 基于docker安装spark
1.首先下载镜像并启动:docker pull sequenceiq/spark:1.5.1sudo docker run -it sequenceiq/spark:1.5.1 bash2.修改配置首先用ifconfig得到ip地址,我的ip是172.17.0.109,然后:bash-4.1# cd /usr/local/spark bash-4.1# cp conf/spark-
2017-04-26 15:11:20 2689 1
原创 Android 窗口的计算过程
Android 窗口的几个区域的介绍:1.overscanScreen区域,这个区域包括屏幕的overscan区域,相当于整个屏幕2.RestrictedOverScanScreen区域,包括overscan区,不包含导航栏、因此这个区域上面到屏幕的顶部,下面就到导航栏的顶部。3.RestrictedScreen区域,这个区域不包含overscan区域不包含导航栏4.UnRestr
2017-04-20 11:47:10 5424
原创 TensorFlow中的一个重要ops---MatMul的实现(二)
上面一篇文章我们主要介绍了MatMul这个op的正向计算的实现,我们知道模型的最后一步是计算优化模型的参数,而一般采用的方法是梯度下降法,所以每个op节点不仅要实现一个正向的计算节点,还要实现一个方向的梯度计算节点。关于反向计算的结点官网有如下一段介绍:Implement the gradient in PythonGiven a graph of ops, TensorFlo
2017-04-10 20:22:35 5218
原创 TensorFlow中的一个重要op---MatMul的实现(一)
本文目的是以Tensorfl中的MatMul这个具有代表性又比较简单的ops为例介绍一下TensorFlow中的图的节点是怎么实现的。我个人认为TensorFlow中的ops是整个TensorFlow的核心,如果理解了这个,那么对TensorFlow就有了比较深的认识。在阅读这段代码前看一下官方文档中的添加新的op会很有帮助:中文翻译:http://www.tensorfly.cn/t
2017-04-09 00:00:18 16226 4
原创 卷积神经网络
通常在写关于卷积神经网络的文章中都会说一句:其实卷积神经网络并不神秘而且它也不是万能的。就目前我也认为确实这样子的。今天才把卷积神经网络从理论到实践(基于 tensorflow)整个流程初步搞清,想基于我的理解,希望尽量通俗易懂的介绍我理解的卷积神经网络。首先神经网络一般指包含一个输入层一个输出层多个隐层的网络结构,如下图所示,神经网络其实可以理解为一个输入序列,经过一个函数f(x),得到一个
2017-03-31 16:23:54 1201
原创 TensorFlow 安装
1.安装docker ,具体参考我的上一篇博客2.执行: docker run -it b.gcr.io/tensorflow/tensorflow:latest-devel
2017-03-23 14:42:54 472
原创 Ubuntu下Docker安装
最近几天心血来潮,了解了一下虚拟化技术,感觉比之前想象的简单一点,下面是虚拟化发展的历程:总体来说虚拟化经历了三个大的阶段:第一阶段是定制操作系统,第二个阶段是基于KVM和QEMU的虚拟化,第三阶段是基于命名空间和cgroup进程隔离的虚拟化比如docker。docker应该是未来发展的趋势。1. docker的安装:$ sudo apt-get install apt-t
2017-03-23 10:49:12 449
原创 Android5.0 Camera HAL3 源代码分析
Android5.0对camera framework层进行了较大的调整,使用了支持HAL3的Camera3Device架构。下面就分析一下这个架构的结构和主要代码逻辑。HAL3的设计思想: 其实HAL的代码复杂但是理清楚他的设计思想后还是比较简单的。Camera应用端与CameraService的交互还是一模一样的,只是以前的CameraClient变成了Camer
2017-01-11 15:22:16 4405 2
原创 MediaRecord 分析
MediaRecord.java是app调用录制功能的接口,他通过android_media_MediaRecorder JNI调用,与c++层的MediaRecord.cpp对应。MediaRecord会通过binder与MediaPlayerService建立连接,然后在MediaPlayerService会创建一个MediaRecorderClient 他的proxy保存在app端的mMe
2016-11-16 20:41:47 800
转载 opencv
#include "opencv2/core/core.hpp" #include "opencv2/features2d/features2d.hpp" #include "opencv2/highgui/highgui.hpp" #include #include using namespace cv; int main( int argc
2016-11-03 21:59:00 304
原创 SurfaceView及Surface分析
首先参考文章千年老罗的:http://blog.csdn.net/luoshengyang/article/details/8661317我这里总结一下SurfaceView的核心设计思想:1.SurfaceView其实就是一个View,不同的是它里面有个Surface类型的对象。这个对象保存了一个远程独立窗口的信息。2.java 层 Surface与jni层andro
2016-11-03 15:58:09 1513
转载 汉明距离图片相似度比较
import java.awt.Graphics2D;import java.awt.color.ColorSpace;import java.awt.image.BufferedImage;import java.awt.image.ColorConvertOp;import java.io.File;import java.io.FileInputStream;impo
2016-10-17 22:47:04 3143
原创 Android 按键流程分析笔记
1,Android 事件处理的主要对象:java 层的InputManager和c++层的InputManager,C++层的InputManager主要包括InputReader,InputDispatcher。InputReader主要是打开设备驱动,然后读取/input/event0事件,并交给InputDispatcher2,事件分发的主要流程(在分发前会先给PhoneWind
2016-10-12 19:41:51 820
原创 Android5.0 MTk Camera HAL层代码分析
1. Android Camera 框架如上图为Camera的主要框架,其中最上面的Camera.java是应用的使用的接口,它处理维护一个在java层的状态外核心功能都是通过Android_hardware_Camera这个JNI调到C++层实现的。其实他对应的是C++层的一个同名的Camera类。在C++层的Camera类其实是Binder的client端,对应的Se
2016-08-18 19:38:59 21853 2
转载 一、MTK6580 平台 Camera 驱动整体框架
原文:http://www.codexiu.cn/android/blog/33878/mtk平台三大件调试中,camera的调试难度最大,问题也就最多,为此特地分析了一下整个camera驱动部分实现过程,以下为camera驱动框架序列图: 从图中可以看出,整个框架分为三个部分hal部分逻辑调用,kernel层的通用驱动sensorlist.c 和具体
2016-08-17 10:42:17 4309
转载 Linux驱动开发之Platform_device和Platform_driver
http://blog.csdn.net/yili_xie/article/details/5187014从Linux 2.6起引入了一套新的驱动管理和注册机制:Platform_device和Platform_driver。Linux中大部分的设备驱动,都可以使用这套机制, 设备用Platform_device表示,驱动用Platform_driver进行注册。
2016-08-17 10:24:22 857
转载 android6.0源码分析之Camera API1.0框架简介
1、架构简介由于最近项目涉及到Camera,所以对Camera源码进行了研究,本文将分享Camera框架的基本知识。anroid6.0与5.0相比,Camera框架未曾改变,依然提供了两种API,即API1和API2,依然采用C/S的架构,而client和server两个线程间的通信依然使用IPC binder进程间通信的机制。camera架构图如下:由图可知:
2016-08-15 20:37:34 1237
qt-eclipse-integration-linux.x86-1.4.0.tar.gz )
2011-12-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人