本发明属于互联网的音视频技术领域,具体涉及一种RTMP直播流到HTTP FLV直播流实时转换系统及其工作方法。

背景技术:

在传统互联网直播领域,PC端采用RTMP协议进行视频直播,国内一部分CDN服务器禁用了RTMP协议的传输端口1935,不利RTMP协议进行CDN分发,但是HTTP协议的端口80都保留,能有效的进行内容分发。其次,随着移动互联网的直播业务的大力发展,RTMP协议不能应用在移动终端上,因此,迫切需要一套系统既满足PC端直播,还能满足移动互联网端直播的技术。

FLV是一种流式结构,由文件头(FLV header)和很多tag组成,tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流。基于各个终端平台都支持HTTP协议,因此采用HTTP FLV进行视频直播,既能与现有的CDN网络无缝衔接与内容分发,还能满足PC、移动(Android/iOS)平台直播业务需求。

H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式。当前,直播技术领域视频编码技术主要采用的是H.264。

直播过程中,用户端播放器打开时,需要等待一段时间才有视频画面出来,用户体验差,当等待时间较长时,用户以为播放器已经卡死了,会不断重新请求视频播放,加大了服务器并发压力。

在网络直播过程中,动态修改视频编码级别、参数、画面大小是一种常态。视频编码级别、参数、画面大小等参数是通过SPS和PPS的值来反应的。当客户端播放器还按照没有改变的SPS和PPS解码,势必会影响解码效率及准确性,直接影响就是画面会发生抖动和马赛克。

技术实现要素:

本发明的目的在于:解决上述现有技术中的不足,提供一种RTMP直播流到HTTP FLV直播流实时转换系统及其工作方法,解决多终端平台直播协议不能统一的问题,同时还解决了直播过程中画面出现抖动的现象且实现了终端播放器画面秒开方法。

为了实现上述目的,本发明采用的技术方案为:

一种RTMP直播流到HTTP FLV直播流的实时转换系统,其特征在于包括:

Internet网络;分别与Internet网络连接的RTMP服务器和直播前端;与直播前端连接的若干台摄像机;与RTMP服务器连接的HTTP FLV服务器;通过CDN网络与HTTP FLV服务器连接的播放端。

进一步的,上述的直播前端包括直播编码器和与直播编码器连接的若干台摄像机。

进一步的,上述的播放端包括PC播放器、IOS播放器、Android播放器和H5播放器。

进一步的,上述的HTTP FLV服务器包括:

与Internet网络连接的数据分离模块,数据分离模块用于接收RTMP直播流并分离出脚本标签和音视频数据;

与数据分离模块连接的消息缓存模块;

与消息缓存模块连接的编码器模块,编码器模块用于对音视频数据进行FLV格式编码;

与编码器模块连接的HTTP服务模块,HTTP服务模块通过CDN网络连接播放端。

进一步的,上述的编码器模块包括FLV头模块、脚本标签模块、视频标签模块和音频标签模块,FLV头模块、脚本标签模块、视频标签模块和音频标签模块的输入端连接消息缓存模块,输出端连接合成模块的输入端,合成模块的输出端连接HTTP服务模块。

进一步的,上述消息缓存模块还包括GOP缓存模块,GOP缓存模块与视频标签模块连接,用于缓存最新的关键帧。

一种RTMP直播流到HTTP FLV直播流实时转换方法,应用上述的RTMP直播流到HTTP FLV直播流实时转换系统,它包括以下步骤:

步骤1:数据分离模块实时接收RTMP直播流,从RTMP直播流中分离脚本标签和音视频数据并存入消息缓存模块;

步骤2:编码器模块从消息缓存模块中取出音视频数据,对音视频数据进行FLV格式编码;

步骤3:HTTP服务模块收到播放端的HTTP FLV直播流播放请求后,从编码器模块中获取相应的直播流并发送至播放端。

进一步的,步骤1所述的分离脚本标签和音视频数据具体包括以下步骤:

步骤101:从接收到的RTMP直播流中查找FLV头,将查找到的FLV头存入消息缓存模块;

步骤102:从接收到的RTMP直播流中查找脚本标签,将查找到的脚本标签存入消息缓存模块;

步骤103:从接收到的RTMP直播流中查找视频标签,然后从视频标签中分离出图像参数集和序列参数集,将图像参数集和序列参数集存入消息缓存模块;若消息缓存模块中已经存在图像参数集和序列参数集,则使用新的图像参数集和序列参数集替换原有的图像参数集和序列参数集;

步骤104:从接收到的RTMP直播流中查找音频标签,然后从音频标签中分离出音频数据并发送至编码器模块;

步骤105:从接收到的RTMP直播流中查找视频标签,然后从视频标签中分离出视频数据并发送至编码器模块;

步骤106:重复步骤102至105。

进一步的,步骤105还包括判断当前视频标签是否为关键帧(IDR),若当前视频标签中的视频帧类型为关键帧(IDR),则消息缓存模块删除GOP缓存模块内的原数据,同时将当前视频标签存入GOP缓存模块。

进一步的,上述的步骤2具体为:

FLV头模块向消息缓存模块请求FLV头,消息缓存模块将FLV头发送至FLV头模块;

脚本标签模块向消息缓存模块请求FLV头,消息缓存模块将脚本标签发送至脚本标签模块;

视频标签模块向消息缓存模块请求图像参数集和序列参数集,消息缓存模块将图像参数集和序列参数集发送至视频标签模块;

合成模块:合成模块接收FLV头、脚本标签、图像参数集和序列参数集,合成HTTP FLV直播流并发送至HTTP服务模块。

进一步的,合成模块向HTTP服务模块发送HTTP FLV直播流时先按以下格式发送

FLV头+[脚本标签]+[第一个视频标签]+[第一个音频标签]+[第二个视频标签];

然后交互发送视频标签和音频标签。

进一步的,每个关键帧(IDR)发送之前,均动态插入视频标签,所述视频标签仅包括基于H.264格式的图像参数集和序列参数集。

进一步的,上述步骤3具体为:

步骤201:播放端向HTTP服务模块发送HTTP FLV直播流播放请求;

步骤202:HTTP服务模块从编码器模块获取HTTP FLV直播流,然后将HTTP FLV直播流返回给播放端;

步骤203:HTTP服务模块实时监听播放端链接状态,当监听到播放端主动关闭时,释放编码器模块,终止本次服务。

由于采用了上述技术方案,本发明的有益效果是:

本发明在现有的RTMP直播服务上面,无缝扩展HTTP FLV直播,大大节约了设备投入和技术改造成本,在不增加任何设备和修改协议的情况下,既能与现有的CDN网络无缝对接,还能满足PC、移动终端直播需求,同时解决了画面抖动的方法和实现了画面秒开方法。

附图说明

图1为本发明的模块组件示意图。

图2为本发明的结构示意图。

图3为本发明的直播流转换流程示意图。

图4为本发明的HTTP FLV直播流播放数据与消息传递时序示意图。

附图标记:1-直播前端,2-RTMP服务器,3-HTTP FLV服务器,4-直播编码器,5-摄像机,6-播放端。

具体实施方式

参照附图1-4和术语表,对本发明的实施方式做具体的说明。

本发明提供一种RTMP直播流实时转换HTTP FLV直播流的系统,包括::

Internet网络;分别与Internet网络连接的RTMP服务器2和直播前端1;与RTMP服务器2连接的HTTP FLV服务器3;通过CDN网络与HTTP FLV服务器3连接的播放端6。

进一步的,上述的直播前端1包括直播编码器4和与直播编码器4连接的若干台摄像机7。

进一步的,上述的播放端6包括PC播放器、IOS播放器、Android播放器和H5播放器。

进一步的,上述的HTTP FLV服务器3包括:

与Internet网络连接的数据分离模块,数据分离模块用于接收RTMP直播流并分离出脚本标签和音视频数据;

与数据分离模块连接的消息缓存模块;

与消息缓存模块连接的编码器模块;

与编码器模块连接的HTTP服务模块,HTTP服务模块通过CDN网络连接播放端6。

进一步的,上述的编码器模块包括FLV头模块、脚本标签模块、视频标签模块和音频标签模块,FLV头模块、脚本标签模块、视频标签模块和音频标签模块的输入端连接消息缓存模块,输出端连接合成模块的输入端,合成模块的输出端连接HTTP服务模块。

进一步的,上述消息缓存模块还包括GOP缓存模块,GOP缓存模块与视频标签模块连接,用于缓存最新的关键帧。

数据分离模块实时接收RTMP直播流,分离FLV header,scrip tag数据,H.264PPS和SPS,音频信息,audio tag,video tag;

消息缓存模块用于存储FLV header,scrip tag,音频信息,SPS和PPS数据,GOP缓存;

编码器模块对音视频数据按时HTTP FLV格式进行重新封装;

HTTP服务模块处理播放端6的HTTP协议消息,并向播放端6发送FLV直播流数据。

所述数据分离模块的工作流程如下:

1、从接收到的数据流中查找FLV header,将查找到的FLV header数据并存入消息缓存。如果这一步骤已经处理,则不再进行这一步操作。

2、从接收到的数据流中查找script tag,将查找到的script tag数据并存入消息缓存。如果这一步已经处理,则不再进行这一步操作。

3、从接收到的数据流中查找第一个video tag,分离出PPS和SPS数据并存入消息缓存。如果消息缓存已经有了PPS和SPS数据则更新PPS和SPS数据。

4、从接收到的数据流中查找第一个audio tag,分离出音频数据并发送给编码模块。

5、从接收到的数据流中查找第二个video tag,分离出视频数据并发送给编码模块。如果video tag中包含的视频帧类型为IDR(关键帧)帧,删除消息队列模块GOP缓存中的数据,同时存入当前video tag至消息队列模块GOP缓存。

6、依次循环处理步骤2-5。

GOP缓存用于缓存最新的IDR(关键帧)帧,以便实现画面秒开方法。所谓画面秒开方法是指:用户端播放器打开时,1秒以内就有视频画面出来,这是为了:

1)提升用户体验。

2)解决播放器假死现象。用户以为播放器已经卡死了,会不断重新请求视频播放,加大了服务器并发压力。

编码器模块,进一步包括以下模块:

1、FLV header生成模块:从消息缓存中取出FLV header数据;

2、script tag模块:从消息缓存中取出scrip tag数据;

3、video(SPS PPS)tag模块:从消息缓存中取出SPS和PPS数据并生成video(只只包含H.264SPS和PPS)tag。为了播放器能快速准确的对视频数据解码,因此我们提出第一个video tag总是发送SPS和PPS数据。

4、audio tag模块:生成audio tag。

5、video tag模块:生成video tag。

6、合成模块:一个HTTP FLV直播流发送tag的顺序始终按照以下顺序发送:

总是先发送

FLV header+[script tag]+[第一个video tag(只包含H.264的SPS和PPS)]+[第一个audio tag(音频header)]+[第二个video tag] 【1】;

然后再是[audio tag和video tag] 【2】交互发送。

所以合成模块先快速合成【1】,以便快速的将FLV直播流发给客户端。

在网络直播过程中,动态修改视频编码级别、参数、画面大小是一种常态。视频编码级别、参数、画面大小等参数是通过SPS和PPS的值来反应的。当客户端播放器还按照没有改变的SPS和PPS解码,势必会影响解码效率及准确性,直接影响就是画面会发生抖动和马赛克。因此本发明还提出一种解决画面抖动的方法。在每一个IDR(关键帧)帧发送之前动态插入video tag(只包含H.264的SPS和PPS),这样客户端播放器就能动态更新SPS和PPS。

HTTP服务模块,具体包括以下模块:

处理播放器端的HTTP Get请求;

解析HTTP协议,获取直播流名称;

从编码器获取FLV直播流并返回给播放端;

客户端事件监听模块,用于监听客户端断开链接状态;

如图2,一种RTMP直播流到HTTP FLV直播流的实时转换方法,具体包括以下步骤:

步骤101、数据分离模块从RTMP直播流提取scrip tag,FLV header,H.264PPS和SPS,音频信息,video tag,audio tag,将scrip tag,FLV header,H.264PPS和SPS,音频信息存至消息缓存中。判断video tag中视频帧的类型,如果为IDR帧则将audio tag,video tag存入GOP缓存中。

步骤102、如果是新的请求,则调用所述FLV header生成模块、script tag模块、video(SPS PPS)tag模块、audio tag模块、video tag模块、合成模块并启用画面秒开方法,从GOP缓存中取出video tag和audio tag,按以下格式生成HTTP FLV直播流:

FLV header+[script tag]+[第一个video tag(只包含H.264的SPS和PPS)]+[第一个audio tag(音频header)]+[第二个video tag]+[audio tag]和[video tag]交互发送。

将GOP缓存中的video tag放至[第二个video tag],音频放至[audio tag]。其它情况直接发送audio tag或video tag至HTTP服务模块。

若video tag中视频类型为IDR帧,启用所述防止画面抖动方法,调用所述video(SPS PPS)tag模块动态在IDR帧插入一个video tag(只包含SPS和PPS信息的video tag)并发送给HTTP服务模块。其它情况则直接发送audio tag或video tag至HTTP服务模块。

在所述步骤102之前,所述步骤101之后,开启HTTP服务,处理播放器发送的HTTP Get,解析HTTP协议,根据URI获取直播名称

步骤103、向编码模块获取FLV数据,向播放器返回Response消息。如果从编码器获取数据成功,返回HTTP 206协议,否则返回HTTP 400错误,并结束本次请求。如果从编码器获取数据成功,发送FLV直播流数据给视频播放器。

java做flv直播服务器_一种RTMP直播流到HTTPFLV直播流实时转换系统及其工作方法与流程...相关推荐

  1. java做flv直播服务器,EasyDSS流媒体服务器软件(支持RTMP/HLS/HTTP-FLV/视频点播/视频直播)-正式环境安装部署攻略...

    EasyDSS流媒体服务器软件,提供一站式的转码.点播.直播.时移回放服务,极大地简化了开发和集成的工作. 其中,点播功能主要包含:上传.转码.分发.直播功能,主要包含:直播.录像, 直播支持RTMP ...

  2. java做的桌面应用_把一个java web应用包装成桌面应用的简单做法

    昨天玩h2的时候想起来的, 这年头把在线应用报装成桌面应用是越来越流行了,几年前做过类似的事情,简单介绍一下. 1. 选择一个嵌入的web 服务器和 数据库. web服务器我选择的是jetty,虽然t ...

  3. 用JAVA做一个物理动画_运用Java3D实现三维实时物理模拟动画

    实时模拟指的是一边计算物体的状态,一边呈现该物体过程.对物理现象与自然过程等的实时模拟在数值上更为精确真实且交互性与灵活性及表现力更强.对此种类型的模拟无法用事先编制好顺序的动画来呈现模拟对象,而必须 ...

  4. java 发送短信 多通道_一种Java卡多通道临时对象管理方法与流程

    本发明涉及Java智能卡领域,具体涉及一种Java卡多通道临时对象管理方法. 背景技术: :JavaCard规范支持逻辑通道的概念,允许最多智能卡中的16个应用程序会话同时开启,每个逻辑通道一个会话. ...

  5. [SRS+docker]实现直播服务器 3 基于webRTC协议的srs低延迟直播研究

    目录 前言 低延迟研究 设备兼容性 webRtc调试 播放器 体系结构 结论 问题 rtc_player.html点击播放报错 局域网RTC黑屏 附件 前言 上一篇我们通过单机版的srs服务器,验证了 ...

  6. 分布式mysql保持数据一致性_一种分布式跨数据库保持事务一致性的方法及系统与流程...

    本发明涉及计算机网络技术领域,尤其涉及一种分布式跨数据库保持事务一致性的方法及系统. 背景技术: 目前,分布式服务架构十分的流行,特别是对于电商领域来说.他的优点就不多说了,但是随着集群机器的增加,集 ...

  7. dicom 脱敏_一种对医疗影像数据进行脱敏处理的方法及系统与流程

    本发明涉及医疗人工智能与大数据处理领域,特别涉及一种对医疗影像数据进行脱敏处理的方法及系统. 背景技术: 随着以深度学习框架为内核的新人工智能技术强势崛起,在各个领域都获得了长足的发展与推进,Alph ...

  8. 肺结节目标检测_一种基于CT图像的肺结节检测方法及系统与流程

    本发明属于医学图像分析和计算机辅助诊断等技术领域,更具体地,涉及一种基于CT图像的肺结节检测方法及系统. 背景技术: 肺癌是导致患癌死亡的最危险的疾病之一,其发病率占所有癌症的三分之二,且5年存活率为 ...

  9. h5页面怎么处理文件流_一种H5页面效果生成视频文件的方法及系统与流程

    本发明涉及计算机技术领域,尤其涉及一种H5页面效果生成视频文件的方法及系统. 背景技术: 现有的视频合成方法均是将视频需要合成的各个元素拆分出来,针对每个元素进行合成视频,复杂度高,一旦需要添加新的动 ...

最新文章

  1. 只服这篇“神文”:基于老子哲学、相对论的超级人工智能模型
  2. golang image.image 转文件流_Kuiper 1.0.2 正式发布 超轻量 IoT 边缘流处理
  3. 以后再别这样做,否则你的苹果华为将挂在墙上
  4. linux 常见路径,linux中目录与路径常见相关命令
  5. 计算机视觉基础:图像处理Task 02 几何变换
  6. 无法从Windows上的资产index.android.bundle加载脚本
  7. jQuery文档处理
  8. SparkSession与SparkContext SparkConf SQLContext HiveContext StreamingContext
  9. 亲,愚人节要来了!记得带着智商出门哦
  10. Python解析CDD文件
  11. win10 安装硕正
  12. 【产品设计】塑胶模具设计:合模线/分模线(PL - Parting line)详解
  13. Ceph-ansible 安装 ceph (rbd + rgw)
  14. html 可脱机浏览,如何脱机浏览Web页面
  15. 直连模式,PAC模式,全局模式的区别
  16. 在阿里“救了八年火”的程序猿,这样讲述淘宝的技术进化史
  17. 12月17日第壹简报,星期六,农历十一月廿四
  18. pip 安装scipy的一种方法
  19. 看这里,你要的快速、批量PDF加水印工具!
  20. PDFBox学习总结

热门文章

  1. etf基金代码大全_纳斯达克指数ETF基金汇总
  2. ctfshow,misc4,5,6,
  3. 解决React-Native reload hot reloading 后代码不更新问题
  4. HJ77 火车进站 —— 华为机试练习题
  5. 【Java Web】在html界面中提交表单,由jsp进行接收并展示[jsp的接收使用的是jsp内置对象] 【上课记录】
  6. ActiveSync 3.7
  7. win服务器网络优化,还能再快一点,Win7网络优化参数详解
  8. springboot访问图片本地路径并映射成url
  9. 百度推出区块链宠物“莱茨狗”
  10. 【KKT】∇f(x)+λ∇g(x)=0中λ的讨论