使用外接存储器在IOS系统中存取图像数据的方法及装置与流程

文档序号:18850577发布日期:2019-10-13 00:49阅读:330来源:国知局
使用外接存储器在IOS系统中存取图像数据的方法及装置与流程

本发明涉及图像数据的处理及传输,更具体地说,涉及一种使用外接存储器在IOS系统中存取图像数据的方法及装置。



背景技术:

智能移动通信终端(智能手机)通常是装有操作系统的,而这些智能手机是移动互联网的重要组成部分,许多移动互联网的应用都是在智能手机上实现的。就目前而言,智能手机上的操作系统通常分为用于苹果公司iphone上的IOS系统和用于其他智能手机上的安卓系统。与开放的安卓系统不同,由于IOS系统的封闭性,其安全性虽然较高(由于源代码不公开,使得黑客攻击的难度加大),但是很多在安卓系统中常用的方法或配置可能会变得困难,例如,对于外接存储器的使用。在IOS系统中,外接存储器并不是其标准的配置,在IOS系统并没有考虑这样的配置,其操作中封装的功能或函数,都是以该系统内部的存储器为处置对象的。所以不管是在外接存储器中读取数据或写入数据或在APP中使用外接存储器中的数据,都变得较为困难,其取得图像数据的速度也变慢,这对于要求读取速度的图像APP极为不利。



技术实现要素:

本发明要解决的技术问题在于,针对现有技术的上述使用外接存储器中的图像数据速度较慢、较为困难的缺陷,提供一种读取速度较快、使用较为容易的使用外接存储器在IOS系统中存取图像数据的方法及装置。

本发明解决其技术问题所采用的技术方案是:构造一种使用外接存储器在IOS系统中存取图像数据的方法,包括如下步骤:

A)取得IOS系统中摄像头输出的原始图像数据,并将其送入第一编码单元进行处理;

B)所述第一编码单元将所述送入的图像数据转换为标准的、便于存储的影音文件并输出;

C)调用系统的第一查找函数和第一写函数将所述编码器输出的文件写入到外接存储器;

其中,所述第一查找函数和第一写函数是在所述第一编码单元在IOS系统中初始化时,对所述IOS系统的查找函数和写函数进行修改后得到的,所述第一查找函数用于对外接存储器寻址,所述第一写函数将所述编码器的输入写入所述外接存储器的指定区域。

更进一步地,所述第一写函数和第一查找函数采用回调的方式调用所述外接存储器的私有的写函数和查找函数,使得所述编码器的输出直接写入所述外接存储器。

更进一步地,所述第一编码单元在初始化时,使用所述外接存储器的私有的写函数和查找函数的指针替代所述IOS系统的写函数和查找函数,得到所述第一写函数和第一查找函数。

更进一步地,所述第一编码单元包括H.264编码器、ACC编码器和开源的FFMPEG的muxer(音视频复用器,将音视频文件合并在一起),经过所述第一编码单元处理后得到并输出的文件是MOV文件。

更进一步地,还包括如下步骤:

M)应用程序要求取得存储在所述外接存储器中影音文件,并将该要求发送到所述第一编码单元;

N)所述第一编码单元使用第一查找函数取得所述影音文件在外接存储器中的地址,并将所述地址上的影音文件通过第一读函数取到所述IOS系统中,将其解码并输出到所述应用程序;

其中,所述第一读函数是在所述第一编码单元在IOS系统中初始化时,对所述IOS系统的读函数进行修改后得到的。

更进一步地,所述第一读函数采用回调的方式调用所述外接存储器的私有的读函数,使得所述编码单元直接由所述外接存储器将文件读入所述IOS系统。

更进一步地,所述编码器在初始化时,使用所述外接存储器的私有的读函数的指针替代所述IOS系统的读函数,得到所述第一读函数。

本发明还涉及一种实现上述方法的装置,包括:

原始图像数据取得单元:用于取得IOS系统中摄像头输出的原始图像数据,并将其送入第一编码单元进行处理;

图像数据转换单元:用于使所述第一编码单元将所述送入的图像数据转换为标准的、便于存储的影音文件并输出;

写入单元:用于调用系统的第一查找函数和第一写函数将所述编码器输出的文件写入到外接存储器;

其中,所述第一查找函数和第一写函数是在所述第一编码单元在IOS系统中初始化时,对所述IOS系统的查找函数和写函数进行修改后得到的,所述第一查找函数用于对外接存储器寻址,所述第一写函数将所述编码器的输入写入所述外接存储器的指定区域。

更进一步地,所述第一写函数和第一查找函数采用回调的方式调用所述外接存储器的私有的写函数和查找函数,使得所述编码器的输出直接写入所述外接存储器;所述编码器在初始化时,使用所述外接存储器的私有的写函数和查找函数的指针替代所述IOS系统的写函数和查找函数,得到所述第一写函数和第一查找函数。

更进一步地,还包括:

数据请求单元:用于使应用程序要求取得存储在所述外接存储器中影音文件,并将该要求发送到所述第一编码单元;

数据取得单元:用于使所述第一编码单元使用第一查找函数取得所述影音文件在外接存储器中的地址,并将所述地址上的影音文件通过第一读函数取到所述IOS系统中,将其解码并输出到所述应用程序;

其中,所述第一读函数是在所述第一编码单元在IOS系统中初始化时,对所述IOS系统的读函数进行修改后得到的。

实施本发明的使用外接存储器在IOS系统中存取图像数据的方法及装置,具有以下有益效果:由于在使用外接存储器存储图像数据或由外接存储器取得图像数据,都使用第一编码单元,而第一编码单元在IOS系统中进行初始化时,事先对IOS系统中的查找函数、写函数和读函数进行修改,得到第一查找函数、第一写函数和第一读函数,同时,在数据通过上述第一编码单元时,都是使用上述第一查找函数、第一写函数和第一读函数对数据进行处理,而这些函数又都是通过回调的方式直接使用外接存储器的私有的查找、写和读函数,所以,在IOS系统中处理图像数据时,能够简单地和外接存储器直接进行交互,因此其读取变得较快、较为容易。

附图说明

图1是本发明使用外接存储器在IOS系统中存取图像数据的方法及装置实施例中存储图像数据的方法流程图;

图2是所述实施例中取得图像数据位置参数的流程图;

图3是所述实施例中装置的结构示意图。

具体实施方式

下面将结合附图对本发明实施例作进一步说明。

如图1所示,在本发明的使用外接存储器在IOS系统中存取图像数据的方法及装置实施例中,在使用外接存储器在IOS系统中存取图像数据的方法包括如下步骤:

步骤S11取得原始图像数据并发送到编码单元:在本实施例中,以一个运行在IOS系统中的图像取得和播放的应用程序(APP)为例,说明在IOS系统中使用外接存储器进行图像数据存储和取得外接存储器中图像数据的方法。通常来讲,对于以应用程序(APP)的方式存在与IOS系统中的程序而言,当该应用程序开始运行时,需要对该应用程序及其中的部件进行初始化处理,换言之是对该应用程序进行参数配置,使得该应用程序能够在IOS系统环境下进行操作。在本实施例中,该应用程序包括一个第一编码单元,同样地,该第一编码单元在APP运行时,也需要对其进行初始化的操作。在本步骤中,该APP启动后进入摄制或录制或拍摄状态时,会激活存在与IOS系统中的摄像头,于是取得IOS系统中摄像头输出的原始图像数据,并将其送入第一编码单元进行处理。值得一提的是,在本步骤中,得到的数据就是摄像头取得图像后输出的原始数据,并没有做处理。

步骤S12编码单元对原始图像数据进行处理,得到音像文件:在本步骤中,上述第一编码单元将由摄像头取得并传输过来的图像数据转换为标准的、便于存储的影音文件并输出。一般来讲,编码单元就是将图像数据或音频数据(在很多情况下,在摄像头取得图像数据的同时。麦克风也取得所在环境的音频数据)进行编码,使其按照取得的时间顺序,形成某种格式的数据流,然后该数据流将被输出到一个指定的存储区域进行存储。通常来讲,该存储区域可以是运行IOS系统的设备本身的存储器,也可以是外接存储器。但是在现有技术中,通常都是存储在运行IOS系统的设备本身的存储器上,因为由于IOS系统的封闭性,实现将数据直接存储到外接存储器上是比较困难的。

步骤S13将得到的音像文件通过修改后的写函数直接存储到外接存储器:在本步骤中,调用IOS系统的第一查找函数和第一写函数将所述编码器输出的文件写入到外接存储器;具体来讲,上述第一查找函数和第一写函数实际上是对IOS系统封装在该应用接口中的查找函数(SEEK)和写函数(WRITE)进行修改而得到的。当上述APP在IOS系统中初始化时,对调用或占用的应用接口中的查找函数和写函数进行修改,然后得到上述第一查找函数和第一写函数。换句话说,上述第一查找函数和第一写函数仅仅存在与该应用接口中,也仅仅是在使用该应用接口时才能起到作用。对于该IOS系统中的其他应用程序,由于使用的是不同的应用接口,所以,上述第一查找函数和第一写函数不会用于其他应用程序,也对其他应用程序造成影响。在本实施例,上述第一查找函数用于对外接存储器寻址,而第一写函数将所述编码器的输入写入所述外接存储器的指定区域。

在本实施例中,上述第一写函数和第一查找函数采用回调的方式调用所述外接存储器的私有的写函数和查找函数,使得所述编码器的输出直接写入所述外接存储器。即在本实施例中,上述第一编码单元在初始化时,使用外接存储器的私有的写函数和查找函数的指针(函数指针)替代所述IOS系统的写函数和查找函数的内容,得到所述第一写函数和第一查找函数。这样,在APP通过应用接口调用第一写函数时,得到上述外接存储器的私有的写函数的函数指针,按照该指针,调用的是上述外接存储器的写函数,于是将数据内容或音像文件直接写入外接存储器。

在本实施例中,第一编码单元包括H.264编码器、ACC编码器和开源的FFMPEG的muxer,经过所述第一编码单元处理后得到并输出的文件是MOV文件。也就是说,在IOS系统中,分别通过摄像头和麦克风取得图像数据和音频数据,在经过上述第一编码单元后,被转换成一个包括图像数据和音频数据的流文件,直接存储到上述外接存储器上。当然,在一些情况下,上述取得数据也可以只有图像数据,因为并不是任何时候都需要取得音频数据的。

请参见图2,在本实施例中,当上述APP作为一个播放器使用的时候,还可以直接由外接存储器中取得数据进行播放。其步骤包括:

步骤S21传输取得图像数据的要求到编码单元:当上述APP作为一个播放器使用或实现一个播放器的功能时,其播放文件应该是被指定的,当该被指定播放的文件存储在外接存储器上时,应用程序就会要求取得存储在所述外接存储器中影音文件,并将该要求发送到所述第一编码单元;于是,第一编码单元就会得知被播放文件的文件名和存储位置。

步骤S22查找到被要求的音像文件:在本步骤中,所述第一编码单元在知道文件所在的位置(该位置可能是具体的存储地址,也可能仅仅只是指出一个存储区域)之后,使用第一查找函数取得所述影音文件在外接存储器中的地址。换句话说,上述第一查找函数将确定需要读取文件的、具体的物理地址。同样地,上述第一查找函数能够直接确认外接存储器中的物理地址,也就是实现外接存储器的存储地址映射。

步骤S23通过修改后的读函数直接取得外接存储器上的音像文件,直接传输到编码单元进行解码:在本步骤中,将确定的物理地址上的影音文件通过第一读函数取到所述IOS系统中,将其解码并输出到所述应用程序。在本市实施例中,第一读函数使用上述地址,直接由外接存储器中读取文件。

其中,和上述第一查找函数和第一写函数一样,第一读函数也是在所述第一编码单元在IOS系统中初始化时,通过对muxer中的读函数的修改,进而实现对所述IOS系统的、封装在该应用程序使用的应用接口的读函数进行修改后得到的。

同样地,第一读函数采用回调的方式调用所述外接存储器的私有的读函数,使得所述编码单元直接由所述外接存储器将文件读入所述IOS系统。所述编码器在初始化时,使用所述外接存储器的私有的读函数的指针替代所述IOS系统的读函数,得到所述第一读函数。上述第一读函数同样不会影响到IOS系统中的其他应用。

当文件进入IOS系统并被解码为数据后,和其他读入IOS系统的数据一样,通常会在系统RAM中添加一套文件系统映射,在用户操作后,使用外部存储器私有的读写接口,写到对应的扇区地址中去。

如图3所示,在本实施例中还涉及一种实现上述方法的装置,包括原始图像数据取得单元1、图像数据转换单元2、写入单元3、数据请求单元4以及数据取得单元5;其中,原始图像数据取得单元1用于取得IOS系统中摄像头输出的原始图像数据,并将其送入第一编码单元进行处理;图像数据转换单元2用于使所述第一编码单元将所述送入的图像数据转换为标准的、便于存储的影音文件并输出;写入单元3用于调用系统的第一查找函数和第一写函数将所述编码器输出的文件写入到外接存储器;数据请求单元4用于使应用程序要求取得存储在所述外接存储器中影音文件,并将该要求发送到所述第一编码单元;数据取得单元5用于使所述第一编码单元使用第一查找函数取得所述影音文件在外接存储器中的地址,并将所述地址上的影音文件通过第一读函数取到所述IOS系统中,将其解码并输出到所述应用程序.

其中,所述第一查找函数和第一写函数是在所述第一编码单元在IOS系统中初始化时,对所述IOS系统的查找函数和写函数进行修改后得到的,所述第一查找函数用于对外接存储器寻址,所述第一写函数将所述编码器的输入写入所述外接存储器的指定区域;同样地,所述第一读函数是在所述第一编码单元在IOS系统中初始化时,对所述IOS系统的读函数进行修改后得到的。所述第一写函数和第一查找函数采用回调的方式调用所述外接存储器的私有的写函数和查找函数,使得所述编码器的输出直接写入所述外接存储器;所述编码器在初始化时,使用所述外接存储器的私有的写函数和查找函数的指针替代所述IOS系统的写函数和查找函数,得到所述第一写函数和第一查找函数。

总体上来说,在IOS系统中,应用程序对于文件的操作无外乎是读与写,这是文件操作的基本单元,所以大部分应用接口中都已经封装了读写操作(读写函数),在当前的操作系统下,读写的对象都只能是本系统文件系统下的文件对象,对于外部的存储对象,由于ios系统的封闭性,用户只能是把要操作的文件通过私有接口拷贝到ios系统中后,对系统中的复制文件进行操作。访问完成后,再将文件通过私有接口写回到外部存储器。

对于视频文件的录制,通常因为iOS提供的录制接口有2种,第一种是实时提供采集的视频原始数据缓存;第第二种是由用户提供文件名,系统将采集的数据编码压缩后,保存到文件中。因为外部存储器不在ios的文件系统内,所以系统的接口无法将文件直接保存到外部存储器中,现有技术中基本上都是先让系统保存到ios的文件系统中,然后再使用外部存储器的读写接口,把文件由ios文件系统中搬到外部存取器的文件系统中。

因为上述第二种情况下接口是ios封装好的,只能写入ios的文件系统,没有办法做二次封装。因此在取得系统提供的视频数据后,使用H264与AAC编码器,将音视频数据进行编码。在本实施例中,选择了开源的FFMPEG的muxer功能,将文件混合成标准的MOV文件,同时,采用了回调的方式,重新封装了FFMPEG的write函数与seek函数,否则ios下的app还是会使用ios操作系统的write和seek函数写到ios的文件系统下。我们在ffmpeg库初始化的时候,用自定义的write和seek函数指针替换掉了系统的write和seek函数,这样muxer在调用write和seek的时候,就会回调预先自己封装的write和seek函数,在自己封装的write和seek函数中,将muxer后的数据直接写入到的外部存储器中,实现整个录制数据的直接保存。同理利用ffmpeg的回调接口,替换掉了read和seek函数,用自定义的read和seek函数实现了外部存取器的读取,让系统能直接播放外部存取器中的视频文件。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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