本发明涉及计算机互联网的音视频直播领域,具体的,涉及一种基于rtmp的直播时延优化方法。
背景技术:
网络直播技术的核心是视频传输。从图像采集到用户终端,需要经过采集、编码、推流、分发、拉流、解码等一系列数据传输处理,才能将图像显示到用户终端,而由于这些环节的传输和处理,必然会产生延时。若延时太大,人与人交互起来就很困难。
目前常用处理技术方法为:(1)降低gop间隔。编码器将原始图像编码为三种类型帧,也就是i帧、b帧、p帧。i帧指的是关键帧,保留完整的图像信息;b帧指的是双向内插帧,需要参考前后帧来还原此帧的图像信息;p帧指的是前向预测帧,需要参考前一帧图像来还原此帧图像信息。gop指视频编码中两个i帧的间隔。由于播放端解码器需要关键帧才能解码,缩短gop间隔可以降低延迟,但是这种方法会导致图像编码压缩率变低,降低图像质量。(2)减小数据缓存。由于rtmp是基于tcp的一种应用层网络协议,在网络条件差的时候,为保证传输可靠性,会将失败的包缓存起来,等待网络条件好的时候一并发出,这样就存在累积延迟的问题。减小数据缓存可以有效缓解延迟累加的问题,但由于缓存太小,数据丢失后播放端容易出现卡顿的现象。
申请号为“2017104377335”的专利公开了“一种降低网络直播延时的方法”,其降低延时所采用的方法就是根据延时跳帧播放,采用这种方法虽然可以有效降低延时时间,提高直播的实时性和交互体验,但是会降低图像质量。
技术实现要素:
本发明的目的在于,针对上述问题,提出一种基于rtmp的直播时延优化方法。
一种基于rtmp的直播时延优化方法,包括如下步骤:
步骤1:视频编码模块将摄像头采集图像进行字符叠加后的图像按h264标准进行压缩编码发送至视频推流模块;
步骤2:视频推流模块将完成压缩编码后的数据进行封包并发送至nginx服务模块;
步骤3:nginx服务模块对接收的数据进行拆包还原图像数据,转存到本地缓存;
步骤4:客户端拉流模块向nginx服务模块发送链接请求和数据传输请求,获取图像数据并将图像数据传输给客户端解码模块;
步骤5:客户端解码模块对接收到的数据进行解码播放。
优选的,所述步骤1中压缩编码默认gop长度开始编码。
优选的,所述步骤2中对压缩编码后的数据进行rtmp协议封装。
所述步骤4具体包括如下步骤:
步骤41:nginx服务模块判断服务端缓冲区余量,若服务端缓冲区余量较低则执行步骤42;若缓冲区余量高,则执行步骤43;
步骤42:当服务端缓冲区余量较低时,提高视频推流模块访问nginx服务模块的拉流频率,降低客户端拉流模块的播放速度,将本地缓冲区数据降速播放;
步骤43:当服务端缓冲区余量较高时,提高客户端拉流模块播放速度,将本地缓冲区数据提速播放,降低视频推流模块访问nginx服务模块的拉流频率。
本发明的有益效果:可以实现流媒体传输的准实时播放,从视频采集到客户端播放整体时延1~2秒;相比原来单一的缩短gop长度和减少缓存大小,本发明能根据当前网络环境实时调整gop和缓存大小减少时延,并通过调整播放速率消除累积时延,达到降低摄像头采集与客户端直播间时延的效果。
附图说明
图1为本发明的流程图。
图2为本发明的拉流模块工作流程图。
具体实施方式
下面结合附图对本发明作进一步说明。
如图1所示,一种基于rtmp的直播时延优化方法,包括如下步骤:
步骤1:视频编码模块将摄像头采集图像进行字符叠加后的图像按h264标准进行压缩编码发送至视频推流模块;
步骤2:视频推流模块将完成压缩编码后的数据进行封包并发送至nginx服务模块;
步骤3:nginx服务模块对接收的数据进行拆包还原图像数据,转存到本地缓存;
步骤4:客户端拉流模块向nginx服务模块发送链接请求和数据传输请求,获取图像数据并将图像数据传输给客户端解码模块;
步骤5:客户端解码模块对接收到的数据进行解码播放。
需要说明的是,所述步骤1中压缩编码默认gop长度开始编码。
需要说明的是,所述步骤2中对压缩编码后的数据进行rtmp协议封装。
如图2所示,客户端拉流模块的工作流程为:nginx服务模块判断服务端缓冲区余量,若服务端缓冲区余量较低则提高视频推流模块访问nginx服务模块的拉流频率,降低客户端拉流模块的播放速度,将本地缓冲区数据降速播放;当服务端缓冲区余量较高时,提高客户端拉流模块播放速度,将本地缓冲区数据提速播放,降低视频推流模块访问nginx服务模块的拉流频率。
1.一种基于rtmp的直播时延优化方法,其特征在于,包括如下步骤:
步骤1:视频编码模块将摄像头采集图像进行字符叠加后的图像按h264标准进行压缩编码发送至视频推流模块;
步骤2:视频推流模块将完成压缩编码后的数据进行封包并发送至nginx服务模块;
步骤3:nginx服务模块对接收的数据进行拆包还原图像数据,转存到本地缓存;
步骤4:客户端拉流模块向nginx服务模块发送链接请求和数据传输请求,获取图像数据并将图像数据传输给客户端解码模块。
2.如权利要求1所述一种基于rtmp的直播时延优化方法,其特征在于,所述步骤1中压缩编码默认gop长度开始编码。
3.如权利要求1所述一种基于rtmp的直播时延优化方法,其特征在于,所述步骤2中对压缩编码后的数据进行rtmp协议封装。
4.如权利要求1所述一种基于rtmp的直播时延优化方法,其特征在于,所述步骤4具体包括如下步骤:
步骤41:nginx服务模块判断服务端缓冲区余量,若服务端缓冲区余量较低则执行步骤42;若缓冲区余量高,则执行步骤43;
步骤42:当服务端缓冲区余量较低时,提高视频推流模块访问nginx服务模块的拉流频率,降低客户端拉流模块的播放速度,将本地缓冲区数据降速播放;
步骤43:当服务端缓冲区余量较高时,提高客户端拉流模块播放速度,将本地缓冲区数据提速播放,降低视频推流模块访问nginx服务模块的拉流频率。
5.如权利要求1所述一种基于rtmp的直播时延优化方法,其特征在于,还包括步骤5:客户端解码模块对接收到的数据进行解码播放。