基于播放器的视频录制方法及装置与流程

文档序号:20679942发布日期:2020-05-08 18:17阅读:181来源:国知局
基于播放器的视频录制方法及装置与流程

本发明涉及视频录制技术,尤其涉及一种基于播放器的视频录制方法及装置。



背景技术:

近年来,随着dvbca(digitalvideobroadcastingconditionalaccess,数字视频广播条件接收)技术的高速发展以及移动消费产品智能化进程持续推进,用户在享受传统媒体节目的同时,对节目的呈现形式及媒体播放功能的多样化也在不断提高,例如用户希望在播放器上增加pvr(personalvideorecorder,个人视频录像机),从而让用户在各种移动终端享受传统dvb直播节目带来的不同体验,让用户在享受直接节目所带来快感的同时,还可以录制保留节目精彩瞬间,实现存储经典及分享精彩的人性化体验。

但是现有的音视频播放器采用的是解复用、解码、渲染的流程设计,以usbdongleplayer(usb适配播放器)为例,它针对来自usbdongle(usb适配器)的实时mpeg2-ts音视频流的处理,需要经过解复用、解码、渲染等一系列过程,而这一系列过程都是基于directshow(微软公司在activemovie和videoforwindows的基础上推出的新一代基于com(componentobjectmodel)的流媒体处理的开发包)的黑盒状态下实现的,一般个人视频录像功能都是在用户点击的时间点开始录制或者采用提前录制的方法,而播放器的解复用、解码操作会因为缓冲堆积,存在很大的时间消耗问题,无法实现个人视频录像功能从精确的时间点录制。

因此,如何提供一种可以实现精准的个人视频录制功能的方法是业界亟待解决的技术问题。



技术实现要素:

本发明为了解决上述现有技术中音频与其频谱图无法实时同步显示的技术问题,提出一种基于播放器的视频录制方法及装置。

本发明的基于播放器的视频录制方法,包括:

拷贝播放器解码之前的数据进行缓存,记录第一帧播放数据对应的由播放器的解复用模块输出的数据帧的第一时间戳,以及记录第一帧播放数据对应的由播放器的音频解码模块和/或视频解码模块输出的数据帧对应的第二时间戳;

当用户开始录制时,获取录制开始时间,根据录制开始时间、所述第一帧播放数据对应的第一时间戳和第二时间戳计算得到录制的第一帧对应的由所述解复用模块输出的数据帧的第一时间戳,根据录制的第一帧对应的第一时间戳找到缓存的数据中的对应数据帧开始录制;

当用户停止录制时,获取录制结束时间,并计算得到录制的最后帧对应的由所述解复用模块输出的数据帧的第一时间戳,根据录制的最后帧对应的第一时间戳结束录制。

进一步,所述放器解码之前的数据为播放器的数据源过滤模块输出的数据,或者播放器的解复用模块输出的音频数据和/或视频数据,或者为输入至所述数据源过滤模块的数据。当缓存的是所述解复用模块之前的数据时,对所述数据进行解复用后找到与录制的第一帧对应的第一时间戳相同的数据进行录制。

进一步,所述录制的第一帧或最后帧对应的第一时间戳根据公式ptsn=pts0+tn–t0计算得到,所述ptsn为录制的第一帧或最后帧对应的第一时间戳,所述pts0为第一帧播放数据对应的第一时间戳,所述tn为所述录制开始时间或录制结束时间,所述t0为第一帧播放数据对应的第二时间戳。

优选的,所述缓存的数据为10秒以内的播放数据。

本发明提出的基于播放器的视频录制装置,采用上述技术方案所述的视频录制方法进行录制。

其中,所述播放器包括:数据源过滤模块、解复用模块、视频解码模块、音频解码模块;

所述视频录制装置包括:音视频数据预缓冲模块,用于拷贝播放器解码之前的数据进行缓存;音频或视频数据过滤模块,用于记录第一帧播放数据对应的由所述解复用模块输出的数据帧的第一时间戳;音频或视频解码数据过滤模块,用于记录所述第一帧播放数据对应的由所述音频解码模块和/或视频解码模块输出的数据帧对应的第二时间戳;录制模块,从所述音频或视频数据过滤模块和音频或视频解码数据过滤模块中取到录制开始时间和录制结束时间以及第一帧播放数据对应的第一时间戳和第二时间戳,计算得到录制的第一帧和最后帧对应的第一时间戳,并根据录制的第一帧和最后帧对应的第一时间戳从缓存的数据中找到对应的数据进行录制。

进一步还包括存储模块,用于存储录制的数据。

本发明有效的实现了基于windowsdirectshow黑盒状态下对流数据录制起始时间点的精准测算功能,通过录制起始时间点的测算与流数据预缓冲机制,完美解决在实现pvr功能时无法准确录制到精彩片段或视频数据冗余的问题。

附图说明

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

图1为本发明的结构框图。

图2为本发明的视频录制的数据处理流程图。

具体实施方式

为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

下面结合附图以及实施例对本发明的原理及结构进行详细说明。

图1给出了本发明基于播放器的视频录制装置的一个实施例的结构框图。本发明的播放器包括数据源过滤模块、解复用模块、视频解码模块、音频解码模块、视频渲染器、音频渲染器、显示器、扬声器、存储模块、音视频数据预缓冲模块、音频或视频数据过滤模块、音频或视频解码数据过滤模块以及录制模块。其中,存储模块、音视频数据预缓冲模块、音频或视频数据过滤模块、音频或视频解码数据过滤模块以及录制模块为本发明进行视频录制装置的主要模块。本实施例的播放器为基于directshow框架的播放器。

数据源过滤模块主要负责通过usb接口从usbdongle设备(usb适配设备)读取mpeg-2节目流数据,接收到节目流后进行解密处理,再将节目流数据推向下一级的解复用模块。

解复用模块用于将节目流进行分离处理,由于传输的节目流是多节目复用流,因此需要解复用模块将传输流进行分离处理,得到当前播放节目的音、视频es流。

音频解码模块接收解复用模块输出的音频es流,负责音频es流的解码处理,并输出pcm数据到音频渲染器。

音频渲染器主要负责pcm数据分析、渲染,最终输出音频给扬声器。

视频解码模块主要对压缩的视频图像数据(视频es流的数据)进行解码处理,得到原始图像数据,输出的是yuv格式数据或rgb数据,或者其他可以用来渲染的数据。

视频渲染器主要负责图像原始数据分析、渲染出图像并输出到显示器。

音视频数据预缓冲模块用于拷贝播放器解码之前的数据进行缓存,音视频数据预缓冲模块拷贝的可以是播放器的数据源过滤模块输出的数据,或者是播放器的解复用模块输出的音频数据和/或视频数据,或者是usbdongle输入至数据源过滤模块的数据。在图1的实施例中,音视频数据预缓冲模块拷贝的是数据源过滤模块输出的数据,一般情况下mpeg2-ts音视频流被送入解复用模块之后,原始mpeg2-ts音视频流数据将会被清空,本发明预存储一段时间的音视频数据以便于我们能在重新找回过去时间点上的一段视频数据,以确保pvr视频数据录制的准确性,即可以提前将实时数据流中一段时间的将要播放的音视频数据缓存在内存中,为了节约内存空间,一般存储10秒以内的音视频数据,例如存储3秒、5秒的数据等,后面的数据将覆盖前面缓存的数据,这样内存消耗极小。

音频或视频数据过滤模块在本实施例中以音频数据过滤模块为具体例子进行说明,视频数据过滤模块也是相同的原理。在解复用模块与音频解码模块之间添加音频数据过滤模块主要用于音频数据的截取,从而实现记录第一帧播放数据对应的由解复用模块输出的数据帧的第一时间戳的目的,在本实施例中,每一帧播放数据的第一时间戳都可以通过imediasample对象(媒体采样com对象),然后通过imediasample的getmediatime接口分析出音频帧数据的第一时间戳,记为ptsn,n大于等于0,第一帧播放数据对应的第一时间戳为pts0。

音频或视频解码数据过滤模块用于记录所述第一帧播放数据对应的由所述音频解码模块和/或视频解码模块输出的数据帧对应的第二时间戳,本实施例也以音频数据过滤模块为例进行说明,音频数据过滤模块得到音频pcm数据后,获取并记录第一帧播放数据送入音频渲染器的音频数据,同时记录该帧数据送入渲染器时的referencetime(t0)并作为计时的起始点,作为一个时间参考点用来推算视频播放的时间漂移。

录制模块从所述音频或视频数据过滤模块和音频或视频解码数据过滤模块中取到录制开始时间和录制结束时间以及第一帧播放数据对应的第一时间戳和第二时间戳,计算得到录制的第一帧和最后帧对应的第一时间戳,并根据录制的第一帧和最后帧对应的第一时间戳从缓存的数据中找到对应的数据进行录制。即该模块主要负责pvr功能的完整实现,取到相关时间数据(pts0、t0、tn)等,通过时间偏移算法计算出录制的第一帧对应的第一时间戳ptsn,通过录制的第一帧对应的第一时间戳ptsn从音视频预存储模块查找到音视频数量录制起始点,然后将音频和/或视频数据写入到存储模块。

图2给出的是本发明基于音频数据的录制的一个方法流程图。若是基于视频数据对音频和/或视频进行录制也是相同的原理。

当mpeg2-ts数据流输入至数据源过滤模块,数据源过滤模块进行解码以后数据分两路传输给解复用模块和音视频数据预缓冲模块,两路数据完全相同。然后音视频数据预缓冲模块取一小块内存空间持续进行缓存,新的数据覆盖旧得数据,具体是将将ts数据先预存足够时长的数据到fifo缓存中。

解复用模块收到数据以后进行解复用分成视频数据和音频数据,视频数据传输给下一个视频解码模块,音频数据传输给下一个音频解码模块。本实施例获取解复用模块输出给音频解码模块的音频数据,记录第一帧播放数据对应的由播放器的解复用模块输出的数据帧的第一时间戳,本实施例中利用directshow的ctransinplacefilter从解复用之后的数据中获取起播后的第一帧音频原始数据结构体对象imediasample,并通过imediasample对象的getmediatime接口获取该帧数据的pts,记录为pts0。

继续获取音频解码模块输出给音频渲染器的数据,从中获取并记录第一帧播放数据对应的由音频解码模块输出的数据帧对应的第二时间戳。本实施例中,利用directshow的ctransinplacefilter从音频解码之后确认第一帧pcm数据的输出,同时通过directshow的queryinterface接口取出ireferenceclock对象,用ireferenceclock的成员函数gettime获取准确的referencetime(time0),并记录第一帧的第二时间戳t0=time0。

当用户开始录制时,获取录制开始时间tn,根据录制开始时间tn、第一帧播放数据对应的第一时间戳pts0和第二时间戳t0计算得到录制的第一帧对应的由解复用模块输出的数据帧的第一时间戳ptsn,根据录制的第一帧对应的第一时间戳ptsn找到缓存的数据中的对应数据帧开始录制,具体的本实施例中,利用ireferenceclock的成员函数gettime获取录制开始时的referencetime(tn),利用算法ptsn=pts0+tn–t0计算出录制起始点的第一时间戳ptsn。通过推算出来的录制的第一帧的第一时间戳ptsn,从音视频预缓存数据里面找到第一时间戳pts等于ptsn的数据(在本实施例中需要对这一小段数据先进行解复用处理),然后将pts大于ptsn数据写入本地磁盘,直到用户停止录制。

当用户停止录制时,获取录制结束时间tm,并计算得到录制的最后帧对应的由所述解复用模块输出的数据帧的第一时间戳ptsm,根据录制的最后帧对应的第一时间戳ptsm结束录制,具体的本实施例中利用ireferenceclock的成员函数gettime获取录制结束时的referencetime(tm)得到录制结束时间,即最后帧对应的第二时间戳。使用公式为:ptsm=ptsn+tm–tn,当录制ts数据的音频pts大于最后帧对应的第一时间戳ptsm时结束录制。

本发明基于上述技术方案提前将解码前的数据流进行预缓冲,从而利于后续的播放数据的录制,通过在数据解复用与音频解码器之间设计一套pts获取组件、在音频解码器与渲染器之间设计一套起播时间获取计算机制。然后基于视频录制的开始时间对视频录制的第一帧以及最后帧进行对应的第一时间戳pts测算,从而实现可以一套可以消除directshow黑盒模式下由于解复用、解码时间消耗导致pvr功能出现时间误差的问题的技术方案,做到所见即所录制的内容。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

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