新闻中心

EEPW首页>嵌入式系统>设计应用> 基于Android智能手机的远程视频监控的设计

基于Android智能手机的远程视频监控的设计

作者: 时间:2012-03-20 来源:网络 收藏

(1)在Linux 环境下安装原生开发工具包NDK.

本文引用地址://m.amcfsurvey.com/article/149383.htm

(2) 创建jni 文件夹,将FFmpeg 工程复制到文件夹下。创建H264Decoder. c 源文件,提供程序使用的接口函数,文件需要包括JNI 的操作头文件jni. h >, 且函数名有固定的形式, 如com_ipcamera_PreView_H264Decoder 表示com_ipcamera包下面PreView 类中H264Decoder 函数。

(3)创建. mk 文件,该文件包含正确构建和命名库的MakeFile 说明。分别在LOCAL_SRC_FILES 和LOCAL_C_INCLUDES 项中添加编译模块所需源文件和头文件目录。

(4)执行NDK 开发包中的ndk鄄build 脚本,生成对应的。 so 共享库,并复制到Android 工程下的libs/armeabi 目录下。

(5) 在Android 程序中通过System. loadLibrary(库名称冶)加载所需要的库,加载成功后,应用程序就可以使用H264Decoder 函数进行H.264 的解码。

3. 2 OpenGL ES 绘图

为了提高绘图的效率,客户端使用OpenGL ES实现视频图像的显示。OpenGL ES 是一个2D/3D轻量图形库,是跨平台图形库OpenGL 的简化版。

OpenGL ES 专门针对、PDA 和游戏主机等嵌入式设备而,目的是为了充分利用硬件加速,适合复杂的、图形密集的程序。

Android 中使用GLSurfaceView 来显示OpenGL视图,该类继承至SurfaceView 并包含了一个专门用于渲染3D 的接口Renderer,主要通过实现ON鄄DrawFrame、onSurfaceChanged 以及onSurfaceCreated等方法构建所需的Renderer.解码器解码一帧图像后,调用GLSurfaceView 的requeSTRender 方法通知OpenGL ES 完成视频图像的显示。使用OpenGL 绘图的核心代码如下:

3. 3多线程

视频数据的接收和解码都是复杂、持续的过程,如果其中一个过程出现阻塞会影响整个程序的运行,因此,客户端使用多线程实现数据接收和视频解码的并行处理。在整个程序运行过程中,主线程响应用户操作,负责屏幕刷新工作,并创建两个子线程:数据接收和视频解码子线程,处理过程如图3 所示。

图3子线程处理流程

图3子线程处理流程。

在Java 中, 多线程的实现有两种方式: 扩展java. lang. Thread 类或实现java. lang. Runnable 接口。这里通过继承Thread 类并覆写run()方法实现两个子线程。在多线程的应用中关键是处理好线程之间的同步问题,以解决对共享存储区的访问冲突,避免引起线程甚至整个系统的死锁。Java 多线程主要利用synchronized 关键字和wait( )、notify( ) 等方法实现线程间的同步。

4 结束语

目前,该系统已经在实验室进行测试,服务器输出15fps CIF 格式的H. 264 视频数据,客户端安装在Android上,通过WIFI 接入无线局域网中与服务器建立连接,用户界面如图4 所示,可实现视频预览、云台控制等操作。

图4 监控客户端

图4 监控客户端

随着3G 时代的到来,数据传输速度有了大幅提升,为移动实时视频业务的实现创造更好的条件。

用户可以直接接入3G 网络访问服务器,实现移动在线的实时。由此可见,手机市场潜力巨大,具有很好的发展前景。

c++相关文章:c++教程



上一页 1 2 下一页

评论


相关推荐

技术专区

关闭