微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > 基于局域网的视频聊天系统--蛙酷

基于局域网的视频聊天系统--蛙酷

时间:12-29 来源:电子产品世界 点击:

摘要:随着无线网络的发展,支持Wi-Fi的电子产品越来越多,与Wi-Fi绑定的应用也层出不穷,但还没有一款基于Wi-Fi的视频聊天软件能够满足人们的日常交互需求,因此我们开发出“蛙酷”,一款基于局域网的视频聊天软件,能够在局域网覆盖下实现随时随地视频聊天和视频会议,且无需耗费任何手机数据流量,真正给用户带来了随聊随见的交互体验。

1 引言

目前,社会所流行的聊天软件所专注的问题仅限于视频效果和软件盈利上,应用目的趋于商业化,而没有真正从用户的角度出发去设计开发软件,由于视频通讯不同于文字通讯和语言通讯,传输信息量大且十分耗费数据流量,导致用户想用能用却不敢用。基于这一点,我们提出了“蛙酷”,这是一款基于无线局域网的视频聊天软件,主要包含在线视频聊天和视频组播功能,用户可以使用这款软件与同一局域网内的任意一位好友随时随地进行视频通讯,也可邀请多名好友开启在线视频会议。这款软件最大的特性在于我们能够通过访问局域网的方式来满足各种交互需求且节省数据流量,适用于高校、企业、商城以及其它有无线局域网覆盖的各大场所,这款软件简单实用,稳定的后台服务能够让用户随时随地与好友进行视频通讯。

2 成果展示及介绍

2.1 主界面

如图1所示。

2.2 系统架构

(1)视频聊天 一方客户端发出邀请(发送IP及端口),然后服务器在此局域网内检索该IP地址,一旦检索到即锁定IP并发送端口号,接收端接收到邀请后,即做出应答(接受/拒绝),拒绝则关闭连接,接受则开启连接并互相发送数据给对方,实现视频聊天。

(2)视频会议 由发送端客户端开启视频会议号(组播IP地址段),开启时即开始发送数据到服务器端(不管有没有终端客户端连入),开启组播后,多个终端客户端可以通过加入同一组播IP而开始接收发送端发送的数据信息,实现视频会议。

3 详细分析硬件与软件模块

3.1 Wi-Fi

3.1.1 Wi-Fi程序模块

(1)开源库wpa_supplicant

一个开源库,加入到Android源码中,经过修改后成为Android实现Wi-Fi功能的基础。它的代码位于./external/wpa_supplicant文件夹中,主要用C和C++写成,实现了从上层接到命令后,发送给硬件驱动程序,接着操作硬件完成需要的操作,这里是通过socket来与硬件驱动进行通信的。

(2)硬件驱动程序

前文所说的wpa_supplicant,与之通信的硬件驱动的代码位于./hardware/libhardware_legacy/wifi/wifi.c中。

(3)JNI部分

首先简要介绍一下JNI,JNI是JavaNativeInterface的缩写,它实现了Java代码与其他代码进行交互,使得在Java虚拟机中运行的Java代码能够与用其他语言编写的应用程序和库进行交互。在Android中,JNI可以让Java程序调用C程序。

与Wi-Fi相关的JNI代码位于./frameworks/base/core/jni/android_net_wifi_Wifi.cpp中。

(4)Wi-Fi API部分

这部分源代码使用Java完成了对Wi-FiAPI的封装,使应用程序可以使用Wi-Fi功能,它们位于frameworks/base/services/java/com/android/server/和frameworks/base/wifi/java/android/net/wifi/中。

(5)Wi-Fi Settings应用程序部分

这是Android自带的一个应用程序,在手机的Settings中,它可以让用户手动打开或关闭Wi-Fi功能。当用户打开Wi-Fi功能后,它会自动搜索周围的无线网络,并以列表的形式显示,供用户选择,默认会连接用户上一次成功连接的无线网络。这部分代码位于./packages/apps/Settings/src/com/android/settings/wifi中。

3.2 Wi-Fi执行过程

3.2.1 从Settings中启动Wi-Fi

当用户按下Wi-Fi按钮后,Android调用WifiEnabler的onPreferenceChange,再由WifiEnabler调用WifiManager的setWifiEnabled接口函数,通过AIDL,调用WifiService的setWifiEnabled函数,WifiService接着向自身发送一条MESSAGE_ENABLE_WIFI消息,在处理该消息的代码中做真正的使能工作:首先装载WIFI内核模块(该模块的位置硬编码为"/system/lib/modules/wlan.ko"), 然后启动wpa_supplicant(配置文件硬编码为"/data/misc/wifi/wpa_supplicant.conf"),再通过WifiStateTracker启动WifiMonitor中的监视线程。

当成功使能后,广播发送WIFI_STATE_CHANGED_ACTION这个Intent通知外界Wi-Fi已经成功使能。WifiEnabler创建的时候就会向Android注册接收

WIFI_STATE_CHANGED_ACTION,因此它会收到该Intent,从而开始扫描。

3.2.2 查找AccessPoint (AP)

扫描的入口函数是WifiService的startScan,它往wpa_supplicant发送SCAN命令。当wpa_supplicant处理完SCAN命令后,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top