一种基于Android系统的3G视频电话的系统及实现方法

文档序号:7888777阅读:240来源:国知局
专利名称:一种基于Android系统的3G视频电话的系统及实现方法
—种基于Android系统的3G视频电话的系统及实现方法
技术领域
本发明涉及一种基于Android系统的3G视频电话的系统及实现方法。
背景技术
3G视频电话采用的是基于电路交换(Circuit Switching, CS)的3G-324M协议。3G-324M协议是3GPP组织制定的一个标准体系,可以为各种对时延敏感的应用提供足够高
的通信质量。3G-324M协议包含以下几个子协议标准语音编码标准(3GPP-AMR、G. 723. I)、视频编码标准(H. 263、MPEG-4、H. 261)、数据编码标准(V. 14、LAPM(Link Access Procedurefor Modems))、多路复用和分离标准(H. 223)和呼叫控制标准(H. 245版本3以上)。其中H. 223制定了多路音频视频信号在单个移动通信信道的多路复用应用标准,H. 245制定了在会话各个阶段的消息控制交换标准。在视频编码方面,H. 263是强制标准,而MPEG-4的简单档次和H. 261是可选的;音频编码方面,AMR是强制标准,推荐支持G. 723. I和G. 722. 2标准。另外,由H. 223附录B制定的level2被指定为强制的多路复用协议层,用以增强容错控制。Android是Google公司发布的基于Linux平台的开源移动操作系统的名称,是目前最流行的手机开发平台。PacketVideo公司的开源项目OpenCore是Android多媒体系统的实现部分,从宏观上来看,OpenCore主要包含了三大方面的内容PVPlayer模块提供媒体播放器的功能,完成各种音频、视频流的回放任务。PVAuthor模块提供媒体流记录的功能,完成各种音频、视频流以及静态图像的捕获任务。PV2ffay模块提供3G视频电话的一个基本框架,完成音视频编解码以及3G-324M协议协商的任务。视频电话是3G的代表性业务,而Android手机操作系统是最受用户欢迎的智能手机平台,但是由于3G视频电话与照相机、多媒体、电话、显示等模块密切相关,开发难度大,对主控芯片的性能要求较高,此前3G视频电话并没有被应用于Android系统中。Android系统的OpenCore中的PV2Way模块只提供了一个3G视频电话多媒体模块实现的框架,由于以下三点原因无法直接使用,需要进行修改。首先,PV2Way提供的3G-324M协议栈是开源代码,成熟程度未知,开发、维护的难度较大;其次,PV2ffay只是用环回的方式(即将发送出的数据直接读入接收缓冲区)模拟了数据的收发,并没有真正地与3G无线通信模组进行通信;第三,PV2ffay的输入、输出方式是读写视频文件,而视频电话需要将照相机实时采集的视频数据发送给对端,将接收到的对端的视频数据送屏显示。此外,视频电话的应用程序、Java类、Java本地调用部分(JNI)、本地框架、服务等尚未实现,需要兀吾。

发明内容
本发明所要解决的技术问题在于提供一种基于Android系统的3G视频电话的系统及实现方法。本发明采用以下技术方案解决上述技术问题一种基于Android系统的3G视频电话的系统,包括作为主控芯片的ARM芯片、集成3G-324M协议栈的3G无线通信模组;所述ARM芯片与所述3G无线通信模组通过USB转串口的方式进行通信;所述ARM芯片运行Android系统,负责视频的采集、编解码、播放;所述3G无线通信模组完成3G-324M协议栈及音频采集、编解码、播放的工作;所述3G-324M协议栈,在下行通路上从网络获取3G-324M协议的数据包并解析,音频数据由3G无线通信模组解码播放,视频数据传给ARM芯片处理并最终送IXD屏显示; 所述ARM芯片的视频编码数据与3G无线通信模组的音频编码数据在上行通路上根据3G-324M协议打包后,通过网络发送给对方;在视频通话过程中,ARM芯片通过AT命令实现对3G-324M协议栈的控制;ARM芯片和IXD显示屏实现对视频的控制,并将必要的信息通过AT接口上报协议栈;基于Android系统的软件框架包括视频电话应用程序、电话模块、照相机模块、多媒体模块和显示模块;所述视频电话应用程序为用户提供视频通话的界面,接受用户的指令来完成视频通话功能;所述电话模块与3G无线通信模组进行AT命令的交互,完成呼叫、短信、数据连接等功能;所述照相机模块是按照固定的帧率采集YUV格式的视频数据并分两路送出,一路数据送给显示模块进行本地预览,一路数据送给多媒体模块的视频编码器进行编码;照相机模块在试图建立视频电话连接时就会启动,采集图像供本地预览,即在主叫的情况下,拨号完成后照相机模块开始启动;在被叫的情况下,来电振铃时照相机模块开始启动;与对端建立连接后,照相机模块才会为多媒体模块提供视频数据;所述多媒体模块集成了视频编码器和解码器,将照相机采集的视频数据进行编码,通过串口输出至3G无线通信模组;接收3G无线通信模组送来的视频数据,解码后送给显示模块进行显示;所述显示模块显示模块将各个应用程序的界面进行合并并显示;视频通话时,需要在屏幕上同时显示本地预览图像和对端图像;对端图像通过软件的方式,即Android的SurfaceFlinger类来合并;本地预览图像则是通过硬件的方式,即Android的Overlay系统在主显示区域上进行叠加显示。所述多媒体模块包括Java类、Java本地调用部分JNI、本地框架、服务部分、本地实现部分;所述Java 类Java 类的代码位于 frameworks/base/media/java/android/media/,需要实现MediaPv2way. java ;所述Java本地调用部分JNI JNI 的代码位于 frameworks/base/media/jni/,需要实现 android—media—MediaPv2way. cpp,这部分内容也编译到库libmedia. _jni. so中;所述本地框架代码位于frameworks/base/media/libmedia/,需要实现 mediapv2way. cpp,IMediaPv2ffay. cpp, IMediaPv2ffayClient. cpp, IMediaPv2ffayService. cpp 等文件;其中mediapv2way. cpp中的MediaPv2way类对上层的JNI提供接口,其他文件实现IPC/Binder机制中的 Mediapv2way、MediaPv2wayClient、MediaPv2wayService 的本地和代理类,这部分的内容被编译到库libmedia. so中;新增加的所有的头文件都在framework/base/include/media/ 中,包括 IMediaPv2way. h, Imediapv2wayclient. h, Imediapv2wayservice,h, mediapv2way. h, MediaPv2wayInterface. h, pv2way. h 等;mediapv2way. h 提供了对上层的接口 ;
所述服务部分代码位于frameworks/base/media/libmediapv2wayservice/,需要实现的文件有libmediapv2wayservice. h 和 libmediapv2wayservice. cpp ;所述本地实现部分需要在OpenCore中添加PV2Way的适配器,增加的文件有2waydriver. cpp和2waydriver. h,代码可以放在 external/opencore/android/pv2way/ 这个新建的路径下,这部分内容被编译成 libandroidpv2way. so,供 libopencore_2way. so 调用。如上所述的一种基于Android系统的3G视频电话的系统的实现方法,包括步骤一视频电话的主叫流程如下在电话应用程序中拨号,选择拨打视频电话;启动照相机,在屏幕上显示本地预览图像;电话模块向3G无线通信模组下发AT命令进行连接;双方建立连接后,多媒体模块开始工作,编码本地视频数据发送到3G无线通信模组,解码远端视频数据并送屏显示;断开连接后,多媒体模块、照相机模块停止工作,退出视频电话应用程序;步骤二 视频电话的被叫流程如下电话模块收到3G无线通信模组上报的AT命令,应用程序进入视频来电的界面;启动照相机,在屏幕上显示本地预览图像;用户选择接听视频电话;双方建立连接后,多媒体模块开始工作,编码本地视频数据发送到3G无线通信模组,解码远端视频数据并送屏显示;断开连接后,多媒体模块、照相机模块停止工作,退出视频电话应用程序。本发明的优点在于本发明在使用成熟的、具有3G-324M协议的3G无线通信模组的基础上,设计了 3G视频电话的系统结构和软件框架,优化了 PV2Way的状态机,完善了PV2ffay的各种接口,在Android系统上实现了 3G视频电话功能。

下面参照附图结合实施例对本发明作进一步的描述。图I是本发明视频电话的系统结构图。
图2是本发明视频电话的软件框架图。图3是本发明视频电话多媒体模块的结构图。图4是PV2Way模块的原始框架图。图5是本发明修 改后的PV2Way模块框架图。图6是PV2Way模块原始引擎的状态转换图。图7是本发明新引擎engine_handler的状态转换图。
具体实施方式本发明选择由英国ARM公司授权的ARM芯片作为主控芯片,与集成3G-324M协议栈的3G无线通信模组一起来实现视频电话功能,系统结构如图I所示。在本发明中,ARM芯片运行Android系统,负责视频的采集、编解码、播放,而3G无线通信模组完成3G-324M协议栈及音频采集、编解码、播放的工作。下行通路上,3G-324M协议栈从网络获取3G-324M协议的数据包并解析,音频数据由3G无线通信模组解码播放,视频数据传给ARM芯片处理并最终送屏显示;上行通路上,ARM芯片的视频编码数据与3G无线通信模组的音频编码数据根据3G-324M协议打包后,通过网络发送给对方。在视频通话过程中,ARM可以通过AT命令(ATtention,终端设备与终端适配器通信的命令,用户可以通过AT命令进行呼叫、短信、电话本、数据业务等方面的控制。在本发明中AT命令就是ARM芯片与3G无线通信模组通信的命令),实现对3G-324M协议栈的控制,如接听或挂断电话,禁止或恢复对方听到声音;但对视频的控制则需要ARM芯片侧的视频编解码器和显示相关驱动来实现,并将必要的信息通过AT接口上报协议栈。ARM芯片与3G无线通信模组通过USB转串口的方式进行通信,即一个USB接口复用成多个串口,其中一个串口用于视频通话过程中视频数据的交互,一个串口用于ARM芯片和3G无线通信模组之间AT命令的交互。USB转串口的驱动程序在Android的内核中已经实现。在视频通话过程中,3G无线通信模组向网络发送数据的速率需要符合64kbps的信道带宽,即每秒64kb的数据中包含了 48kb的视频数据,12. 2kb的语音数据以及控制信息。由于语音数据在3G无线通信模组侧采集,控制信息在协议栈打包数据时候生成,所以ARM芯片只需要尽量精确地控制视频数据的发送速度为48kbps。如果发送速率过大,会造成信道传输数据时丢失数据,对端无法正确解码某些视频帧;如果发送速率偏小则没有充分利用信道带宽。基于Android系统的结构和视频电话的特点,本发明设计了一种视频电话的软件框架,该框架由视频电话应用程序、电话模块、照相机模块、多媒体模块和显示模块组成,如图2所示。其中电话模块、照相机模块、多媒体模块和显示模块这4个模块受到应用程序的统一调度,模块之间只能传输数据而不能传送命令。视频电话应用程序视频电话应用程序为用户提供视频通话的界面,接受用户的指令来完成视频通话功能。Android提供的电话应用程序中并没有视频通话的功能,需要增加拨打视频电话的功能以及视频通话的界面。电话模块与3G无线通信模组进行AT命令的交互,完成呼叫、短信、数据连接等功能。Android的电话模块主要分为通信模块驱动、无线接入层、电话服务框架三部分,功能已经比较完善,对该模块的主要修改集中在无线接入层,需要根据3G无线通信模组的业务流程对AT命令的交互进行修改。照相机模块照相机模块的功能是按照固定的帧率采集YUV格式的视频数据并分两路送出,一路数据送给显示模块进行本地预览,一路数据送给多媒体模块的视频编码器进行编码。照相机模块在试图建立视频电话连接时就会启动,采集图像供本地预览,即在主叫的情况下,拨号完成后照相机模块开始启动;在被叫的情况下,来电振铃时照相机模块开始启动。与对端建立连接后,照相机模块才会为多媒体模块提供视频数据。多媒体模块集成了视频编码器和解码器,将照相机采集的视频数据进行编码,通过串口输出至3G无线通信模组;接收3G无线通信模组送来的视频数据,解码后送给显示模块进行显示。Android的多媒体核心OpenCore中的PV2Way提供了一个视频电话的本地实现库,但是Java框架与本地框架这两部分还需要去完善。多媒体模块与视频电话应用程序、照相机模块、显示模块、3G无线通信模组都有交互,接口多而复杂,在下文中将详细讨论多媒体模块的实现。

显示模块显示模块将各个应用程序的界面进行合并(merge)并显示。视频通话时,需要在屏幕上同时显示本地预览图像和对端图像。对端图像通过软件的方式,即Android的SurfaceFlinger类来合并;本地预览图像则是通过硬件的方式,即Android的Overlay系统在主显示区域上进行叠加显示,这是因为预览的帧率比较高,用硬件来合并效
率更高。视频电话的主叫流程如下I、在电话应用程序中拨号,选择拨打视频电话;2、启动照相机,在屏幕上显示本地预览图像;3、电话模块向3G无线通信模组下发AT命令进行连接;4、双方建立连接后,多媒体模块开始工作,编码本地视频数据发送到3G无线通信模组,解码远端视频数据并送屏显示;5、断开连接后,多媒体模块、照相机模块停止工作,退出视频电话应用程序。视频电话的被叫流程如下I、电话模块收到3G无线通信模组上报的AT命令,应用程序进入视频来电的界面;2、启动照相机,在屏幕上显示本地预览图像;3、用户选择接听视频电话;4、双方建立连接后,多媒体模块开始工作,编码本地视频数据发送到3G无线通信模组,解码远端视频数据并送屏显示;5、断开连接后,多媒体模块、照相机模块停止工作,退出视频电话应用程序。下面详细描述多媒体模块的结构3G视频电话的本地实现部分由OpenCore中的PV2Way模块提供,但是上层的Java类、JNI、本地框架、服务还需要去实现。这几个部分是在PV2Way基础上建立的封装和进程间通讯的机制,完全可以仿照MediaPlayer的机制来实现,只需把文件名、类名、函数名修改一下。视频电话多媒体模块的结构如图3所示(I) Java 类Java 类的代码位于 frameworks/base/media/java/android/media/,需要实现MediaPv2way. java。(2) Java 本地调用部分(JNI)JNI 的代码位于 frameworks/base/media/jni/,需要实现 android_media_MediaPv2way. cpp,这部分内容也编译到库libmedia_jni· so中。(3)本地框架代码位于frameworks/base/media/libmedia/,需要实现 mediapv2way. cpp,IMediaPv2ffay. cpp, IMediaPv2ffayClient. cpp, IMediaPv2WayService. cpp 等文件。其中mediapv2way. cpp中的MediaPv2way类对上层的JNI提供接口,其他文件实现IPC/Binder机制中的 Mediapv2way、MediaPv2wayClient、MediaPv2wayService 的本地和代理类。这部分的内容被编译到库libmedia. so中。新增加的所有的头文件都在framework/base/include/media/中,包括IMediaPv2way. h, Imediapv2wayclient. h, Imediapv2wayservice. h, mediapv2way. h,MediaPv2wayInterface. h,pv2way. h 等。mediapv2way. h 提供了对上层的接口,而其他的几个头文件都是提供一些接口类(即包含了纯虚函数的类),这些接口类必须被实现类继承才能够使用。(4)服务部分代码位于frameworks/base/media/libmediapv2wayservice/,需要实现的文件有 libmediapv2wayservice. h 和 libmediapv2wayservice. cpp。这部分内容被编译成库libmediapv2wayservice.so。(5)本地实现部分需要在OpenCore中添加PV2Way的适配器,增加的文件有2waydriver. cpp和2waydriver. h,代码可以放在 external/opencore/android/pv2way/ 这个新建的路径下。这部分内容被编译成 libandroidpv2way. so,供 libopencore_2way. so 调用。下面详细描述本发明针对PV2Way模块的修改A、PV2ffay框架的修改前文已提到,PV2Way只提供了一个视频电话多媒体模块实现的框架,在我们的项目中并不能直接使用,需要做一些修改。PV2Way的原始框架如图4所示。修改后的PV2Way框架如图5所示。对比图5与图4可以看出,由于没有使用 TSC_324m,PVCommsIONode 和 PVMFOMXEncNode、PVMFOMXVideoDecNode 直接相连,PVCommsIONode 需要一个 Input 类型的 PVCo_sI0NodePort 来与 PvmfOmxEncPort 传输数据,一个 Ouput 类型的 PVCo_sI0NodePort 与 PVMFOMXDecPort 传输数据。原来 PV2Way 中的输入接口 PvmiMIOFileInput 被替换为 AndroidCameraInput,输出接口 PvRefFileOutput被替换为AndroidSurfaceOutput。新的框架只改变了结点、端口、MIO的组合方式,并没有修改到这些类的内部,因此不会影响到其他使用到OpenCore的应用。按图4修改PV2Way后,PV2ffay的上行通路和下行通路是独立的,互不影响,即使一条通路没有了输入而无法工作,另外一条通路依然能正常工作。例如,在视频通话过程中本地关闭了照相机,上行通路停止了工作,而下行通路依然能够对串口收到的视频数据进行解码,在屏幕上显示对方图像。B、新引擎的状态机、
PV2Way的原始引擎比较复杂,状态也多达7种,如图6所示。由于不再使用PV2Way提供的协议栈,我们设计了一个简单的新引擎,命名为engine_handler。engine_handler在用户拨打或接收到视频电话时被创建并进行视频电话的准备工作,当本地与对端建立连接后通知各结点开始工作,在视频电话结束后释放资源并析构。之所以在用户拨打或接收到视频电话时就创建engine_handler而不是等到与对端建立连接后再创建主要是基于用户体验方面的考虑第一,仓Il建并初始化engine_handler需要一定的时间(主要是等待照相机初始化的时间比较长),在建立连接之前做这部分工作可以减少用户的等待时间,一旦连接建立就可以迅速地进行视频通话;第二,如果在建立连接之后engine_handler的初始化时间太长,可能会使本地没能收到对端发来的第一个I帧,这样要等到收到下一个I帧后本地才能看到正确解码的图像。engine_handler 有 5 种状态,分别是 Idle, Inited, Prepared, Started 和Released,各状态之间的转换如图7所示。Idle :引擎被成功创建后的初始状态。等待PvmfMediaInputNode和 PVMediaOuputNode创建好后,引擎进入Inited状态。Inited:在这个状态中,引擎完成视频电话的初始化工作。第一步是创建PVMFOMXEncNode、PVMFOMXVideoDecNode 和 PVCo_sI0Node。接着,引擎向五个结点依次发送ThreadLogon、Init、RequestPort命令,在结点执行完前一条命令后下一条命令才会发送。PVMFOMXEncNode、PVMFOMXVideoDecNode、PVCommsIONode 这三个结点需要两个端口,RequestPort 命令要发送两次。在 engine_handler: :NodeCommandCompleted 函数中,根据结点执行命令后返回的结点指针和命令ID,可以获取到各结点执行RequestPort命令返回的端口对象。第二步是设置进入各结点的数据格式,这是通过调用每个结点输入端口的setParametersSync函数来实现的。设置完成后,向每个结点发送Prepare的命令。当所有结点的Prepare工作都完成后,引擎进入Prepared状态。Prepared :在这个状态中,引擎等待上层发送下来的消息。如果与对端成功建立连接,则按照图4,调用端口的Connect函数把4对端口连接起来。在端口连接之后,引擎向每个结点发送Start的命令。完成以上工作后,引擎转换为Started状态。如果没有与对端建立连接,引擎接收到的是退出的命令,转入Released状态。Started:双方进行视频通话时引擎所处的状态,在此状态下引擎不需要做任何工作。视频通话结束后,引擎收到退出的命令,转入Released状态。Released :引擎退出时所处的状态。如果引擎的上一个状态是Started,退出的步骤是断开所有端口的连接,向各个结点发出ReleasePort、Stop、Reset、ThreadLogoff的命令,最后对整个引擎进行析构。如果引擎的上一个状态是Prepared,那么退出的步骤会简单些,只需要依次向结点发出ReleasePort、Reset、ThreadLogoff的命令,然后对整个引擎进行析构。采用了新引擎后,可以预先假定上层下发给引擎的命令,用环回的方式测试引擎功能的正确性。C、串口接口的实现前文已提到,基于实际应用,必须对PvmiMIOCommLoopback收发数据的机制进行修改。本发明在PvmiMIOCommLoopback的基础上实现新的串口输入输出接口,命名为MyPvmiMIOCommLoopbackoI.在MyPvmiMIOCommLoopback的构造函数中,打开并设置串口,并清除串口缓冲区中的数据。在MyPvmiMIOCommLoopback的析构函数中,关闭串口。2.向串口发送数据的操作比较简单,直接使用write函数向写串口写数据。必须保证每次写串口的操作都是成功的,否则发送给对方的数据就存在错误。3. MyPvmiMIOCommLoopback类使用一个线程来读取串口,该线程在MyPvmiMIOCommLoopback 收到 PVCommsIONode 发来的 Start 命令后被创建,在MyPvmiMIOCommLoopback析构时被销毁。MyPvmiMIOCommLoopback需要将收到的数据以中贞为单位送给解码器,因此读取线程无需频繁地去读取串口获取小段的数据,而是应该采用效率更高的方式每隔一段时间(约100ms)去读取串口,每次读出大约一帧的数据。每次从串口读取到的数据并不一定恰好是一帧H. 263数据,因此从串口读取数据后需要先搜索
H.263的帧头,进行H. 263帧的拼装。由于H. 263的帧头中没有帧长度的信息,所以在收到 第N+1帧的帧头后,才能认为第N帧接收完毕,可以将第N帧添加到发送队列中传给解码器。H. 263编码码流中每隔几帧会有一个I帧,每个I帧之后的几个P帧的解码会依赖于这个I帧。考虑到无线信道中存在误码、丢数据等情况,在搜索到H. 263帧头后需要判断该帧是否为I帧,只有在收到第一个I帧之后才能认为串口开始接收到了正确的数据,可以开始向解码器传输视频数据。解码器解码的速度偶尔会低于串口接收视频帧的速度,造成MyPvmiMIOCommLoopback的发送队列饱和。在这种情况下收到的视频巾贞将被丢弃,不再送入发送队列,直到发送队列不再饱和为止。D、输入输出接口的实现当engine_handler 处于 Idle 状态时,输入接口 AndroidCameraInput 和输出接口AndroidSurfaceOutput 被创建。AndroidCameralnput是多媒体模块与照相机模块的接口,它有一个Camera类型的成员变量 mCamera。AndroidCameraInput: : SetCamera 函数创建了一 个 Camera 类的对象并赋给mCamera,这样AndroidCameraInput就可以与Camera类进行数据的交互和参数的设置。当照相机采集到一帧新的视频数据时,照相机模块的硬件抽象层中CameraHal: :nextPreview函数就会被调用,nextPreview函数将视频数据送入Overlay预览,同时将事件通知 AndroidCameraInputListener,最终调用到 AndroidCameraInput: :postffriteAsync函数,将一巾贞视频数据添加到输出队列中,送给PvmfMediaInputNode。AndroidSurfaceOutput是多媒体模块与显不模块的接口,它有一个Isurface类型的成员变量mSurface。AndroidSurfaceOutput: : initCheck函数先创建了一个缓冲区,AndroidSurfaceOutput: : setVideoSurface 中为 mSurface 注册这个缓冲区在PVMediaOuputNode 输出视频数据时,就会调用 AndroidSurfaceOutput: :writeFrameBuf 函数,将一巾贞视频数据送到SurfaceFlinger类中送屏显示。本发明提出了一种在Android系统上实现3G视频电话的方法,填补了 Android系统在3G视频电话功能上的空白。本发明的软件框架易于移植,兼容性强,可适用于Android的多个版本。本发明的方案比较成熟,已应用于新一代智能信息机上,可以与其他3G手机进行视频通话。以上所述仅为本发明的较佳实施用例而已,并非用于限定本发明的保护范图。凡在本发明的精神和原则之内,所作的 任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种基于Android系统的3G视频电话的系统,其特征在于包括作为主控芯片的ARM芯片、集成3G-324M协议栈的3G无线通信模组; 所述ARM芯片与所述3G无线通信模组通过USB转串口的方式进行通信; 所述ARM芯片运行Android系统,负责视频的采集、编解码、播放;所述3G无线通信模组完成3G-324M协议栈及音频采集、编解码、播放的工作; 所述3G-324M协议栈,在下行通路上从网络获取3G-324M协议的数据包并解析,音频数据由3G无线通信模组解码播放,视频数据传给ARM芯片处理并最终送IXD屏显示; 所述ARM芯片的视频编码数据与3G无线通信模组的音频编码数据在上行通路上根据3G-324M协议打包后,通过网络发送给对方; 在视频通话过程中,ARM芯片通过AT命令实现对3G-324M协议栈的控制;ARM芯片和LCD显示屏实现对视频的控制,并将必要的信息通过AT接口上报协议栈; 基于Android系统的软件框架包括视频电话应用程序、电话模块、照相机模块、多媒体丰旲块和显旲块; 所述视频电话应用程序为用户提供视频通话的界面,接受用户的指令来完成视频通话功能; 所述电话模块与3G无线通信模组进行AT命令的交互,完成呼叫、短信、数据连接等功倉泛; 所述照相机模块是按照固定的帧率采集YUV格式的视频数据并分两路送出,一路数据送给显示模块进行本地预览,一路数据送给多媒体模块的视频编码器进行编码;照相机模块在试图建立视频电话连接时就会启动,采集图像供本地预览,即在主叫的情况下,拨号完成后照相机模块开始启动;在被叫的情况下,来电振铃时照相机模块开始启动;与对端建立连接后,照相机模块才会为多媒体模块提供视频数据; 所述多媒体模块集成了视频编码器和解码器,将照相机采集的视频数据进行编码,通过串口输出至3G无线通信模组;接收3G无线通信模组送来的视频数据,解码后送给显示模块进行显示; 所述显示模块显示模块将各个应用程序的界面进行合并并显示;视频通话时,需要在屏幕上同时显示本地预览图像和对端图像;对端图像通过软件的方式,即Android的SurfaceFlinger类来合并;本地预览图像则是通过硬件的方式,即Android的Overlay系统在主显示区域上进行叠加显示。
2.如权利要求I所述的一种基于Android系统的3G视频电话的系统,其特征在于所述多媒体模块包括Java类、Java本地调用部分JNI、本地框架、服务部分、本地实现部分; 所述Java类 Java 类的代码位于 frameworks/base/media/java/android/media/,需要实现MediaPv2way. java ; 所述Java本地调用部分JNI JNI 的代码位于 frameworks/base/media/jni/,需要实现 android—media—MediaPv2way. cpp,这部分内容也编译到库libmedia—jni. so中; 所述本地框架 代石马位于 frameworks/base/media/libmedia/,需要实现 mediapv2way. cpp,IMediaPv2ffay. cpp, IMediaPv2ffayClient. cpp, IMediaPv2ffayService. cpp 等文件;其中mediapv2way. cpp中的MediaPv2way类对上层的JNI提供接口,其他文件实现IPC/Binder机制中的 Mediapv2way、MediaPv2wayClient、MediaPv2wayService 的本地和代理类,这部分的内容被编译到库libmedia. so中;新增加的所有的头文件都在framework/base/include/media/ 中,包括 IMediaPv2way. h, Imediapv2wayclient. h, Imediapv2wayservice,h, mediapv2way. h, MediaPv2wayInterface. h, pv2way. h 等;mediapv2way. h 提供了对上层的接口 ; 所述服务部分 代码位于 frameworks/base/media/libmediapv2wayservice/,需要实现的文件有libmediapv2wayservice. h 和 libmediapv2wayservice. cpp ; 所述本地实现部分 需要在OpenCore中添加PV2Way的适配器,增加的文件有2waydriver. cpp和2waydriver. h,代码可以放在 external/opencore/android/pv2way/ 这个新建的路径下,这部分内容被编译成 libandroidpv2way. so,供 libopencore_2way. so 调用。
3.如权利要求I所述的一种基于Android系统的3G视频电话的系统的实现方法,其特征在于包括 步骤一视频电话的主叫流程如下 在电话应用程序中拨号,选择拨打视频电话; 启动照相机,在屏幕上显示本地预览图像; 电话模块向3G无线通信模组下发AT命令进行连接; 双方建立连接后,多媒体模块开始工作,编码本地视频数据发送到3G无线通信模组,解码远端视频数据并送屏显示; 断开连接后,多媒体模块、照相机模块停止工作,退出视频电话应用程序; 步骤二 视频电话的被叫流程如下 电话模块收到3G无线通信模组上报的AT命令,应用程序进入视频来电的界面; 启动照相机,在屏幕上显示本地预览图像; 用户选择接听视频电话; 双方建立连接后,多媒体模块开始工作,编码本地视频数据发送到3G无线通信模组,解码远端视频数据并送屏显示; 断开连接后,多媒体模块、照相机模块停止工作,退出视频电话应用程序。
全文摘要
一种基于Android系统的3G视频电话的系统及实现方法,包括作为主控芯片的ARM芯片、集成3G-324M协议栈的3G无线通信模组;所述ARM芯片与所述3G无线通信模组通过USB转串口的方式进行通信;所述ARM芯片运行Android系统,负责视频的采集、编解码、播放;所述3G无线通信模组完成3G-324M协议栈及音频采集、编解码、播放的工作。本发明在使用成熟的、具有3G-324M协议的3G无线通信模组的基础上,设计了3G视频电话的系统结构和软件框架,优化了PV2Way的状态机,完善了PV2Way的各种接口,在Android系统上实现了3G视频电话功能。
文档编号H04N7/14GK102740040SQ20121002572
公开日2012年10月17日 申请日期2012年2月6日 优先权日2012年2月6日
发明者姜明俊, 彭华成, 陈屴 申请人:福州瑞芯微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1