Android平台上基于HTML5+WebRTC的视频会议系统

2024-02-17 04:38

本文主要是介绍Android平台上基于HTML5+WebRTC的视频会议系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://www.mesnet.com.cn/fileup/HTML/20121121.shtml


Android平台上基于HTML5+WebRTC的视频会议系统

尹文刚,杨斌
西南交通大学 信息科学与技术学院,成都610031

摘要: 设计了一种基于Chrome浏览器的视频会议系统。该系统采用C/S和B/S混合架构模型,融合HTML5、WebRTC技术于一体,运行在Android系统的智能移动终端上。其特点是,系统中客户端浏览器内部无需安装任何插件即可实现实时视频和语音的通信,系统操作简单,用户界面美观大方,具有很强的实用性,为未来基于网页视频会议系统的开发奠定了一定的基础。
关键词: Android;HTML5;WebRTC; 视频会议系统
中图分类号: TP316文献标识码: A

Video Conference System Based on HTML5+WebRTC on Android Platform
Yin Wengang, Yang Bin
(School of Information Science & Technology, Southwest Jiaotong University, Chengdu 610031, China)
Abstract: A video conference system based on Chrome browser is designed. Using C/S and B/S hybrid architecture model, the system combines HTML5 and WebRTC technologies and runs on Android smart mobile terminal. The characteristic is that the client browser of the system without installing any plugin can realize realtime video and audio communication. The system is simple, has elegant user interface and strong practicability, lay a foundation for the future development based on Web video conference system.
Key words: Android; HTML5; WebRTC; video conference system

引言
  目前,基于网页的视频会议系统大多数情况下,都是通过第三方插件或集成在Web浏览器上的应用程序将多媒体内容加载到网页上来实现的。目前最流行的方式是通过Adobe的Flash Player插件将音频和视频嵌入到网页中,而伴随着HTML5技术的发展,在HTML5中引入video和audio元素后[1],将视频嵌入到网页中便形成了一个统一的标准,并使多媒体成为网页的无缝组成部分。互联网成功的一个关键因素是一些核心技术,如HTML、HTTP和TCP/IP是开放和免费的。如今,在浏览器通信领域还中没有免费、高质量、完整的解决方案,而WebRTC就是这样的技术。随着智能移动终端硬件设备的日益完善化,在其上面进行多媒体技术的开发已经成为一个新的热点,尤其表现在现如今最热门的Android操作系统上面。本文设计了一种在Android移动终端上基于Chrome浏览器的视频会议系统,本系统采用HTML5+WebRTC技术,在Chrome浏览器内部无需安装任何插件即可进行实时视频和音频通信,该浏览器运行在Android智能终端上。
1 系统设计方案和系统结构
1.1 系统设计方案
  本方案所设计的Android平台上[2]基于HTML5+WebRTC技术的视频会议系统主要包含了以下功能:
① 客户端(如手机、PDA)通过Chrome浏览器登录服务器后对自身功能进行配置。这里,客户端可以根据自己的需求选择视频会议系统中需要的功能;
② 客户端通过无线网络GSM/WiFi接入Internet,利用Chrome浏览器登录服务器,完成用户注册的功能;
③ 客户端凭借系统内置的摄像头和麦克风,采集视频图像和语音信号,通过Chrome浏览器接入Internet建立连接,在网络传输层利用RTP/RTCP协议以IP数据包的形式,实时传输语音和视频数据给其他客户端;
④ Chrome浏览器上视频会议系统界面的开发。作为一个系统级应用,友好、美观、大方的用户界面显得尤为重要,本系统中我们是通过HTML5和JavaScript API来实现的。
1.2 系统结构
  系统的总体架构采用了客户端/服务器(C/S)和浏览器/服务器(B/S)混合架构模型,客户端利用运营商提供的无线网络或者自身的WiFi模块接入Internet,搭建在Android移动终端上的Chrome浏览器之间通过HTTP协议建立连接,在网络传输层通过RTP/RTCP协议以IP数据包的形式实时传输语音和视频数据。系统结构如图1所示。


图1 基于HTML5+WebRTC技术的视频会议系统结构
  系统主要由Android智能移动终端客户端和运营商服务器、视频会议服务器、Web服务器构成的服务器端两大模块组成,客户终端主要采用Android操作系统的智能手机和PDA等嵌入式设备。客户终端包括了Android操作系统和搭建在操作系统之上的Chrome浏览器以及网络模块,该客户端硬件设备具备前置和后置摄像头的功能。
2 系统开发中的关键技术
2.1 HTML 5
  HTML5是2004年被WHATWG提出、于2007年被W3C接纳而制定的HTML标准版本,目前仍处于发展阶段,但大部分浏览器已经开始支持某些HTML5技术。HTML5强化了Web网页的表现性能,追加了本地数据库等Web应用的功能。它是近十年来Web标准巨大的飞跃,它将Web带入一个成熟的应用平台,在这个平台上,视频、音频、动画以及同电脑的交互都被标准化。随着HTML5的发展,各个浏览器都已经,或即将支持HTML5,HTML5提供了音频视频的标准接口,实现了无需任何插件支持,只需浏览器支持相应的HTML5标签。在本设计中,主要应用了“audio”和“video”标记嵌入本地音频和视频信息。
2.2 WebRTC
  WebRTC是一项在浏览器内部进行实时语音和视频通信的技术,是谷歌公司2010年收购Global IP Solutions公司而获得的成果。它实现了基于网页的视频会议,所采用的标准是WHATWG协议,目的是通过浏览器提供简单的JavaScript就可以达到实时通信(RealTime Communications,RTC)的能力。WebRTC提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能。在本系统中,采用这一核心技术实现了Android平台上基于Chrome浏览器的视频会议系统。
3 系统客户端的设计
3.1 系统客户端的体系架构
  本方案所设计的基于HTML5+WebRTC技术的视频会议系统是在Android平台上来实现的。Android系统是完全免费和开放的移动设备平台,这给后续的开发提供了有利的条件,搭建在Android平台上的Chrome浏览器是基于HTML5开放源代码来实现的,包括WebKit和Mozilla,目标是提升稳定性、速度和安全性,并创造出简单且高效的使用者界面,整个客户端系统架构如图2所示。


图2 客户端系统架构
  由图2可以看出,系统客户端主要由视频会议系统本地接口、Web API、WebRTC三大模块组成。各个模块主要实现的功能如下:
① 视频会议系统本地接口:主要负责Android系统中音视频接口及网络接口与Web API接口的连接。
② Web API:开发人员用来开发基于Web的应用,本系统中,该模块的主要功能是实现视频会议系统向下接口的兼容和向上采用HTML5完成界面的布局和开发。
③ WebRTC:该模块包括了WebRTC Native C++ API、Session Management、Video Engine、Voice Engine和Transport等小模块。WebRTC Native C++ API主要是浏览器厂商用于实现Web API的函数集;Session Management是一个抽象的会话层,它支持调用构建和提供会话建立及管理功能;Video Engine是视频媒体链的框架,它实现了从摄像头采集视频图像到网络传输,然后从视频网络传输到屏幕显示整个完整过程的解决方案;Voice Engine是音频媒体链的框架,它实现了从音频采集卡到网络传输端等整个功能的解决方案;Transport是网络传输模块,实现了STUN、RTPoverTCP、NAT和防火墙穿越的关键技术。
3.2 客户端主要功能模块
3.2.1 视频通信模块
  视频通信模块是整个系统的核心模块,该模块负责视频会议系统中建立呼叫、接听电话以及音视频处理和网络传输的整个流程。
(1) 建立呼叫流程
  客户端成功注册服务器后,便可以开始向其他客户端发起呼叫,这个阶段会有一个建立连接和呼叫的过程。建立呼叫的流程如图3所示,本地客户端发起信令请求后,运营商服务器首先会建立一个连接池,然后与视频会议服务器和Web服务器建立连接,运营商服务器向本地客户端添加和监控媒体流的变化,接着本地客户端发起请求给运营商服务器,运营商服务器向远程客户端发起请求,然后建立连接。


图3 通话模块流程图
(2) 接听电话流程
  接听电话的过程与建立呼叫的过程有所不同。远程客户端接收到应答后,运营商服务器建立一个连接池,然后与视频会议服务器和Web服务器建立连接,随后,运营商服务器向本地客户端发起信令消息,本地客户端添加视频流给服务器,同时运营商服务器监控本地媒体流的变化情况,最后,本地客户端与远程客户端之间开始视频通话。接听电话的流程如图4所示。


图4 接听电话流程图
(3) 音视频处理和网络传输
  音视频处理和网络传输的流程如图5所示。系统中,视频引擎采用了WebRTC技术。WebRTC为基于网页的视频开发提供了一个框架,对于视频而言,它实现了从视频采集、编码、传输、显示的全部功能。在图5中,箭头的方向表示了视频流的数据流向,首先,带有摄像头的Android移动终端通过摄像头采集本地视频图像并编码,然后经过网络传输层,由视频会议服务器发送到各个视频会议客户端,客户端通过Chrome浏览器交给WebRTC进行数据的接收和处理,最后,处理好的数据流在客户终端上及时显示和播放。


图5 音视频处理和网络传输流程图
  本系统采用了VP8编解码技术,VP8是视频压缩解决方案厂商On2 Technologies公司推出的第8代On2视频标准。它能以更少的数据提供更高质量的视频,并且只需较低的处理能力即可播放视频,专为低迟延而设计开发,特别适合应用于基于网页的视频会议系统。
  在WebRTC中,Device Manager最多可以管理10个输入设备;Channel Manager最多可以管理4个Channel[3]。当然,这些最值设置可以根据自己的系统进行修改,在本系统中,Device Manager的值为8;Channel Manager的值为2。系统中编解码器可支持的最大分辨率为1920×1200,这个与客户终端硬件设备的配置紧密相关。
3.2.2 浏览器内部界面显示模块
  整个系统中,客户端浏览器界面的开发采用HTML5和Javasvript来实现,客户端之间视频的交互由Chrome浏览器完成。在界面显示中,我们利用HTML5提供的audio和video元素将客户端接收到的视频嵌入到网页里面,然后进行播放。下面是系统中视频获取和显示的核心代码。它的精华之处在于全部的体验仅由18行代码完成,我们用HTML5提供的webkitGetUser Media API[4]从本地摄像头获取到一组媒体流并将其显示在HTML5<video>元素中。
// 从Android移动终端本地摄像头获取一组媒体流,并且将其显示在HTML5<video>元素中
<html>
  <script>
    Function load( ){
      Var video=document.getElementById(getVideo);
      If (navigator.webkitGetUserMedia){
        Navigator.webkitGetUserMedia(video,
        Function(stream){video.src=webkitURL.create ObjectURL(stream)};
        Function(error){alert(ERROR: +error.toString());}
      }else{
        Alert(webkitGetUserMedia not supported);
        }
  }
  </script>
  <body οnlοad="load( )">
    <video autoplay= "autoplay" id="getVideo" />
  </body>
</html>
  对于视频播放的控制和画面的调节主要由网页中的控件来完成,这些控件是由HTML5本身提供的,其中包括了本地视频控件video元素的controls属性。
4 编译与测试
  系统的各个功能模块实现之后,我们要对整个项目进行编译和测试。编译的过程是在Linux环境下来完成的,需要的工具有git、subver sion和depot_tools。这个部署工具是由谷歌公司专为Chrome提供的,它包含了下载代码、同步代码和上传代码等功能,编译的过程中比较关键的一步是执行gclient runhooksforce,它对Chrome进行了一次解析。
  系统测试环境由运营商服务器、视频会议服务器、Web服务器和搭建有Chrome浏览器的Android智能终端组成。测试结果表明,系统运行稳定,人机交互过程中图像清晰流畅,语音和视频能够保持同步,基本达到了视频会议系统设计的要求。
结语
  本文所设计的基于HTML5+WebRTC技术的视频会议系统属于无线通信领域,系统融合了目前先进的HTML5和WebRTC技术,在浏览器领域开创了一种新的通信模式,在实际应用中具有潜在的市场价值。虽然,本系统仍然有许多的不足之处,比如功能单一,系统的运作完全依靠网络的通信质量等,将在下一步研究中尽量克服。

参考文献
[1] Alexis Goldstein,Louis Lazaris,Estelle Weyl. HTML5与CSS3实战指南[M].宋松译.北京:人民邮电出版社,2011.
[2] 韩超,梁泉. Android系统原理及开发要点详解[M].北京:电子工业出版社, 2010.
[3] Cymlife. google开源了WebRTC项目(5)[EB/OL].[20121015]. http://blog.csdn.net/cymlife /article/details/6579861.
[4] Antbony T Holdener III,Mario Andres Pagella. 深入HTML5应用开发[M].秦绪文,李松峰,译.北京:人民邮电出版社,2011.
尹文刚(研究生),主要研究方向是嵌入式系统软件开发;杨斌(教授),主要研究方向是单片机及嵌入式系统应用。
(责任编辑:梅栾芳 收稿日期:2012-07-02)



这篇关于Android平台上基于HTML5+WebRTC的视频会议系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/716694

相关文章

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

禁止HTML页面滚动的操作方法

《禁止HTML页面滚动的操作方法》:本文主要介绍了三种禁止HTML页面滚动的方法:通过CSS的overflow属性、使用JavaScript的滚动事件监听器以及使用CSS的position:fixed属性,每种方法都有其适用场景和优缺点,详细内容请阅读本文,希望能对你有所帮助... 在前端开发中,禁止htm

Vue3中的动态组件详解

《Vue3中的动态组件详解》本文介绍了Vue3中的动态组件,通过`component:is=动态组件名或组件对象/component`来实现根据条件动态渲染不同的组件,此外,还提到了使用`markRa... 目录vue3动态组件动态组件的基本使用第一种写法第二种写法性能优化解决方法总结Vue3动态组件动态

spring-boot-starter-thymeleaf加载外部html文件方式

《spring-boot-starter-thymeleaf加载外部html文件方式》本文介绍了在SpringMVC中使用Thymeleaf模板引擎加载外部HTML文件的方法,以及在SpringBoo... 目录1.Thymeleaf介绍2.springboot使用thymeleaf2.1.引入spring

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re