流媒体视频数据的解码方法和装置的制造方法

文档序号:9915004阅读:386来源:国知局
流媒体视频数据的解码方法和装置的制造方法
【技术领域】
[0001]本发明涉及视频技术领域,尤其涉及一种流媒体视频数据的解码方法和装置。
【背景技术】
[0002]1s系统是由苹果公司开发的移动操作系统。1s系统播放器不支持某些格式的流媒体视频数据的解码,例如基于H.264格式的流媒体视频数据(以下简称为H.264流媒体视频数据)。为解决这一问题,目前在1s系统环境下通常通过软解码来实现这类流媒体视频数据的解码。现在视频行业内的软解码通常采用FFmpeg开源框架,FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。
[0003]然而,这种软解码方式完全依赖于CPU来执行。由于CPU没有相关的集成指令,需要靠CPU的运算能力来解码,所以对流媒体视频数据的软解码会给CPU造成很大的负担,在移动终端表现为效率低,耗电严重。

【发明内容】

[0004]有鉴于此,本发明提出了一种流媒体视频数据的解码方法和装置,其通过硬解码方式实现了对流媒体视频数据的解码,提高了解码效率并降低了耗电量。
[0005]—方面,提出了一种流媒体视频数据的解码方法,该方法包括:获取流媒体视频数据的视频帧的时间信息;建立第一缓存区以缓存流媒体视频数据的视频帧;获取所缓存的视频帧的视频帧信息;基于所获取的时间信息和视频帧信息对所缓存的视频帧进行解码,并将解码后的视频帧数据保存在第二缓存区中;读取第二缓存区中的视频帧数据并进行转码;以及将转码后的视频帧数据写入硬盘以供播放。
[0006]另一方面,提出了一种流媒体视频数据的解码装置,该装置包括:用于获取流媒体视频数据的视频帧的时间信息的部件;用于建立第一缓存区以缓存流媒体视频数据的视频帧的部件;用于获取所缓存的视频帧的视频帧信息的部件;用于基于所获取的时间信息和视频帧信息对所缓存的视频帧进行解码,并将解码后的视频帧数据保存在第二缓存区中的部件;用于读取第二缓存区中的视频帧数据并进行转码的部件;以及用于将转码后的视频帧数据写入硬盘以供播放的部件。根据下面参考附图对示例性实施例的详细说明,本发明的其它特征及方面将变得清楚。
【附图说明】
[0007]包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本发明的示例性实施例、特征和方面,并且用于解释本发明的原理。
[0008]图1示出根据本发明一实施例的一种流媒体视频数据的解码方法的流程图。
[0009]图2示出根据本发明一实施例的一种流媒体视频数据的解码装置的框图。
[0010]图3示出根据本发明一实施例的一种流媒体视频数据的解码设备的框图。
【具体实施方式】
[0011]以下将参考附图详细说明本发明的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
[0012]在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
[0013]另外,为了更好的说明本发明,在下文的【具体实施方式】中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本发明同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本发明的主旨。
[0014]实施例1
[0015]图1示出根据本发明一实施例的一种流媒体视频数据的解码方法的流程图。如图1所示,该方法主要包括:
[0016]步骤101:获取流媒体视频数据的视频帧的时间信息;
[0017]步骤102:建立第一缓存区以缓存流媒体视频数据的视频帧;
[0018]步骤103:获取所缓存的视频帧的视频帧信息;
[0019]步骤104:基于所获取的时间信息和视频帧信息对所缓存的视频帧进行解码,并将解码后的视频帧数据保存在第二缓存区中;
[0020]步骤105:读取第二缓存区中的视频帧数据并进行转码;以及
[0021]步骤106:将转码后的视频帧数据写入硬盘以供播放。
[0022]本实施例的各步骤可借助于解码硬件(如GPU)的指令集来完成,从而实现硬解码,降低解码过程中CPU资源的使用,提高了解码速度,降低了终端设备的耗电量。
[0023]以下以1s系统下的VideoToolBox框架为例,给出本实施例的一个非限制性的具体示例。本领域技术人员应理解,该示例仅为了说明本发明实施例以便于理解,而并非以任何方式限制本发明。
[0024]在一个示例中,该方法可包括获取流媒体视频数据,其中流媒体视频数据可以是基于H.2 6 4的H L S (H T T P流媒体直播)流媒体视频数据。i ο s系统提供的播放器(例如AVplayer,MPMoviePlayer ,AVPlayerQueue等)是不支持H.264视频格式的解码的,所以要获取流媒体视频数据,可控制流媒体视频数据output (输出数据流)的流向,即截获output数据,并对所截获的数据进行本实施例的后续处理,以实现硬解码。
[0025]以AV P I a y e r播放器为例,可以设置A V P I a y e r播放器的输出函数AVPlay er I temVideoOutput 的at tribute (属性)的 kCVPi xe IBufferPixe IFormatTypeKey 格式,即指定解码后的图像格式。例如,对于移动终端为苹果?手机的情况,由于苹果的硬解码器只支持NV12,因此解码后的图像格式可指定成NV12格式。
[0026]可通过控制output流向来获取流媒体视频数据的视频帧的时间信息。时间信息可以通过参数CMTime表示,其指示视频帧的是每秒中的第几帧,以及每秒有多少帧,利用该信息还可计算出每帧的起止时间等时间信息。可通过函数CACurrentMediaTime ()来获取CMTime0
[0027]可通过函数CopyPixelBufferForItemTime()来获取 pixel buff er (像素缓存区)作为第一缓存区,以缓存流媒体视频数据的视频帧。可通过函数CVPixelBufferRef来获取所缓存的视频帧的视频帧信息,视频帧信息可包括用于显示该视频帧所需的信息,例如每个视频帧的纹理数据,用于绘制该视频帧的画面以供显示。
[0028]在一个示例中,基于所获取的时间信息和视频帧信息对所缓存的视频帧进行解码可包括:针对每个视频帧,将所获取的时间信息和视频帧信息进行合成得到合成后的视频帧信息,并对合成后的视频帧信息进行解码。
[0029]例如,可通过函数AVAssetffriter将第一缓存区中的视频帧的视频帧信息与其他信息(例如时间信息、音频信息等)进行合成。具体来说,可以通过函数AVAssetWirtelnput控制AVAssei^riter内部的input(输入数据流)流向以截取input数据进行后续处理。可以将指示编解码格式的参数A VVideoCodecKey设置为针对H.264格式的AVVideoCodecH264。可根据上文所获得的时间信息来指定input中每帧的时间信息。可通过适配器inputPixelBufferAdaptor将input流向写入AVAssei^r iter,将时间信息与视频帧信息合成,得到合成后的视频帧信息。
[0030]在一个示例中,可建立针对解码的sess1n(会话),利用该会话,对合成后的视频帧信息进行解码,并可将解码获得的视频数据保存在第二缓存区中。第二缓存区可保存针对多个第一缓存区的解码后的视频帧数据(例如是可以接纳针对多个Pixel buffer的解码数据的pixel buffer pool (像素缓存区池))。由此,即可获得解码后的NV12格式的YUV图像数据。这一过程将视频帧的时间信息与视频帧信息(例如视频帧的纹理数据)相结合,从而能够实现对包含时间信息的流媒体视频数据的硬解码,并使得解码后的视频帧数据中也包含帧的时间信息,从而能够基于该时间信息来合成用于播放的视频格式。
[0031]在一个示例中,在从第一缓存区中读取视频帧时,可检查视频帧是否处于Ready(有效)状态,如果处于Ready状态则可进行读取,反之,如处于sleep(无效)状态,则进行等待,直到变为Ready状态。
[0032]在一个示例中,可以例如通过以下指令,基于函数CVPixelBufferLockBaseAddress(buffer,0)获得帧指针 baseAddress:
[0033]void*baseAddress=CVPixeIBufferGetBaseAddress(buffer)),
[0034]所获得的帧
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1