基于IPv6的视频直播性能分析与优化
2019-01-09胡景文刘芮汐周小明宗巍阳刘专焦敏
文 /胡景文 刘芮汐 周小明 宗巍阳 刘专 焦敏
视频直播技术是实现通过设备采集音视频信息,压缩转码后传送到服务器,然后客户端通过解码来重现音视频信息这一过程的技术。视频直播技术目前广泛应用于工作、娱乐中,在教育教学领域的应用发展前景尤为值得关注。在教育领域,远程教学、教学信息化这样的字眼随着新技术更新正不断丰富。网络实时交互同步教学,在利用现代先进通讯技术打破教育教学的地域与时间限制、缓解教育资源分布不均,缩小教育差距上发挥了有力作用。
目前,国内出现了许多在线课堂教育平台,不过他们大多都只是分享课程的课件和已经录制好的课程视频,而在教学过程中和老师进行互动才能更好地帮助学生集中精力、理解知识,从而提高学习效率。为了能更好地满足视频直播技术在教育以及其他方面的需求,进一步提高视频直播的性能就成为了一个重要的研究问题。
目前各大在线教学平台均使用IPv4作为其网络传输协议。IPv4网络设计于20世纪70年代后期,互联网已经经历了多年的发展,IPv4的地址已经消耗殆尽。基于IPv6网络传输数据与基于IPv4相比具有很多优点,因此将进行基于IPv6的视频直播性能分析与优化。
视频直播技术及性能分析(以工程为例)
所有视频直播的过程都有异曲同工之妙。首先,视频采集设备将景物通过镜头投射到图像传感器上,转化为模电信号,然后经过A/D转换,通过数字信号芯片的处理,从与计算机连接的端口(如USB接口)传递到计算机里,音频设备的采集与上述过程类似。接下来,对原始的视频和音频数据进行压缩和编码,使之体积在很大程度上变小,然后按照指定的协议格式进行打包,通过网络连接传输到流媒体服务器端。最后,客户端通过解码从服务器收到的数据还原视频和音频。[1]
图1 Red5流媒体工作原理
RTMP
RTMP协议作为一种应用层协议,它的设计目的是解决多媒体数据流的多路复用以及其他问题。利用RTMP协议传输数据时,首先建立基于传输层协议的链路,然后客户端和服务器被要求通过基于传输层链接“握手”建立链接,并在其上传输一些控制信息。存在相关命令创建一个流链接来传输音频视频数据以及控制该数据传输的命令信息。RTMP协议传输数据时自己将数据进行格式化得到的数据我们称之为消息。传输时, 消息被发送端分成带有不同标记的块,每个块可能是一个单独完整的消息,或是消息的一部分。接收端通过块中的数据长度、标记和消息的长度将块还原成完整的消息。这就是信息收发的过程。[2]类似于数据包的容器,数据可以是AMF格式或FLV格式的音视频数据,RTMP保持与终端的永久连接,允许实时通信。[3]
Red5[4]
Red5流媒体服务器的主要功能与Flash Media Server差不多。它不仅提供基于Flash的流媒体服务,使用RTMP作为流媒体传输协议,而且与FMS完全兼容,支持了视频直播应用。Red5支持直播的功能如下,它能够流化FLV、MP3文件,实时地录制客户端流并将其转化为FLV文件,发布现场直播流。因为Red5是一种免费的开源服务器,与Flash Media Server相比具有可替代性,所以在Flash视频网站、Flash直播系统、视频会议系统等领域有着广泛应用。HTTP通信服务、rtmp通信服务也是Red5的一部分。Red5提供的rtmp通讯服务帮助实现了直播应用。其架构主要由Jetty6、Mina和Spring组成。它们分别负责HTTP的部分通信和Java Servelet的承载调度,RTMP协议的通信和实现,两部分的有机结合和相关调度。
图2 基于IPv6和IPv4直播课堂系统实现
案例(支持IPv6及IPv4的直播课堂系统)
接下来,以我们实现的一个支持IPv6及IPv4的直播课堂Web系统为例对视频直播技术进行说明。
1.系统功能
该Web系统功能主要分为两部分:教师端的功能实现,包括就教师登录、教师个人中心,教师开课申请,教师开始直播,课程即时反馈,课程作业及公告发布等,另一部分是学生端的主要功能实现,包括登录及个人中心、搜索课程,申请听课,进入听课,作业提交以及发表评论等功能。系统实现主要基于Java和jsp两门语言,对于学生或者老师的请求,通过jsp提交到后台服务器,服务器根据数据库的和请求计算出结果反馈给客户端,客户端获取信息后再显示在界面上,完成动态信息获取的目的。
2.视频、音频采集转码与推流的实现
直播编码的实现:
ActionScript采用Sorenson Spark 或 On2 VP6 编解码器编码的FLV文件。On2 VP6视频编解码器比之前使用的带宽少,并且提供了额外的马赛克消除滤镜和色度去环滤镜。
VP6编码器的基本原理,将很大的原始视频编码成很小的视频文件,其核心就是去掉视频文件中的冗余信息。
VP6主要采用了H.264标准,其编码过程包含以下几点:
(1) 帧内预测编码
帧内编码主要用于减少图片的空间冗余,在给定帧中尽可能地利用相邻宏块的空间相关性。
(2) 帧间预测编码
帧间预测编码通过连续帧中的时间冗余来进行运动估计和补偿。
(3) 整数变换
(4) 量化
(5) 熵编码
ActionScript中提供了NetStream类来进行播放FLV文件的流,并提供了类VP6VideoStreamSettings,可以为每一个NetSteam设置指定视频压缩设置,来实现直播编码的实现。
服务器推流及客户端接受的实现:
在推流方面使用了ActionScript来处理RTMP流,ActionScript中有已经封装好的流文件和现成的接口函数,可以用于直接调用。
图3 视频、音频采集转码与推流的实现
图4 Vp6编解码器
ActionScript中进行客户端推送RTMP:
(1)先建立网络连接,客户端连接上流媒体服务器
nc = new NetConnection()
nc.connect(“rtmp://[流媒体服务器的IPv6地址]:1935/live”)
(2)建立网络流
ns = new NetStream(nc)
(3)添加摄像头与音频
ns.attachCamera(cam) // 添加摄像头 , 可以关于cam进行参数设置
ns.attachAudio(mic) // 添加音频 , 可以关于mic 进行参数设置
(4)网络流的上传
ns.publish(“直播间名”, ”live”)
Actionscript中进行客户端视频播放:
(1) 先建立网络连接,客户端连接上流媒体服务器
nc = new NetConnection()
nc.connect(“rtmp://[流媒体服务器的IPv6地址]:1935/live”)
(2) 建立网络流
ns = new NetStream(nc)
(3) 播放网络流
ns.play(“想要观看的直播间名”) // 即可进行观看
3.IPv6网络的支持
配置IPv6环境的流媒体服务器,选取了centos系统和nginx服务器来进行配置。
关于IPv6环境的配置,对于校园网服务器的IPv6的DNS服务器已经配置好,不用再配置、对于非校园网的服务器,则需要先配置IPv6的隧道,然后再在服务器上配置路由。
关于流媒体服务器的搭建,检查nginx服务器的IPv6模块是否配置,如果没有配置,则需要安装IPv6模块。
然后配置流媒体服务器,对nginx服务器安装rtmp module,并在配置文件中进行以下部署,配置app:
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
max_connections 1024;
}
application hls{
live on;
hls on;
hls_path /usr/local/var/www/hls;
hls_fragment 1s;
}
}
}
以上配置同时包含了rtmp直播协议和hls直播协议,使流媒体服务器同时支持两者。
通过上述步骤,我们最终能完成视频直播应用的搭建。
视频直播的性能优化
视频直播的过程包括获取音视频数据,用Vp6编码器编码,然后推送rtmp流到Red5流媒体服务器,客户端接收流并用Vp6解码,还原音视频信息。在不同的环节都有其对应的优化策略,针对数据传输和数据编码的环节进行优化。
利用IPv6网络进行数据传输
从网络传输方面来看,IPv6网络具有诸多优点。IPv6与IPv4在流媒体应用方面进行比较,IPv6有以下几方面的优越性:
1.地址容量的问题得以解决,优化了地址结构,一定程度上适应了流媒体通信大信息传输的需要。
2.关于服务质量,它能根据紧急程度和服务类别提供各类多媒体信息的数据包优先级信息。
3.组播功能增强,很多流媒体应用都因其有了发展机会。4.采用必选的IPSec,很好地保证了网络安全。
目前,IPv6协议的基本框架已经成熟,并且不断地被推广。支持IPv6网络,并将其用于数据传输,不仅提升了安全性能,并且在一定程度上保证了信息传输,优化了性能。[5]
从表1中可以看出,基于IPv6网络进行传输的延时在obs推流和网页flash推流的情况下均比基于IPv4网络的要低,性能更优。IPv6的数据包在同IPv4的数据包有着很大不同,其在首部新添加一个8位的业务流类别和一个20位的流标记。而将业务流类别和流标记应用在多媒体的实时应用中,将会大大提升多媒体应用的服务质量,同时也大大降低其延迟。IPv6进行业务优先级处理。其优先级可以分为两类:一是用于起始节点对其提供的拥塞控制的信息传输,二是用于在发生拥堵时不退让的信息传输。其具体应用在多媒体流的传播上,可以通过在起始节点给多媒体流分配高的优先级,让其得到优先处理,使得多媒体流传播速度得到提升。同一数据流的会被标记,由于流是一个从特定起始点到一个特定目的地的分组序列,这些序列在传播过程中会经过许多路由器,同时需要这些路由器对其进行特殊处理。在IPv6环境下,起始点可以对流分配一个流标记,在经过节点路由器的时候,路由器可以通过对流标记去记住对应的处理步骤,同时对在由对流标记的跟踪,直接对后面的标记有该流标记的数据分组实现直接转发,从而实现数据流后续分组的快速交换,节省了时间,同时提升了服务质量。[6]
表1 IPv4与IPv6的性能对比
利用Vp6编解码器进行数据编码
Vp6编解码器使用H.264视频编码标准,它使用高效和准确的运动估计预测方法。H.264继承了H.263和MPEG1/2/4视频编码协议的优点,保留了变换编码技术和运动补偿,并在此基础上增加了DCT整数变换,CAVLC,CABAC等新技术,让编码算法的压缩效率和图像回放质量在很大程度上得以提高。[7]基于灵活分割宏块的运动矢量估计、多帧预测、帧内预测编码模式等多种技术特点决定了H.264编码效率的高效及Vp6编解码器的高效。
结束语
目前已经有很多学者对编解码技术的优化提出了很多具体的优化措施,现仅以具体事例来简单分析基于IPv6的直播技术及在传统模型上的优化。对于直播技术而言,IPv6网络和编解码技术都同等重要。IPv6网络在安全和稳定传输方面提供了保障,高性能的编码技术保证了视频流尽可能小且保证了音视频的质量。IPv6网络的充分利用和更加高效的编解码技术在未来会被更加重视。