周 翔,俞 鑫,张 霞,包 瑜,杨海波,潘培森
Android平台下基于RTSP的移动直播系统设计
周 翔,俞 鑫,张 霞,包 瑜,杨海波,潘培森
(南通亿荣网络科技有限公司 研发部,江苏 南通 226000)
以RTSP/RTP协议为基础,采用OKHttp进行网络数据传输,研制了Android平台下基于Rtsp的移动直播系统。该系统采用FFMpeg库并结合JNI技术实现音视频的编解码,使用RTSP流媒体服务器控制流媒体数据在IP网络上的传输。使用过程中发现,该直播系统操作简单、画面清晰、实时性强。
Android;RTSP/RTP协议;JNI;流媒体服务器
目前,移动端最主流的流媒体传输协议有RTMP和HLS两种。RTMP协议是基于TCP传输的,使用非公共端口,可能会被防火墙阻拦,而且还占用带宽;采用HLS协议直播的视频延迟时间无法降到10秒以下,实时互动体验差[1]。RTSP作为实时流传输协议,能有效地通过IP网络传送多媒体数据。RTP数据协议负责对流媒体数据进行封包并实现媒体流的实时传输,RTP数据包都由头部和负载两部分组成,其中头部前12个字节的含义是固定的,负载可以是音频或者视频数据。RTSP/RTP协议具有较强的实时性,特别适合传输音视频数据,但网络不稳定时,会出现马赛克或是视频短暂卡的住不动等现象,直接影响了用户体验[2]。
为解决以上问题,本研究在文献[2]基础上,提出在系统算法中设置音视频缓冲区的思路,研制了Android平台下,基于Rtsp的移动直播系统。
系统由移动采集终端、移动播放终端、服务器端、PC端4个部分组成,如图1所示。
系统采用Android手机自带的摄像头和麦克风对音视频数据进行采集[3]。Camera类采集视频的原始数据,AudioRecord类采集音频原始数据。
采集数据基本流程为打开摄像头、设置采集参数、数据采集、调用编码模块进行编码。由于视频原始数据中存在着时间冗余和空间冗余,需要对原始数据进行压缩编码。系统对视频原始数据编码采用H264编码,对音频原始数据编码采用AAC编码。最后将编码后的数据封装成RTP包转发到流媒体服务器[4]。
FFmpeg作为一个跨平台的开源视频框架,能实现如视频编码、解码、转码、串流、播放等丰富的功能。支持的播放协议和视频格式非常丰富,几乎包含了所有音视频编解码、封装格式以及播放协议。利用NDK将FFmpeg交叉编译成FFmpeg.so动态链接库[5]。使用Java的JNI技术调用相应的接口函数来实现对音视频数据的编解码。其中编码的流程如图所示:
图2 音视频编码流程图
视频的播放就是把一帧一帧的图像快速连续地显示在屏幕上。为达到播放流畅的效果,使用两个线程轮流去解析视频流的帧图像,当一个线程解析完帧图像后,把图像渲染到界面中,同时另一线程开始解析下一帧图像。
当播放端向流媒体服务器提出播放请求时,Web服务器会进行认证并返回请求结果。如果请求成功,流媒体服务器会向采集端发送调取数据的指令,视频采集端收到指令后会发送视频流到流媒体服务器。流媒体服务器将实时视频流传送到Android播放端进行解码并播放,循环反复这个过程,直到结束请求或视频采集结束。
流媒体服务器获取音视频流并实时进行处理,同时监听和接收移动播放终端的连接请求,当请求成功时向移动播放终端发送音视频流。由于流媒体服务器在不同时刻响应不同客户端的请求,所以为了满足实时性的要求,服务器端采用多线程的算法。一次基本的RTSP操作过程包括如下步骤。
首先采用HTTP协议从Web服务器获得该媒体流的演示描述文件。该文件包括视频服务器地址、端口号及视频服务的编码方式等信息。
然后,客户端分析该描述文件,并为会话中的每一个流发送一个RTSP建立命令,RTSP建立命令告诉服务器客户端用于接收媒体数据的端口。流媒体连接建立完成。
接着,客户端发送一个播放命令(PLAY),服务器就开始在UDP上传送媒体流(RTP包)到客户端。在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停等。
最后,客户端可发送一个终止命令(TERA- DOWN)来结束流媒体会话,释放资源。交互过程如图3所示。
图3 客户端和RTSP服务器交互过程
网络管理和Web服务器通过发布Web网站共同提供PC客户端访问服务器的网络接口,管理员通过网络管理,可以对后台进行维护。数据库服务器是整个系统的数据存储中心,主要用来存储所有与系统有关的媒体文件信息、用户信息以及聊天消息信息。
PC端利用本地浏览器,通过Web方式访问网络管理中心,实现对整个服务器上存储的媒体资源、用户信息以及服务器本身的管理和控制。
OkHttp是一个高效的HTTP客户端,它有以下默认特性:(1)支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接;(2)连接池减少请求延时;(3)透明的GZIP压缩减少响应数据的大小;(4)缓存响应内容,避免一些完全重复的请求[6]。
当网络出现问题的时候OkHttp依然坚守自己的职责,它会自动恢复一般的连接问题,如果你的服务有多个IP地址,当第一个IP请求失败时,OkHttp会交替尝试你配置的其他IP,OkHttp使用现代TLS技术(SNI, ALPN)初始化新的连接,当握手失败时会回退到TLS 1.0[7]。基于以上优点使用OkHttp作为应用程序HTTP请求客户端。
系统客户端和服务端间采用的是JSON报文的形式作为数据传送的格式,客户端通过HTTP请求后获取返回的JSON格式的信息,再通过解析JSON数据就能获得所需要的数据。
系统包含启动、导航、应用三个视图层。每个视图层包含的功能如图4所示。
图4 视图层及包含功能
在启动视图下,用户填写的账号和密码若与服务器上存储的账号与密码一致,就弹出登录成功的界面。如果输入的密码错误达到3次以上,用户会被锁定,5分钟后自动解锁。当用户忘记密码时可以通过验证手机号找回密码。登录中需要对手机号和密码做校验,校验格式是否正确。用户可以在电信、移动、联通三种网络类型间进行手动切换。点击“新用户注册”后会出现注册界面用来注册新账号。其中登录请求代码如下:
2.2.1 首页
首页界面包含搜索框和房间列表,用户可以通过下拉进行房间列表刷新。在搜索框中输入房间ID可以查询房间,否则提示房间不存在。
2.2.2 个人中心
个人中心界面主要显示用户的一些个人信息,可以展示头像、用户昵称、用户ID,可以修改头像、修改昵称、修改密码、退出程序、切换账户等功能。
在应用视图下,进入房间后可以对主播发送礼物及聊天信息,查看房间用户,打开、关闭直播视频和声音。用户使用金币购买对应数量的礼物。不同的礼物拥有不同的名称和图片。礼物信息包含赠送者头像、昵称、礼物图片、礼物数量,同一时间,只展示1条赠送礼物的信息。赠送礼物花费的金币,会按照1:1的比例转化为该用户对主播贡献的金币数量。
将应用程序打包成apk文件后安装到Android手机上,采用无线4G网络传输数据。按照需求书内容反复测试每个功能,结果发现,音视频同步性良好,画面观看流畅。测试如图5所示,手持手机作为数据采集端,后面手机作为数据播放端。
图5 系统测试
基于Android平台设计的流媒体直播系统具有操作简单、功能齐全、移动视频直播画面清晰、实时性强、性能良好等特点,具有很好的实用价值。可以根据实际需求的变化,引入最新技术对本直播系统进行改进,进一步提高移动直播平台的先进性、科学性和适用性。
[1] 潘安乐.基于Android的电梯远程实时视频传输系统设计[D].苏州:苏州大学,2019:14-15.
[2] 李校林,刘海波,张杰.RTP/RTCP,RTSP在无线视频监控系统的设计与实现[J].电视技术,2011,35(19):89 -92.
[3] 张建平.基于Android手机实时视频采集与传输软件设计[J].系统仿真技术,2020,16(1):60-63.
[4] 于瀚博.基于Android的机载音视频实时传输方案设计与实现[D].哈尔滨:哈尔滨工业大学,2014:21-22.
[5] 高攀. Android系统下基于FFmpeg框架的多媒体播放器研究[D].北京:中国地质大学,2016:15.
[6] 胡李镇.基于RTSP的嵌入式流媒体服务器设计与实现[D].武汉:华中科技大学,2017:11-15.
[7] 李群.基于OkHttp的文件传输设计与实现[J].电子技术与软件工程,2018,7(13):180-181.
Design of Mobile Live Broadcast System Based on RTSP under Android Platform
ZHOU Xiang, YU Xin, ZHANG Xia, BAO Yu, YANG Hai-bo, PAN Pei-sen
(Department of Research and Development, Nantong Yirong Network Technology Co., Ltd., Nantong 226000, China)
In this paper, based on the RTSP/RTP protocol and the function implementation of each module the communication process between the client and the server was studied by using OKHttp for network data transmission. Finally, the function of each component of the software is described. The system is based on the Android platform and uses FFMpeg library and JNI technology to implement audio and video encoding and decoding, and RTSP streaming media server to control the transmission of streaming media data on the IP network. The system has the advantage of complete functions, simple operation, clear pictures, and strong real-time performance.
android; RTSP/RTP protocol; JNI; streaming media server
TP311
A
1009-9115(2021)06-0046-04
10.3969/j.issn.1009-9115.2021.06.012
2021-02-25
2021-07-02
周翔(1987-),男,江苏盐城人,工程师,研究方向为移动app开发、人工智能。
(责任编辑、校对:田敬军)