一种实时流媒体播放器及其架构方法技术

技术编号:21719841 阅读:21 留言:0更新日期:2019-07-27 22:03
本发明专利技术涉及一种实时流媒体播放器及其架构方法,该方法包括:将实时流媒体播放任务分解为六个子任务:读取原始帧、缓存原始帧、对原始帧解码、缓存解码帧并发送显示帧、发送显示帧和播放控制指令、缓存显示帧;分别根据六个子任务对应写入六个工作类,将每个子任务的执行程代码以及消息映射表放置于工作类的接口内,生成六个工作类实例化对象:拉流单元、源级缓存单元、解码单元、解码缓存单元、显示单元、显示缓存单元;写入继承Node类的Root类,并在Root类的接口内将六个工作类加载为Root类的子节点。本发明专利技术将实时流媒体播放过程分解为六个不同的工作单元,各单元间彼此独立,使得对实时流媒体的播放过程具有与文件播放一样的暂停/继续功能。

A Real-time Streaming Media Player and Its Architecture

【技术实现步骤摘要】
一种实时流媒体播放器及其架构方法
本专利技术涉及软件设计领域,尤其涉及一种实时流媒体播放器及其架构方法。
技术介绍
媒体播放器类软件所播放的媒体内容包括文件播放和实时流媒体播放两大类。文件播放是指播放器所播放的媒体内容是以媒体文件形式保存在本地或网络存储空间,如使用电脑中安装的媒体播放器播放硬盘上的视音频文件,或在网页上对已经保存在服务器上的媒体文件进行点播等。这些媒体文件中除了保存有视音频等媒体内容信息外,还保存有提供给播放器的其他参考信息,诸如:文件大小,媒体内容时长,参考帧的存放位置,解码器参数等。解码器在获取媒体内容时亦可随时读取这些参考信息,因而可以提供如暂停继续、跳转进度、变速播放等常用播放控制功能。实时流媒体文件与文件播放不同,实时流媒体文件不存在文件保存形式,媒体源不断的产生音视频数据,播放端则需要不断消化这些媒体内容。这类播放方式包括实时摄像头,网络直播等。由于缺少了媒体文件的参考信息,实时流媒体在播放控制上与文件播放有很大不同。例如,实时流媒体在暂停后再继续播放需要重新加载流,继续后的播放位置也往往不是暂停的位置。实时流媒体也无法实现播放进度或播放速度控制,例如收看网络直播时无法做进度跳转,也无法变速播放。同时,由于当前主流的视频压缩标准,如国际电信联盟(ITU)的H.264,H.265格式等,其压缩具有方向性。每一非关键帧图像在解码时需要以上一帧(有时还需要下一帧)图像解码后的内容为参考。其效果是在进行顺序解码时,图像解码效率非常高,但若仅解码某一单帧图像则需要一直追溯到该帧图像之前的第一个关键帧,再依序解码全部非关键帧(参考帧)才能得到该帧图像。这使得媒体播放器在逆序播放时需要占用大量计算资源,因此当前主流的媒体播放软件都不支持有向压缩视频格式的逆序播放功能,仅在大型媒体编辑软件上支持逆序播放。因此,如何对实时流媒体进行播放进度控制和速度控制,以及如何对实时流媒体进行单帧播放和逆序播放成为亟待解决的问题。因此,提供一种实时流媒体播放器及其架构方法。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的实时流媒体播放器及其架构方法,能够解决对实时流媒体进行播放进度控制和速度控制,以及对实时流媒体进行单帧播放和逆序播放的问题,从而实现对流媒体的帧层面数据管理。根据本专利技术的一个方面,提供一种实时流媒体播放器的架构方法,包括以下步骤:将实时流媒体播放任务分解为六个子任务,该六个子任务分别为读取原始帧、缓存原始帧、对原始帧解码、缓存解码帧并发送显示帧、发送显示帧和播放控制指令、缓存显示帧;分别根据读取原始帧、缓存原始帧、对原始帧解码、缓存解码帧并发送显示帧、发送显示帧和播放控制指令、缓存显示帧对应写入六个工作类,将每个子任务的执行程代码以及消息映射表放置于工作类的接口内,生成六个工作类实例化对象,该六个工作类实例化对象分别为拉流单元、源级缓存单元、解码单元、解码缓存单元、显示单元、显示缓存单元;写入继承Node类的Root类,并在Root类的接口内将六个工作类加载为Root类的子节点;根据拓扑树架构机制对工作类实例化对象和Root类组成拓扑树结构,该拓扑树结构为实时流媒体播放器底层结构;根据跨线程消息传递与同步机制利用消息类和消息队列类在实时流媒体播放器底层结构中传递消息;赋予每个实例化的工作类独立线程。进一步地,工作类继承自Bot类或Node类,其中,拉流单元、解码单元、解码缓存单元、显示单元继承自Bot类,源级缓存单元继承自Node类。进一步地,显示缓存单元并入显示单元中。根据本专利技术的另一方面,提供一种根据上述架构方法的实时流媒体播放器,包括:拉流单元,用于读取原始帧发送至源级缓存单元,并获取编码参数发送至解码单元;源级缓存单元,用于缓存原始帧,供解码单元调取;解码单元,用于接收播放控制指令,根据该播放控制指令从源级缓存单元读取原始帧和编码参数,根据编码参数对原始帧解码,以获取解码帧发送至解码缓存单元;解码缓存单元,用于接收并缓存解码帧,并将当前待显示的解码帧作为显示帧发送至显示单元;显示单元,用于接收并将显示帧加载至显示缓存单元,并将用户发送的播放控制指令发送至解码单元;显示缓存单元,用于缓存并将显示帧发送至显示设备。进一步地,拉流单元,还用于实时接收流媒体地址消息,并在接收到流媒体地址消息时接通流媒体,从流媒体中获取媒体格式信息,并解析媒体格式信息,获取编码参数;还用于获取流媒体原始数据作为原始帧发送至源级缓存单元。进一步地,源级缓存单元,还用于在获取第一帧数据时将该帧图像的时间标签记录为初始帧时间戳。进一步地,解码单元,还用于在接收到播放控制指令后,获取原始帧的时间戳,根据该时间戳在源级缓存单元中查询读取位置。进一步地,解码单元包括一个调度器和多个解码器。进一步地,解码缓存单元,还用于在显示帧前方向和后方向均存储预定量的图像序列。进一步地,上述实时流媒体播放器,还包括:当解码过程具有方向性时,解码缓存单元中显示帧后方向存储的图像序列多于前方向存储的图像序列。本专利技术与现有技术相比具有以下的优点:1.本专利技术将流媒体的读取、解码、显示过程分解为六个不同的工作单元,各单元间彼此独立互不干扰,例如播放暂停时,拉流单元仍可继续正常工作,使得对实时流媒体的播放过程具有与文件播放一样的暂停/继续功能;2.本专利技术显示单元与解码单元的相互独立能够实现逆序播放,在逆序播放过程中,原始图像在被显示前预先以图像组为单位被送入解码单元一次性顺序解码,解码后的图像被放入解码缓存,再在显示时被逆序调用,此过程相较正序播放除需使用略多内存空间外,无需占用更多计算资源;3.本专利技术在实时流媒体的播放进度控制中,进度值以负整数(或0)表示,其物理含义为媒体内容进入播放器的时间与其被显示时间之间的差值,或当前播放图像与媒体流最新一帧图像之间的时间差值,也即是延迟时间(以毫秒计),这与播放文件时的进度值含义是不同的,播放文件时播放进度值持续在变,而以1倍速播放实时流媒体时,其进度值(延时值)则保持稳定不变;播放文件暂停时,其进度值保持不变,而实时流媒体暂停时,其延时值则不断变长,以实现对包括实时流媒体在内的各类媒体源的播放进度控制功能。附图说明以下结合附图和实施例对本专利技术作进一步说明。图1是本专利技术的实时流媒体播放器的架构方法;图2是本专利技术的实时流媒体播放器框图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。本
技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本专利技术的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。本
技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本专利技术所属领域中的普通技术人员的一般理解相同的意义。还应该理本文档来自技高网
...

【技术保护点】
1.一种实时流媒体播放器的架构方法,其特征在于,包括以下步骤:将实时流媒体播放任务分解为六个子任务,该六个子任务分别为读取原始帧、缓存原始帧、对原始帧解码、缓存解码帧并发送显示帧、发送显示帧和播放控制指令、缓存显示帧;分别根据读取原始帧、缓存原始帧、对原始帧解码、缓存解码帧并发送显示帧、发送显示帧和播放控制指令、缓存显示帧对应写入六个工作类,将每个子任务的执行程代码以及消息映射表放置于工作类的接口内,生成六个工作类实例化对象,该六个工作类实例化对象分别为拉流单元、源级缓存单元、解码单元、解码缓存单元、显示单元、显示缓存单元;写入继承Node类的Root类,并在Root类的接口内将六个工作类加载为Root类的子节点;根据拓扑树架构机制对工作类实例化对象和Root类组成拓扑树结构,该拓扑树结构为实时流媒体播放器底层结构;根据跨线程消息传递与同步机制利用消息类和消息队列类在实时流媒体播放器底层结构中传递消息;赋予每个实例化的工作类独立线程。

【技术特征摘要】
1.一种实时流媒体播放器的架构方法,其特征在于,包括以下步骤:将实时流媒体播放任务分解为六个子任务,该六个子任务分别为读取原始帧、缓存原始帧、对原始帧解码、缓存解码帧并发送显示帧、发送显示帧和播放控制指令、缓存显示帧;分别根据读取原始帧、缓存原始帧、对原始帧解码、缓存解码帧并发送显示帧、发送显示帧和播放控制指令、缓存显示帧对应写入六个工作类,将每个子任务的执行程代码以及消息映射表放置于工作类的接口内,生成六个工作类实例化对象,该六个工作类实例化对象分别为拉流单元、源级缓存单元、解码单元、解码缓存单元、显示单元、显示缓存单元;写入继承Node类的Root类,并在Root类的接口内将六个工作类加载为Root类的子节点;根据拓扑树架构机制对工作类实例化对象和Root类组成拓扑树结构,该拓扑树结构为实时流媒体播放器底层结构;根据跨线程消息传递与同步机制利用消息类和消息队列类在实时流媒体播放器底层结构中传递消息;赋予每个实例化的工作类独立线程。2.根据权利要求1所述的实时流媒体播放器的架构方法,其特征在于,工作类继承自Bot类或Node类,其中,拉流单元、解码单元、解码缓存单元、显示单元继承自Bot类,源级缓存单元继承自Node类。3.根据权利要求2所述的实时流媒体播放器的架构方法,其特征在于,显示缓存单元并入显示单元中。4.一种根据权利要求1至3任一项所述架构方法架构的实时流媒体播放器,其特征在于,包括:拉流单元,用于读取原始帧发送至源级缓存单元,并获取编码参数发送至解码单元;源级缓存单...

【专利技术属性】
技术研发人员:林嘉席毅林彭娜芬
申请(专利权)人:南昌嘉研科技有限公司
类型:发明
国别省市:江西,36

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1