CN110062296B - 一种实时流媒体播放器及其架构方法 - Google Patents

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

Info

Publication number
CN110062296B
CN110062296B CN201910281090.9A CN201910281090A CN110062296B CN 110062296 B CN110062296 B CN 110062296B CN 201910281090 A CN201910281090 A CN 201910281090A CN 110062296 B CN110062296 B CN 110062296B
Authority
CN
China
Prior art keywords
frame
unit
decoding
streaming media
display
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.)
Active
Application number
CN201910281090.9A
Other languages
English (en)
Other versions
CN110062296A (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.)
Nanchang Jiayan Technology Co ltd
Original Assignee
Nanchang Jiayan 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 Nanchang Jiayan Technology Co ltd filed Critical Nanchang Jiayan Technology Co ltd
Priority to CN201910281090.9A priority Critical patent/CN110062296B/zh
Publication of CN110062296A publication Critical patent/CN110062296A/zh
Application granted granted Critical
Publication of CN110062296B publication Critical patent/CN110062296B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/238Interfacing the downstream path of the transmission network, e.g. adapting the transmission rate of a video stream to network bandwidth; Processing of multiplex streams
    • H04N21/2387Stream processing in response to a playback request from an end-user, e.g. for trick-play
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/41Structure of client; Structure of client peripherals
    • H04N21/426Internal components of the client ; Characteristics thereof
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/443OS processes, e.g. booting an STB, implementing a Java virtual machine in an STB or power management in an STB
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/45Management operations performed by the client for facilitating the reception of or the interaction with the content or administrating data related to the end-user or to the client device itself, e.g. learning user preferences for recommending movies, resolving scheduling conflicts
    • H04N21/462Content or additional data management, e.g. creating a master electronic program guide from data received from the Internet and a Head-end, controlling the complexity of a video stream by scaling the resolution or bit-rate based on the client capabilities
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/854Content authoring
    • H04N21/8547Content authoring involving timestamps for synchronizing content

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

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

Description

一种实时流媒体播放器及其架构方法
技术领域
本发明涉及软件设计领域,尤其涉及一种实时流媒体播放器及其架构方法。
背景技术
媒体播放器类软件所播放的媒体内容包括文件播放和实时流媒体播放两大类。文件播放是指播放器所播放的媒体内容是以媒体文件形式保存在本地或网络存储空间,如使用电脑中安装的媒体播放器播放硬盘上的视音频文件,或在网页上对已经保存在服务器上的媒体文件进行点播等。这些媒体文件中除了保存有视音频等媒体内容信息外,还保存有提供给播放器的其他参考信息,诸如:文件大小,媒体内容时长,参考帧的存放位置,解码器参数等。解码器在获取媒体内容时亦可随时读取这些参考信息,因而可以提供如暂停继续、跳转进度、变速播放等常用播放控制功能。
实时流媒体文件与文件播放不同,实时流媒体文件不存在文件保存形式,媒体源不断的产生音视频数据,播放端则需要不断消化这些媒体内容。这类播放方式包括实时摄像头,网络直播等。由于缺少了媒体文件的参考信息,实时流媒体在播放控制上与文件播放有很大不同。例如,实时流媒体在暂停后再继续播放需要重新加载流,继续后的播放位置也往往不是暂停的位置。实时流媒体也无法实现播放进度或播放速度控制,例如收看网络直播时无法做进度跳转,也无法变速播放。
同时,由于当前主流的视频压缩标准,如国际电信联盟(ITU)的H.264,H.265格式等,其压缩具有方向性。每一非关键帧图像在解码时需要以上一帧(有时还需要下一帧)图像解码后的内容为参考。其效果是在进行顺序解码时,图像解码效率非常高,但若仅解码某一单帧图像则需要一直追溯到该帧图像之前的第一个关键帧,再依序解码全部非关键帧(参考帧)才能得到该帧图像。这使得媒体播放器在逆序播放时需要占用大量计算资源,因此当前主流的媒体播放软件都不支持有向压缩视频格式的逆序播放功能,仅在大型媒体编辑软件上支持逆序播放。
因此,如何对实时流媒体进行播放进度控制和速度控制,以及如何对实时流媒体进行单帧播放和逆序播放成为亟待解决的问题。
因此,提供一种实时流媒体播放器及其架构方法。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的实时流媒体播放器及其架构方法,能够解决对实时流媒体进行播放进度控制和速度控制,以及对实时流媒体进行单帧播放和逆序播放的问题,从而实现对流媒体的帧层面数据管理。
根据本发明的一个方面,提供一种实时流媒体播放器的架构方法,包括以下步骤:
将实时流媒体播放任务分解为六个子任务,该六个子任务分别为读取原始帧、缓存原始帧、对原始帧解码、缓存解码帧并发送显示帧、发送显示帧和播放控制指令、缓存显示帧;
分别根据读取原始帧、缓存原始帧、对原始帧解码、缓存解码帧并发送显示帧、发送显示帧和播放控制指令、缓存显示帧对应写入六个工作类,将每个子任务的执行程代码以及消息映射表放置于工作类的接口内,生成六个工作类实例化对象,该六个工作类实例化对象分别为拉流单元、源级缓存单元、解码单元、解码缓存单元、显示单元、显示缓存单元;
写入继承Node类的Root类,并在Root类的接口内将六个工作类加载为Root类的子节点;
根据拓扑树架构机制对工作类实例化对象和Root类组成拓扑树结构,该拓扑树结构为实时流媒体播放器底层结构;
根据跨线程消息传递与同步机制利用消息类和消息队列类在实时流媒体播放器底层结构中传递消息;
赋予每个实例化的工作类独立线程。
进一步地,工作类继承自Bot类或Node类,其中,拉流单元、解码单元、解码缓存单元、显示单元继承自Bot类,源级缓存单元继承自Node类。
进一步地,显示缓存单元并入显示单元中。
根据本发明的另一方面,提供一种根据上述架构方法的实时流媒体播放器,包括:
拉流单元,用于读取原始帧发送至源级缓存单元,并获取编码参数发送至解码单元;
源级缓存单元,用于缓存原始帧,供解码单元调取;
解码单元,用于接收播放控制指令,根据该播放控制指令从源级缓存单元读取原始帧和编码参数,根据编码参数对原始帧解码,以获取解码帧发送至解码缓存单元;
解码缓存单元,用于接收并缓存解码帧,并将当前待显示的解码帧作为显示帧发送至显示单元;
显示单元,用于接收并将显示帧加载至显示缓存单元,并将用户发送的播放控制指令发送至解码单元;
显示缓存单元,用于缓存并将显示帧发送至显示设备。
进一步地,拉流单元,还用于实时接收流媒体地址消息,并在接收到流媒体地址消息时接通流媒体,从流媒体中获取媒体格式信息,并解析媒体格式信息,获取编码参数;还用于获取流媒体原始数据作为原始帧发送至源级缓存单元。
进一步地,源级缓存单元,还用于在获取第一帧数据时将该帧图像的时间标签记录为初始帧时间戳。
进一步地,解码单元,还用于在接收到播放控制指令后,获取原始帧的时间戳,根据该时间戳在源级缓存单元中查询读取位置。
进一步地,解码单元包括一个调度器和多个解码器。
进一步地,解码缓存单元,还用于在显示帧前方向和后方向均存储预定量的图像序列。
进一步地,上述实时流媒体播放器,还包括:当解码过程具有方向性时,解码缓存单元中显示帧后方向存储的图像序列多于前方向存储的图像序列。
本发明与现有技术相比具有以下的优点:
1.本发明将流媒体的读取、解码、显示过程分解为六个不同的工作单元,各单元间彼此独立互不干扰,例如播放暂停时,拉流单元仍可继续正常工作,使得对实时流媒体的播放过程具有与文件播放一样的暂停/继续功能;
2.本发明显示单元与解码单元的相互独立能够实现逆序播放,在逆序播放过程中,原始图像在被显示前预先以图像组为单位被送入解码单元一次性顺序解码,解码后的图像被放入解码缓存,再在显示时被逆序调用,此过程相较正序播放除需使用略多内存空间外,无需占用更多计算资源;
3.本发明在实时流媒体的播放进度控制中,进度值以负整数(或0)表示,其物理含义为媒体内容进入播放器的时间与其被显示时间之间的差值,或当前播放图像与媒体流最新一帧图像之间的时间差值,也即是延迟时间(以毫秒计),这与播放文件时的进度值含义是不同的,播放文件时播放进度值持续在变,而以1倍速播放实时流媒体时,其进度值(延时值)则保持稳定不变;播放文件暂停时,其进度值保持不变,而实时流媒体暂停时,其延时值则不断变长,以实现对包括实时流媒体在内的各类媒体源的播放进度控制功能。
附图说明
以下结合附图和实施例对本发明作进一步说明。
图1是本发明的实时流媒体播放器的架构方法;
图2是本发明的实时流媒体播放器框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非被特定定义,否则不会用理想化或过于正式的含义来解释。
图1是本发明的实时流媒体播放器的架构方法,参见图1,本发明提供的实时流媒体播放器的架构方法,包括以下步骤:
S1,将实时流媒体播放任务分解为六个子任务,该六个子任务分别为读取原始帧、缓存原始帧、对原始帧解码、缓存解码帧并发送显示帧、发送显示帧和播放控制指令、缓存显示帧。
S2,分别根据读取原始帧、缓存原始帧、对原始帧解码、缓存解码帧并发送显示帧、发送显示帧和播放控制指令、缓存显示帧对应写入六个工作类,将每个子任务的执行程代码以及消息映射表放置于工作类的接口内,生成六个工作类实例化对象,该六个工作类实例化对象分别为拉流单元、源级缓存单元、解码单元、解码缓存单元、显示单元、显示缓存单元。
S3,写入继承Node类的Root类,并在Root类的接口内将六个工作类加载为Root类的子节点。
在这里,六个工作类之间为并列关系,六个工作类均为Root类的子节点,六个工作类相互为邻节点。
S4,根据拓扑树架构机制对工作类实例化对象和Root类组成拓扑树结构,该拓扑树结构为实时流媒体播放器底层结构。
S5,根据跨线程消息传递与同步机制利用消息类和消息队列类在实时流媒体播放器底层结构中传递消息。
S6,赋予每个实例化的工作类独立线程。
本发明将流媒体的读取、解码、显示过程分解为六个不同的工作单元,各单元间彼此独立互不干扰,例如播放暂停时,拉流单元仍可继续正常工作,使得对实时流媒体的播放过程具有与文件播放一样的暂停/继续功能。
进一步地,工作类继承自Bot类或Node类,其中,拉流单元、解码单元、解码缓存单元、显示单元由于数据处理量大可以继承自Bot类,源级缓存单元由于数据处理量小可以继承自Node类,显示缓存单元比源级缓存单元的数据处理量更小,因此,将显示缓存单元并入显示单元中。
进一步地,Node类包括以下结构:
公有属性:编号,常整形,标签,常节点标签,名称,字符串;
保护属性:自指针,节点指针,父节点指针,节点指针,消息队列,消息队列指针,子节点指针,节点指针数组;
私有属性:根节点指针,节点指针,邻节点指针,节点指针数组,同步锁,互斥锁,消息映射表,多映射;
公有方法:构造函数,启动运行,接收消息;
保护方法:设置消息映射,消息分拣,发布消息,节点消息处理,加载子节点,加载消息映射。
进一步地,Bot类是Node类的子类,Bot类继承Node类的属性和方法,还包括以下结构:
私有属性:空闲标识,循环标识,线程锁,工作线程,循环周期;
保护属性:唤醒条件;
公有方法:构造函数,获取唤醒条件,启动运行,设置循环周期,接收消息;
私有方法:运行,处理消息,处理函数。
进一步地,消息类包括以下结构:
公有属性:发送者,标签,包裹。
进一步地,消息队列类包括以下结构:
私有属性:队列,同步锁,唤醒条件;
公有方法:消息入队,消息出队,队列空。
进一步地,拓扑树架构机制包括以下步骤:
类节点唯一命名;
构造消息队列和消息映射表;
加入类节点拓扑树;
加载消息映射;
启动工作类实例化对象的独立工作线程;
加载及实例化子类节点。
进一步地,跨线程消息传递与同步机制包括以下步骤:
调用发布消息函数;
调用消息分拣函数;
查找消息映射表;
获取消息接收者标签;
获取消息接收者指针;
调用消息接收者接收消息函数。
进一步地,上述多线程程序架构方法,还包括:在工作类实例化对象内的独立线程中执行由循环标识控制的循环步骤,具体如下:
检查和处理消息;
执行处理函数;
休眠循环周期。
图2是本发明的实时流媒体播放器框图,参见图2,本发明提供的根据上述架构方法的实时流媒体播放器,包括:
拉流单元,用于读取原始帧发送至源级缓存单元,并获取编码参数发送至解码单元。
具体地,拉流单元具有独立工作线程,其内部结构和工作特点包括:
私有属性:媒体源信息,编码参数指针;
私有方法:初始化,读取单帧原始帧;
消息传递:接收流媒体地址,发送编码参数,发送原始帧。
源级缓存单元,用于缓存原始帧,供解码单元调取。
具体地,源级缓存单元是用于存储流媒体原始帧数据的循环存储空间,其内部结构和工作特点包括:
私有属性:原始帧指针向量,关键帧位置序列,初始帧时间戳,最新帧时间戳;
私有方法:保存原始帧指针;
消息传递:接收原始帧。
解码单元,用于接收播放控制指令,根据该播放控制指令从源级缓存单元读取原始帧和编码参数,根据编码参数对原始帧解码,以获取解码帧发送至解码缓存单元。
具体地,解码单元具有独立工作线程,其内部结构和工作特点包括:
私有属性:编码参数指针,解码器指针;
私有方法:初始化,解码;
消息传递:接收编码参数,发送解码帧,接收播放控制指令。
解码缓存单元,用于接收并缓存解码帧,并将当前待显示的解码帧作为显示帧发送至显示单元。
具体地,解码缓存单元具有独立工作线程,其内部结构和工作特点包括:
私有属性:解码图像指针队列,输出位序号;
私有方法:保存解码帧指针,发送显示帧指针;
消息传递:接收解码帧,发送显示帧。
显示单元,用于接收并将显示帧加载至显示缓存单元,并将用户发送的播放控制指令发送至解码单元。
具体地,显示单元具有独立工作线程,其内部结构和工作特点包括:
私有方法:载入显示帧指针;
消息传递:接收显示帧,发送播放控制指令。
跨线程消息传递与同步机制在显示单元中具体体现如下:显示单元的工作是将解码后的阵列图像投射在屏幕上。显示单元利用OpenGL进行图像显示。在初始化过程中,显示单元依据计算机显示参数建立显示通道(构建网格模型,加载模块深度解析,设定投影参数等)。在接收到显示帧消息后,显示单元调用其私有方法载入显示帧指针函数将其数据载入材质贴图,该材质贴图为显示缓存单元,最后在OpenGL绘制线程内通过glBindTexture()等相关函数发往显示设备。显示单元同时也通过播放控制指令消息发送用户的播放控制指令,如进度控制、速度控制、单帧控制等。
显示缓存单元,用于缓存并将显示帧发送至显示设备。
具体地,显示缓存单元内部结构包括:当前显示位标识变量,至少2个显示材质贴图指针保存位。
跨线程消息传递与同步机制在显示单元中具体体现如下:为适应多线程协同工作需要,显示单元需要使用显示缓存单元额外预存至少一帧图像。缓存额外图像的作用是将最终的发送显示过程与其他操作相隔离,从而保证跨线程数据同步。显示缓存单元中具有至少2个显示材质贴图指针保存位,并使用当前显示位标识标记当前显示图像的序号位,其余序列号则为缓存位。缓存位用于图像数据的读取/释放,指针替换,或进行诸如添加/绘制标识等操作。而被标记为当前帧的图像数据则只供发往显示设备,不再接受任何其他操作。
特别地,流媒体编解码对代码执行效率有较高要求,因此建议工程中使用C++语言予以实现。
本发明显示单元与解码单元的相互独立能够实现逆序播放,在逆序播放过程中,原始图像在被显示前预先以图像组为单位被送入解码单元一次性顺序解码,解码后的图像被放入解码缓存,再在显示时被逆序调用,此过程相较正序播放除需使用略多内存空间外,无需占用更多计算资源。
本发明在实时流媒体的播放进度控制中,进度值以负整数(或0)表示,其物理含义为媒体内容进入播放器的时间与其被显示时间之间的差值,或当前播放图像与媒体流最新一帧图像之间的时间差值,也即是延迟时间(以毫秒计),这与播放文件时的进度值含义是不同的,播放文件时播放进度值持续在变,而以1倍速播放实时流媒体时,其进度值(延时值)则保持稳定不变;播放文件暂停时,其进度值保持不变,而实时流媒体暂停时,其延时值则不断变长,以实现对包括实时流媒体在内的各类媒体源的播放进度控制功能。
进一步地,拉流单元,还用于实时接收流媒体地址消息,并在接收到流媒体地址消息时接通流媒体,从流媒体中获取媒体格式信息,并解析媒体格式信息,获取编码参数;还用于获取流媒体原始数据作为原始帧发送至源级缓存单元。
具体地,跨线程消息传递与同步机制在拉流单元中具体体现如下:拉流单元的任务是从媒体源获取数据。以使用FFmpeg读取H.264流为例。工作线程启动后等待流媒体地址消息到达,收到媒体地址信息后开始执行私有方法初始化函数。初始化时先调用FFmpeg提供的avformat_open_input()等相关函数接通媒体流,再调用avformat_find_stream_info()等相关函数获取的媒体格式信息,并将其指针保存于私有属性编码参数指针,并同时发布编码参数消息。初始化完成后,拉流单元在其工作线程内反复调用私有方法读取单帧原始帧函数,每次执行该函数将调用av_read_frame()等相关函数获取一帧流媒体原始数据(H.264压缩包),并将该帧数据的存储地址指针以原始帧消息进行发送。其中,avformat_open_input()函数用于打开一个文件并解析,可解析的内容包括:视频流、音频流、视频流参数、音频流参数、视频帧索引。avformat_find_stream_info()函数用于查找格式和索引,有些早期格式它的索引并没有放到头当中,需要你到后面探测,就会用到此函数。av_read_frame()函数用于读取一个AVPacket,AVPacket里面包含了这个包的pts,dts,还有这个包的stream index(它是音频还是视频)是否是关键帧,AVPacket把h264数据的间隔符去掉了。
进一步地,源级缓存单元,还用于在获取第一帧数据时将该帧图像的时间标签记录为初始帧时间戳。
具体地,跨线程消息传递与同步机制在源级缓存单元中具体体现如下:源级缓存单元中有一个原始帧指针向量,其中顺序存储着原始帧包指针。源级缓存单元的其他辅助结构还包括:最大存储数量,当前存储数量,当前存储位,关键帧位置序列等。当原始帧消息到达时,源级缓存单元调用其保存原始帧指针函数从消息中获取帧数据包指针,并将其保存在原始帧指针向量的当前存储位置(归零自增)。若当前存储量超过最大存储量,则从内存中释放最早一帧数据,并丢弃其指针。每读入一帧数据,源级缓存单元都在其最新帧时间戳字段中记录下该帧图像的时间标签,在获取第一帧数据时还同时将其记录于初始帧时间戳。这些时间戳将用于流媒体的进度查找与跳转。
进一步地,解码单元,还用于在接收到播放控制指令后,获取原始帧的时间戳,根据该时间戳在源级缓存单元中查询读取位置。
具体地,跨线程消息传递与同步机制在解码单元中具体体现如下:解码单元的工作是将压缩格式(H.264等)的流媒体帧解码为可供屏幕显示的像素阵列格式(YUV等)。解码单元在接收到编码参数消息后,调用其私有方法初始化函数。初始化过程将调用avcodec_open2()等相关函数进行解码器初始化。解码单元接收播放控制指令消息,如进度控制、速度控制、单帧控制等。在接收到播放控制指令后,解码单元计算出待解码帧的时间戳,进而在源级缓存单元中找到正确的读取位置。解码单元从源级缓存单元每次最多获取一个图像组(从一个关键帧到下一关键帧前的图像序列),进而调用私有方法解码函数。解码函数通过avcodec_send_packet()将原始帧发送给FFmpeg解码器,并利用avcodec_recieve_frame()获取解码后的图像帧。解码图像的地址指针通过解码帧消息发送给解码缓存单元。avcodec_open2()函数、avcodec_send_packet()函数和avcodec_recieve_frame()函数均为FFmpeg源码中常用函数。
进一步地,解码单元包括一个调度器和多个解码器。在实际应用中,在高码流或高速播放情况下解码运算量将成倍增加。为满足这一需要,解码单元可视需要进一步拓展为一个调度器和若干个解码器。每个解码器各自具有独立的工作线程,通过并行计算充分调用系统运算资源。调度器则负责监听每个解码器的负荷状态,并向它们分派解码任务。播放器的最大播放速度为一帧图像的显示时间与其平均解码时间的比值再乘以并行解码线程数,例如对于每秒25帧(25fps)的流媒体,每帧显示时间为40ms,若平均单帧解码时间为5ms,2条线程同时解码,则理论播放速度范围为-16倍至+16倍。
进一步地,解码缓存单元,还用于在显示帧前方向和后方向均存储预定量的图像序列。同时,当解码过程具有方向性时,解码缓存单元中显示帧后方向存储的图像序列多于前方向存储的图像序列。
具体地,跨线程消息传递与同步机制在解码缓存单元中具体体现如下:解码缓存单元的工作是对解码后的像素阵列图像进行动态管理,随媒体播放进程一边接收解码图像一边释放过期图像。解码缓存单元内部具有一个解码图像指针队列,当接收到解码帧消息时,解码缓存单元通过保存解码帧指针函数获取解码帧地址指针,并将其依序存入解码图像指针队列。由于解码后的图像数据需占用大量内存空间,解码缓存单元的总容量一般不能超过数个图像组。同时,为应对随时可能发生的播放方向转换,播放速度加快等使用需求,解码缓存单元应随时保持在当前显示帧前后方向都保有一定量的图像序列。又因为H.264/265等有向压缩格式的解码过程具有方向性,解码缓存单元中当前帧后方保有的图像序列应多于前方的图像序列。实际工程中建议当前帧前方持续保有0.5至1个图像组,后方持续保有1-2个图像组。解码缓存单元利用私有属性输出位序号记录当前帧位置,并利用私有方法发送显示帧指针函数将其通过显示帧消息发送给显示单元。
与现有技术的媒体播放器相比,本发明克服了实时流媒体缺少辅助信息,压缩格式有向性等技术困难,实现了流媒体的帧层面数据管理,从而可对实时流媒体进行播放进度控制、速度控制、单帧进退、快速倒放等功能。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种实时流媒体播放器的架构方法,其特征在于,包括以下步骤:
将实时流媒体播放任务分解为六个子任务,该六个子任务分别为读取原始帧、缓存原始帧、对原始帧解码、缓存解码帧并发送显示帧、发送显示帧和播放控制指令、缓存显示帧;
分别根据读取原始帧、缓存原始帧、对原始帧解码、缓存解码帧并发送显示帧、发送显示帧和播放控制指令、缓存显示帧对应写入六个工作类,将每个子任务的执行程序代码以及消息映射表放置于工作类的接口内,生成六个工作类实例化对象,该六个工作类实例化对象分别为拉流单元、源级缓存单元、解码单元、解码缓存单元、显示单元、显示缓存单元;
写入继承Node类的Root类,并在Root类的接口内将六个工作类加载为Root类的子节点;
根据拓扑树架构机制对工作类实例化对象和Root类组成拓扑树结构,该拓扑树结构为实时流媒体播放器底层结构;
根据跨线程消息传递与同步机制利用消息类和消息队列类在实时流媒体播放器底层结构中传递消息;
赋予每个实例化的工作类独立线程。
2.根据权利要求1所述的实时流媒体播放器的架构方法,其特征在于,工作类继承自Bot类或Node类,其中,拉流单元、解码单元、解码缓存单元、显示单元继承自Bot类,源级缓存单元继承自Node类。
3.根据权利要求2所述的实时流媒体播放器的架构方法,其特征在于,显示缓存单元并入显示单元中。
4.一种根据权利要求1至3任一项所述架构方法架构的实时流媒体播放器,其特征在于,包括:
拉流单元,用于读取原始帧发送至源级缓存单元,并获取编码参数发送至解码单元;
源级缓存单元,用于缓存原始帧,供解码单元调取;
解码单元,用于接收播放控制指令,根据该播放控制指令从源级缓存单元读取原始帧和编码参数,根据编码参数对原始帧解码,以获取解码帧发送至解码缓存单元;
解码缓存单元,用于接收并缓存解码帧,并将当前待显示的解码帧作为显示帧发送至显示单元;
显示单元,用于接收并将显示帧加载至显示缓存单元,并将用户发送的播放控制指令发送至解码单元;
显示缓存单元,用于缓存并将显示帧发送至显示设备。
5.根据权利要求4所述的实时流媒体播放器,其特征在于,拉流单元,还用于实时接收流媒体地址消息,并在接收到流媒体地址消息时接通流媒体,从流媒体中获取媒体格式信息,并解析媒体格式信息,获取编码参数;还用于获取流媒体原始数据作为原始帧发送至源级缓存单元。
6.根据权利要求5所述的实时流媒体播放器,其特征在于,源级缓存单元,还用于在获取第一帧数据时将该帧图像的时间标签记录为初始帧时间戳。
7.根据权利要求6所述的实时流媒体播放器,其特征在于,解码单元,还用于在接收到播放控制指令后,获取原始帧的时间戳,根据该时间戳在源级缓存单元中查询读取位置。
8.根据权利要求7所述的实时流媒体播放器,其特征在于,解码单元包括一个调度器和多个解码器。
9.根据权利要求7所述的实时流媒体播放器,其特征在于,解码缓存单元,还用于在显示帧前方向和后方向均存储预定量的图像序列。
10.根据权利要求9所述的实时流媒体播放器,其特征在于,还包括:当解码过程具有方向性时,解码缓存单元中显示帧后方向存储的图像序列多于前方向存储的图像序列。
CN201910281090.9A 2019-04-09 2019-04-09 一种实时流媒体播放器及其架构方法 Active CN110062296B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910281090.9A CN110062296B (zh) 2019-04-09 2019-04-09 一种实时流媒体播放器及其架构方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910281090.9A CN110062296B (zh) 2019-04-09 2019-04-09 一种实时流媒体播放器及其架构方法

Publications (2)

Publication Number Publication Date
CN110062296A CN110062296A (zh) 2019-07-26
CN110062296B true CN110062296B (zh) 2021-06-29

Family

ID=67317604

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910281090.9A Active CN110062296B (zh) 2019-04-09 2019-04-09 一种实时流媒体播放器及其架构方法

Country Status (1)

Country Link
CN (1) CN110062296B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112822549B (zh) * 2020-12-30 2022-08-05 北京大学 基于分片重组的视频流解码方法、系统、终端及介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103366780A (zh) * 2012-03-31 2013-10-23 盛乐信息技术(上海)有限公司 多媒体播放器引擎系统及其使用方法和多媒体播放器
US8948269B1 (en) * 2011-03-23 2015-02-03 Marvell International Ltd. Processor implemented systems and methods for optimized video decoding using adaptive thread priority adjustment
CN104333808A (zh) * 2014-11-14 2015-02-04 复旦大学 用于Android及Linux智能电视机上的通用播放器
CN107613369A (zh) * 2017-10-10 2018-01-19 青岛海信电器股份有限公司 基于GStreamer框架的视频播放方法、装置及电子设备
CN108616722A (zh) * 2018-04-18 2018-10-02 中南大学 一种嵌入式高清视频采集与数据流传输系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8948269B1 (en) * 2011-03-23 2015-02-03 Marvell International Ltd. Processor implemented systems and methods for optimized video decoding using adaptive thread priority adjustment
CN103366780A (zh) * 2012-03-31 2013-10-23 盛乐信息技术(上海)有限公司 多媒体播放器引擎系统及其使用方法和多媒体播放器
CN104333808A (zh) * 2014-11-14 2015-02-04 复旦大学 用于Android及Linux智能电视机上的通用播放器
CN107613369A (zh) * 2017-10-10 2018-01-19 青岛海信电器股份有限公司 基于GStreamer框架的视频播放方法、装置及电子设备
CN108616722A (zh) * 2018-04-18 2018-10-02 中南大学 一种嵌入式高清视频采集与数据流传输系统

Also Published As

Publication number Publication date
CN110062296A (zh) 2019-07-26

Similar Documents

Publication Publication Date Title
CN108616722B (zh) 一种嵌入式高清视频采集与数据流传输系统
Jeffay et al. Kernel support for live digital audio and video
CN110769278B (zh) 一种分布式视频转码方法及系统
US5517652A (en) Multi-media server for treating multi-media information and communication system empolying the multi-media server
RU2378765C1 (ru) Устройство и способ для приема многочисленных потоков в системе мобильной трансляции
JP3523218B2 (ja) メディアデータプロセッサ
US20030002578A1 (en) System and method for timeshifting the encoding/decoding of audio/visual signals in real-time
WO2021082667A1 (zh) 视频数据编码方法、装置、设备和存储介质
CN109005447A (zh) 一种安防高清录像倒播方法及装置
CN108200447A (zh) 直播数据传输方法、装置、电子设备、服务器及存储介质
CN103841432A (zh) 一种复合视频数据的传输方法和设备
CN105530479A (zh) 一种基于移动终端的视频数据处理方法及系统
CN112383771A (zh) Ip化视频制播系统中音视频监测方法
CN109874027A (zh) 一种低延时手术示教直播方法及其系统
CN110062296B (zh) 一种实时流媒体播放器及其架构方法
CN108566527A (zh) 一种录像方法及装置
CN103596037B (zh) 一种实时视频流缓冲的控制方法
US7692562B1 (en) System and method for representing digital media
CN113365150B (zh) 视频处理方法和视频处理装置
CN113992949A (zh) 混流服务切换方法及其装置、设备、介质、产品
CN112543374A (zh) 一种转码控制方法、装置及电子设备
CN111970552A (zh) 一种基于机顶盒实时播放dvb全景视频流的方法及系统
CN116302549A (zh) Ai视频加速器的硬件资源获取方法、装置、设备及介质
WO2022193141A1 (zh) 多媒体文件的播放方法及相关装置
CN115361579A (zh) 视频送显方法、装置、电子设备及存储介质

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