2016年5月 计算机工程与设计 COMPUTER ENGINEERING AND DESIGN May 2O16 第37卷第5期 VoL 37 No.5 基于Live555的手机实时直播系统设计与实现 魏崇毓,张宏琳 (青岛科技大学信息科学技术学院,山东青岛266061) 摘要:通过对流媒体传输技术、流媒体传输协议、Live555流媒体服务器、socket套接字通信和H.264视频格式的研究, 提出一个基于Live555流媒体服务器的手机实时监控系统设计方案,实现通过无线网络将手机采集的实时视频数据并发上 传至服务器,在服务器中对数据进行流化处理并广播的功能。针对手机实时直播系统的实时性与并发可靠性要求,设计实 现服务器实时直播功能和客户端与服务器网络传输模式,并验证了设计的可行性、系统的实用可靠性。 关键词:实时直播;流媒体服务器;H.264;Live555;socket 中图法分类号:TP37 文献标识号:A 文章编号:1000—7024(2016)05—1156—05 doi:10.162o8/j.issnl000—7024.2016.05.008 Design and implementation of mobile real-time broadcast system based on Live5 5 5 WEI Chong—yu.ZHANG Hong-lin (School of Information Science and Technology,Qingdao University of Science and Technology,Qingdao 266061,China) Abstract:Through the research of streaming media transmission technology and protocols,Live555 streaming media server, socket communication and H.264 video formats,a mobile real—time monitoring system based on Live555 streaming media server was designed.The concurrent uploading of real—time video from the cell phone was achieved via wireless network,and video pro— cessing and broadcasting on the server were realized.Aiming at real—time monitoring and concurrency reliability requirements, the real-time broadcast function and data transmission mode were realized.Results show that the system is feasible and the sys— tem is reliable. Key words:real—time broadcast;streaming media server;H.264;Live555;socket 0引 言 随着4G技术的发展和无线网络覆盖的逐渐完善,移动 网络的传输速度大幅度提升l1]。移动手机的高度智能化, 1手机实时直播系统整体设计 系统采用c/s模式,客户端包括Android智能手机和 PC机,负责视频采集、编码与视频解码播放;服务器分3 使得利用手机作为视频采集设备进行实时监控成为可能。 使用手机作为终端,不仅方便快捷,且成本低,实时性好, 可以达到随时随地进行视频直播的目的。 部分,包括流媒体服务器、数据库服务器和Web服务器。 流媒体服务器基于开源项目Live555流媒体服务器进行改 进,负责从采集终端接收并保存实时视频流,再以流式协 本文系统视频采集终端基于Android平台利用FFmpeg 进行H.264视频编码;核心组件流媒体服务器采用 Live555开源项目,利用UDP socket并结合多线程管理的 方式来实现并发连接,能够接收多个采集端的视频数据并 议直播给客户端。数据库服务器负责保存视频名称和用户 信息。Web服务器负责服务器和客户端的会话管理,给客 户端发布系统资源和提供登录入口。 系统整体设计如图1所示。 手机采集端采集视频时,首先通过2G/3G/4G/WiFi网 络登录到服务器,连接并验证成功后进入拍摄预览状态。 服务器收到采集端连接信息后,在数据库中添加视频名称、 实时打包、广播到播放端。相比传统监控更加高效便携, 并解决了市面上基于移动终端视频传输无法保存历史视频 数据、需要将视频文件全部下载才能观看的缺陷。 收稿日期:2015—06—12;修订日期:2015—08—18 基金项目:国家科技重大专项基金项目(2012ZX030020) 作者简介:魏崇毓(1957一),男,江苏徐州人,博士,教授,研究方向为通信与电子系统;张宏琳(1990一),女,黑龙江佳木斯人,硕士 研究生,研究方向为计算机通信网理论与技术。E-mail:hczhl@163.com 第37卷第5期 魏崇毓,张宏琳:基于Live555的手机实时直播系统设计与实现 曩 图1系统整体设计 :一播放数据—+ :I — I 无线网 PC机 视频来源及视频类型等标识。手机将采集到的视频数据用 H.264格式进行压缩编码并发送给服务器。服务器将收到 络接口,用于数据包的发送和接收,支持广播功能。Basic- UsageEnvironment实现控制台的输入输出和信号。Live— Media是Live555的重心,包含RTSP会话类和多种音视频 格式编码的类。Live555中Source是数据源,即产生数据的 对象,Sin1【是消费数据的对象,Source和Sink通过RTP子 的实时数据保存至本地文件并等待播放端随时可能到来的 播放请求。当服务器收到播放请求时,将视频数据进行 RTP打包,由RTSP会话传送给播放端_2]。播放端利用支 持流媒体的视频工具进行解码、播放。 会话联系在一起,数据流经过各级Source最终传送到sink。 2 RrP/m ̄a,流媒体协议及Live555流媒体服务器 2.1 RTP、RTCP和RTSP 3系统实时直播功能设计与实现 Live555流媒体服务器在RTSP会话中支持提取本地音 视频文件,在continuePlaying()中将数据打包,BulidAnd— 实时传输协议RTP为流媒体数据提供实时的端与端之 间的传输服务,与传统传输层协议相比,具有简单、可扩 展、支持多点投递、适用广泛的网络接口等特点。RTP本 身并没有对于时间和服务质量的控制,只负责传输流媒体 数据,同UDP一样为追求传输效率,无法保证传输数据有 序可靠 。 SendPacket()中准备RTP包头,用PackFrame()组帧, getNextFrame()从数据源Source中不断获取数据,由 sendPacketlfNecessary()发送数据包给播放端。本系统中 不仅要利用Live555的历史文件点播功能, 还要实现视频 的实时直播。由于Source为产生数据的数据源,想要实现 实时直播,只需要在Live555中创建实时数据源UDPVideo- Source。当采集端把数据传送给服务器时,服务器把数据 实时传输控制协议RTCP负责对RTP进行控制、同 步。RTP会话期间以一定的频率发送RTCP报,以此来监 听会话信息,动态的调整传输达到效率最佳。 实时传输流协议RTSP属于应用层协议,用于发起、 终结一个或多个流媒体会话,对流媒体服务器进行网络远 程监控。在一次基本的RTSP会话过程中,客户端连接到 流媒体服务器并发送DESCRIBE描述命令,流媒体服务器 保存至接收缓冲区,并不断把缓冲区数据保存在本地文件 中,当有播放请求时,首先判断此时数据的状态,如果是 正在采集,则从接收缓冲区中提取数据并发送,如果是历 史文件,则按照Live555原本的数据发送逻辑,将本地视 频数据进行处理并发送,从而实现既能支持文件的接收、 通过发送SDP描述反馈给客户端,客户端分析该SDP描述 并为会话中的每一个数据流发送SETUP会话建立命令,并 告知服务器客户端的接收端口,至此则成功建立了流媒体 连接[4 ]。然后由客户端发送PLAY播放命令,服务器开 存储、点播,又支持实时直播功能。 数据传输过程如图2所示。 根据H.264的解码原理可知,在解码H.264格式的视 频时,必须要送给解码器视频数据的I帧(帧内编码帧, 是一种自带全部信息的独立帧,可独立进行解码,其中首 始通过UDP协议传输RTP数据包,在播放期间客户端可 以向服务器发送快进、快退、暂停等控制命令。最后,可 由客户端发送TEARD0wN命令来终止会话。 2.2 Live555介绍 个I帧叫IDR帧)。然而视频播放时仅仅把I帧送给解码器 是不够的,还必须在I帧之前传输相应的序列参数集(se— quence parameter set,SPS)和图像参数集(picture para- meter set,PPS),H.264的SPS和PPS包含了初始化H.264 解码器所需要的信息参数。因此在发送视频数据时应将全 Live555流媒体服务器是为流媒体提供解决方案的C++ 开源项目[6],支持RTP/RTCP、RTSP和SIP等流媒体传 输协议,能够支持多种音视频格式如MPEG、arnr、DV数 据的接收、流化和处理[7]。Live555源码包括4个基本模 块:UsageEnvironment、Groupsock、BasicUsageEnviron— 部SPS和PPS依次发送至解码器,直到搜索到一个I帧。 H.264视频编码标准分为视频编码层VCL和网络抽象 层NAL_8]。视频编码层负责视频内容的核心压缩编码的表 述,网络抽象层负责按照网络要求将数据进行打包和传送。 对每帧数据来说,帧头定界标志和帧数据组成一个NAL单 ment和LiveMedia。UsageEnvironment代表整个系统的运 行环境,提供错误记录和错误报告功能。Gmupsock实现网 计算机工程与设计 2016正 图2数据传输过程 元,每个NAL前都有OO 00 O1分隔符。SPS开头标志位。0 OO OO Ol 67,PPS开头为。0 OO。0 O1 68,I帧标志位O0。0 是有限的多处理器架构的情况下,则是利用多线程等技术 来实现。多线程是指程序中包含多个执行流,一个程序可 O1 65。在视频传输过程中,要保证SPS、PPS在数据流的 开头,并且在SPS和PPS之后带有I帧。因此,在从接收 缓冲区中读取实时数据的时候首先要判断SPS的位置,根 据定位移动读写指针位置,从而发送有效的实时数据。 在Live555原逻辑中,数据源为ByteStreamFileSource, 是一个对于文件数据的抽象数据源,读取数据的接口为 doReadFromFite(),调用fread(fTO,1,fMaxSize,fFid) 来读取文件。新数据源在发送数据前先判断当前视频数据 状态,如果是正在采集中:if(this一>client—id!—一1&& has seek r this->client id]一一false&&state client [this一>client—id]一一1),则在接收缓冲区中找到SPS的 位置if(nal[O]一=OxO0&&nal[1]一一OxO0&&nal [2]一一OxO0&&nal[3]一一0x01&&nal E4]一一 0x67)。如果是历史文件,则调用fread(fTo,1,fMaxSize, fFid)直接读取文件。 4客户端与服务器网络传输的设计与实现 4.1 socket套接字 Windows socket是Windows平台下为网络编程开放的 一个端口,借助于Windows socket提供的协议服务,几乎 可以创建任何类型的TCP/IP网络应用,而且详尽灵活, 屏蔽了网络处理的底层细节_9]。TCP/IP的socket有面向连 接和面向无连接两种方式。流式套接字(SOCK— STREAM),提供连接的、可靠的数据传送服务,数据无差 错、无重复地发送,客户端按发送顺序接收;数据报式套 接字(SOCK—DGRAM),提供无连接服务,无法保证数 据传输顺序,数据可能丢失或重复。由于数据报式套接字 使用UDP协议,无需建立连接,传输速度快,实时性好。 虽然无法保证数据可靠无差错,但对于实时性要求较高的 视频应用,客户可以忍受丢帧情况,但无法忍受长时间等 待。因此本系统使用TCP socket建立采集端与服务器的稳 定连接,然后使用UDP socket传输视频数据,既保证了用 户连接的可靠性,也实现了数据实时传输的效率。 4.2多线程并发 对于视频实时直播系统来说,核心要求就是在传输大 量视频数据时网络延迟小并且满足能够对多任务并行处理。 并发服务器是指在同一时刻可以处理多个客户端请求的服 务器,但这并不一定是真正同时处理多个请求。在服务器 以同时运行多个不同的执行路径来执行不同的任务。系统 在多个线程之间快速切换,看上去就像并发处理多个任 务l1 。在并发处理过程中,使用高效的数据结构和全局变 量可以提高程序的运行效率。虽然全局变量在一定程度上 会提高模块间耦合性,但只要正确合理的利用,则会减少内 存寻址时间、提高内存利用率、减少内存分配所带来的消 耗,进而提高系统效率。当服务器应用程序面临多个服务请 求,有同时执行多个任务的需要,使用多线程是首要选择。 4.3网络传输设计与实现 客户端与服务器通信过程如图3所示。 本服务器采用主线程统一监听、连接采集端并为其分 配数据传输端口,创建任务线程接收采集端数据的方法。 当有采集端的连接请求时,通过创建线程的方式单独处理 数据通信,提高视频传输的实时性。服务器首先建立一个 主线程Creat _hrcad(NULL,0,(U H褂1AD S T ROUTINE)Threadb,LPVOID(urtPrefix),0, &ThreadID—b),与通常的TCP服务器一样,初始化套接 字动态库WSAStartup(MAKEWORD(2,2),&wsd),创 建套接字socket(AF—INET,SOCKSTREAM,0);接 着设置服务器地址,调用bind(fd,(sockaddr*)&addrserver,sizeof(addr—server))绑定本地地址,调用listen (fd,5)设置侦听的队列长度。当采集端连接到来accpet() 成功时,使用recv()接收采集端指令,若为“exit”则结 束;若为“start”则利用MySOL的C语言API函数mysql— realconnect(mysql,host,user,pass,db,port, NULL,0)连接MySQL数据库,用mysql—query (mysql,command)和mysql—store—result(mysq1)查找 MySQL数据库并返回结果集,根据结果集判断请求连接的 视频名称的状态。如果该视频已存在或正处于连接状态或 已为采集端连接数量的上限,则结束,否则为该采集端分 配UDP socket连接端口号并创建一个线程进行数据接收及 处理,每到达一个客户端为其创建一个任务线程。 考虑到最大传输单元MTU(一种通信协议的某一层上 可以通过的最大数据包)如果过小,则传输效率小,但如果 过大,则在IP层要进行分片、重组,增大传输延迟。以太 网的MTU为1500 bytes,其中IP报头占用2O字节,UDP 报头占用8字节,据此采集端数据报大小设置为1470 bytes, 服务器缓冲区设置为1470,每次接收1470 bytes数据。 · 116O· 计算机工程与设计 2016正 [3]Real time streaming protocol(RTSP)[s].RFC2326. [4]MA0 Yanfei,HUANG Zhongdong.Research and design of web DVR system based on real—time streaming protocol[J]. omputer CEngineering and Design,2011,32(7):2523—2530 (in Chinese).[茅炎菲,黄忠东.基于RTSP协议网络监控系 统的研究与实现EJ].计算机工程与设计,2011,32(7): 2523—2530.] [5]YANG Ling,ZENG Hao,XIAO Yang.Implementation of 图5播放效果 6结束语 本文讨论了RTP/RTCP协议的流媒体传输、Live555 流媒体服务器和socket网络通信,提出了一种以Live555 流媒体服务器为核心的手机实时监控方案。系统采用了 UDP socket和多线程结合的方法实现了多采集端并发,比 使用TCP socket的IO循环复用模型更适用于实时性要求 高的视频传输系统,使用替换服务器数据源的方式实现了 数据的实时传输。服务器适用于Windows和Linux系统, 智能手机可以使用各种无线网络随时随地实现视频采集, 系统运行稳定,基本实现了手机实时直播的功能。 参考文献: L1]wu Jianhua,XU Hao。DING Yuehua.Design and implemen— tation of read-time monitor system in mobile network[J]. Computer Engineering and Design,2010,31(10):2196—2269 (in Chinese).[吴建华,徐浩,丁月华.移动网络手机实时监 控系统的设计与实现[J].计算机工程与设计,2010,31 (1O):2196—2269.] E2]HUANG Zhihong,ZHANG t3o,WU Lili,et a1.Design and implementation of streaming media video service system based on J2ME[J].Computer Engineering and Design,2010,31 (19):4154—4157(in Chinese).[黄志宏,张波,巫莉莉,等. 基于J2ME的流媒体视频服务系统的设计与实现EJ].计算机 工程与设计,2010,31(19):4154—4157.] client simulation tool for DSS[J].Video Engineering,2012, 36(1):136—140(in Chinese). [杨玲,曾浩,肖洋.基于 DSS的定制客户端测试工具的实现IJ].电视技术,2012,36 (1):136 140.] [6]LIU Changling,BAO Jie,WANG Ningguo.Design and im plementation of network video monitoring system based on Live555 l-J].Journal of Modern Telecommunication Technology, 2012,12(1):38 42(in Chinese).[刘畅棂,包杰,王宁国. 基于Live555的网络视频监控系统设计与实现[J].现代电信 科技,2012,12(1):38—42.] [7]WANG Ningguo,wU Cuixian,LIU Changling,et a1.Design and implementation of the Android wireless video monitoring terminal based on Android[J].Digital Technology&Applica tion,2012,12(1):124—125(in Chinese).[王宁国,吴翠 先,刘畅棂,等.基于Android的无线视频监控终端的设计与 实现[J].数字技术与应用,2012,12(1):124—125.] [8]ZHOU Jingjing,SHU Xiang,LONG Tao,et a1.Research on the key technology of a real—time streaming media monitoring based on Android operating system[J].Microcomputer&Its Applications,2013,32(19):4-7(in Chinese). [周晶晶, 舒翔,龙涛,等.Android实时流媒体监控的关键技术研究 口].微型机与应用,2013,32(19):4-7.] [9]Bob Quinn,Dave Shute.Windows Sockets network program— ming[M].Beijing:China Machine Press,2012(in Chi— nese).[Bob Quinn,Dave Shute.Windows Sockets网络编程 EM].北京:机械工业出版社,2012.] [1O]YANG Kaijie,LIU Qiuiu,XU Tingrong.On multi—threaded concurrent control technology for thread pool rJ].Computer Applications and Software,2010,27(1):168—170(in Chi— nese).[杨开杰,刘秋菊,徐汀荣.线程池的多线程并发控 制技术研究[J].计算机应用与软件,2010,27(1): 168—170.]