对多媒体文件进行按需跳转的方法与流程

文档序号:11931618阅读:382来源:国知局
对多媒体文件进行按需跳转的方法与流程

本发明涉及一种对多媒体文件进行按需跳转的方法,尤其涉及一种综合利用英特尔多媒体软件开发包(intel media sdk)与ffmpeg软件开发包来实现视音频同步跳转(seek)的方法。



背景技术:

目前市面上有很多多媒体视音频处理软件开发包,这些开发包各有自己的优势与劣势,例如,ffmpeg软件开发包,它能够提供包括视音频采集、视音频格式转换、视频抓图、视频加水印等功能,具有功能强大、覆盖面广的优点。但ffmpeg在硬件编解码加速方面却较少涉及,尚很不完善,远不及intel media sdk的性能优越。intelmedia sdk在硬件加速解码、编码方面提供了卓越的性能,其能充分利用图形处理器(GPU)来进行硬件加速。经过测试,对于同一段素材,与ffmpeg sdk相比,利用intel media sdk来转码,速度能提高百分之三十左右而其CPU占用效率却大大降低。相同运行环境下,采用ffmpeg sdk与采用intel media sdk来对相同素材进行解码的性能测试结果如下:

显然intel media sdk在硬件加速方面具有明显优势。然而,intel media sdk却不能基于多媒体文件流进行seek操作,只能提供基于ES流(Elementary Stream,基本码流)的硬件加速的顺序解码操作。

在广电领域,在对多媒体文件进行解码播放过程或者非线性编辑系统中,人们经常将播放或预览位置从文件的一个时间点拖动到另一个时间点。来查看自己关心的内容。这一过程就称为seek。这种操作较为常见,若不能对文件流按需seek,则即使具有优越的硬件加速功能,在产品的应用中也会非常受限。



技术实现要素:

本发明提供一种对多媒体文件进行按需跳转的方法,以解决现有技术中的一项或多项缺失。

本发明实施例提供一种对多媒体文件进行按需跳转的方法,包括:接收用户输入的多媒体文件,通过ffmpeg对所述多媒体文件进行解复用,得到所述多媒体文件的ES流,并获取所述多媒体文件的视音频信息;利用所述视音频信息对英特尔解码器进行初始化;根据一跳转精确性需求信息和一目标帧的信息,确定所述ES流中目标帧的时间戳;通过所述ffmpeg对所述ES流进行流操作,并从所述目标帧的一左侧关键帧的位置开始读取视音频帧数据;利用初始化后的所述英特尔解码器对读取的所述视音频帧数据进行解码,得到所述视音频帧的时间戳;判断所述视音频帧的时间戳大于或等于所述目标帧的时间戳时,将所述视音频帧数据放入视音频输出队列,以进行输出。

一个实施例中,根据一跳转精确性需求信息和一目标帧的信息,确定所述ES流中目标帧的时间戳,包括:根据所述跳转精确性需求信息设定所述ES流中的帧发生跳转的阈值;判断所述目标帧与所述ES流中当前解码输出帧的帧号差值是否大于或等于所述阈值;如果是,根据所述当前解码输出帧的位置计算得到所述目标帧的时间戳。

一个实施例中,还包括:根据所述ES流中的第一帧视频帧的时间戳对所述目标帧中的视频帧的时间戳进行校正,根据所述ES流中的第一帧音频帧的时间戳对所述目标帧中的音频帧的时间戳进行校正。

一个实施例中,还包括:判断所述视音频帧的时间戳小于所述目标帧的时间戳时,丢弃时间戳小于所述目标帧的时间戳的视音频帧数据,并继续读取下一帧的视音频帧数据,直到读取的视音频帧的时间戳大于或等于所述目标帧的时间戳。

一个实施例中,当所述视音频流数据为视频数据时,所述英特尔解码器为视频解码器;当所述视音频流数据为音频数据时,所述英特尔解码器为音频解码器。

一个实施例中,当所述视音频流数据为视频数据时,所述目标帧的时间戳为:vt=((目标视频帧帧号*(1.0/视频帧率)*基准时间)*基准时间的倒数/视频流的时间基)。

一个实施例中,当所述视音频流数据为音频数据时,所述目标帧的时间戳为:at=((目标音频帧帧号*(1.0*一帧音频的采样数*基准时间/目标音频采样率)*基准时间的倒数/音频流的时间基),其中,一帧音频的采样数=目标音频采样率/视频帧率,目标音频帧帧号=目标音频采样索引值/一帧音频的采样数,目标音频采样索引值可通过seek操作发生时接口调用者传入的接口参数中得到。

一个实施例中,将读取的所述视音频帧数据放入视音频输出队列,以进行输出,包括:将时间戳大于或等于所述目标帧的读取的所述视音频帧数据中的视频数据放入视频输出队列,以进行视频输出;将时间戳大于或等于所述目标帧的读取的所述视音频帧数据中的音频数据放入音频输出队列,以进行音频输出;判断所述视频输出队列和所述音频输出队列均含有进行输出的视音频帧数据时,所述ffmpeg停止读取视音频帧数据。

一个实施例中,所述多媒体文件的视音频信息包括:多媒体文件总长度、多媒体文件封装格式、视频编码方式、视频帧率、视频流长度、视频颜色格式、视频码率、音频编码格式、音频采样率、音频采样格式及音频流长度中的一个或多个。

一个实施例中,所述左侧关键帧为位于所述目标帧左侧且最接近所述目标帧的关键帧。

本发明实施例,能够既可以充分利用英特尔解码器(intel media sdk)进行硬件加速解码,又能允许使用者对被解码播放的多媒体文件进行按需跳转(seek),可以很好地实现基于英特尔解码器intel media sdk的多媒体文件的硬件加速解码播放与按需跳转seek。本发明能够综合利用intel media sdk与ffmpeg sdk来实现视音频同步seek的方法。同时,由于对目标视频帧、目标音频帧的匹配采用最接近原则(最左侧关键帧),因而对于有一些存在时间戳漂移现象的多媒体素材,同样能进行较为准确的seek操作。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。在附图中:

图1是本发明实施例的对多媒体文件进行按需跳转的方法的流程示意图;

图2是本发明一实施例中的目标帧时间戳的获取方法的流程示意图;

图3是本发明另一实施例的目标帧时间戳的获取方法的流程示意图;

图4是本发明一实施例中的将视音频帧数据放入视音频输出队列的方法的流程示意图;

图5是本发明一实施例对多媒体文件进行按需跳转的方法的流程示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。

本发明实施例提供一种对多媒体文件进行按需跳转的方法,该方法既可以利用英特尔解码器(intel media sdk)进行硬件加速解码,又能对被解码播放的多媒体文件进行按需跳转(seek)。

图1是本发明实施例的对多媒体文件进行按需跳转的方法的流程示意图。如图1所示,对多媒体文件进行按需跳转的方法,可包括步骤:

S110:接收用户输入的多媒体文件,通过ffmpeg对所述多媒体文件进行解复用,得到所述多媒体文件的ES流,并获取所述多媒体文件的视音频信息;

S120:利用所述视音频信息对英特尔解码器进行初始化;

S130:根据一跳转精确性需求信息和一目标帧的信息,确定所述ES流中目标帧的时间戳;

S140:通过所述ffmpeg对所述ES流进行流操作,并从所述目标帧的一左侧关键帧的位置开始读取视音频帧数据;

S150:利用初始化后的所述英特尔解码器对读取的所述视音频帧数据进行解码,得到所述视音频帧的时间戳;

S160:判断所述视音频帧的时间戳大于或等于所述目标帧的时间戳时,将所述视音频帧数据放入视音频输出队列,以进行输出。

在上述步骤S120中,该多媒体文件的视音频信息可包括多种信息。例如,上述多媒体文件的视音频信息可包括多媒体文件总长度、多媒体文件封装格式、视频编码 方式、视频帧率、视频流长度、视频颜色格式、视频码率、音频编码格式、音频采样率、音频采样格式及音频流长度的能够信息中的一个或多个。

本发明实施例通过上述步骤S120,利用步骤S110得到的视音频信息对英特尔解码器进行初始化,可以准备好硬件加速解码上下文。

本发明实施例中,例如上述S120和S150中,对于不同的多媒体数据,可使用不同的解码器。例如,当读取的视音频流数据为视频数据时,上述英特尔解码器为视频解码器;当读取的视音频流数据为音频数据时,上述英特尔解码器为音频解码器。同样地,利用视频信息对视频解码器进行初始化,利用音频信息对音频解码器进行初始化。

在上述步骤S140中,该目标帧的左侧可包括许多由多个帧构成的成组的帧,每一组帧的最左侧的第一帧可为关键帧,则可从目标帧左侧的各个不同的关键帧开始读取视音频数据。较佳地,步骤S140中的左侧关键帧为位于该目标帧左侧且最接近所述目标帧的关键帧,以此,可减少ffmpeg的流操作任务量,从而提高seek效率。而且,对于有一些存在时间戳漂移现象的多媒体素材,同样能进行较为准确的seek操作。

本发明实施例,针对现有技术中ffmpeg的硬件编码加速缺陷和英特尔解码器(intel media sdk)不能基于流进行跳转(seek)的缺陷,通过有效地一并利用ffmpeg进行流操作和利用英特尔解码器(intel media sdk)读取视音频帧数据,能够既可以利用英特尔解码器(intel media sdk)进行硬件加速解码,又能对被解码播放的多媒体文件进行按需跳转(seek)。

图2是本发明一实施例中的目标帧时间戳的获取方法的流程示意图。如图2所示,在上述步骤S130中,根据一跳转精确性需求信息和一目标帧的信息,确定所述ES流中目标帧的时间戳的方法,可包括步骤:

S131:根据所述跳转精确性需求信息设定所述ES流中的帧发生跳转的阈值;

S132:判断所述目标帧与所述ES流中当前解码输出帧的帧号差值是否大于或等于所述阈值;

S133:如果是,根据所述当前解码输出帧的位置计算得到所述目标帧的时间戳。

在上述步骤S131中,帧发生跳转的阈值,例如是最小时间间隔或最小帧号差值间隔。在上述步骤S132中,上述跳转精确性需求信息可以是跳转前(seek)视音频 帧的帧号与所需跳转(seek)的目标帧的帧号的差值Δt,例如可以用时间差或帧号差表示。若帧发生跳转的阈值为Δm,可当Δt≥Δm时,才计算目标帧的时间戳,以进行seek操作。

本发明实施例中,通过根据跳转精确性需求信息设定发生跳转的阈值,并根据阈值判断是否发生跳转,可以满足各种跳转精确性要求。通过根据当前解码输出帧的位置可以有效计算出目标帧的时间戳。

图3是本发明另一实施例的目标帧时间戳的获取方法的流程示意图。如图3所示,由图2所示的目标帧时间戳的获取方法,还可包括步骤:

S134:根据所述ES流中的第一帧视频帧的时间戳对所述目标帧中的视频帧的时间戳进行校正,根据所述ES流中的第一帧音频帧的时间戳对所述目标帧中的音频帧的时间戳进行校正。

在该较佳实施例中,通过对目标帧的时间戳进行校正,可以得到更准确的目标帧的时间戳。在上述步骤S140~S160中,可以根据校正后的目标帧时间戳读取视音频帧数据。

再如图1所示,本发明实施例的对多媒体文件进行按需跳转的方法,还可包括步骤:

S170:判断所述视音频帧的时间戳小于所述目标帧的时间戳时,丢弃时间戳小于所述目标帧的时间戳的视音频帧数据,并继续读取下一帧的视音频帧数据,直到读取的视音频帧的时间戳大于或等于所述目标帧的时间戳。

本发明实施例中,根据视音频帧的时间戳小于目标帧的时间戳,可以判断所读取的视音频帧还在目标帧的左侧,尚未达到跳转播放位置。丢弃时间戳小于目标帧的时间戳的视音频帧数据,有助于节省解码器的缓存空间。

图4是本发明一实施例中的将视音频帧数据放入视音频输出队列的方法的流程示意图。如图4所示,在上述步骤S160中,将读取的所述视音频帧数据放入视音频输出队列,以进行输出,可包括步骤:

S161:将时间戳大于或等于所述目标帧的读取的所述视音频帧数据中的视频数据放入视频输出队列,以进行视频输出;

S162:将时间戳大于或等于所述目标帧的读取的所述视音频帧数据中的音频数据放入音频输出队列,以进行音频输出;

S163:判断所述视频输出队列和所述音频输出队列均含有进行输出的视音频帧数据时,所述ffmpeg停止读取视音频帧数据。

本发明实施例中,在上述步骤S161和S162中,放入队列的视音频数据用于等待输出。在上述步骤S163中,根据视、音频均有输出时,停止读取视音频帧数据,即结束seek,不仅能够跳转到目标帧处,而且能够同时可使用户通过声音或画面任一个都可以确定已跳转完成,进而能够带给用户较好的听觉和视觉体验。

值得说明的是,本发明各实施例中关于“视音频”的描述,例如视音频帧、视音频帧数据、视音频信息,可以对于音频和视频中的至少一个而言。各步骤、操作或处理中,音频数据可视需要与音频操作相对应,视频数据可视需要与视频操作相对应,例如音频数据通过音频解码器进行解码,视频数据通过视频进行解码,目标帧中音频帧的时间戳可通过第一帧中的音频帧的时间戳进行校正,目标帧中的视频帧的时间戳可通过第一帧中的视频帧的时间戳进行校正。

图5是本发明一实施例对多媒体文件进行按需跳转的方法的流程示意图。如图5所示,首先,利用ffmpeg对输入的多媒体文件进行解复用操作,得到ES流,通过解复用操作可以获取到文件总长度、文件封装格式、视频编码方式、视频帧率、视频流长度、视频颜色格式、视频码率,音频编码格式、音频采样率、音频采样格式、音频流长度等编码相关信息(步骤S201)。

然后,利用获取到的这些编码相关信息对intel解码器进行初始化,准备好硬件加速解码上下文相关信息(步骤S202)。接下来,根据对seek操作精确性的需求,设定判断seek操作发生的阈值为Δm,例如,设定Δm=5帧(步骤S203)。计算当前目标帧与上一帧帧号的差值Δt,若Δt≥Δm则进入seek操作逻辑(步骤S204)。根据目标帧帧号计算出目标视音频帧的时间戳,并利用首帧视音频的时间戳对该值进行校正(步骤S205~S206)。

具体地,可根据目标帧帧号计算初始目标视频帧的时间戳vt,再利用首帧视频的时间戳vs对该初始目标视频帧的时间戳vt进行校正,得到目标视频帧的时间戳VT。例如,目标视频帧的时间戳VT的计算公式可为:

VT=vt+vs, (1)

根据目标帧帧号计算初始目标视频帧的时间戳vt的计算公式可为多种表达形式或计算方式,例如该计算公式可为:

vt=((目标视频帧帧号*(1.0/视频帧率)*基准时间)*基准时间的倒数/视频流的时间基), (2)

其中,目标视频帧帧号可根据一目标帧的信息中得到,视频帧率、基准时间AV_TIME_BASE、及视频流的时间基,可通过解复用得到的多媒体文件的视音频信息得到。基准时间AV_TIME_BASE的具体值可视需要进行选择,例如,AV_TIME_BASE=1000000。

类似地,可根据目标帧帧号计算初始目标音频帧的时间戳at,再利用首帧音频的时间戳as对该初始目标音频帧的时间戳at进行校正,得到目标音频帧的时间戳AT。例如,目标音频帧的时间戳AT的计算公式可为:

AT=at+as。 (3)

根据目标帧帧号计算初始目标音频帧的时间戳at的计算公式可为多种表达形式或计算方式,例如该计算公式可为:

at=((目标音频帧帧号*(1.0*一帧音频的采样数*基准时间/目标音频采样率)*基准时间的倒数/音频流的时间基) (4)

其中,公式(4)可满足:一帧音频的采样数=目标音频采样率/视频帧率,目标音频帧帧号=目标音频采样索引值/一帧音频的采样数。目标音频采样索引值可通过seek操作发生时接口调用者传入的接口参数中得到。目标音频采样率是指调用者所需要的音频采样率,目标音频采样率可根据接口调用者设置的目标解码参数结构体中得到。基准时间AV_TIME_BASE的具体值可视需要进行选择,例如,AV_TIME_BASE=1000000。

上述实施例中,通过步骤S205~S206,例如,通过公式(1)~(2),可得到准确的基于视频流时间基的目标视频时间戳VT;类似地,通过公式(3)~(4),可得到准确的目标音频帧的时间戳AT。

在得到准确的目标视频帧的时间戳VT与目标音频帧的时间戳AT后,可利用ffmpeg进行流操作。较佳地,先跳转到距离目标视音频帧(可为目标视频帧或目标音频帧)最近的左侧关键帧位置,并可通知intel解码器清空其内部缓存,以便后续读取数据(步骤S207)。

利用ffmpeg由该最近的左侧关键帧位置开始,从文件流(ES流)中读取音视频帧数据(步骤S208)。若读到的为视频帧,则送入intel视频解码器解码,判断该视 频帧的时间戳是否小于VT,若是,则直接丢弃,否则,放入视频输出队列等待输出(步骤S209~S211)。若读到的为音频帧,则送入intel音频解码器解码,并判断输出的音频帧是否小于AT,若是,则直接抛弃,否则,放入音频输出队列,等待输出(步骤S212~S214)。当视频帧和音频帧均有输出时,seek结束。

本发明实施例,能够既可以充分利用英特尔解码器(intel media sdk)进行硬件加速解码,又能允许使用者对被解码播放的多媒体文件进行按需跳转(seek),可以很好地实现基于英特尔解码器intel media sdk的多媒体文件的硬件加速解码播放与按需跳转seek。本发明能够综合利用intel media sdk与ffmpeg sdk来实现视音频同步seek的方法。同时,由于对目标视频帧、目标音频帧的匹配采用最接近原则(最左侧关键帧),因而对于有一些存在时间戳漂移现象的多媒体素材,同样能进行较为准确的seek操作。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算 机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1