首页 / 专利库 / 多媒体工具与应用 / 视频编码 / 在native层实现无缝录像的方法、装置及终端设备

在native层实现无缝录像的方法、装置及终端设备

阅读:2发布:2020-09-16

专利汇可以提供在native层实现无缝录像的方法、装置及终端设备专利检索,专利查询,专利分析的服务。并且本 发明 实施例 提供一种在native层实现无缝录像的方法、装置及终端设备,其在通过录像 接口 StagefrightRecorder中的 编码器 对音视频采集器件采集到的原始音视频数据进行编码得到音 视频编码 数据的 基础 上,通过两个封装器交替执行对所述音视频编码数据的封装操作,且在一个封装器停止一次封装过程之前,预先启动另一个封装器并开始封装操作,使得相邻两个录像文件存在重叠部分,从而可以完全消除漏秒现象,真正实现无缝录像。同时,本发明实施例在native层实现,从而可以直接获取音视频采集器件采集到的原始音视频数据,然后对其进行编码及封装,可以保证最终得到的录像文件的 帧 率不降低,提高录像 质量 。,下面是在native层实现无缝录像的方法、装置及终端设备专利的具体信息内容。

1.一种在Android系统native层实现无缝录像的方法,其特征在于,包括:
启动第一封装器,并通过第一封装器对录像接口StagefrightRecorder中的编码器输出的音视频编码数据执行封装操作;所述音视频编码数据为所述编码器对音视频采集器件采集到的原始音视频数据进行编码得到的编码数据;
在所述第一封装器停止封装之前,启动第二封装器,并通过所述第二封装器对所述音视频编码数据执行封装操作;
在所述第二封装器停止封装之前,重新启动所述第一封装器。
2.根据权利要求1所述的方法,其特征在于,所述启动第一封装器,包括:创建第一录像文件,并在所述第一录像文件中写入解码配置数据;
所述启动第二封装器,包括:创建第二录像文件,并在所述第二录像文件中写入解码配置数据。
3.根据权利要求1或2所述的方法,其特征在于,在所述第一封装器停止封装之前,启动第二封装器,包括:
当当前时刻到达第一预启时刻时,启动所述第二封装器;其中,所述第一预启时刻相对于第一分割时刻的提前量为第一预设间隔时间,所述第一分割时刻为所述第一封装器停止封装的时刻;
在所述第二封装器停止封装之前,重新启动所述第一封装器,包括:
当当前时刻到达第二预启时刻时,启动所述第一封装器;其中,所述第二预启时刻相对于第二分割时刻的提前量为第二预设间隔时间,所述第二分割时刻为所述第二封装器停止封装的时刻。
4.根据权利要求3所述的方法,其特征在于,还包括:
在当前时刻到达所述第一分割时刻时,控制所述第一封装器停止封装操作,并保存第一封装器封装得到的录像文件;
在当前时刻到达所述第二分割时刻时,控制所述第二封装器停止封装操作,并保存第二封装器封装得到的录像文件。
5.根据权利要求3所述的方法,其特征在于,还包括:
在启动第一封装器后,检测所述音视频编码数据中是否有关键到来,并在所述关键帧到来后,执行通过所述第一封装器对所述音视频编码数据执行封装操作的步骤;
和/或,在启动第二封装器后,检测所述音视频编码数据中是否有关键帧到来,并在所述关键帧到来后,执行通过所述第二封装器对所述音视频编码数据执行封装操作的步骤。
6.根据权利要求5所述的方法,其特征在于,还包括:
根据相邻两个关键帧的间隔时间,确定所述第一预设间隔时间和/或所述第二预设间隔时间。
7.根据权利要求3所述的方法,其特征在于,还包括:
在所述第一分割时刻和所述第二预启时刻之间的任意时刻,释放所述第一封装器,并根据封装器创建线程重新创建得到所述第一封装器;
和/或,在所述第二分割时刻和所述第一预启时刻之间的任意时刻,释放所述第二封装器,并根据封装器创建线程重新创建得到所述第二封装器。
8.一种在Android系统native层实现无缝录像的装置,其特征在于,至少包括:第一封装控制单元和第二封装控制单元;
所述第一封装控制单元,用于在接收到第一启动指令时,启动所述第一封装器,通过所述第一封装器对录像接口StagefrightRecorder中的编码器输出的音视频编码数据执行封装操作,并在所述第一封装器停止封装之前,发送第二预启指令;所述音视频编码数据为所述编码器对音视频采集器件采集到的原始音视频数据进行编码得到的编码数据;
所述第二封装控制单元,用于在接收到所述第二预启指令时,启动第二封装器,通过所述第二封装器对所述音视频编码数据执行封装操作,并在所述第二封装器停止封装之前,发送所述第一启动指令。
9.根据权利要求8所述的装置,其特征在于,还包括:
关键帧检测单元,用于在启动第一封装器后,检测所述音视频编码数据中是否有关键帧到来,并在所述关键帧到来后,触发所述第一封装控制单元执行所述通过所述第一封装器对所述音视频编码数据执行封装操作的步骤;
和/或,在启动第二封装器后,检测所述音视频编码数据中是否有关键帧到来,并在所述关键帧到来后,触发所述第二封装控制单元执行所述通过所述第二封装器对所述音视频编码数据执行封装操作的步骤。
10.一种终端设备,其特征在于,包括:摄像头、麦克、处理器、及存储器;所述存储器中存储有可在所述处理器上运行的计算机程序;所述处理器通过预设接口与所述摄像头、麦克风和存储器连接;
所述摄像头用于采集视频数据;
所述麦克风用于采集音频数据;
所述处理器执行所述计算机程序时实现权利要求1-7中任一项所述的方法。

说明书全文

在native层实现无缝录像的方法、装置及终端设备

技术领域

[0001] 本发明实施例涉及录像技术领域,尤其涉及一种在Android系统native层实现无缝录像的方法、装置及终端设备。

背景技术

[0002] 生产生活中,很多场合都需要持续录像,如街道上的监控录像、生产车间的监控录像、汽车上的行车记录等。由于录像时间越长,录制的视频文件越大,故持续录像过程中,不可能将录制的视频都保存在一个文件中,需要根据时间进行分段录像,即每录制一段时间就生产一个视频文件。例如,预先设定每个视频文件的录制时间为5分钟,从9:00:00开始录制,则理论上应该依次得到如下视频文件:9:00:00~9:05:00内录制的第一个录像文件、9:05:00~9:10:00内录制的第二个录像文件、9:10:00~9:15:00内录制的第三个录像文件等。
[0003] 但现有录像设备所采用的录像方案,从保存一个录像文件(停止录像)到新建一个录像文件(重新开始录像),是需要一定的时间间隔的;而在这段时间内,录像程序至少需要完成释放解码器和封装器、重新创建封装器和解码器等动作,不能进行录像,即所谓的漏秒现象,漏秒时间通常在1s左右。例如上文所述实例中,对于第二个录像文件,其开始录像的时间会比9:05:00晚,如可能是9:05:01,相应的,第二个录像文件的实际录像时间为9:05:01~9:10:01。
[0004] 可见,现有录像方案并不能真正实现持续录像,在漏秒的时间段内,极有可能发生重要事件,却不能被录制到录像文件中。因此,亟需一种可以消除漏秒现象的无缝录像方案。

发明内容

[0005] 本发明实施例中提供了一种在Android系统native层实现无缝录像的方法、装置及终端设备,以解决现有持续录像方案中普遍存在的漏秒问题。
[0006] 第一方面,本发明实施例提供了一在Android系统native层实现无缝录像的方法,包括:
[0007] 启动第一封装器,并通过第一封装器对录像接口StagefrightRecorder中的编码器输出的音视频编码数据执行封装操作;所述音视频编码数据为所述编码器对音视频采集器件采集到的原始音视频数据进行编码得到的编码数据;
[0008] 在所述第一封装器停止封装之前,启动第二封装器,并通过所述第二封装器对所述音视频编码数据执行封装操作;
[0009] 在所述第二封装器停止封装之前,重新启动所述第一封装器。
[0010] 可选的,所述启动第一封装器,包括:创建第一录像文件,并在所述第一录像文件中写入解码配置数据;
[0011] 所述启动第二封装器,包括:创建第二录像文件,并在所述第二录像文件中写入解码配置数据。
[0012] 可选的,在所述第一封装器停止封装之前,启动第二封装器,包括:
[0013] 当当前时刻到达第一预启时刻时,启动所述第二封装器;其中,所述第一预启时刻相对于第一分割时刻的提前量为第一预设间隔时间,所述第一分割时刻为所述第一封装器停止封装的时刻;
[0014] 在所述第二封装器停止封装之前,重新启动所述第一封装器,包括:
[0015] 当当前时刻到达第二预启时刻时,启动所述第一封装器;其中,所述第二预启时刻相对于第二分割时刻的提前量为第二预设间隔时间,所述第二分割时刻为所述第二封装器停止封装的时刻。
[0016] 可选的,所述方法还包括:
[0017] 在当前时刻到达所述第一分割时刻时,控制所述第一封装器停止封装操作,并保存第一封装器封装得到的录像文件;
[0018] 在当前时刻到达所述第二分割时刻时,控制所述第二封装器停止封装操作,并保存第二封装器封装得到的录像文件。
[0019] 可选的,所述方法还包括:
[0020] 在启动第一封装器后,检测所述音视频编码数据中是否有关键到来,并在所述关键帧到来后,执行通过所述第一封装器对所述音视频编码数据执行封装操作的步骤;
[0021] 和/或,在启动第二封装器后,检测所述音视频编码数据中是否有关键帧到来,并在所述关键帧到来后,执行通过所述第二封装器对所述音视频编码数据执行封装操作的步骤。
[0022] 可选的,所述方法还包括:
[0023] 根据相邻两个关键帧的间隔时间,确定所述第一预设间隔时间和/或所述第二预设间隔时间。
[0024] 可选的,所述方法还包括:
[0025] 在所述第一分割时刻和所述第二预启时刻之间的任意时刻,释放所述第一封装器,并根据封装器创建线程重新创建得到所述第一封装器;
[0026] 和/或,在所述第二分割时刻和所述第一预启时刻之间的任意时刻,释放所述第二封装器,并根据封装器创建线程重新创建得到所述第二封装器。
[0027] 第二方面,本发明实施例提供了一种在Android系统native层实现无缝录像的装置,包括:第一封装控制单元和第二封装控制单元;
[0028] 所述第一封装控制单元,用于在接收到第一启动指令时,启动所述第一封装器,通过所述第一封装器对录像接口StagefrightRecorder中的编码器输出的音视频编码数据执行封装操作,并在所述第一封装器停止封装之前,发送第二预启指令;所述音视频编码数据为所述编码器对音视频采集器件采集到的原始音视频数据进行编码得到的编码数据;
[0029] 所述第二封装控制单元,用于在接收到所述第二预启指令时,启动第二封装器,通过所述第二封装器对所述音视频编码数据执行封装操作,并在所述第二封装器停止封装之前,发送所述第一启动指令。
[0030] 可选的,所述第一封装控制单元具体被配置为:
[0031] 当当前时刻到达第一预启时刻时,启动所述第二封装器;其中,所述第一预启时刻相对于第一分割时刻的提前量为第一预设间隔时间,所述第一分割时刻为所述第一封装器停止封装的时刻;
[0032] 所述第二封装控制单元具体被配置为:
[0033] 当当前时刻到达第二预启时刻时,启动所述第一封装器;其中,所述第二预启时刻相对于第二分割时刻的提前量为第二预设间隔时间,所述第二分割时刻为所述第二封装器停止封装的时刻。
[0034] 可选的,所述第一封装控制单元还用于:在当前时刻到达所述第一分割时刻时,控制所述第一封装器停止封装操作,并保存第一封装器封装得到的录像文件;
[0035] 所述第二封装控制单元还用于:在当前时刻到达所述第二分割时刻时,控制所述第二封装器停止封装操作,并保存第二封装器封装得到的录像文件。
[0036] 可选的,所述装置还包括:
[0037] 关键帧检测单元,用于在启动第一封装器后,检测所述音视频编码数据中是否有关键帧到来,并在所述关键帧到来后,触发所述第一封装控制单元执行所述通过所述第一封装器对所述音视频编码数据执行封装操作的步骤;
[0038] 和/或,在启动第二封装器后,检测所述音视频编码数据中是否有关键帧到来,并在所述关键帧到来后,触发所述第二封装控制单元执行所述通过所述第二封装器对所述音视频编码数据执行封装操作的步骤。
[0039] 第三方面,本发明实施例提供了一种终端设备,包括:摄像头、麦克、处理器、及存储器
[0040] 所述存储器中存储有可在所述处理器上运行的计算机程序;所述处理器通过预设接口与所述摄像头、麦克风和存储器连接;
[0041] 所述摄像头用于采集视频数据;
[0042] 所述麦克风用于采集音频数据;
[0043] 所述处理器用于执行所述计算机程序,以使所述终端设备实现以上任一实施例所述的无缝录像方法。
[0044] 由以上技术方案可知,本发明实施例在通过录像接口StagefrightRecorder中的编码器对音视频采集器件采集到的原始音视频数据进行编码得到音视频编码数据的基础上,通过两个封装器交替执行对所述音视频编码数据的封装操作,且在一个封装器停止一次封装过程之前,预先启动另一个封装器并开始封装操作,使得相邻两个录像文件存在重叠部分,从而可以完全消除漏秒现象,真正实现无缝录像。同时,本发明实施例在native层实现,从而可以直接获取音视频采集器件采集到的原始音视频数据,然后对其进行编码及封装,可以保证最终得到的录像文件的帧率不降低,提高录像质量
[0045] 应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。附图说明
[0046] 此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
[0047] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0048] 图1是本发明实施例提供的一种在Android系统native层实现无缝录像的方法的流程图
[0049] 图2是本发明实施例提供的无缝录像方法执行时的时间轴示意图;
[0050] 图3是本发明实施例提供的另一种在Android系统native层实现无缝录像的方法的信号流图;
[0051] 图4是图3所示无缝录像方法对应的信号流图;
[0052] 图5是本发明实施例提供的一种在Android系统native层实现无缝录像的装置的结构示意图;
[0053] 图6是本发明实施例提供的一种具有无缝录像功能的终端设备的结构框图

具体实施方式

[0054] 本发明实施例提供了一种在Android系统native层实现无缝录像的方法、装置及终端设备,以解决现有持续录像方案中普遍存在的漏秒问题。
[0055] 发明人在研究过程中发现,现有技术中,在Android系统的本地框架层,即native层,一般通过录像接口StagefrightRecorder来实现持续录像;具体的,StagefrightRecorder控制一个编码器和一个封装器进行循环创建和释放,编码器和封装器每创建一次,完成一个预定时间段内的音视频数据的编码和封装操作,得到一个录像文件,然后释放该封装器并重新创建,从而开始对下一个时间段的音视频数据的编码和封装操作,得到下一个录像文件;由于摄像头采集的录像数据时实时产生的,StagefrightRecorder对在编码器和封装器释放并重新创建的时间段内产生的录像数据,无法进行封装,也就无法这段时间内的音视频数据保存至录像文件中,导致了漏秒现象。有鉴于此,本发明实施例在现有录像技术的基础上,对StagefrightRecorder中的录像控制过程进行改进,即:沿用现有StagefrightRecorder的编码流程,但是编码器不再随封装过程循环创建和释放,而是创建后一直存在并执行编码操作,保证编码过程不存在漏秒;同时,将现有StagefrightRecorder中的封装流程替换为:通过两个封装器交替工作,实现对编码器持续输出的音视频编码数据不间断的封装操作,保证封装过程不存在漏秒,从而保证开始录像后每一时刻的录像数据都可以被编码、封装并写入录像文件中,消除漏秒现象,实现无缝的持续录像。以下结合附图对本发明实施例进行详细阐述。
[0056] 图1为本发明一个可行的实施例提供的在Android系统native层实现无缝录像的方法的流程图。参照图1,所述无缝录像方法至少包括以下步骤:
[0057] S11、通过录像接口StagefrightRecorder中的编码器对音视频采集器件采集到的原始音视频数据进行编码,得到音视频编码数据;
[0058] 上述原始音视频数据包括,通过摄像头采集到的视频数据,以及通过麦克风采集到的音频数据等。通过StagefrightRecorder创建的编码器包括视频编码器和音频编码器,通过该视频编码器对摄像头采集的录像数据流进行编码,得到所述视频编码数据,同时通过该音频编码器对麦克采集的音频数据流进行编码,得到所述音频编码数据。
[0059] 可见,本实施例均直接对摄像头和麦克风采集的源数据进行编码,得到音视频编码数据,可以保证视频的帧率和音频的采样率,从而保证录像文件的质量。
[0060] S12、启动所述第一封装器,通过所述第一封装器接收所述音视频编码数据;
[0061] S13、通过所述第一封装器对所述音视频编码数据执行封装操作,并在所述第一封装器停止封装之前,执行步骤S14;
[0062] S14、启动所述第二封装器,通过所述第二封装器接收所述音视频编码数据;
[0063] S15、通过所述第二封装器对所述音视频编码数据执行封装操作,并在所述第一封装器停止封装之前,执行步骤S12。
[0064] 本实施例中,步骤S13在第一封装器停止封装之前就启动第二封装器,并通过第二封装器接收音视频编码数据,使得,从第二封装器启动到第一封装器停止封装的这段时间内,同时有第一封装器和第二封装器接收音视频编码数据并进行封装操作,从而保证从“由第一封装器执行封装操作”切换到“由第二封装器执行封装操作”的过程中不会发生漏秒现象;同样的,步骤S15中,在第二封装器停止封装之前,就再次执行步骤S12,启动第一封装器,并通过第一封装器接收音视频编码数据,使得,从第一封装器启动到第二封装器停止封装的这段时间内,同时有第二封装器和第一封装器接收音视频编码数据并进行封装操作,从而保证从“由第二封装器执行封装操作”切换到“由第一封装器执行封装操作”的过程中不会发生漏秒现象。
[0065] 图2为本实施例提供的无缝录像方法执行时的时间轴示意图。本实施例中,每个封装器每执行一次封装操作,就会生成一个录像文件,参照图2,在开始录像后的t1时刻,首先由第一封装器接收音视频编码数据并进行封装;然后,在该第一封装器的本次封装过程停止之前的t2时刻,第二封装器就启动并对当前编码器输出的音视频编码数据进行封装,此时,第一封装器也在继续接收所述音视频编码数据并进行封装;然后,在t3时刻,第一封装器停止封装,得到一个录像文件F1,第二封装器则继续执行封装操作;与t2时刻类似的,在第二封装器停止封装前的t4时刻,第一封装器再次启动执行封装操作;在t5时刻,第二封装器停止封装,得到录像文件F2,第一封装器继续执行封装操作……可见,在t2~t3这一时间段内,两个封装器重叠工作,录像文件F1和F2中都保存有t2~t3这一时间段内录制的音视频数据,同样的,在t4~t5这一时间段内,两个封装器也重叠工作,使得录像文件F2和F3中都保存有t4~t5这一时间段内录制的音视频数据。
[0066] 即,本实施例通过第一封装器和第二封装器之间有重叠的交替工作,使得整个录像过程得到的相邻两个录像文件中,前一个录像文件的末尾部分都与后一个录像文件的开头部分有重叠,从而可以彻底避免漏秒现象,保证从开始录像到录像结束过程中的每个时刻的音视频数据都被封装入录像文件中,真正实现无缝录像。
[0067] 由以上技术方案可知,本发明实施例在现有Android系统native层普遍采用的录像接口StagefrightRecorder的基础上进行改进,控制其封装过程变为:在录像过程中,通过两个封装器交替执行对音视频编码数据的封装操作,且在一个封装器停止一次封装过程之前,另一个封装器已经预先启动并开始封装操作,使得相邻两个录像文件存在重叠部分,可以完全消除漏秒现象,真正实现无缝录像。同时,本发明实施例在native层实现,从而可以直接获取音视频采集器件采集到的原始音视频数据,然后对其进行编码及封装,可以保证最终得到的录像文件的帧率不降低,提高录像质量。
[0068] 可选的,本实施例中,可以基于C/C++等编码语言,在StagefrightRecorder中扩展一个新的循环封装控制程序LoopWriter,替换其原有的封装控制程序,在开始录像后,StagefrightRecorder中的编码器和该LoopWriter一直运行,编码器一直输出音视频编码数据(步骤S11),LoopWriter控制两个封装器的循环交替工作(步骤S12~S16),不间断地对所述音视频编码数据进行封装,直至录像结束。
[0069] 在本发明一个可行的实施例中,上述步骤S12中启动第一封装器,具体可以包括:创建第一录像文件,并在所述第一录像文件中写入解码配置数据;相应的,步骤S14中启动第二封装器,具体可以包括:创建第二录像文件,并在所述第二录像文件中写入解码配置数据。
[0070] 即,每个封装器在开始新的一次封装过程时,首先创建本次封装的录像文件,指定该录像文件的文件名(如根据当前的系统时间命名为20160926090000.mp4,表示在2016年9月26日9点开始录制),并在该录像文件中写入解码配置数据,以在播放该录像文件播放时,根据该解码配置数据对该录像文件进行解码。
[0071] 图3为本发明实施例提供的在Android系统native层实现无缝录像的另一种方法的流程图,图4为图3对应的信号流图。参照图3和图4,该方法包括以下步骤:
[0072] S11、通过录像接口StagefrightRecorder中的编码器对音视频采集器件采集到的原始音视频数据进行编码,得到音视频编码数据;
[0073] S12、启动所述第一封装器,通过所述第一封装器接收所述音视频编码数据,并分别执行步骤S131、S132和S133;
[0074] S131、通过所述第一封装器对所述音视频编码数据开始执行封装操作;
[0075] S132、判断当前时刻是否为第一预启时刻,如果是,则继续执行步骤S14,否则重复执行步骤S132;
[0076] S133、判断当前时刻是否为第一分割时刻,如果是,则执行步骤S134,否则重复执行步骤S133;
[0077] S134、控制所述第一封装器停止封装操作,并保存第一封装器封装得到的录像文件;
[0078] S14、在所述第一封装器停止封装之前,启动所述第二封装器,通过所述第二封装器接收所述音视频编码数据,并分别执行步骤S151、S152和S153;
[0079] S151、通过所述第二封装器对所述音视频编码数据执行封装操作;
[0080] S152、判断当前时刻是否为第二预启时刻,如果是,则返回步骤S12,否则重复执行步骤S152;
[0081] S153、判断当前时刻是否为第二分割时刻,如果是,则执行步骤S154,否则重复执行步骤S153;
[0082] S154、控制所述第二封装器停止封装操作,并保存第二封装器封装得到的录像文件。
[0083] 本实施例中,第一预启时刻早于第一分割时刻,二者之间的时间差(下称第一预设间隔时间)可以根据实际需求进行设置;同样的,第二预启时刻早于第二分割时刻,二者之间的时间差(下称第二预设间隔时间)也可以根据实际需求进行设置。所述第一预设间隔时间与第二预设间隔时间可以相同,也可以不同。
[0084] 在一个可行的实施例中,可以在开始录像前,设置每个录像文件的录像时长,以及第一预设间隔时间与第二预设间隔时间,从而在通过第一封装器进行封装时,根据该第一封装器封装操作的开始时间(也即第一封装器当前保存的录像文件的开始时间)和所述录像时长开始时间确定第一分割时刻,再根据该第一分割时刻和预先设置的第一预设间隔时间确定第一预启时刻;同样的,在通过第二封装器进行封装时,根据该第二封装器封装操作的开始时间(也即第二封装器当前保存的录像文件的开始时间)和所述录像时长开始时间确定第二分割时刻,再根据该第二分割时刻和预先设置的第二预设间隔时间确定第二预启时刻。
[0085] 可见,本实施例通过预先设置的录像时长、预设间隔时间等参数,可以在一个封装器执行封装操作的同时,确定另一个封装器的启动时刻,保证另一个封装器的启动时刻早于本封装器停止封装的时刻,实现真正的无缝录像。同时,本实施例还可以调节预设间隔时间,从而调节两个封装器的重叠工作时间,也即调节相邻两个录像文件的重叠时间,以满足不同的实际应用需求;例如,当录像设备的存储空间较小时,可以适当减小预设间隔时间,避免录像文件之间存储较长时间的重叠,从而节省录像文件的存储空间。
[0086] 在本发明一个可行的实施例中,在启动第一封装器(步骤S12)后,可以先检测第一封装器获取到的所述音视频编码数据(具体是视频编码数据)中是否有关键帧到来,并在该关键帧到来后,再从该关键帧开始进行封装操作(步骤S13或S131);相应的,在启动第二封装器(步骤S14)后,可以先检测第二封装器获取到的所述音视频编码数据中是否有关键帧到来,并在所述关键帧到来后,再从该关键帧开始执行封装操作(步骤S15或S151)。
[0087] 由于视频编码过程是按组进行的,每一组编码数据都从一个关键帧(即I帧)开始,每个关键帧都是一个完整的画面,但关键帧之间的视频帧是不完整的,在播放解码时需要根据相关的关键帧计算得到,因此,如果录像文件的第一帧不是关键帧,则在播放时开头部分不能正确解码计算得到完整的画面,造成赛克效果,因此,本发明实施例在启动封装器后,对关键帧进行检测,并在检测到关键帧时才开始执行封装操作,使得每个录像文件的首帧都为关键帧,可以避免在该录像文件的开头部分在播放时出现马赛克效果。
[0088] 在本发明一个可行的实施例中,基于上述关键帧检测步骤,上述无缝录像方法还可包括以下步骤:
[0089] 根据相邻两个关键帧的间隔时间,确定所述第一预设间隔时间和/或所述第二预设间隔时间。
[0090] 假设视频编码数据中相邻两个关键帧的间隔时间为1s,则可以将所述第一预设间隔时间和第二预设间隔时间,都设置为[1s,2s)之间的任意数值。结合图2所示的时间轴示意图,如果F1的最后一帧为关键帧,则t2实际是落在F1的倒数第三个关键帧和倒数第二个关键帧之间,故第二封装器从F1的倒数第二个关键帧到来时开始,在F2中写入封装后的数据,F1和F2的重叠时长为一个间隔时间,即1s;如果F1的最后一帧不是关键帧,则t2落在F1的最后两个关键帧之间,故第二封装器从F1的最后一个关键帧开始在F2中写入数据,F1和F2的重叠时长小于1s。
[0091] 可见,通过上述设置,在保证相邻两个录像文件有重叠的前提下,保证重叠时间不大于1s(一个间隔时间),从而避免相邻两个录像文件重叠时间过长造成数据冗余,减轻相关存储单元对录像文件存储压
[0092] 本发明实施例中,既可以通过上述方法,在录像过程中,通过实时检测音视频编码数据中关键帧的间隔时间,来确定所述第一预设间隔时间和第二预设间隔时间,从而确定各个封装器对应的分割时刻和预启时刻;也可以在开始录像前,预先根据终端设备中编码器的相关参数确定关键帧的间隔时间,进而确定所述第一预设间隔时间和第二预设间隔时间,从而在录像过程中,根据所述第一预设间隔时间和第二预设间隔时间确定各个封装器对应的分割时刻和预启时刻,保证对各个封装器的启动和停止封装的精准控制。
[0093] 在本发明一个可行的实施例中,上述无缝录像方法中,在每个封装器停止封装后,可以执行以下操作;释放该封装器,并利用封装器创建线程重新创建得到该封装器。
[0094] 具体的,在所述第一分割时刻和所述第二预启时刻之间(即图3或图4所示的步骤S133至S152之间)的任意时刻,都可以执行:释放所述第一封装器,并根据封装器创建线程重新创建得到所述第一封装器,以所述第二预启时刻到达时(步骤S152),可以及时启动该第一封装器;相应的,在所述第二分割时刻和所述第一预启时刻之间(即图3或图4所示的步骤S153至S132之间)的任意时刻,都可以执行:释放该第二封装器,并利用封装器创建线程重新创建得到该第二封装器,以待在所述第一预启时刻到达时(步骤S132),及时启动该第二封装器。同时,封装器每完成一次封装过程(得到一个录像文件)后,就执行一次释放-重建,可以避免同一个封装器长期占用同一系统资源,造成系统错误等现象。
[0095] 在本发明一个可行的实施例中,上述无缝录像方法的步骤S134和S154中所述的保存录像文件,具体可以为:将录像文件保存至预先设定的缓存单元中;相应的,该无缝录像方法还包括:在将所述缓存单元中的录像文件转存至硬盘或存储卡。
[0096] 实际应用中,终端设备中用于存储录像文件的存储单元(如该终端设备的只读存储器(Read only Memory,ROM),或嵌入的SD(Secure Digital)卡、TF(T-Flash)卡各种等存储卡)的数据写入速度可能较慢,如果其写入速度小于录像文件的帧率,则会造成录像文件难以及时存入存储单元中,或者只能通过降低录像帧率来保证录像文件的正确存储。有鉴于此,本发明实施例先通过终端设备中写入速度较大的缓冲区(一般为随机存取存储器(Ramdom Access Memory,RAM))缓存录像文件,再将缓存的录像文件依次转存至存储单元中。
[0097] 可见,本发明实施例通过增加一级缓存,解决录像帧率与存储单元的写入速度不匹配的问题,在不降低录像帧率的前提下,保证录像文件正确存储至相应的存储单元中。
[0098] 图5为本发明实施例提供的一种在Android系统native层实现无缝录像的装置的结构示意图。参照图5,该装置至少包括:
[0099] 编码单元510,用于通过录像接口StagefrightRecorder中的编码器对音视频采集器件采集到的原始音视频数据进行编码,得到音视频编码数据;
[0100] 第一封装控制单元520,用于在接收到第一启动指令时,启动所述第一封装器,通过所述第一封装器对录像接口StagefrightRecorder中的编码器输出的音视频编码数据执行封装操作,并在所述第一封装器停止封装之前,发送第二预启指令;
[0101] 第二封装控制单元530,用于在接收到所述第二预启指令时,启动第二封装器,通过所述第二封装器对所述音视频编码数据执行封装操作,并在所述第二封装器停止封装之前,发送所述第一启动指令。
[0102] 由以上技术方案可知,本发明实施例在录像过程中,通过两个封装器交替执行对编码数据的封装操作,且在一个封装器停止一次封装过程之前,另一个封装器已经预先启动并开始封装操作,使得相邻两个录像文件存在重叠部分,可以完全消除漏秒现象,真正实现持续录像。同时,本发明实施例以录像数据流为源数据,可以保证最终得到的录像文件的帧率,提高录像质量。
[0103] 在本发明一个可行的实施例中,上述第一封装控制单元520启动第一封装器,具体可以包括:创建第一录像文件,并在所述第一录像文件中写入解码配置数据;相应的,上述第二封装控制单元530启动第二封装器,具体可以包括:创建第二录像文件,并在所述第二录像文件中写入解码配置数据。
[0104] 在本发明一个可行的实施例中,为实现在所述第一封装器停止封装之前,发送第二预启指令,所述第一封装控制单元520具体可以被配置为:当当前时刻到达第一预启时刻时,发送第二预启指令;其中,所述第一预启时刻相对于第一分割时刻的提前量为第一预设间隔时间,所述第一分割时刻为所述第一封装器停止封装的时刻。
[0105] 同样的,为实现在所述第二封装器停止封装之前,发送第一预启指令,所述第二封装控制单元530具体可以被配置为:当当前时刻到达第二预启时刻时,发送第一预启指令;其中,所述第二预启时刻相对于第二分割时刻的提前量为第二预设间隔时间,所述第二分割时刻为所述第二封装器停止封装的时刻。
[0106] 在本发明一个可行的实施例中,上述无缝录像装置还可以包括:
[0107] 关键帧检测单元,用于在上述第一封装控制单元520启动第一封装器后,检测所述音视频编码数据中是否有关键帧到来,并在所述关键帧到来后,触发第一封装控制单元520继续执行所述通过所述第一封装器对所述音视频编码数据执行封装操作的步骤;
[0108] 和/或,在第二封装控制单元530启动第二封装器后,检测所述音视频编码数据中是否有关键帧到来,并在所述关键帧到来后,触发第二封装控制单元530执行所述通过所述第二封装器对所述音视频编码数据执行封装操作的步骤。
[0109] 本发明实施例在启动封装器后,对关键帧进行检测,并在检测到关键帧时才开始执行封装操作,使得每个录像文件的首帧都为关键帧,可以避免在该录像文件的开头部分在播放时出现马赛克效果。
[0110] 在本发明一个可行的实施例中,上述装置还可以包括:
[0111] 提前量确定单元,用于根据相邻两个关键帧的间隔时间,确定所述第一预设间隔时间和/或所述第二预设间隔时间。
[0112] 在本发明一个可行的实施例中,第一封装控制单元520还被配置为:在所述第一分割时刻和所述第二预启时刻之间的任意时刻,释放所述第一封装器,并根据封装器创建线程重新创建得到所述第一封装器;以及,第二封装控制单元530还被配置为:在所述第二分割时刻和所述第一预启时刻之间的任意时刻,释放所述第二封装器,并根据封装器创建线程重新创建得到所述第二封装器。
[0113] 在本发明一个可行的实施例中,上述装置还可以包括:
[0114] 缓存控制单元,用于分别将第一封装器封装得到的录像文件和第二封装器封装得到的录像文件保存至缓存单元,再将所述缓存单元中的录像文件转存至硬盘或存储卡。
[0115] 本发明实施例通过增加一级缓存,解决录像帧率与存储单元的写入速度不匹配的问题,在不降低录像帧率的前提下,保证录像文件正确存储至相应的存储单元中。
[0116] 图6为本发明实施例提供的一种具有无缝录像功能的终端设备的结构框图。参照图6,该终端设备包括:摄像头610、麦克风620、处理器630和存储器640。
[0117] 其中,所述存储器640中存储有可在所述处理器630上运行的计算机程序;所述处理器630通过预设接口及通信总线分别与所述摄像头610、麦克风620和存储器640实现通信连接。
[0118] 所述摄像头610用于采集视频数据;所述麦克620用于采集音频数据;所述处理器630用于执行所述存储器中存储的计算机程序,以使所述终端设备实现前文任一项实施例所述的无缝录像方法。
[0119] 可见,本发明实施例在现有Android系统native层普遍采用的录像接口StagefrightRecorder的基础上进行改进,控制其封装过程变为:在录像过程中,通两个封装器交替执行对音视频编码数据的封装操作,且在一个封装器停止一次封装过程之前,另一个封装器已经预先启动并开始封装操作,使得相邻两个录像文件存在重叠部分,可以完全消除漏秒现象,真正实现无缝录像。同时,本发明实施例在native层实现,从而可以直接获取音视频采集器件采集到的原始音视频数据,然后对其进行编码及封装,可以保证最终得到的录像文件的帧率不降低,提高录像质量。
[0120] 为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本发明时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0121] 本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模来实现本实施例方案的目的。
[0122] 本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。以上仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈