CN109309670A - 数据流解码方法和系统、电子装置及计算机可读存储介质 - Google Patents

数据流解码方法和系统、电子装置及计算机可读存储介质 Download PDF

Info

Publication number
CN109309670A
CN109309670A CN201811045963.8A CN201811045963A CN109309670A CN 109309670 A CN109309670 A CN 109309670A CN 201811045963 A CN201811045963 A CN 201811045963A CN 109309670 A CN109309670 A CN 109309670A
Authority
CN
China
Prior art keywords
data block
expansion time
chunk
numerical value
type
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201811045963.8A
Other languages
English (en)
Other versions
CN109309670B (zh
Inventor
曾伟纪
曲鑫
李�浩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Onething Technology Co Ltd
Original Assignee
Shenzhen Onething Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shenzhen Onething Technology Co Ltd filed Critical Shenzhen Onething Technology Co Ltd
Priority to CN201811045963.8A priority Critical patent/CN109309670B/zh
Publication of CN109309670A publication Critical patent/CN109309670A/zh
Application granted granted Critical
Publication of CN109309670B publication Critical patent/CN109309670B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/65Network streaming protocols, e.g. real-time transport protocol [RTP] or real-time control protocol [RTCP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/75Media network packet handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

本发明公开了一种数据流解码方法,该方法包括:接收RTMP数据流;判断待解码的当前数据块是否为type 3 chunk;若为非type 3 chunk,判断其是否存在扩展时间戳,若存在,记录该扩展时间戳数值;若当前数据块为type 3 chunk,判断其前序非type 3 chunk是否存在扩展时间戳,若存在,获取该type 3 chunk的预设字节,解析其数值,并与所记录的扩展时间戳进行比对;若两者数值相等,确定该数据流遵循1.0版本的RTMP协议;否则确定该数据流遵循草案版本的RTMP协议。本发明还提供一种数据流解码系统、电子装置及计算机可读存储介质。本发明能够大概率正确识别并兼容两种RTMP协议版本的数据流。

Description

数据流解码方法和系统、电子装置及计算机可读存储介质
技术领域
本发明涉及流媒体传输技术领域,尤其涉及一种数据流解码方法和系统、电子装置及计算机可读存储介质。
背景技术
实时消息传输协议(Real Time Messaging Protocol,RTMP)是行业内广泛采用的一种流媒体传输协议,特别在互联网直播领域几乎是源端推流的唯一标准。但RTMP协议文档自身存在两个版本:2009年中发布的草案(draft)以及2012年底发布的1.0版本。两个版本中关于第3类型数据块(type 3 chunk)的格式定义存在冲突(主要是是否可以包含一个扩展时间戳),遵循其中一个版本文档构造的数据流,在遵循另一个版本实现的软件中可能会解析失败。从2009年草案发布到2012年1.0版本发布,其间有许多按照草案实现的软件版本,其中相当一部分被沿用至今,导致了大量兼容性错误。
发明内容
有鉴于此,本发明提出一种数据流解码方法和系统、电子装置及计算机可读存储介质,以解决按照两个版本的RTMP协议文档实现的数据流和软件之间的兼容性问题。
首先,为实现上述目的,本发明提出一种数据流解码方法,所述方法包括:
接收需要解码的RTMP数据流;
判断待解码的当前数据块是否为type 3 chunk;
当当前数据块为非type 3 chunk时,进一步判断所述非type 3 chunk是否存在扩展时间戳;
当所述非type 3 chunk存在扩展时间戳时,记录所述非type 3 chunk的扩展时间戳数值;
当当前数据块为type 3 chunk时,进一步判断是否存在已记录的所述type 3chunk的前序非type 3 chunk的扩展时间戳;
当存在已记录的所述type 3 chunk的前序非type 3 chunk的扩展时间戳时,获取所述type 3 chunk的预设字节,按照扩展时间戳的格式解析所述预设字节的数值,并与所记录的前序非type 3 chunk的扩展时间戳进行比对;
当所获取的预设字节的数值与所记录的前序非type 3 chunk的扩展时间戳数值相等时,确定所述数据流遵循1.0版本的RTMP协议;及
当所获取的预设字节的数值与所记录的前序非type 3 chunk的扩展时间戳数值不相等时,确定所述数据流遵循草案版本的RTMP协议。
可选地,所述方法还包括:
当所述数据流遵循1.0版本的RTMP协议时,采用1.0版本的RTMP协议规范解码所述数据流;
当所述数据流遵循草案版本的RTMP协议时,采用草案版本的RTMP协议规范解码所述数据流。
可选地,每次判断出存在扩展时间戳的非type 3 chunk时,用所述非type 3chunk的扩展时间戳数值替换之前记录的数值。
可选地,所述预设字节为所述type 3 chunk的数据块头部之后的4个字节。
此外,为实现上述目的,本发明还提供一种电子装置,包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的数据流解码程序,所述数据流解码程序被所述处理器执行时实现如下方法:
接收需要解码的RTMP数据流;
判断待解码的当前数据块是否为type 3 chunk;
当当前数据块为非type 3 chunk时,进一步判断所述非type 3 chunk是否存在扩展时间戳;
当所述非type 3 chunk存在扩展时间戳时,记录所述非type 3 chunk的扩展时间戳数值;
当当前数据块为type 3 chunk时,进一步判断是否存在已记录的所述type 3chunk的前序非type 3 chunk的扩展时间戳;
当存在已记录的所述type 3 chunk的前序非type 3 chunk的扩展时间戳时,获取所述type 3 chunk的预设字节,按照扩展时间戳的格式解析所述预设字节的数值,并与所记录的前序非type 3 chunk的扩展时间戳进行比对;
当所获取的预设字节的数值与所记录的前序非type 3 chunk的扩展时间戳数值相等时,确定所述数据流遵循1.0版本的RTMP协议;及
当所获取的预设字节的数值与所记录的前序非type 3 chunk的扩展时间戳数值不相等时,确定所述数据流遵循草案版本的RTMP协议。
可选地,所述数据流解码程序被所述处理器执行时还实现:
当所述数据流遵循1.0版本的RTMP协议时,采用1.0版本的RTMP协议规范解码所述数据流;
当所述数据流遵循草案版本的RTMP协议时,采用草案版本的RTMP协议规范解码所述数据流。
可选地,每次判断出存在扩展时间戳的非type 3 chunk时,用所述非type3 chunk的扩展时间戳数值替换之前记录的数值。
可选地,所述预设字节为所述type 3 chunk的数据块头部之后的4个字节。
进一步地,为实现上述目的,本发明还提供一种数据流解码系统,所述系统包括:
接收模块,用于接收需要解码的数据流;
第一判断模块,用于判断所述数据流中当前数据块是否为type 3 chunk;当当前数据块为非type 3 chunk时,进一步判断所述非type 3 chunk是否存在扩展时间戳;
记录模块,用于当所述非type 3 chunk存在扩展时间戳时,记录所述非type3chunk的扩展时间戳数值;
第二判断模块,用于当当前数据块为type 3 chunk时,进一步判断是否存在已记录的所述type 3 chunk的前序非type 3 chunk的扩展时间戳;
比对模块,用于当存在已记录的所述type 3 chunk的前序非type 3 chunk的扩展时间戳时,获取所述type 3 chunk的预设字节,按照扩展时间戳的格式解析所述预设字节的数值,并与所记录的前序非type 3 chunk的扩展时间戳进行比对;及
确定模块,用于当所获取的预设字节的数值与所记录的前序非type 3 chunk的扩展时间戳数值相等时,确定所述数据流遵循1.0版本的RTMP协议;当所获取的预设字节的数值与所记录的前序非type 3 chunk的扩展时间戳数值不相等时,确定所述数据流遵循草案版本的RTMP协议。
可选地,所述系统还包括:
解码模块,用于当所述数据流遵循1.0版本的RTMP协议时,采用1.0版本的RTMP协议规范解码所述数据流;当所述数据流遵循草案版本的RTMP协议时,采用草案版本的RTMP协议规范解码所述数据流。
进一步地,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有数据流解码程序,所述数据流解码程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的数据流解码方法。
相较于现有技术,本发明所提出的数据流解码方法和系统、电子装置及计算机可读存储介质,可以根据两个版本的RTMP协议文档中关于type 3 chunk的扩展时间戳的不同规定,利用type 3 chunk的前序非type 3的chunk的时间戳,在解析type 3 chunk时判断是否有扩展时间戳,从而区分出该数据流遵循哪一个版本的RTMP协议,达到大概率正确识别并兼容两种版本数据流的效果,避免按一种规范来解码导致出现错误,提高解码的准确率。
附图说明
图1是本发明第一实施例提出的一种电子装置的架构示意图;
图2是本发明第二实施例提出的一种数据流解码方法的流程示意图;
图3是本发明第三实施例提出的一种数据流解码方法的流程示意图;
图4是本发明第四实施例提出的一种数据流解码系统的模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
第一实施例
参阅图1所示,本发明第一实施例提出一种实现数据流解码方法的电子装置1。
电子装置1可以是服务器、智能手机、平板电脑、个人电脑、便携计算机以及其它具有运算功能的电子设备。
举例来说,在本实施例中,上述电子装置1可以为流媒体服务器。
上述电子装置1包括:存储器11、处理器13、网络接口15及通信总线17。其中,网络接口15可选地可以包括标准的有线接口、无线接口(如WI-FI接口)。通信总线17用于实现这些组件之间的连接通信。
存储器11至少包括一种类型的可读存储介质。上述至少一种类型的可读存储介质可为如闪存、硬盘、多媒体卡、卡型存储器等的非易失性存储介质。在一些实施例中,上述存储器11可以是电子装置1的内部存储单元,例如该电子装置1的硬盘。在另一些实施例中,上述存储器11也可以是电子装置1的外部存储单元,例如电子装置1上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(FlashCard)等。
上述存储器11可以用于存储安装于电子装置1的应用软件及各类数据,例如数据流解码程序10的程序代码及其运行过程中产生的相关数据。
处理器13在一些实施例中可以是一中央处理器,微处理器或其它数据处理芯片,用于运行存储器11中存储的程序代码或处理数据。
图1仅示出了具有组件11-17以及数据流解码程序10的电子装置1,但是应理解的是,图1并未示出电子装置1的所有组件,可以替代实施更多或者更少的组件。
在图1所示的电子装置1实施例中,作为一种计算机存储介质的存储器11中存储数据流解码程序10的程序代码,处理器13执行上述数据流解码程序10的程序代码时,实现如下方法:
(1)接收需要解码的RTMP数据流。
(2)判断待解码的当前数据块(chunk)是否为type 3 chunk。
(3)当判断当前chunk为非type 3 chunk时,进一步判断该非type 3 chunk是否存在扩展时间戳。
(4)当该非type 3 chunk存在扩展时间戳时,记录该非type 3 chunk的扩展时间戳数值。
(5)当判断当前chunk为type 3 chunk时,进一步判断该type 3 chunk的前序非type 3 chunk是否存在扩展时间戳。
(6)当该type 3 chunk的前序非type 3 chunk存在扩展时间戳时,获取该type 3chunk的预设字节,按照扩展时间戳的格式解析出数值,并与所记录的前序非type 3 chunk的扩展时间戳进行比对。
(7)当所获取的预设字节的数值与所记录的前序非type 3 chunk的扩展时间戳数值相等时,确定该数据流遵循1.0版本的RTMP协议。
(8)当所获取的预设字节的数值与所记录的前序非type 3 chunk的扩展时间戳数值不相等时,确定该数据流遵循草案版本的RTMP协议。
优选的,该处理器13还可执行上述程序代码以实现如下方法:
(9)当该数据流遵循1.0版本的RTMP协议时,采用1.0版本的RTMP协议规范解码该数据流。
(10)当该数据流遵循草案版本的RTMP协议时,采用草案版本的RTMP协议规范解码该数据流。
上述方法的详细说明请参阅下述第二实施例至第三实施例,在此不再赘述。
第二实施例
参阅图2所示,本发明第二实施例提出一种数据流解码方法。在本实施例中,根据不同的需求,图2所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。该方法包括:
S10,接收需要解码的RTMP数据流。
该数据流中可以包括第3类型的数据块(type 3 chunk)和非type 3 chunk(例如type 0 chunk、type 1 chunk、type 2 chunk)。
S11,判断待解码的当前数据块(chunk)是否为type 3 chunk。当判断当前chunk为非type 3 chunk时,执行步骤S12。当判断当前chunk为type 3 chunk时,执行步骤S14。
根据RTMP协议,该数据流的每个chunk中包含有chunk type字段,通过该字段可以直接获取当前chunk的类型,判断是否为type 3 chunk。
在1.0版本的RTMP协议文档中规定,假如当前type 3 chunk的前序非type 3chunk有扩展时间戳,则当前type 3 chunk也应该有扩展时间戳,且其值与前序非type 3chunk的扩展时间戳是相同的。而在草案版本的RTMP协议文档中规定,type 3 chunk不能有扩展时间戳。根据以上两个版本协议中冲突的部分,可以在解析type 3 chunk时猜测是否有扩展时间戳,达到大概率正确识别并兼容两种版本数据流的效果。
S12,判断该非type 3 chunk是否存在扩展时间戳。若存在,则执行步骤S13。若不存在,则返回S11,判断下一个chunk。
S13,记录该非type 3 chunk的扩展时间戳数值。然后返回S11,判断下一个chunk。
当该非type 3 chunk存在扩展时间戳时,其对应的type 3 chunk也应该存在相同数值的扩展时间戳,因此,记录下该非type 3 chunk的扩展时间戳数值,可以用于后续通过数值对比判断对应的type 3 chunk是否存在扩展时间戳,从而进一步判断构建该数据流的RTMP协议版本。
在本实施例中,每次判断出存在扩展时间戳的非type 3 chunk时,用该非type 3chunk的扩展时间戳数值替换之前记录的数值,也就是说,仅需记录最新的一个非type 3chunk的扩展时间戳即可。
S14,判断该type 3 chunk的前序非type 3 chunk是否存在扩展时间戳。若存在,则执行步骤S15。若不存在,则返回S11,判断下一个chunk。
若当前chunk为type 3 chunk,进一步判断上述type 3 chunk的前序非type 3chunk(与该type 3 chunk的chunk stream ID相同)是否存在扩展时间戳。当该前序非type3 chunk存在扩展时间戳时,可以作为参照来判断该type 3 chunk是否存在扩展时间戳。
需要说明的是,如果不存在已经记录的当前type 3 chunk的前序非type 3chunk的扩展时间戳,即当前type 3 chunk的前序type 0 chunk、type 1 chunk、type 2 chunk都没有扩展时间戳,则该type 3 chunk也没有扩展时间戳,此时草案版本和1.0版本不存在冲突。
S15,获取该type 3 chunk的预设字节,按照扩展时间戳的格式解析出数值,并与所记录的前序非type 3 chunk的扩展时间戳进行比对。若两者数值相等,则执行步骤S16。若两者数值不相等,则执行步骤S17。
在本实施例中,所述预设字节为该type 3 chunk的chunk header之后的4个字节。根据RTMP协议,在扩展时间戳存在的情况下,其位置夹在数据块头部(chunk header)和数据块数据(chunk data)之间。也就是说,在一个按照1.0版本的RTMP协议构建的type 3chunk中,一定情况下其chunk header后会跟随4个字节的扩展时间戳,然后才是chunkdata。而在一个按照草案版本的RTMP协议构建的type 3 chunk中,其chunk header后紧跟的必须是chunk data。
每遇到一个type 3 chunk时,如果其前序非type 3 chunk存在扩展时间戳,则取该type 3 chunk的chunk header之后的4个字节,按照扩展时间戳的格式解析出数值,并与所记录的前序非type 3 chunk的扩展时间戳的数值进行比对。如果两者数值相等,则大概率说明该数据流是一个1.0版本的码流,这4个字节就是扩展时间戳,之后的部分才是chunkdata。如果两者数值不相等,则一定说明该数据流是一个草案版本的码流,这4个字节不是扩展时间戳而是chunk data的一部分。仅在该数据流遵循草案版本的RTMP协议且chunkdata头4个字节恰巧和所记录的前序非type 3 chunk的扩展时间戳的数值相同时才会出现误判。在实际应用中,这种误判的概率非常小,基本可以忽略。
S16,确定该数据流遵循1.0版本的RTMP协议。
S17,确定该数据流遵循草案版本的RTMP协议。
本实施例提供的数据流解码方法,可以根据两个版本的RTMP协议文档中关于type3 chunk的扩展时间戳的不同规定,在解析type 3 chunk时判断是否有扩展时间戳,从而区分出该数据流遵循哪一个版本的RTMP协议,达到大概率正确识别并兼容两种版本数据流的效果。
第三实施例
参阅图3所示,本发明第三实施例提出一种数据流解码方法。在本实施例中,根据不同的需求,图3所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。本实施例中,上述数据流解码方法中的S20-S27与第二实施例的S10-S17相类似,区别在于该方法还包括S28-S29。
S20,接收需要解码的RTMP数据流。
该数据流中可以包括type 3 chunk和非type 3 chunk(例如type 0 chunk、type1 chunk、type 2 chunk)。
S21,判断待解码的当前chunk是否为type 3 chunk。当判断当前chunk为非type 3chunk时,执行步骤S22。当判断当前chunk为type 3 chunk时,执行步骤S24。
根据RTMP协议,该数据流的每个chunk中包含有chunk type字段,通过该字段可以直接获取当前chunk的类型,判断是否为type 3 chunk。
在1.0版本的RTMP协议文档中规定,假如当前type 3 chunk的前序非type 3chunk有扩展时间戳,则当前type 3 chunk也应该有扩展时间戳,且其值与前序非type 3chunk的扩展时间戳是相同的。而在草案版本的RTMP协议文档中规定,type 3 chunk不能有扩展时间戳。根据以上两个版本协议中冲突的部分,可以在解析type 3 chunk时猜测是否有扩展时间戳,达到大概率正确识别并兼容两种版本数据流的效果。
S22,判断该非type 3 chunk是否存在扩展时间戳。若存在,则执行步骤S23。若不存在,则返回S21,判断下一个chunk。
S23,记录该非type 3 chunk的扩展时间戳数值。然后返回S21,判断下一个chunk。
当该非type 3 chunk存在扩展时间戳时,其对应的type 3 chunk也应该存在相同数值的扩展时间戳,因此,记录下该非type 3 chunk的扩展时间戳数值,可以用于后续通过数值对比判断对应的type 3 chunk是否存在扩展时间戳,从而进一步判断构建该数据流的RTMP协议版本。
在本实施例中,每次判断出存在扩展时间戳的非type 3 chunk时,用该非type 3chunk的扩展时间戳数值替换之前记录的数值,也就是说,仅需记录最新的一个非type 3chunk的扩展时间戳即可。
S24,判断该type 3 chunk的前序非type 3 chunk是否存在扩展时间戳。若存在,则执行步骤S25。若不存在,则返回S21,判断下一个chunk。
若当前chunk为type 3 chunk,进一步判断上述type 3 chunk的前序非type 3chunk(与该type 3 chunk的chunk stream ID相同)是否存在扩展时间戳。当该前序非type3 chunk存在扩展时间戳时,可以作为参照来判断该type 3 chunk是否存在扩展时间戳。
S25,获取该type 3 chunk的预设字节,按照扩展时间戳的格式解析出数值,并与所记录的前序非type 3 chunk的扩展时间戳进行比对。若两者数值相等,则执行步骤S26和S28。若两者数值不相等,则执行步骤S27和S29。
在本实施例中,所述预设字节为该type 3 chunk的chunk header之后的4个字节。根据RTMP协议,在扩展时间戳存在的情况下,其位置夹在chunk header和chunk data之间。也就是说,在一个按照1.0版本的RTMP协议构建的type 3chunk中,一定情况下其chunkheader后会跟随4个字节的扩展时间戳,然后才是chunk data。而在一个按照草案版本的RTMP协议构建的type 3 chunk中,其chunk header后紧跟的必须是chunk data。
每遇到一个type 3 chunk时,如果其前序非type 3 chunk存在扩展时间戳,则取该type 3 chunk的chunk header之后的4个字节,按照扩展时间戳的格式解析出数值,并与所记录的前序非type 3 chunk的扩展时间戳的数值进行比对。如果两者数值相等,则大概率说明该数据流是一个1.0版本的码流,这4个字节就是扩展时间戳,之后的部分才是chunkdata。如果两者数值不相等,则一定说明该数据流是一个草案版本的码流,这4个字节不是扩展时间戳而是chunk data的一部分。仅在该数据流遵循草案版本的RTMP协议且chunkdata头4个字节恰巧和所记录的前序非type 3 chunk的扩展时间戳的数值相同时才会出现误判。在实际应用中,这种误判的概率非常小,基本可以忽略。
S26,确定该数据流遵循1.0版本的RTMP协议。
S27,确定该数据流遵循草案版本的RTMP协议。
S28,采用1.0版本的RTMP协议规范解码该数据流。
S29,采用草案版本的RTMP协议规范解码该数据流。
本实施例提供的数据流解码方法,可以根据两个版本的RTMP协议文档中关于type3 chunk的扩展时间戳的不同规定,区分出该数据流遵循哪一个版本的RTMP协议,当该数据流遵循1.0版本的RTMP协议时,采用1.0版本的RTMP协议规范解码该数据流;当该数据流遵循草案版本的RTMP协议时,采用草案版本的RTMP协议规范解码该数据流。因此,可以避免按一种规范来解码导致出现错误,提高解码的准确率,较好地对按两个版本的RTMP协议实现的数据流和软件进行兼容。
第四实施例
如图4所示,本发明第四实施例提出一种数据流解码系统40,应用于电子装置1中。
在本实施例中,数据流解码系统40包括接收模块400,判断模块402、记录模块404、比对模块406及确定模块408。
接收模块400,用于接收需要解码的RTMP数据流。
判断模块402,用于判断待解码的当前数据块(chunk)是否为type 3 chunk。并且当判断当前chunk为非type 3 chunk时,进一步判断该非type 3 chunk是否存在扩展时间戳。
记录模块404,用于当该非type 3 chunk存在扩展时间戳时,记录该非type 3chunk的扩展时间戳数值。
上述判断模块402还用于当判断当前chunk为type 3 chunk时,进一步判断该type3 chunk的前序非type 3 chunk是否存在扩展时间戳。
比对模块406,用于当该type 3 chunk的前序非type 3 chunk存在扩展时间戳时,获取该type 3 chunk的chunk header之后的4个字节,按照扩展时间戳的格式解析出数值,并与所记录的前序非type 3 chunk的扩展时间戳进行比对。
确定模块408,用于当所获取的4个字节的数值与所记录的前序非type 3 chunk的扩展时间戳数值相等时,确定该数据流遵循1.0版本的RTMP协议;当所获取的4个字节的数值与所记录的前序非type 3 chunk的扩展时间戳数值不相等时,确定该数据流遵循草案版本的RTMP协议。
进一步地,该系统还可以包括:
解码模块410,用于当该数据流遵循1.0版本的RTMP协议时,采用1.0版本的RTMP协议规范解码该数据流;当该数据流遵循草案版本的RTMP协议时,采用草案版本的RTMP协议规范解码该数据流。
上述各个模块的具体功能说明请参阅上述第二实施例至第三实施例,在此不再赘述。
第五实施例
本发明还提供了另一种实施方式,即提供一种计算机可读存储介质,上述计算机可读存储介质存储有数据流解码程序10,上述数据流解码程序10可被至少一个处理器执行,以使上述至少一个处理器执行如上述的数据流解码方法。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台客户端(可以是手机,计算机,电子装置,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (11)

1.一种数据流解码方法,其特征在于,所述方法包括:
接收需要解码的RTMP数据流;
判断待解码的当前数据块是否为第3类型数据块;
当当前数据块为非第3类型数据块时,进一步判断所述非第3类型数据块是否存在扩展时间戳;
当所述非第3类型数据块存在扩展时间戳时,记录所述非第3类型数据块的扩展时间戳数值;
当当前数据块为第3类型数据块时,进一步判断是否存在已记录的所述第3类型数据块的前序非第3类型数据块的扩展时间戳;
当存在已记录的所述第3类型数据块的前序非第3类型数据块的扩展时间戳时,获取所述第3类型数据块的预设字节,按照扩展时间戳的格式解析所述预设字节的数值,并与所记录的前序非第3类型数据块的扩展时间戳进行比对;
当所获取的预设字节的数值与所记录的前序非第3类型数据块的扩展时间戳数值相等时,确定所述数据流遵循1.0版本的RTMP协议;及
当所获取的预设字节的数值与所记录的前序非第3类型数据块的扩展时间戳数值不相等时,确定所述数据流遵循草案版本的RTMP协议。
2.如权利要求1所述的数据流兼容方法,其特征在于,所述方法还包括:
当所述数据流遵循1.0版本的RTMP协议时,采用1.0版本的RTMP协议规范解码所述数据流;
当所述数据流遵循草案版本的RTMP协议时,采用草案版本的RTMP协议规范解码所述数据流。
3.如权利要求1或2所述的数据流兼容方法,其特征在于,每次判断出存在扩展时间戳的非第3类型数据块时,用所述非第3类型数据块的扩展时间戳数值替换之前记录的数值。
4.如权利要求1或2所述的数据流兼容方法,其特征在于,所述预设字节为所述第3类型数据块的数据块头部之后的4个字节。
5.一种电子装置,其特征在于,所述电子装置包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的数据流解码程序,所述数据流解码程序被所述处理器执行时实现如下方法:
接收需要解码的RTMP数据流;
判断待解码的当前数据块是否为第3类型数据块;
当当前数据块为非第3类型数据块时,进一步判断所述非第3类型数据块是否存在扩展时间戳;
当所述非第3类型数据块存在扩展时间戳时,记录所述非第3类型数据块的扩展时间戳数值;
当当前数据块为第3类型数据块时,进一步判断是否存在已记录的所述第3类型数据块的前序非第3类型数据块的扩展时间戳;
当存在已记录的所述第3类型数据块的前序非第3类型数据块的扩展时间戳时,获取所述第3类型数据块的预设字节,按照扩展时间戳的格式解析所述预设字节的数值,并与所记录的前序非第3类型数据块的扩展时间戳进行比对;
当所获取的预设字节的数值与所记录的前序非第3类型数据块的扩展时间戳数值相等时,确定所述数据流遵循1.0版本的RTMP协议;及
当所获取的预设字节的数值与所记录的前序非第3类型数据块的扩展时间戳数值不相等时,确定所述数据流遵循草案版本的RTMP协议。
6.如权利要求5所述的电子装置,其特征在于,所述数据流兼容程序被所述处理器执行时还实现:
当所述数据流遵循1.0版本的RTMP协议时,采用1.0版本的RTMP协议规范解码所述数据流;
当所述数据流遵循草案版本的RTMP协议时,采用草案版本的RTMP协议规范解码所述数据流。
7.如权利要求5或6所述的电子装置,其特征在于,每次判断出存在扩展时间戳的非第3类型数据块时,用所述非第3类型数据块的扩展时间戳数值替换之前记录的数值。
8.如权利要求5或6所述的电子装置,其特征在于,所述预设字节为所述第3类型数据块的数据块头部之后的4个字节。
9.一种计算机可读存储介质,所述计算机可读存储介质存储有数据流解码程序,所述数据流解码程序可被至少一个处理器执行,以使所述至少一个处理器执行如权利要求1-4中任一项所述的数据流解码方法。
10.一种数据流解码系统,其特征在于,所述系统包括:
接收模块,用于接收需要解码的数据流;
第一判断模块,用于判断所述数据流中当前数据块是否为第3类型数据块;当当前数据块为非第3类型数据块时,进一步判断所述非第3类型数据块是否存在扩展时间戳;
记录模块,用于当所述非第3类型数据块存在扩展时间戳时,记录所述非第3类型数据块的扩展时间戳数值;
第二判断模块,用于当当前数据块为第3类型数据块时,进一步判断是否存在已记录的所述第3类型数据块的前序非第3类型数据块的扩展时间戳;
比对模块,用于当存在已记录的所述第3类型数据块的前序非第3类型数据块的扩展时间戳时,获取所述第3类型数据块的预设字节,按照扩展时间戳的格式解析所述预设字节的数值,并与所记录的前序非第3类型数据块的扩展时间戳进行比对;及
确定模块,用于当所获取的预设字节的数值与所记录的前序非第3类型数据块的扩展时间戳数值相等时,确定所述数据流遵循1.0版本的RTMP协议;当所获取的预设字节的数值与所记录的前序非第3类型数据块的扩展时间戳数值不相等时,确定所述数据流遵循草案版本的RTMP协议。
11.如权利要求10所述的数据流解码系统,其特征在于,所述系统还包括:
解码模块,用于当所述数据流遵循1.0版本的RTMP协议时,采用1.0版本的RTMP协议规范解码所述数据流;当所述数据流遵循草案版本的RTMP协议时,采用草案版本的RTMP协议规范解码所述数据流。
CN201811045963.8A 2018-09-07 2018-09-07 数据流解码方法和系统、电子装置及计算机可读存储介质 Active CN109309670B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811045963.8A CN109309670B (zh) 2018-09-07 2018-09-07 数据流解码方法和系统、电子装置及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811045963.8A CN109309670B (zh) 2018-09-07 2018-09-07 数据流解码方法和系统、电子装置及计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN109309670A true CN109309670A (zh) 2019-02-05
CN109309670B CN109309670B (zh) 2021-02-12

Family

ID=65224738

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811045963.8A Active CN109309670B (zh) 2018-09-07 2018-09-07 数据流解码方法和系统、电子装置及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN109309670B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111954014A (zh) * 2020-08-13 2020-11-17 北京金山云网络技术有限公司 一种直播推流方法、装置、存储介质及设备

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101631126A (zh) * 2009-08-06 2010-01-20 中兴通讯股份有限公司 一种自适应编码/解码方法和装置
US20100106841A1 (en) * 2008-10-28 2010-04-29 Adobe Systems Incorporated Handling Proxy Requests in a Computing System
CN102263959A (zh) * 2011-08-08 2011-11-30 中国电信股份有限公司 直播中转方法和系统
CN105407361A (zh) * 2015-11-09 2016-03-16 广州华多网络科技有限公司 一种音视频直播数据的处理方法和装置
CN106331853A (zh) * 2016-08-31 2017-01-11 福建星网视易信息系统有限公司 多媒体解封装方法及装置
CN106791884A (zh) * 2016-08-19 2017-05-31 炫熵(上海)互联网科技有限公司 P2p直播的视频数据一致性的保持系统及方法
CN106961615A (zh) * 2017-03-22 2017-07-18 北京奇艺世纪科技有限公司 一种直播方法及系统
CN108134775A (zh) * 2017-11-21 2018-06-08 华为技术有限公司 一种数据处理方法和设备

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100106841A1 (en) * 2008-10-28 2010-04-29 Adobe Systems Incorporated Handling Proxy Requests in a Computing System
CN101631126A (zh) * 2009-08-06 2010-01-20 中兴通讯股份有限公司 一种自适应编码/解码方法和装置
CN102263959A (zh) * 2011-08-08 2011-11-30 中国电信股份有限公司 直播中转方法和系统
CN105407361A (zh) * 2015-11-09 2016-03-16 广州华多网络科技有限公司 一种音视频直播数据的处理方法和装置
CN106791884A (zh) * 2016-08-19 2017-05-31 炫熵(上海)互联网科技有限公司 P2p直播的视频数据一致性的保持系统及方法
CN106331853A (zh) * 2016-08-31 2017-01-11 福建星网视易信息系统有限公司 多媒体解封装方法及装置
CN106961615A (zh) * 2017-03-22 2017-07-18 北京奇艺世纪科技有限公司 一种直播方法及系统
CN108134775A (zh) * 2017-11-21 2018-06-08 华为技术有限公司 一种数据处理方法和设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
张冲: "RTMP协议在P2P流媒体系统中的应用", 《实用技术》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111954014A (zh) * 2020-08-13 2020-11-17 北京金山云网络技术有限公司 一种直播推流方法、装置、存储介质及设备
CN111954014B (zh) * 2020-08-13 2022-01-28 北京金山云网络技术有限公司 一种直播推流方法、装置、存储介质及设备
WO2022033140A1 (zh) * 2020-08-13 2022-02-17 北京金山云网络技术有限公司 一种直播推流方法、装置、存储介质及设备

Also Published As

Publication number Publication date
CN109309670B (zh) 2021-02-12

Similar Documents

Publication Publication Date Title
KR101986481B1 (ko) 엔드-투-엔드 엔드 유저 성능 자동 모니터링 방법 및 이러한 방법을 수행하는 장치
CN108494771B (zh) 电子装置、防火墙开通验证方法及存储介质
CN111555963A (zh) 消息推送方法、装置、电子设备及存储介质
CN106844139A (zh) 一种日志文件分析方法及装置
US20140214890A1 (en) Database shard arbiter
WO2016082649A1 (zh) 轨道交通车辆静态试验数据自动化处理方法及装置
CN108768929A (zh) 电子装置、征信反馈报文的解析方法及存储介质
CN106656998B (zh) 服务器通信方法及装置
CN110958292A (zh) 文件上传方法、电子装置、计算机设备及存储介质
CN104679596A (zh) 一种提高服务器端并发性能的消息处理方法及其系统
CN114500690A (zh) 接口数据处理方法、装置、电子设备及存储介质
CN110166823B (zh) 投屏方法及相关装置
US8880108B2 (en) Short message processing method and apparatus
CN111611207A (zh) 状态数据处理方法、装置及计算机设备
CN110909000A (zh) 一种数据处理方法、系统、装置及计算机可读存储介质
CN105099769A (zh) 业务平台的异常操作处理方法、设备和系统
CN109309670A (zh) 数据流解码方法和系统、电子装置及计算机可读存储介质
CN112187622B (zh) 即时消息的展示方法、装置及服务器
CN104270474A (zh) 一种在网络中分享信息的装置和方法
CN110267062B (zh) 拼装视频帧的优化方法、装置及可读存储介质
CN108306815A (zh) 一种获取消息的方法、装置、设备及计算机可读存储介质
CN109634845B (zh) 一种生成上下文记录文本的方法及装置
CN111200654A (zh) 客户端请求错误处理方法及装置
CN115348333B (zh) 基于udp双端通信交互的数据传输方法、系统及设备
US7571196B2 (en) Type evolution

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant