视频拍摄方法及装置的制造方法_2

文档序号:9251147阅读:来源:国知局
,其示出了本发明另一实施例提供的视频拍摄方法的方法流程图,该视频拍摄方法应用于电子设备中,特别是采用Android系统的电子设备,该视频拍摄方法包括:
[0051]步骤301,获取拍摄到的视频数据;
[0052]电子设备在接收到用户触发的开始信号后,获取拍摄到的视频数据。视频数据通常包括图像帧(frame)数据和音频帧(sample)数据。若拍摄无声视频,则视频数据可以只包括图像帧数据,但本文中主要以视频数据同时包括图像帧数据和音频帧数据来举例说明。
[0053]电子设备获取图像帧数据的过程包括:电子设备调用Andorid系统提供的PreviewCallback接口,该PreviewCallback接口在摄像头每次拍摄到一巾贞图像巾贞数据时,自动调用onPreviewFrame回调函数返回当前图像巾贞数据。
[0054]电子设备获取音频帧数据的过程包括:电子设备调用Andorid系统提供的Aud1Record接口,该Aud1Record接口在麦克风每次采集到音频巾贞数据时,自动调用onPre1dicNotificat1n回调函数返回当前音频巾贞数据。
[0055]另外,电子设备在每个时间段开始拍摄时,新建与当前时间段对应的视频文件。也即电子设备在断点拍摄的每个时间段开始拍摄时,新建与该时间段对应的视频文件(此时为空文件),并调用FFmpeg (开源免费跨平台的音视频流方案)写该视频文件的文件头。比如,在第I个时间段中拍摄时,新建视频文件1,在第2个时间段中拍摄时,新建视频文件2。
[0056]步骤302,将视频数据缓存到内存分配不受限制的native层;
[0057]电子设备在获取到图像帧数据时,将该图像帧数据缓存到内存分配不受限制的native层,native层是C代码运行的层,理论上可以使用电子设备所支持的全部可用物理内容,而不受限制。同理,电子设备在获取到音频帧数据时,将该音频帧数据也缓存到内存分配不受限制的native层。本步骤可以包括:
[0058]1、电子设备将视频数据的帧数据缓存在native层,该视频数据包括图像帧数据和音频帧数据中的前一种或者全部两种;
[0059]2、电子设备将视频数据的相关信息缓存在预先创建在Java层的队列中,该相关信息包括各帧数据在native层中的存储位置和各帧数据所对应的时间。
[0060]该相关信息的内容可以不限于存储位置和时间,以图像帧数据为例,每个图像帧数据的相关信息可以包括:该图像帧数据在native层中的存储位置、该图像帧数据的图像格式信息、该图像帧数据的数据量大小、该图像帧数据所对应的时间和该图像帧数据所对应的文件名。其中,该图像帧数据的图像格式信息、该图像帧数据的数据量大小和该图像帧数据所对应的文件名都是可选包括的内容。
[0061 ] 其中,该图像帧数据在native层中的存储位置可以用一个指针表示,该指针指向nat ive层中的一块内存空间,该内存空间存储着该图像帧数据。
[0062]另外,由于原始拍摄的图像帧数据的图像格式与最终视频文件中的期望格式可能不同,所以电子设备在缓存每帧图像帧数据的相关信息时,还缓存每帧图像帧数据的图像格式信息,图像格式信息包括图像的宽高和角度等。
[0063]还由于用户可能采用断点拍摄方式,所以电子设备还将视频数据中各帧数据各自所对应的视频文件名作为视频数据的一项相关信息缓存在队列中。以图像帧数据为例,每个图像帧数据所对应的文件名根据该图像帧数据所属于的拍摄时间段而定,不同时间段拍摄的图像帧数据对应不同的文件名,同一时间段拍摄的图像帧数据对应同一文件名。比如,在第I个时间段中拍摄的图像帧数据,都对应视频文件1,在第2个时间段中拍摄的图像帧数据,都对应视频文件2。同理,电子设备在缓存每帧音频帧数据时,还保存该帧音频帧数据所对应的视频文件名,比如,在第I个时间段中录制的音频帧数据,都对应视频文件1,在第2个时间段中录制的音频帧数据,都对应视频文件2。
[0064]比如,以图像帧数据为例,电子设备预先创建一个先进先出的队列,该队列中的每个元素包括(对应文件名,帧数据的指针,帧数据的数据大小,时间,帧数据的宽,帧数据的高),当onPreviewFrame回调函数获取到一巾贞图像巾贞数据时,将该图像巾贞数据的相关信息插入到预先创建的队列中,而该图像帧数据的实际帧数据缓存在native层中。
[0065]需要说明的是,图像帧数据的相关信息可以单独缓存在一个队列中,音频帧数据的相关信息可以单独缓存在另一个队列中。
[0066]步骤303,启动一个异步线程;
[0067]在本实施例中,除了用于缓存图像帧数据和音频帧数据的线程,电子设备还单独启动一个异步线程来完成视频编码。
[0068]步骤304,通过异步线程将各个时间段拍摄得到的视频数据分别编码至独立的一个视频文件;
[0069]如果视频数据包括不同时间段拍摄得到的视频数据,则电子设备将各个时间段拍摄得到的视频数据分别编码至独立的一个视频文件。也即,该异步线程不断根据各帧数据在队列中的相关信息,读取native层中缓存的图像帧数据和音频帧数据,将读取到的图像帧数据和音频帧数据调用FFmpeg编码至上述步骤301中创建的对应的视频文件中。
[0070]在电子设备将各个时间段拍摄得到的视频数据分别编码至独立的一个视频文件的过程中,电子设备根据视频数据中各帧数据各自所对应的视频文件名,将各帧数据顺序编码至对应的视频文件中。也即,若缓存的图像帧数据对应的视频文件名为视频文件1,则电子设备将该图像帧数据编码至视频文件1,若缓存的音频帧数据对应的视频文件名为视频文件2,则电子设备将该音频帧数据编码至视频文件2。其中,相关信息中的时间用于指示各帧数据的编码顺序和时间戳。
[0071]需要补充说明的是,如果原始拍摄的图像帧数据的图像格式与最终视频文件中的期望格式不同,则电子设备还在编码前将每帧图像帧数据根据步骤302中保存的图像格式信息仿射变换至期望格式。也即,在步骤302中,电子设备在队列中缓存每帧图像帧数据的相关信息时,预先将每帧图像帧数据的图像格式信息也作为一项相关信息进行缓存;所以电子设备在编码前可以将每帧图像帧数据根据保存的图像格式信息仿射变换至期望格式。
[0072]步骤305,将编码得到的至少两个视频文件合并为同一个视频文件。
[0073]电子设备将编码得到的至少两个视频文件合并为同一个视频文件,该同一个视频文件将作为最终的视频文件。
[0074]综上所述,本实施例提供的视频拍摄方法,通过获取拍摄到的视频数据,将视频数据缓存到内存分配不受限制的native层,根据native层中缓存的视频数据编码得到视频文件;解决了图像数据被缓存在Java层时,会频繁触发垃圾回收机制和发生内存溢出现象的问题;达到了不需要触发垃圾回收机制,也不会发生内存溢出现象的效果。
[0075]另一方面,【背景技术】中将图像帧数据缓存到Java层的线程和进行视频编码的线程通常为同一线程,如果onPreviewFrame回调函数被阻塞,则会导致编码得到的视频文件的帧速降低。而本实施例的视频拍摄方法,通过异步线程来单独进行视频编码,所以不会发生阻塞现象,从而可以提高编码得到的视频文件的帧速。
[0076]本实施例提供的视频拍摄方法,还通过在缓存视频数据的同时,还缓存图像帧数据和音频帧数据各自所对应的视频文件名,可以实现在编码时将不同帧数据编码至正确的视频文件中,从而实现了断点拍摄功能。
[0077]本实施例提供的视频拍摄方法,还通过在缓存图像帧数据的相关信息的同时,还缓存图像帧数据所对应的图像格式信息,可以实现在编码前将每帧图像帧数据根据图像格式信息仿射变换至期望格式的效果。
[0078]请参考图4,其示出了本发明一个实施例提供的视频拍摄装置的结构方框图。该视频拍摄装置可以通过软件、硬件或者两者的结合实现成为电子设备的全部或一部分。该视频拍摄装置包括:数据采集模块420、数据缓存模块440和数据编码模块460。
[0079]数据采集模块420,用于获取拍摄到的视频数据;
[0080]数据缓存模块440,用于将所述视频数据缓存到内存分配不受限制的native层;
[0081]数据编码模块460,用于根据所述native层中缓存的所述视频数据编码得到视频文件。
[0082]综上所述,本实施例提供的视频拍摄装置,通过获取拍摄到的视频数据,将视频数据缓存到内存分配不受限制的native层,根据native层中缓存的视频数据编码得到视频文件;解决了图像数据被缓存在Java层时,会频繁触发垃圾回收机制和发生内存溢出现象的问题;达到了不需要触发垃圾回收机制,也不会发生内存溢出现象的效果。
[0083]请参考图5,其示出了本发明一个实施例提供的视频拍摄装置的结构方框图。该视频拍摄装置可以通过软件、硬件或者两者的结合实现成为电子设备的全部或一部分。该视频拍摄装置包括:数据采集模块420、数据缓存模块440和数据编码模块460。
[0084]数据采集模块420,用于获取拍摄到的视频数据;
[0085]数据缓存模块440,用于将所述视频数据缓存到内存分配不受限制的native层;
[0086]数据编码模块460,用于根据所述native层中缓存的所述视频数据编码得到视频文件。
[0087]所述数据缓存模块440,包括:
[0088]数据缓存单元442,用于将所述视频数据的帧数据缓存在所述native层,所述视频数据包括图像帧数据和音频帧数据中的前一种或者全部两种;
[0089]信息缓存单元444,用于将所述视频数据的相关信息缓存在预先创建在Java层的队列中,所述相关信息包括各帧数据在所述native层中的存储
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1