基于JNI的 嵌入式 手机 软件开发实例 下面通过一个实例来描述运用JNI技术在 手机 上操纵 摄像头 ,捕捉 视频 并存储图片的过程。 (1)活动/状态图 图2为捕捉 视频 并存储图片的活动/状态图 根据图2的活动/状态,具体的对应步骤如下: ①发起该流程。 ②发起流程后,建立文件用于存储图片。 ③用 指针 获得分配的 缓冲器 ,用于存储获得的帧。 ④将 指针 压栈(序列化 缓冲器 )。由于 手机 的内存较小,为了防止内存泄漏, Symbian操作系统 有一个Cleanupstack的要求,即在使用 指针 时,用PushL把 指针 压入栈中,使用完后再用Pop弹出栈.如果在中间调用导致崩溃的函数时果真出现了问题,那么Cleanupstack可以通过调用该指针的 析构函数 回收占用的空间。 ⑤操纵 摄像头 ,捕捉 视频 ,并将图像流从摄像头端传到 缓冲器 。 ⑥将 摄像头 内的图像流存入 缓冲器 内,并将缓冲器内的流转化为文件流,存为jpg格式的文件,将指向缓冲器的 指针 弹栈。 ⑦在过程⑥中,如果使用完了序列化的 缓冲器 ,则要重新序列化缓冲器,以备后面使用。 ⑧当接收到停止 视频 捕捉的信号后,关闭文件。 ⑨流程结束。 (2)视频捕捉 子功能捕捉 视频 的实现是由操纵 摄像头 、视频播放( 解码器 准备)以及建立摄像头和 手机 之间的连接会话三个活动组成的。其中操纵 摄像头 是通过调用底层设备的驱动来实现的,需要利用JNI来实现,完成的方法包括准备、建立、删除、销毁摄像头等。 视频 播放的一系列过程也是通过c++代码来实现的,除了准备、建立、删除、销毁 解码器 外,还有开始、暂停、停止解码等。建立 摄像头 和 手机 之间的连接类似建立客户端和 服务器 连接, 视频流 从摄像头传到手机界面是通过 多媒体 会话来完成的。多媒体会话的建立、关闭、摧毁以及会话建立后的发送、取消、读取数据等也是JNI的应用范畴。