一种RTMP协议到HLS协议的实时转换系统及其工作方法与流程

文档序号:15152637发布日期:2018-08-10 21:19阅读:485来源:国知局
本发明属于互联网的音视频
技术领域
,具体涉及一种rtmp协议到hls协议的实时转换系统及其工作方法。
背景技术
:rtmp协议是realtimemessageprotocol(实时信息传输协议)的缩写,它是由adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(multiplexing)和分包(packetizing)的问题,在flash播放器和流媒体服务器之间进行音频、视频和数据传输的开放协议。rtmp的优点有:实时性高,支持加密,稳定性高,编码器接入,系统容错能力。但是rtmp的致命缺点在于协议复杂,带宽浪费较大,且不支持移动互联网视频直播。随着移动互联网视频直播应用的崛起,各种移动终端系统都支持了hls协议(httplivestreaming,超文本直播流),将rtmp协议转为hls协议成为移动互联网提供直播流的一种抉择。但是重新组建一套满足hls协议的系统,将耗费大量的人力,设备,费用高,时间长,不利于内容服务商。综上可知,现有技术在移动互联网直播实际应用上显然存在不便与缺陷,所以有必要加以改进。技术实现要素:本发明的目的在于:解决上述现有技术中的不足,基于现有rtmp协议服务技术方案上,无缝扩展hls协议直播、直播时移、直播回看技术,大大节省了设备投入和技术改造的成本。为了实现上述目的,本发明采用的技术方案为:一种rtmp协议到hls协议的实时转换系统,其特征在于包括:internet网络;分别与所述internet网络连接的rtmp服务器和直播前端;与所述直播前端连接的若干个摄像机;与所述rtmp服务器连接的hls服务器;通过cdn网络与所述hls服务器连接的播放端。所述的直播前端包括直播编码器和与直播编码器连接的若干台摄像机。所述的播放端包括pc播放器、ios播放器、android播放器和h5播放器。所述的实时转换系统还包括存储服务器和切片索引服务器,所述存储服务器和切片索引服务器均与hls服务器连接。所述的hls服务器包括:与所述rtmp服务器通过rtmp协议网络连接的直播流接收模块;与所述直播流接收模块连接的音视频解复用模块;与所述音视频解复用模块连接的时间戳转换模块;与所述时间戳转换模块连接的切片模块;与所述切片模块连接的存储服务器,所述存储服务器用于切片文件的命名;与所述存储服务器连接的m3u8文件模块;与所述m3u8文件模块连接的切片索引服务器;与所述切片索引服务器连接的m3u8点播文件生成模块,所述m3u8点播文件生成模块通过cdn网络与播放端连接。一种rtmp协议到hls协议的实时转换方法,其特征在于它包括以下步骤:步骤1:对实时接收的rtmp直播流进行解复用,得到音视频数据;步骤2:对音视频数据按hls协议的时间戳重新打包与封装,得到满足hls协议的切片;步骤3:为每个满足hls协议的切片建立切片存储映射关系表;步骤4:根据切片存储映射关系表生成点播m3u8列表。进一步的,上述的步骤2具体为:步骤101:将满足tidr(n)+tidr(n-1)+…+tidr(0)<=d的音视频数据作为同一个切片内的数据,得到若干个切片,其中tidr(n)代表第n个关键帧时长,d为一个切片的时间长度,单位为秒;步骤102:对时间戳进行转换并按hls协议对音视频数据重新封装和打包,得到满足hls协议的切片;步骤103:计算每个满足hls协议的切片的时长d1,计算公式为:d1=tidr(n)-tidr(0)。进一步的,步骤102中对时间戳进行转换包括对rtmp协议中的时间戳进行转换和对非线性增加的时间戳进行矫正,转换为满足hls协议的时间戳,具体包括以下步骤:步骤201:查找视频数据关键帧的时间戳(timestamp)和相对时间戳(compositontime);步骤202:将视频关键帧的时间戳和相对时间戳转换为按时钟90khz进行视频同步的时间戳,计算公式为:t’=timestamp*90;其中timestamp为rtmp协议中的解码时间戳,t’为转换后的解码时间戳,90为ts(timestreaming)系统时钟90khz,若tidr’(n+1)<=tidr’(n),表示rtmp协议中的关键帧时间戳非线性增加,需要矫正;其中tidr’(n)代表第n个关键帧的解码时间戳timestamp;此时转换后的解码时间戳t’=(timestamp+25*n)*90,其中,25代表通用视频帧率,n代表第n个关键帧。步骤203:依次计算各切片所需的解码时间戳dts=t’,参考时间戳cts=cs*90,其中cs为rtmp协议中的compositontime(相对时间戳,在h264视频编码标准协议中,如果编码级别为baseline,值始终为0)。步骤204:根据解码时间戳dts和相对时间戳cts计算显示时间戳pts,计算公式为:pts=dts+cts;进一步的,步骤2中得到满足hls协议的切片后,针对各满足hls协议的切片还包括以下步骤:命名文件:根据各切片的系统生成时间和直播频道命名各切片,得到与切片生成时间建立唯一映射关系的切片文件名;更新m3u8列表:每生成一个新的切片后,将失效的切片从m3u8列表中移除并将新的切片更新至m3u8列表;建立时间索引文件表:每生成一个新的切片后,记录该切片的系统生成时间,结束时间,时长和存储路径;进一步的,上述的命名文件具体包括以下步骤:每个切片生成时,记录该切片的系统生成时间t1,根据系统生成时间t1命名该切片,记第n个生成的切片的文件名fn(n)=t1+“.ts”,其中,“.ts”为切片的文件名后缀。进一步的,建立时间索引文件表,具体为:步骤301:根据切片的直播频道、年、月、日和小时建立多级目录;步骤302:所述切片的一级目录以相应的直播频道命名,二级目录以相应的年命名,三级目录以相应的月命名,四级目录以相应的日命名,五级目录以相应的小时命名步骤303:将对应直播频道和时间的切片存储于对应的小时目录下。进一步的,上述的时间索引文件表不与数据库进行交互,仅在本地生成一个文件,文件中每行按以下格式生成一个时间戳切片信息:starttime=(起始时间戳),endtime=(结束时间戳),d1=(时间长度),path=(存储路径)。进一步的,记录切片的系统生成时间t1时,将第n个生成的切片的系统生成时间t1转换为唯一对应的格林威治生成时间ft(n),记第n个生成的切片的文件名fn(n)=ft(n)+“.ts”。进一步的,步骤301中根据直播频道、年、月、日和小时建立多级目录之前还包括从格林威治时间戳中获取该切片的年、月、日、小时。进一步的,步骤4所述的生成点播m3u8列表具体包括以下步骤:步骤401:将起始时间戳转换为相应的起始格林威治时间戳;步骤402:根据起始时间戳和时间长度计算结束时间戳,然后将结束时间戳转换为结束格林威治时间戳;步骤403:在时间索引文件表中查找起始时间大于或等于起始格林威治时间戳和结束时间小于或等于结束格林威治时间戳的所有切片文件;步骤404:将查找到的所有切片文件加入到m3u8列表中。由于采用了上述技术方案,本发明的有益效果是:本发明的技术方案能够低成本充分利用现有技术,高性能地实现无缝转换成符合hls协议要求的直播流,既能极大地节省设备投入和技术改造,也能够快速实现hls的各项应用要求。本发明的直播时移更加快速、简便。相比传统直播时移,通常只能直播两上小时的节目,通过本发明的技术方案,直播时移时间上面没有任何限制。本发明的直播回看业务更加快速、简便。传统直播回看,大大的提高了系统的业务逻辑复杂度及出错概率。本发明采用格林威治时间统一命令的方式在于方便各个时区转换,唯一的且和生成时间映射的文件命名,方便快速根据时间查找到符合要求的对应的文件数据,减少直播实时收录及后期人工编辑等工作,提高工作效率。。本发明对rtmp时间戳进行矫正;由于直播特点,数据流内音视频时钟会定时重置,对协议转换带来不便;rtmp协议与hls协议采用的音视频同步方式完全不一样,因此在音视频时间戳计算方式上面也有很大的区别。为了解决音视频同步,重新计算时间戳。本发明采用直播频道、年、月、日、小时建立目录,能够方便、快捷的根据时间查找到符合要求的切片文件。本发明时间索引文件表不需要与数据库进行交互,只需要在频道目录下生成一个文件,既达到对直播频道的实时收录功能,也可根据生成时间点方便快速查找对应数据,以此为基础提供直播时移和回看服务。文件名映射规则确定及切片时间索引文件表,是本申请直播转时移、回看的核心基础。本发明针对严格遵循rtmp编码标准直播流或非标准rtmp直播流,均能顺利切片,并满足hls协议要求。附图说明图1为本发明的实时转换系统结构示意图。图2为本发明的hls服务器模块示意图。图3为发明的实时转换方法流程图。图4为本发明的实时转换方法优选流程图。具体实施方式参照附图1-4,对本发明的实施方式做具体的说明。如图1-2,一种rtmp协议到hls协议的实时转换系统,其特征在于包括:internet网络;分别与所述internet网络连接的rtmp服务器和直播前端;与所述直播前端连接的若干个摄像机;与所述rtmp服务器连接的hls服务器;通过cdn网络与所述hls服务器连接的播放端。所述的直播前端包括直播编码器和与直播编码器连接的若干台摄像机。所述的播放端包括pc播放器、ios播放器、android播放器和h5播放器。所述的实时转换系统还包括存储服务器和切片索引服务器,所述存储服务器和切片索引服务器均与hls服务器连接。所述的hls服务器包括:与所述rtmp服务器通过rtmp协议网络连接的直播流接收模块;与所述直播流接收模块连接的音视频解复用模块;与所述音视频解复用模块连接的时间戳转换模块;与所述时间戳转换模块连接的切片模块;与所述切片模块连接的存储服务器,所述存储服务器用于切片文件的命名;与所述存储服务器连接的m3u8文件模块;与所述m3u8文件模块连接的切片索引服务器;与所述切片索引服务器连接的m3u8点播文件生成模块,所述m3u8点播文件生成模块通过cdn网络与播放端连接。图3是本申请rtmp协议到hls协议的实时转换方法的流程图,包括:步骤s101,音视频解复用步骤,实时接收至少一个rtmp直播流,并从rtmp直播流分离出视频数据,所述rtmp流为基于rtmp协议的直播流数据。步骤s102,对分离出来的音视频数据进行时间戳矫正,并转换为满足hls协议的时间戳,包括以下步骤:步骤201:查找视频数据关键帧的时间戳(timestamp)和相对时间戳(compositontime);步骤202:将视频关键帧的时间戳和相对时间戳转换为按时钟90khz进行视频同步的时间戳,计算公式为:t’=timestamp*90;其中timestamp为rtmp协议中的解码时间戳,t’为转换后的解码时间戳,90为ts(timestreaming)系统时钟90khz,若tidr’(n+1)<=tidr’(n),表示rtmp协议中的关键帧时间戳非线性增加,需要矫正;其中tidr’(n)代表第n个关键帧的解码时间戳timestamp;此时转换后的解码时间戳t’=(timestamp+25*n)*90,其中,25代表通用视频帧率,n代表第n个关键帧。步骤203:依次计算各切片所需的解码时间戳dts=t’,参考时间戳cts=cs*90,其中cs为rtmp协议中的compositontime(相对时间戳,在h264视频编码标准协议中,如果编码级别为baseline,值始终为0)。步骤204:根据解码时间戳dts和相对时间戳cts计算显示时间戳pts,计算公式为:pts=dts+cts;步骤s103,对分离出来的音视频数据重新按照ts文件封装格式进行打包。步骤s104,为每一个生成的ts切片建立时间索引文件。图4是本申请优选rtmp协议到hls协议的实时转换方法的流程图,rtmp协议和hls协议分别是针对不同应用领域的传输方案,技术实现差别大;由于直播特点,数据流内音视频时钟会定时重置,对协议转换带来不便;rtmp协议与hls协议采用的音视频同步方式完全不一样,因此在音视频时间戳计算方式上面也有很大的区别。为了解决音视频同步,重新计算时间戳,所述方法包括:步骤s201,音视频解复用步骤,实时接收至少一个rtmp直播流,并从rtmp直播流分离出音视频数据;步骤s202,时间戳同步和矫正;步骤s203,按照ts文件封装规范,重新打包音视频数据,生成满足hls直播流的切片。步骤s204,文件命名步骤,根据各切片的生成时间命名各切片的文件名,该文件名与生成时间建立唯一时间映射关系。优选的是,采用格林威治时间统一命令的方式在于方便各个时区转换,唯一的且和生成时间映射的文件命名,方便快速根据时间查找到符合要求的对应的文件数据。所述文件命名步骤进一步包括:在每个切片生成时,记录切片的系统生成时间并转换成唯一对应的格林威治生成时间,切片文件名时间映射规则如下:符号表示内容n自然数d切片时长ft(n)第n个切片时间fn(n)第n个切片文件名第n个切片的格林威治生成时间ft(n),则第n个切片的文件名为fn(n)=ft(n)+“.ts”。如北京时间2018-3-518:29:30对应的格林威治生成时间为1520245690,则生成的ts切片文件名为1520245690.ts步骤s205,按直播频道、年、月、日、小时建立目录,用于存储ts切片,既某一直播频道所属某一小时的切片放在对应的小时目录下。优先的是,采用直播频道、年、月、日、小时建立目录,能够方便、快捷的根据时间查找到符合要求的切片文件。在本申请的具体实施例中,切片存储目录生成规则如下:存储目录根据频道名、年、月、日、小时,分别建立多级目录进行存储。一级目录以频道名命名:中央一台频道一级目录命名为:“cctv1”。该目录收录中台一台频道所有切片文件。二级目录以年命名,如“2018”。三级目录以月命名,如“02”。四级目录以日命名,如“01”。五级目录以小时命名,如“19”。如2018年3月5日19时00分00秒,则生成的目录为2019/03/05/19,该目录下面保存了2018年3月5日19时00分00秒至2018年3月5日19时59分59秒时间段的所有切片。时间转换目录计算方法如下:第一步:将日期转换为格林威治时间戳。第二步:从时间戳从中分别获取年、月、日、小时。2018年3月5日19时00分00秒的时间戳为1520247600,从1520247600时间戳中解析也年、月、日、小时分别为”2018”、“03“、”05“、”00“。步骤s206,每生成一个新的切片后,更新m3u8文件,将过期的切片文件从m3u8列表中移出。步骤s207,为各个切片生成时间索引文件表,记录各个切片文件生成的系统时间、结束时的系统时间,时长,存储路径。切片时间索引文件表:字段表示内容starttime切片起始时间戳endtime切片结束时间戳d切片的时间长度path切片的存储路径ts切片时间索引文件表不需要与数据库进行交互,只需要在频道目录下生成一个文件,按照以下格式生成即可,一行生成一个ts切片信息:starttime=1520247600,endtime=1520247610,d=10,path=cctv1/2019/03/05/19/1520247600.ts。这样既达到对直播频道的实时收录功能,也可根据生成时间点方便快速查找对应数据,以此为基础提供直播时移和回看服务。文件名映射规则确定及切片时间索引文件表,是本申请直播转时移、回看的核心基础。优选的,所述生成时间索引文件表步骤之后包括:点播m3u8列表生成步骤,根据回看或时移节目的起始时间及节目时长,生成对应的m3u8列表并提供http服务。例如根据以上规则,直播时移、回看功能如下实现:根据提交节目起始时间及节目时长,生成对应的m3u8播放列表并提供服务。如提交cctv12018-3-519:00:00“新闻联播”时长30分钟的节目,系统根据该信息提供m3u8列表。第一步:将节目的起始时间进行格林威治时间转换。2018-3-519:00:00转换后的时间为1520247600;第二步:根据节目的起始时间和节目时长,计算出节目结束时间并将结束时间转的格林威治时间。2018-3-519:30:00转换后的线束时间为1520249400。若为直播时移,则结束时间为当前系统时间。第三步:在时间索引文件表查找切片文件起始时间>=1520247600结束时间<=1520249400的所有切片。若为直播时移,结束时间则为当前系统时间。第四步:将查找出来的切片加入到m3u8列表中。#extm3u#ext-x-targetduration:10#ext-x-media-sequence:141740640#ext-x-version:3#extinf:10,cctv1/2018/03/05/19/1520247600.ts#extinf:10,cctv1/2018/03/05/19/1520247610.ts……#extinf:10,cctv1/2018/03/05/19/1520249400.ts#ext-x-endlist以上步骤作为本申请切片的核心算法,确保输入流无论是严格遵循rtmp编码标准直播流还是非标准rtmp直播流,均能顺利切片,并满足hls协议要求。本申请优选实施方式中将从时间戳矫正、时间戳转换、切片目录建立方法、切片时间索引文件建立四方面进行。通过索引的建立,完成hls协议转换和直播时移与回看功能。本申请能够低成本充分利用现有技术,高性能地实现无缝转换成符合hls协议要求的直播流,既能极大地节省设备投入和技术改造,也能够快速实现hls的各项应用要求。同时将直播音视频数据进行切片同时完成视频收录功能,建立时间索引文件,快速、方便实现提供直播回看数据,减少直播实时收录及后期人工编辑等工作,提高工作效率。本申请主要分为三个方面:实时接收rtmp直播流,进行音视频数据解复用、分析、时间戳矫正、时间戳转换并进行ts封装,按要求进行切片和m3u8列表生成,输出符合hls协议的直播流;对输出切片文件以频道名及年、月、日、小时为单位进行实时存储,实现直播收录;对输出切片建立时间索引文件表,实现直播时移和回看功能。综上所述,本申请能够基于现有rtmp协议服务技术方案上,无缝扩展hls协议直播、直播时移、直播回看技术,大大节省了设备投入和技术改造的成本。而且,本申请还可将直播切片后的数据进行收录,建立切片时间索引文件表,从而可快速、方便地实现提供直播时移、直播回看业务,减少直播实时收录及后期人工编辑等工作,提高了工作效率。当然,本申请还可有其它多种实施例,在不背离本申请精神及其实质的情况下,熟悉本领域的技术人员当可根据本申请作出各种相应的改变和变形,但这些相应的改变和变形都应属于本申请所附的权利要求的保护范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1