基于WebRTC的Android移动端无线视频传输
xsobi 2024-12-25 16:14 1 浏览
摘 要: 视频传输技术在现代社会广泛应用,人们对其的要求也越来越高,其发展的趋势是方便、快捷、随时随地。传统的视频传输过于依赖线路,线路的走向限制了传输的很多可能,所以无线传输才是发展的方向。本文提出了一种基于WebRTC的Android移动端视频传输技术,介绍了信令与WebRTC连接实现机制,以及穿透的具体过程。
0 引言
本文提出了一种在移动端上(Android)的视频传输技术,选取了两台Android设备作为测试设备,方便快捷,而且可携带性强。移动智能终端作为监控端也是一个最佳的应用平台。随着谷歌Android的飞速发展[1],越来越多的人选择Android平台来观察视频数据。
1 技术简介
(1)Android系统
Android是基于Linux开放性内核的操作系统,也是一个开放的移动终端操作系统平台,为移动设备提供了一个包含了操作系统及应用程序的软件叠层架构。Android作为Google最具创新的产品之一[2],越来越多地被移动终端厂商使用和二次开发。Android具有很多特性,最大的特性是开放性,还有就是在其平台上开发的应用程序权限由开发人员决定。
(2)WebRTC
WebRTC是Google于2011年6月3日开源的即时通讯项目[3]。它是一个支持网页浏览器进行实时语音对话或视频对话的技术,其出现可以帮助Web浏览器、个人电脑或手机实现实时多媒体通信功能。WebRTC提供了各种实现视频会议的核心技术,包括音视频的采集、编解码、信号优化和处理以及网络传输等。
2 系统设计及实现
系统设计主要包含三个部分:音视频模块、信令服务和打洞服务。
2.1 音视频模块
VoiceEngine(WebRTC音频引擎)是包含一系列音频多媒体处理的框架,包括从视频采集卡到网络传输端等整个解决方案。ISAC(Internet Speech Audio Codec)是针对VoIP和音频流的宽带和超宽带音频编解码器,是WebRTC音频引擎的默认编解码器。NetEQ for Voice是针对音频的语音信号处理算法、自适应抖动控制算法以及语音包丢失隐藏算法。能够快速且高解析度地适应不断变化的网络环境,确保音质优美且缓冲延迟最小,能够有效地处理由于网络抖动和语音包丢失对语音质量产生的影响。VideoEngine(WebRTC视频处理引擎),是包含一系列视频处理的整体框架,是从摄像头采集视频到视频信息网络传输再到视频显示整个完整过程的解决方案。VP8视频图像编解码器是WebRTC视频引擎的默认编解码器,VP8适合实时通信应用场景,因为它主要是针对低延时而设计的编解码器。Video Jitter Buffer(视频抖动缓冲器),可以降低由于视频抖动和视频信息包丢失带来的不良影响。对音视频模块VoiceEngine和VideoEngine进行编译使用,首先要到Google上下载安卓NDK,然后还要安装其他一些工具。以下对两个库文件简单解释,voe_audio_processingadds消噪(NS):自动增益控制和回声控制;voe_rtp_rtcp:增加了RTCP发送器报告、RTP/RTCP统计、前向纠错(FEC)和RTP实时捕捉。
2.2 信令服务
信令服务的作用是在通信双方都不知道对方的IP以及端口的情况下建立连接。由服务器建立连接来实现。WebRTC实现了两个API,分别是:MediaStream:通过MediaStream的API能够通过设备的摄像头及话筒获得视频、音频的同步流;RTCPeerConnection:RTCPeerConnection是WebRTC用于构建点对点之间稳定、高效的流传输的组件。WebRTC使用RTCPeerConnection传递数据,但传递数据之前,需要一种机制来协调通信并发送控制信息,而这种机制就是信令机制。WebRTC并没有制定任何信令的机制和协议,所以可以灵活选择任何信令协议[4]。Openfire是一种开源的实时协作(RTC)服务器,本文设计用它作为信令服务器。
信令交换的信息有:(1)用来控制通信开启或者关闭的连接控制消息;(2)媒体流元数据,比如解码器、解码器的配置、带宽、媒体类型等;(3)发生错误时彼此告知的消息;(4)外界所看到的网络上的数据,如IP地址、端口等;(5)用来建立安全连接的关键数据。
具体的连接建立方式由一种叫JSEP(JavaScript Session Establishment Protocol)的协议来规定,使用JSEP的原因在于在JSEP中需要交换的关键信息是多媒体会话描述(Multimedia Session Description)。JSEP将客户端之间传递的信令分为两种:offer信令和answer信令。它们主要内容的格式都遵循会话描述协议(Session Description Protocal,SDP)。通过offer和answer交换SDP描述符,流程如下:
(1)A和B双方建立一个RTCPeerConnection实例。
(2)A通过createOffer方法建立一个包含A的SDP描述符的offer信令。
(3)A通过setLocalDescription方法,将A的SDP描述符交给A的RTCPeerConnection实例。
(4)A将offer信令通过服务器发送给B。
(5)B将A的offer信令中所包含的SDP描述符提取出来,并通过setRemoteDescription方法交给B的RTCPeerConnection实例。
(6)B通过createAnswer方法建立一个包含B的SDP描述符的answer信令。
(7)B通过setLocalDescription方法将B的SDP描述符交给B的RTCPeerConnection实例。
(8)B将answer信令通过服务器发送给A。
(9)A接收到B的answer信令后,将其中B的SDP描述符提取出来,调用setRemoteDescripttion方法交给B的RTCPeerConnection实例。通过这一系列的信令交换之后,A和B所创建的RTCPeerConnection实例都包含了A和B的SDP描述符了。
2.3 打洞服务
打洞服务就是为了获取连接两端设备的网络地址[5]。要实现P2P视频传输,实际应用中不可能让用户自己去设置对方的IP和音视频端口,而且即使设置了对方的IP和端口也不一定能运行,因为P2P视频传输过程中,如果双方不在同一个网段则还需穿透NAT。
打洞原理:主要思路就是通过STUN服务器获取自己的IP、Port及NAT信息,然后通过信令服务器交换这些信息,最后两客户端根据各自得到的IP、Port、NAT信息进行相应的穿透。STUN是一种网络协议,可以让处于NAT后的客户端找出自己所处的公网IP地址,而且可以获取自己的NAT类型,以及一些相关的端口信息,这些信息用来在两个处于NAT之后的主机建立UDP通信。STUN由RFC 5389定义,是一个客户机-服务器协议,由于每个peer可能处于不同的网络中,所以每个peer都需要NAT穿越,确保双方都可访问对方的IP地址和端口以及STUN服务器。在RTCPeerConnection中,使用ICE框架来保证RTCPeerConnection能实现NAT穿越。ICE(Interactive Connectivity Establishment),交互式连接建立,是一种综合性的NAT穿越技术,可以整合各种NAT穿越技术,如STUN、TURN(Traversal Using Relay NAT,中继NAT实现的穿透)。ICE会先使用STUN,如果失败,ICE就会使用一个中继的TURN服务器。图1为iceServers配置信息。
在iceServers配置对象(RTCPeerConnection constructor)中设置STUN and/or TURN服务器地址信息,包括IP地址、端口号等。有了这些信息ICE会自动启动。STUN服务架设在外网,它有一个简单的任务:获取一个发送请求的设备(运行在NAT后边的应用)的IP和端口,然后返回这个地址。换句话说,应用使用STUN服务器发现它的外网IP和端口,这个过程确保了一个WebRTC端获得它自己的公共地址,然后通过signaling机制发送这个信息给另一端,这样就可以建立起一个直接连接。在实际应用中,不同的NATs有不同的工作方式,可能有多个NAT层,但是原理是一样的,原理如下:
(1)A通过公共IP与服务器建立连接。
(2)A发送一个加入某房间的信令,并设置房间号,信令中需要包含该房间的编号。
(3)若有新用户B加入,B会向服务器发送一个请求信令(new_peer),信令中包含新加入的用户B的信息以及房间号。
(4)若房间号相同,则建立A和B的通信连接。
系统框架如图2所示。
图2中两个peer分别指两个终端用户,NAT的用途是作为穿透使用,turnserver是由一个STUN服务器加上中继功能构成,当建立一个基于UDP的连接失败了,ICE就会使用一个中继的TURN服务器也就是Relay server。
3 测试及结果
在本次测试中,采用的两台Android手机分别是三星平板和魅族手机。如图3所示两台Android平台(一台是安卓手机,一台是安卓平板)正在进行视频传输,从屏幕中既可以观察远端传过来的情况又可以观察自己要传出去的视频情况。
4 结论
本文采用WebRTC音视频技术,利用NAT穿透和信令服务的搭建,实现了移动终端的无线视频传输。NAT穿透在实现跨网功能上起到了巨大的作用,对于安卓移动端具有良好的应用价值。
参考文献
[1] 李宁.Android开发权威指南[M].北京:人民邮电出版社,2011.
[2] 丁鹤洋,李太君,徐瑛.3G无线视频监控系统的设计与实现[J].通信技术,2012,45(2):68-70.
[3] 邹勇.基于XMPP和Webrtc的web实时通讯[D].南京:南京大学,2012.
[4] 王璐.Web模式下基于XMPP的即时通信系统的设计与实现[D].北京:北京邮电大学,2010.
[5] 杨佳胜.基于Android终端的视频通话系统设计与实现[D].大连:大连理工大学,2011.
相关推荐
- 斗鱼针针成旻云个人资料 针针年龄身高演艺经历介绍
-
[闽南网]针针成旻云曾是七煌旗下签约艺人,经常在斗鱼进行直播身高超过170cm的她更因为有一双大长腿而被称为“斗鱼第一美腿”、“电竞第一腿”。本文这就来对针针的个人资料进行详细介绍,想知道她的年龄身高...
- 轻量级RTSP服务模块和RTSP推流模块适用场景区别
-
好多开发者一直搞不清轻量级RTSP服务SDK和RTSP推流SDK的区别,以下是相关区别:1.轻量级RTSP服务模块:轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP或者RTMP服...
- 《新·奥特曼》11月18日国内视频平台上线
-
《新·奥特曼》海报。新京报讯11月14日,由上海新创华文化发展有限公司授权引进电影《新·奥特曼》宣布正式定档11月18日(周五)00:00上线视频平台,上线版本为日语配音中文字幕版。影片由庵野秀明(...
- 剑指Apple Watch!Android Wear也将支持视频功能
-
想必智能手表发展到现在,大家最期待的还是视频功能,近日AndroidWear就实现了这一功能,以后就能在手表上看视频了,想想就挺激动的,快来看看吧!其实早在WWDC大会上,老对手AppleWatc...
- QT应用编程:基于VLC开发音视频播放器(句柄方式)
-
一、环境介绍操作系统:win1064位QT版本:QT5.12.6编译器:MinGW32VLC版本:...
- OBS 源码分析 obs开发
-
本文将按照数据源的获取、渲染、推送的直播流程来让大家深入了解一下。1、直播源数据获取obs在启动时会优先加载libobs核心库,这个库初始化obs很多内容,包括crash模块、com、性能监...
- Android和iOS端Moments更新:支持视频分享功能
-
Moments是社交网络巨头Facebook推出的一款私人照片分享应用,今天公司宣布对Android端和iOS端应用同时升级,新增对视频分享功能的支持。事实上早在数周之前,Facebook就曾表示Mo...
- 您很快就可以在Android Galaxy设备之间传输视频通话
-
在阅读此文之前,辛苦点击右上角的“关注”,既方便您进行讨论与分享,又能给您带来不一样的参与感,感谢您的支持!导语:在科技领域,每时每刻都有新的发展,令人兴奋的创新不断涌现。早在八月份,Android系...
- 一篇文章带你FFmpeg到流媒体服务器开发
-
安装ffmpeg:下载FFmpeg和libx264的包ffmpeg-2.4.1.tar.bz2last_x264.tar.bz2libx264需要yasm,所以先安装yasmapt-getinst...
- YouTube 为 Android 平台提供 1440P 视频
-
安锋网8月10日消息,Android从起初的480P的屏幕分辨率发展到2014年的1440P花了将近六年的时间,一般认为1080P的屏幕分辨率已经是人眼可以识别的极限,但是...
- FFmpeg 调用 Android MediaCodec 进行硬解码(附源码)
-
FFmpeg在3.1版本之后支持调用平台硬件进行解码,也就是说可以通过FFmpeg的C代码去调用Android上的MediaCodec了。在官网上有对应说明,地址如下:trac....
- Android FFmpeg + OpenGL ES YUV Player
-
1、FFmpeg解出YUV帧数据1.1方法介绍打开封装格式上下文...
- 基于WebRTC的Android移动端无线视频传输
-
摘要:视频传输技术在现代社会广泛应用,人们对其的要求也越来越高,其发展的趋势是方便、快捷、随时随地。传统的视频传输过于依赖线路,线路的走向限制了传输的很多可能,所以无线传输才是发展的方向。本文提出...
- 使用python爬取抖音app视频 python爬取抖音视频数据
-
记录一下如何用python爬取app数据,本文以爬取抖音视频app为例。编程工具:pycharm...
- Android IOS WebRTC 音视频开发总结(七七)-- WebRTC的架构和协议栈
-
本文主要介绍WebRTC的架构和协议栈(我们翻译和整理的,译者:litie),最早发表在【编风网】为了便于理解,我们来看一个最基本的三角形WebRTC架构(见下图)。在这个架构中,移动电话用“浏览器M...
- 一周热门
- 最近发表
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- patch补丁 (31)
- strcat (25)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- element style (30)
- dedecms模版 (53)
- vs打不开 (29)
- nmap (30)
- c 视频教程下载 (33)
- paddleocr (28)
- listview排序 (33)
- firebug 使用 (31)
- transactionmanager (30)
- characterencodingfilter (33)
- getmonth (34)
- commandtimeout (30)
- hibernate教程 (31)
- label换行 (33)
- curlpost (31)
- android studio 3 0 (34)
- android开发视频 (30)