1.一种防止视频编辑时丢帧的方法,应用于存储设备,其特征在于,所述存储设备存储有客户端发送的虚拟文件链表,所述虚拟文件链表与所述客户端中的虚拟文件链表保持同步,所述虚拟文件链表是由客户端根据预先输入的多个文件片段的信息和所述多个文件片段的编辑顺序生成的,所述虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和所述文件片段的描述字段;所述方法包括:
接收所述客户端发送的读请求,所述读请求中包括要读取的第一文件片段的序号;
根据所述第一文件片段的序号从内存中读取所述第一文件片段的数据,并将所述第一文件片段的数据返回给所述客户端;所述第一文件片段的数据是接收到所述客户端的上一次读请求时从存储介质读取并存入在所述内存中的;
根据所述第一文件片段的序号在所述虚拟文件链表中确定所述第一文件片段的序号所属链表节点的下一个链表节点,从所述下一个链表节点中获取第二文件片段的描述字段;
根据所述第二文件片段的描述字段从所述存储介质中读取所述第二文件片段的数据,并将所述第二文件片段的数据存入所述内存中。
2.根据权利要求1所述的方法,其特征在于,所述虚拟文件链表与所述客户端中的虚拟文件链表保持同步包括:
当所述客户端中的虚拟文件链表更新后,从所述客户端接收更新后的虚拟文件链表;
或者,当所述客户端中的虚拟文件链表更新后,从所述客户端接收链表更新信息,并根据所述链表更新信息对已存储的所述虚拟文件链表进行更新,得到更新后的虚拟文件链表;
或者,周期性的接收所述客户端发送的虚拟文件链表。
3.根据权利要求1或2所述的方法,其特征在于,所述描述字段包括:
文件片段所属原始文件的文件名、读取原始文件的起始地址、读取原始文件的长度。
4.根据权利要求1所述的方法,其特征在于,所述存储设备与所述客户端通过采用客户端/服务器C/S模式的私有接口传输所述虚拟文件链表,所述存储设备与所述客户端之间通过所述私有接口传输心跳报文保持所述私有接口的连接状态。
5.一种防止视频编辑时丢帧的方法,应用于视频编辑系统,其特征在于,所述视频编辑系统包括客户端和存储设备,所述客户端和所述存储设备均存储有所述客户端生成的虚拟文件链表,所述存储设备中的虚拟文件链表与所述客户端中的虚拟文件链表保持同步,所述虚拟文件链表是由客户端根据预先输入的多个文件片段的信息和所述多个文件片段的编辑顺序生成的,所述虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和所述文件片段的描述字段;所述方法包括:
所述客户端向所述存储设备发送读请求,所述读请求中包括要读取的第一文件片段的序号;
所述存储设备根据所述第一文件片段的序号从内存中读取所述第一文件片段的数据;
所述第一文件片段的数据是所述存储设备接收到所述客户端的上一次读请求时从存储介质读取并存入在所述内存中的;
所述存储设备向所述客户端返回所述第一文件片段的数据;
所述存储设备根据所述第一文件片段的序号在所述虚拟文件链表中确定所述第一文件片段的序号所属链表节点的下一个链表节点,从所述下一个链表节点中获取第二文件片段的描述字段;
所述存储设备根据所述第二文件片段的描述字段从所述存储介质中读取所述第二文件片段的数据,并将所述第二文件片段的数据存入所述内存中。
6.根据权利要求5所述的方法,其特征在于,所述存储设备中的虚拟文件链表与所述客户端中的虚拟文件链表保持同步包括:
当更新所述虚拟文件链表后,所述客户端向所述存储设备发送更新后的虚拟文件链表;
或者,当更新所述虚拟文件链表后,所述客户端向所述存储设备发送链表更新信息;
所述存储设备根据所述链表更新信息对已存储的虚拟文件链表进行更新,得到更新后的虚拟文件链表;
或者,所述客户端周期性的向所述存储设备发送虚拟文件链表。
7.根据权利要求5或6所述的方法,其特征在于,所述描述字段包括:
文件片段所属原始文件的文件名、读取原始文件的起始地址、读取原始文件的长度。
8.根据权利要求5所述的方法,其特征在于,所述存储设备与所述客户端通过采用客户端/服务器C/S模式的私有接口传输所述虚拟文件链表,所述存储设备与所述客户端之间通过所述私有接口传输心跳报文保持所述私有接口的连接状态。
9.一种存储设备,其特征在于,所述存储设备存储有客户端发送的虚拟文件链表,所述虚拟文件链表与所述客户端中的虚拟文件链表保持同步,所述虚拟文件链表是由客户端根据预先输入的多个文件片段的信息和所述多个文件片段的编辑顺序生成的,所述虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和所述文件片段的描述字段;所述存储设备包括:主机协议接口、读接口、内存、预取模块和存储介质;
所述主机协议接口,用于接收所述客户端发送的读请求,所述读请求中包括要读取的第一文件片段的序号;
所述读接口,用于根据所述第一文件片段的序号从内存中读取所述第一文件片段的数据,并将所述第一文件片段的数据返回给所述客户端;所述第一文件片段的数据是接收到所述客户端的上一次读请求时从存储介质读取并存入在所述内存中的;
所述读接口还用于,根据所述第一文件片段的序号在所述虚拟文件链表中确定所述第一文件片段的序号所属链表节点的下一个链表节点,从所述下一个链表节点中获取第二文件片段的描述字段;
所述预取模块,用于根据所述第二文件片段的描述字段从所述存储介质中读取所述第二文件片段的数据,并将所述第二文件片段的数据存入所述内存中。
10.根据权利要求9所述的存储设备,其特征在于,所述存储设备还包括:私有接口,所述私有接口用于从所述客户端接收所述虚拟文件链表,以及所述虚拟文件链表与所述客户端中的虚拟文件链表保持同步,所述私有接口具体用于:
当所述客户端中的虚拟文件链表更新后,从所述客户端接收更新后的虚拟文件链表;
或者,当所述客户端中的虚拟文件链表更新后,从所述客户端接收链表更新信息,并根据所述链表更新信息对已存储的所述虚拟文件链表进行更新,得到更新后的虚拟文件链表;
或者,周期性的接收所述客户端发送的虚拟文件链表。
11.根据权利要求9或10所述的存储设备,其特征在于,所述描述字段包括:
文件片段所属原始文件的文件名、读取原始文件的起始地址、读取原始文件的长度。
12.根据权利要求10所述的存储设备,其特征在于,所述私有接口为采用客户端/服务器C/S模式的接口,所述存储设备与所述客户端之间通过所述私有接口传输心跳报文保持所述私有接口的连接状态。
13.一种视频编辑系统,其特征在于,所述视频编辑系统包括客户端和存储设备,所述客户端和所述存储设备均存储有所述客户端生成的虚拟文件链表,所述存储设备中的虚拟文件链表与所述客户端中的虚拟文件链表保持同步,所述虚拟文件链表是由客户端根据预先输入的多个文件片段的信息和所述多个文件片段的编辑顺序生成的,所述虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和所述文件片段的描述字段;
其中:
所述客户端用于向所述存储设备发送读请求,所述读请求中包括要读取的第一文件片段的序号;
所述存储设备用于根据所述第一文件片段的序号从内存中读取所述第一文件片段的数据,所述第一文件片段的数据是所述存储设备接收到所述客户端的上一次读请求时从存储介质读取并存入在所述内存中的;
所述存储设备还用于向所述客户端返回所述第一文件片段的数据;
所述存储设备还用于根据所述第一文件片段的序号在所述虚拟文件链表中确定所述第一文件片段的序号所属链表节点的下一个链表节点,从所述下一个链表节点中获取第二文件片段的描述字段;
所述存储设备还用于根据所述第二文件片段的描述字段从所述存储介质中读取所述第二文件片段的数据,并将所述第二文件片段的数据存入所述内存中。
14.根据权利要求13所述的视频编辑系统,其特征在于,
当更新所述虚拟文件链表后,所述客户端还用于向所述存储设备发送更新后的虚拟文件链表;
或者,当更新所述虚拟文件链表后,所述客户端还用于向所述存储设备发送链表更新信息;
所述存储设备还用于根据所述链表更新信息对已存储的虚拟文件链表进行更新,得到更新后的虚拟文件链表;
或者,所述客户端还用于周期性的向所述存储设备发送虚拟文件链表。
15.根据权利要求13或14所述的视频编辑系统,其特征在于,所述描述字段包括:
文件片段所属原始文件的文件名、读取原始文件的起始地址、读取原始文件的长度。
16.根据权利要求14所述的视频编辑系统,其特征在于,私有接口为采用客户端/服务器C/S模式的接口,所述客户端与所述存储设备之间通过所述私有接口传输心跳报文保持所述私有接口的连接状态。
防止视频编辑时丢帧的方法、设备及系统\n技术领域\n[0001] 本发明实施例涉及视频处理技术,尤其涉及一种防止视频编辑时丢帧的方法、设备及系统。\n背景技术\n[0002] 在现有的视频编辑技术中,对存储设备的读时延都有着比较严格的要求,读时延是指编辑视频的客户端向存储设备发起读请求后,存储设备向客户端返回数据的时间,如果读时延过长会导致视频软件出现“丢帧”问题。这是因为,在现有技术中,客户端运行的视频编辑软件一般可以分为:读数据线程、数据缓冲区、视频编辑线程三部分,其工作流程为:\n读数据线程先从存储设备中读出数据,并填入数据缓冲区,视频编辑线程从数据缓冲区中读出缓存的数据进行视频处理。现有的存储设备大都采用的是磁盘存储介质(比如机械硬盘),由于磁盘存储介质的响应时间较长,可能出现视频编辑线程从数据缓冲区中读出数据缓冲区中的所有数据时,读数据线程还没有从存储设备中读出新的数据填入数据缓冲区,此时数据缓冲区是空的,如果视频编辑线程再试图从数据缓冲区读取数据就会出现“丢帧”的问题。\n[0003] 为了解决上述问题,在一种现有技术中,存储设备在接收到读请求之前就预先把数据读取到存储设备的内存中,当收到读请求时,就可以将内存中预先读取的数据返回给客户端。但是,上述方法只能解决线性编辑时的“丢帧”的问题,线性编辑是指客户端按照时间顺序进行编辑,比如本次请求的是第n个数据块,下次请求的就是第n+1个数据块,这样预先将第n+1个数据块读取到内存中,当第n+1个数据块的读请求到来时,刚好能够将第n+1个数据块立即返回给客户端。当非线性编辑时,客户端请求的数据块可能是随机的,比如本次请求的是第n个数据块,下次请求的可能是第n+3个数据块,这种情况下就无法命中预先读取到内存中的数据,依然只能等待从磁盘存储介质中读出第n+3个数据块后,才能返回给客户端,这种情况下依然可能出现“丢帧”的问题。\n发明内容\n[0004] 本发明实施例提供一种防止视频编辑时丢帧的方法、设备及系统,能够解决视频编辑时丢帧的问题。\n[0005] 第一方面,本发明实施例提供一种防止视频编辑时丢帧的方法,应用于存储设备,所述存储设备存储有客户端发送的虚拟文件链表,所述虚拟文件链表与所述客户端中的虚拟文件链表保持同步,所述虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和所述文件片段的描述字段;所述方法包括:\n[0006] 根据所述第一文件片段的序号从内存中读取所述第一文件片段的数据,并将所述第一文件片段的数据返回给所述客户端;所述第一文件片段的数据是接收到所述客户端的上一次读请求时从存储介质读取并存入在所述内存中的;\n[0007] 根据所述第一文件片段的序号在所述虚拟文件链表中确定所述第一文件片段的序号所属链表节点的下一个链表节点,从所述下一个链表节点中获取第二文件片段的描述字段;\n[0008] 根据所述第二文件片段的描述字段从所述存储介质中读取所述第二文件片段的数据,并将所述第二文件片段的数据存入所述内存中。\n[0009] 结合第一方面,在第一方面的第一种可能的实现方式中,所述虚拟文件链表与所述客户端中的虚拟文件链表保持同步包括:\n[0010] 当所述客户端中的虚拟文件链表更新后,从所述客户端接收更新后的虚拟文件链表;\n[0011] 或者,当所述客户端中的虚拟文件链表更新后,从所述客户端接收链表更新信息,并根据所述链表更新信息对已存储的所述虚拟文件链表进行更新,得到更新后的虚拟文件链表;\n[0012] 或者,周期性的接收所述客户端发送的虚拟文件链表。\n[0013] 结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述描述字段包括:\n[0014] 文件片段所属原始文件的文件名、读取原始文件的起始地址、读取原始文件的长度。\n[0015] 结合第一方面,在第三种可能的实现方式中,所述存储设备与所述客户端通过采用客户端/服务器C/S模式的私有接口传输所述虚拟文件链表,所述存储设备与所述客户端之间通过所述私有接口传输心跳报文保持所述私有接口的连接状态。\n[0016] 第二方面,本发明实施例提供一种防止视频编辑时丢帧的方法,应用于视频编辑系统,所述视频编辑系统包括客户端和存储设备,所述客户端和所述存储设备均存储有所述客户端生成的虚拟文件链表,所述存储设备中的虚拟文件链表与所述客户端中的虚拟文件链表保持同步,所述虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和所述文件片段的描述字段;所述方法包括:\n[0017] 所述客户端向所述存储设备发送读请求,所述读请求中包括要读取的第一文件片段的序号;\n[0018] 所述存储设备根据所述第一文件片段的序号从内存中读取所述第一文件片段的数据;所述第一文件片段的数据是所述存储设备接收到所述客户端的上一次读请求时从存储介质读取并存入在所述内存中的;\n[0019] 所述存储设备向所述客户端返回所述第一文件片段的数据;\n[0020] 所述存储设备根据所述第一文件片段的序号在所述虚拟文件链表中确定所述第一文件片段的序号所属链表节点的下一个链表节点,从所述下一个链表节点中获取第二文件片段的描述字段;\n[0021] 所述存储设备根据所述第二文件片段的描述字段从所述存储介质中读取所述第二文件片段的数据,并将所述第二文件片段的数据存入所述内存中。\n[0022] 结合第二方面,在第一种可能的实现方式中,所述存储设备中的虚拟文件链表与所述客户端中的虚拟文件链表保持同步包括:\n[0023] 当更新所述虚拟文件链表后,所述客户端向所述存储设备发送更新后的虚拟文件链表;\n[0024] 或者,当更新所述虚拟文件链表后,所述客户端向所述存储设备发送链表更新信息;\n[0025] 所述存储设备根据所述链表更新信息对已存储的虚拟文件链表进行更新,得到更新后的虚拟文件链表;\n[0026] 或者,所述客户端周期性的向所述存储设备发送虚拟文件链表。\n[0027] 结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述描述字段包括:\n[0028] 文件片段所属原始文件的文件名、读取原始文件的起始地址、读取原始文件的长度。\n[0029] 结合第二方面,在第三种可能的实现方式中,所述存储设备与所述客户端通过采用客户端/服务器C/S模式的私有接口传输所述虚拟文件链表,所述存储设备与所述客户端之间通过所述私有接口传输心跳报文保持所述私有接口的连接状态。\n[0030] 第三方面,本发明实施例提供一种存储设备,所述存储设备存储有客户端发送的虚拟文件链表,所述虚拟文件链表与所述客户端中的虚拟文件链表保持同步,所述虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和所述文件片段的描述字段;所述存储设备包括:主机协议接口、读接口、内存、预取模块和存储介质;\n[0031] 所述主机协议接口,用于接收所述客户端发送的读请求,所述读请求中包括要读取的第一文件片段的序号;\n[0032] 所述读接口,用于根据所述第一文件片段的序号从内存中读取所述第一文件片段的数据,并将所述第一文件片段的数据返回给所述客户端;所述第一文件片段的数据是接收到所述客户端的上一次读请求时从存储介质读取并存入在所述内存中的;\n[0033] 所述读接口还用于,根据所述第一文件片段的序号在所述虚拟文件链表中确定所述第一文件片段的序号所属链表节点的下一个链表节点,从所述下一个链表节点中获取第二文件片段的描述字段;\n[0034] 所述预取模块,用于根据所述第二文件片段的描述字段从所述存储介质中读取所述第二文件片段的数据,并将所述第二文件片段的数据存入所述内存中。\n[0035] 结合第三方面,在第一种可能的实现方式中,所述存储设备还包括:私有接口,所述私有接口用于从所述客户端接收所述虚拟文件链表,以及所述虚拟文件链表与所述客户端中的虚拟文件链表保持同步,所述私有接口具体用于:\n[0036] 当所述客户端中的虚拟文件链表更新后,从所述客户端接收更新后的虚拟文件链表;\n[0037] 或者,当所述客户端中的虚拟文件链表更新后,从所述客户端接收链表更新信息,并根据所述链表更新信息对已存储的所述虚拟文件链表进行更新,得到更新后的虚拟文件链表;\n[0038] 或者,周期性的接收所述客户端发送的虚拟文件链表。\n[0039] 结合第三方面或第三方面的第一种可能的实现方式,在第二种可能的实现方式中,所述描述字段包括:\n[0040] 文件片段所属原始文件的文件名、读取原始文件的起始地址、读取原始文件的长度。\n[0041] 结合第三方面的第一种可能的实现方式,在第三种可能的实现方式中,所述私有接口为采用客户端/服务器C/S模式的接口,所述存储设备与所述客户端之间通过所述私有接口传输心跳报文保持所述私有接口的连接状态。\n[0042] 第四方面,本发明实施例提供一种视频编辑系统,所述视频编辑系统包括客户端和存储设备,所述客户端和所述存储设备均存储有所述客户端生成的虚拟文件链表,所述存储设备中的虚拟文件链表与所述客户端中的虚拟文件链表保持同步,所述虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和所述文件片段的描述字段;\n其中:\n[0043] 所述客户端用于向所述存储设备发送读请求,所述读请求中包括要读取的第一文件片段的序号;\n[0044] 所述存储设备用于根据所述第一文件片段的序号从内存中读取所述第一文件片段的数据,所述第一文件片段的数据是所述存储设备接收到所述客户端的上一次读请求时从存储介质读取并存入在所述内存中的;\n[0045] 所述存储设备还用于向所述客户端返回所述第一文件片段的数据;\n[0046] 所述存储设备还用于根据所述第一文件片段的序号在所述虚拟文件链表中确定所述第一文件片段的序号所属链表节点的下一个链表节点,从所述下一个链表节点中获取第二文件片段的描述字段;\n[0047] 所述存储设备还用于根据所述第二文件片段的描述字段从所述存储介质中读取所述第二文件片段的数据,并将所述第二文件片段的数据存入所述内存中。\n[0048] 结合第四方面,在第一种可能的实现方式中,\n[0049] 当更新所述虚拟文件链表后,所述客户端还用于向所述存储设备发送更新后的虚拟文件链表;\n[0050] 或者,当更新所述虚拟文件链表后,所述客户端还用于向所述存储设备发送链表更新信息\n[0051] 所述存储设备还用于根据所述链表更新信息对已存储的虚拟文件链表进行更新,得到更新后的虚拟文件链表;\n[0052] 或者,所述客户端还用于周期性的向所述存储设备发送虚拟文件链表。\n[0053] 结合第四方面或第四方面的第一种可能的实现方式,在第二种可能的实现方式中,所述描述字段包括:\n[0054] 文件片段所属原始文件的文件名、读取原始文件的起始地址、读取原始文件的长度。\n[0055] 结合第四方面的第一种可能的实现方式,在第三种可能的实现方式中,所述私有接口为采用客户端/服务器C/S模式的接口,所述客户端与所述存储设备之间通过所述私有接口传输心跳报文保持所述私有接口的连接状态。\n[0056] 本发明实施例提供一种防止视频编辑时丢帧的方法、设备及系统,首先由客户端生成虚拟文件链表并将该虚拟文件链表同步至存储设备,虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和文件片段的描述字段,当存储设备接收到客户端的读请求后,根据读请求中的第一文件片段的序号从内存中读取第一文件片段的数据并返回给客户端;并且,存储设备还根据第一文件片段的序号在虚拟文件链表中确定第一文件片段的序号所属链表节点的下一个链表节点,从下一个链表节点中获取第二文件片段的描述字段,再根据该描述字段从存储介质中读取第二文件片段的数据并存入内存中,以便当接收到客户端的下一次读请求时,从内存中读取第二文件片段的数据返回给客户端。\n可见能够实现每次读请求都能命中内存中预取的数据,从而能够防止视频编辑时丢帧。\n附图说明\n[0057] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。\n[0058] 图1为本发明实施例提供的防止视频编辑时丢帧的方法的流程示意图;\n[0059] 图2为本发明实施例提供的防止视频编辑时丢帧的方法的另一流程示意图;\n[0060] 图3为本发明实施例提供的防止视频编辑时丢帧的方法的又一流程示意图;\n[0061] 图4为本发明实施例提供的虚拟文件链表的结构示意图;\n[0062] 图5为本发明实施例提供的存储设备的结构示意图;\n[0063] 图6为本发明实施例提供的客户端的结构示意图;\n[0064] 图7为本发明实施例提供的视频编辑系统的结构示意图。\n具体实施方式\n[0065] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。\n[0066] 本发明实施例提供一种防止视频编辑时丢帧的方法,应用于存储设备,存储设备存储有客户端发送的虚拟文件链表,虚拟文件链表与客户端中的虚拟文件链表保持同步,虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和所述文件片段的描述字段;如图1所示,方法包括:\n[0067] S101、接收客户端发送的读请求,读请求中包括要读取的第一文件片段的序号。\n[0068] S103、根据第一文件片段的序号从内存中读取第一文件片段的数据,并将第一文件片段的数据返回给客户端;第一文件片段的数据是接收到客户端的上一次读请求时从存储介质读取并存入在内存中的。\n[0069] S105、根据第一文件片段的序号在虚拟文件链表中确定第一文件片段的序号所属链表节点的下一个链表节点,从下一个链表节点中获取第二文件片段的描述字段。\n[0070] S107、根据第二文件片段的描述字段从存储介质中读取第二文件片段的数据,并将第二文件片段的数据存入内存中。\n[0071] 从而,当接收到客户端的下一次读请求时,从内存中读取第二文件片段的数据,并将第二文件片段的数据返回给客户端。\n[0072] 本发明实施例还提供一种防止视频编辑时丢帧的方法,应用于视频编辑系统,该视频编辑系统包括客户端和存储设备,客户端和存储设备均存储有客户端生成的虚拟文件链表,存储设备中的虚拟文件链表与客户端中的虚拟文件链表保持同步,虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和所述文件片段的描述字段;如图2所示,方法包括:\n[0073] S102、客户端向存储设备发送读请求,读请求中包括要读取的第一文件片段的序号。\n[0074] S104、存储设备根据第一文件片段的序号从内存中读取第一文件片段的数据。其中,第一文件片段的数据是存储设备接收到客户端的上一次读请求时从存储介质读取并存入在内存中的。\n[0075] S106、存储设备向客户端返回第一文件片段的数据。\n[0076] S108、存储设备根据第一文件片段的序号在虚拟文件链表中确定第一文件片段的序号所属链表节点的下一个链表节点,从下一个链表节点中获取第二文件片段的描述字段。\n[0077] S110、存储设备根据第二文件片段的描述字段从存储介质中读取第二文件片段的数据,并将第二文件片段的数据存入内存中。\n[0078] 从而当存储设备接收到下一次读请求时,存储设备能够从内存中读取第二文件片段的数据,并将第二文件片段的数据返回给客户端。\n[0079] 本发明实施例提供的一种防止视频编辑时丢帧的方法,首先由客户端生成虚拟文件链表并将该虚拟文件链表同步至存储设备,虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和文件片段的描述字段,当存储设备接收到客户端的读请求后,根据读请求中的第一文件片段的序号从内存中读取第一文件片段的数据并返回给客户端;并且,存储设备还根据第一文件片段的序号在虚拟文件链表中确定第一文件片段的序号所属链表节点的下一个链表节点,从下一个链表节点中获取第二文件片段的描述字段,再根据该描述字段从存储介质中读取第二文件片段的数据并存入内存中,以便当接收到客户端的下一次读请求时,从内存中读取第二文件片段的数据返回给客户端。可见能够实现每次读请求都能命中内存中预取的数据,从而能够防止视频编辑时丢帧。\n[0080] 为了使本领域技术人员能够更清楚地理解本发明实施例提供的技术方案,下面通过具体的实施例,对本发明的实施例提供的防止视频编辑时丢帧的方法进行详细说明,如图3所示,该方法包括:\n[0081] S201、客户端生成虚拟文件链表。\n[0082] 具体的,客户端可以是视频编辑工作站,该客户端运行有用于编辑视频文件的软件,用户可以预先将需要合成目标文件的多个文件片段的信息以及这多个文件片段的编辑顺序输入至客户端,该客户端就可以通过视频编辑软件的视频编辑线程生成虚拟文件链表,虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和文件片段的描述字段,其中描述字段可以具体包括文件片段所属原始文件的文件名、读取原始文件的起始地址(用于指示获取该文件片段需要从原始文件的那个位置开始读)、读取原始文件的长度(用于指示获取该文件片段需要的原始文件的长度)。\n[0083] 示例性的,该虚拟文件链表可以如图4所示,虚拟文件链表中的读取顺序可以如图\n4中所示箭头方向为例,设置为从虚拟文件链表的头端到尾端依次读取。图4中的虚拟文件链表中包括N个链表节点,分别表示为链表节点1~N,每个链表节点都包括一文件片段的序号,该文件片段所属原始文件的文件名、读取原始文件的起始地址、读取原始文件的长度,具体的每个链表节点中包括的信息可以定义为如下字段:\n[0084]\n[0085] 其中,示例性的,读取原始文件的起始地址,可以为原始文件开始读取的起始帧数,读取原始文件的长度可以为读取原始文件的总帧数。\n[0086] S202、客户端将虚拟文件链表同步至存储设备。该存储设备则保存客户端发送的虚拟文件链表,并等待客户端的读请求。\n[0087] 示例性的,前文所述同步过程可通过同步函数实现,同步函数Send_List的关键字段可以定义如下:\n[0088]\n[0089] 一般情况下,存储设备收到虚拟文件链表后,需向客户端返回成功消息。返回信息发送函数关键字段可以定义如下:\n[0090]\n[0091] 可选的,由于在编辑过程中,用户可能变更编辑方案,从而改变虚拟文件链表,因此,若虚拟文件链表被更新,则客户端将虚拟文件链表同步至存储设备还可以包括:\n[0092] 当客户端更新虚拟文件链表后,客户端向存储设备发送更新后的虚拟文件链表。\n[0093] 或者,当客户端更新虚拟文件链表后,客户端向存储设备发送链表更新信息。\n[0094] 存储设备接收链表更新信息后根据链表更新信息对已存储的虚拟文件链表进行更新,得到更新后的虚拟文件链表。\n[0095] 或者,不监测客户端是否更新虚拟文件链表,通过周期性的向存储设备发送虚拟文件链表使存储设备的虚拟文件链表保持最新状态。\n[0096] S203、存储设备接收客户端发送的第一读请求,第一读请求中包括要读取的第一文件片段的序号。\n[0097] 具体的,客户端通过视频编辑软件的视频读取线程向存储设备发起第一读请求,存储设备可以通过主机协议接口来接收第一读请求。\n[0098] S204、存储设备根据第一文件片段的序号从内存中读取第一文件片段的数据,并将第一文件片段的数据返回给客户端。\n[0099] 存储设备通过主机协议接口来接收第一读请求后,将该第一读请求传输至存储设备中的读接口,该读接口访问存储设备的内存,从内存中读取第一文件片段的数据。\n[0100] 存储设备的读接口从内存中读取第一文件片段的数据后,存储设备的读接口将第一文件片段的数据返回至存储设备的主机协议接口,由通过主机协议接口将第一文件片段的数据返回给客户端。\n[0101] 其中,该第一文件片段的数据是接收到客户端的上一次读请求时从存储介质读取并存入在内存中的,具体的步骤与下文的S206~S207相同,请参考该S205~S206。\n[0102] S205、存储设备根据第一文件片段的序号在虚拟文件链表中确定第一文件片段的序号所属链表节点的下一个链表节点,从下一个链表节点中获取第二文件片段的描述字段。\n[0103] 例如,图4所示,链表节点2与链表节点3为相邻的两个链表节点,且链表节点3为链表节点2的下一个节点,链表节点2中的文件片段的序号为“文件片段1”、链表节点3中的文件片段的序号“文件片段2”。\n[0104] 假设,第一读请求中包括的第一文件片段的序号为上述“文件片段1”,则存储设备的读接口根据第一读请求中的“文件片段1”就可以得知,第一文件片段的序号所属的链表节点为链表节点2,从而可知客户端的下一次读请求要读取的文件片段就是链表节点3中信息所描述的片段,故读接口获取链表节点3中的第二文件片段所属的原始文件的文件名、读取原始文件的起始地址、读取原始文件的长度,并将这些信息发送至存储设备的预取模块,以便预取模块通过预取线程该执行S206。\n[0105] S206、存储设备根据第二文件片段的描述字段从存储介质中读取第二文件片段的数据,并将第二文件片段的数据存入内存中。\n[0106] 在S205中获取第二文件片段所属的原始文件的文件名、读取原始文件的起始地址、读取原始文件的长度,存储设备的预取模块根据这些信息访问存储介质,并从存储介质中读出第二文件片段的数据,而后存入内存,等待客户端的下一次读请求。\n[0107] 其中,值得一提的是,本发明各个实施例中所述的存储设备可以为机械硬盘,也可以为固态硬盘(Solid State Drive,简称SSD)或者,或者还可以是IP硬盘。存储设备中的存储介质是指存储设备中用于存储数据的载体,如机械硬盘中的磁盘,或者SSD中的闪存(Flash芯片)或动态随机存储器(Dynamic Random Access Memory,简称DRAM)。\n[0108] S207、存储设备接收客户端发送的第二读请求,第二读请求中包括要读取的第二文件片段的序号。该第二读请求是第一读请求的下一次读请求。\n[0109] S208、存储设备根据第二文件片段的序号从内存中读取第二文件片段的数据,并将第二文件片段的数据返回给客户端。\n[0110] 并且,存储设备还根据第二文件片段的序号,再次执行与S206~S207相同的步骤,以便当接收到客户端的下一次的第三读请求时,从内存中读取第三读请求要求的读取的第二文件片段的数据,并将第二文件片段的数据返回给客户端。以此类推,在每接收到客户端的一个读请求后,在将该读请求要求读取的数据从内存中取出返回给客户端,并利用虚拟文件链表将下一次读请求要求读取的数据从存储介质中预先存入内存中,直至将虚拟文件链表中的记载的文件片段的数据全部发送至客户端。\n[0111] 其中,上述第一读请求和第二读请求是任意两次相邻的读请求,需要说明的是,当第一读请求为客户端发送的第一次读请求,由于之前存储设备之前没有接收过读请求,因此在第一读请求之前无法根据读请求来预知第一读请求要读取的文件片段的数据,因此为了保证第一次读请求在存储设备内存中的命中率,可以预设置存储设备在接收到客户端的虚拟文件链表后,先根据虚拟文件链表中第一个链表节点中的描述字段,从存储介质中读取将要发送的第一次读请求要读取的数据,并存入内存。这样就能保证在客户端发送的每一个读请求,都能够命中存储设备内存中的数据。\n[0112] 另外,值得一提的是,由于目前可移植操作系统接口(Portable Operating System Interface,简称POSIX)、存储管理接口标准(Storage Management Initiative Specification,简称SMI-S)等通用接口不支持存储设备和客户端的虚拟文件链表的同步,因此存储设备和客户端之间传输虚拟文件链表,以及虚拟文件链表更新后的同步需要采用私有接口,比如通过采用客户端/服务器(Client/Server,简称C/S)模式的私有接口传输虚拟文件链表,并且存储设备与客户端之间通过私有接口传输心跳报文保持私有接口的连接状态。具体的,C/S模式的私有接口的Server(服务端)安装在存储设备上,客户端上安装Agent(代理端),Server和Agent之间通过私有协议通信,Agent安装并启动后,须向Server注册,并通过心跳报文保证Agent与Server的连接状态。\n[0113] 综上所述,由于客户端发送至存储设备的每次读请求都是根据虚拟文件链表中各个链表节点所记载的文件片段顺序发送的,存储设备也是根据同步于客户端的虚拟文件链表中各个链表节点所记载的文件片段顺序依次将数据预先存储在内存中的,所以客户端的每一个读请求,都能够命中存储设备内存中的数据。\n[0114] 本发明实施例提供的一种防止视频编辑时丢帧的方法,首先由客户端生成虚拟文件链表并将该虚拟文件链表同步至存储设备,虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和文件片段的描述字段,当存储设备接收到客户端的读请求后,根据读请求中的第一文件片段的序号从内存中读取第一文件片段的数据并返回给客户端;并且,存储设备还根据第一文件片段的序号在虚拟文件链表中确定第一文件片段的序号所属链表节点的下一个链表节点,从下一个链表节点中获取第二文件片段的描述字段,再根据该描述字段从存储介质中读取第二文件片段的数据并存入内存中,以便当接收到客户端的下一次读请求时,从内存中读取第二文件片段的数据返回给客户端。可见能够实现每次读请求都能命中内存中预取的数据,从而能够防止视频编辑时丢帧。\n[0115] 本发明实施例提供一种存储设备1,存储设备1存储有客户端发送的虚拟文件链表,虚拟文件链表与客户端中的虚拟文件链表保持同步,虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和文件片段的描述字段;如图5所示,存储设备1包括:主机协议接口11、读接口12、内存13、预取模块14和存储介质15;\n[0116] 主机协议接口11,用于接收客户端发送的读请求,读请求中包括要读取的第一文件片段的序号;\n[0117] 读接口12,用于根据第一文件片段的序号从内存13中读取第一文件片段的数据,并将第一文件片段的数据返回给客户端;第一文件片段的数据是接收到客户端的上一次读请求时从存储介质15读取并存入在内存13中的;\n[0118] 读接口12还用于,根据第一文件片段的序号在虚拟文件链表中确定第一文件片段的序号所属链表节点的下一个链表节点,从下一个链表节点中获取第二文件片段的描述字段;\n[0119] 预取模块14,用于根据第二文件片段的描述字段从存储介质中读取第二文件片段的数据,并将第二文件片段的数据存入内存13中。\n[0120] 从而当接收到客户端的下一次读请求时,从内存中读取第二文件片段的数据,并将第二文件片段的数据返回给客户端。\n[0121] 可选的,存储设备1还包括:私有接口16,私有接口16用于从客户端接收虚拟文件链表,以及虚拟文件链表与客户端中的虚拟文件链表保持同步,私有接口16具体用于:\n[0122] 当客户端中的虚拟文件链表更新后,从客户端接收更新后的虚拟文件链表;\n[0123] 或者,当客户端中的虚拟文件链表更新后,从客户端接收链表更新信息,并根据链表更新信息对已存储的虚拟文件链表进行更新,得到更新后的虚拟文件链表;\n[0124] 或者,周期性的接收客户端发送的虚拟文件链表。\n[0125] 可选的,描述字段可以包括:\n[0126] 文件片段所属原始文件的文件名、读取原始文件的起始地址、读取原始文件的长度。\n[0127] 可选的,私有接口16为采用客户端/服务器C/S模式的接口,存储设备与客户端之间通过私有接口16传输心跳报文保持私有接口的连接状态。\n[0128] 本实施例用于实现上述各方法实施例,本实施例中各个单元的工作流程和工作原理参见上述各方法实施例中的描述,在此不再赘述。\n[0129] 本发明实施例提供的存储设备,首先由客户端生成虚拟文件链表并将该虚拟文件链表同步至存储设备,虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和文件片段的描述字段,当存储设备接收到客户端的读请求后,根据读请求中的第一文件片段的序号从内存中读取第一文件片段的数据并返回给客户端;并且,存储设备还根据第一文件片段的序号在虚拟文件链表中确定第一文件片段的序号所属链表节点的下一个链表节点,从下一个链表节点中获取第二文件片段的描述字段,再根据该描述字段从存储介质中读取第二文件片段的数据并存入内存中,以便当接收到客户端的下一次读请求时,从内存中读取第二文件片段的数据返回给客户端。可见能够实现每次读请求都能命中内存中预取的数据,从而能够防止视频编辑时丢帧。\n[0130] 本发明实施例提供一种客户端2,客户端2存储有客户端2生成的虚拟文件链表,虚拟文件链表保持同步至存储设备,虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和文件片段的描述字段;如图6所示,客户端包括:\n[0131] 读请求模块21,用于向存储设备发送读请求,读请求中包括要读取的第一文件片段的序号,以便存储设备从内存中读取第一文件片段的数据,第一文件片段的数据是存储设备接收到客户端2上一次读请求时从存储介质读取并存入在内存中的。\n[0132] 接收模块22,用于接收存储设备返回的第一文件片段的数据。\n[0133] 第一文件片段的序号还用于使存储设备根据第一文件片段的序号在虚拟文件链表中确定第一文件片段的序号所属链表节点的下一个链表节点,从下一个链表节点中获取第二文件片段的描述字段,并根据第二文件片段的描述字段从存储介质中读取第二文件片段的数据,并将第二文件片段的数据存入内存中。\n[0134] 从而当存储设备接收到下一次读请求时,从内存中读取第二文件片段的数据,并将第二文件片段的数据返回给客户端。\n[0135] 可选的,客户端2还包括:\n[0136] 编辑模块23,用于生成及更新虚拟文件链表。\n[0137] 私有接口24,用于将虚拟文件链表保持同步至存储设备。\n[0138] 私有接口24可以具体用于:\n[0139] 当更新虚拟文件链表后,向存储设备发送更新后的虚拟文件链表;\n[0140] 或者,当更新虚拟文件链表后,向存储设备发送链表更新信息,以便存储设备根据链表更新信息对已存储的虚拟文件链表进行更新,得到更新后的虚拟文件链表;\n[0141] 或者,周期性的向存储设备发送虚拟文件链表。\n[0142] 可选的,描述字段可以包括:\n[0143] 文件片段所属原始文件的文件名、读取原始文件的起始地址、读取原始文件的长度。\n[0144] 可选的,私有接口24为采用客户端/服务器C/S模式的接口,客户端与存储设备之间通过私有接口24传输心跳报文保持私有接口的连接状态。\n[0145] 其中,客户端2可以是一种视频编辑工作站,该客户端2上可以运行一视频编辑软件,该客户端2的读请求模块21可以通过视频读取线程来发送读请求,接收模块22接收到返回的数据后,可以先缓存在内存中,等待编辑模块23通过视频编辑线程读取内存中的数据进行视频编辑。\n[0146] 本实施例用于实现上述各方法实施例,本实施例中各个单元的工作流程和工作原理参见上述各方法实施例中的描述,在此不再赘述。\n[0147] 本发明实施例提供的客户端,首先由客户端生成虚拟文件链表并将该虚拟文件链表同步至存储设备,虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和文件片段的描述字段,当存储设备接收到客户端的读请求后,根据读请求中的第一文件片段的序号从内存中读取第一文件片段的数据并返回给客户端;并且,存储设备还根据第一文件片段的序号在虚拟文件链表中确定第一文件片段的序号所属链表节点的下一个链表节点,从下一个链表节点中获取第二文件片段的描述字段,再根据该描述字段从存储介质中读取第二文件片段的数据并存入内存中,以便当接收到客户端的下一次读请求时,从内存中读取第二文件片段的数据返回给客户端。可见能够实现每次读请求都能命中内存中预取的数据,从而能够防止视频编辑时丢帧。\n[0148] 本发明实施例还提供一种视频编辑系统,如图7所示,视频编辑系统可以包括前述实施里提供的客户端2和存储设备1,客户端2和存储设备1均存储有客户端2生成的虚拟文件链表,存储设备1中的虚拟文件链表与客户端2中的虚拟文件链表保持同步,虚拟文件链表包括多个链表节点,每个链表节点包括一个文件片段的序号和文件片段的描述字段;其中:\n[0149] 客户端2用于向存储设备1发送读请求,读请求中包括要读取的第一文件片段的序号;\n[0150] 存储设备1用于根据第一文件片段的序号从内存中读取第一文件片段的数据,第一文件片段的数据是存储设备1接收到客户端2的上一次读请求时从存储介质读取并存入在内存中的;\n[0151] 存储设备1还用于向客户端2返回第一文件片段的数据;\n[0152] 存储设备1还用于根据第一文件片段的序号在虚拟文件链表中确定第一文件片段的序号所属链表节点的下一个链表节点,从下一个链表节点中获取第二文件片段的描述字段;\n[0153] 存储设备1还用于根据第二文件片段的描述字段从存储介质中读取第二文件片段的数据,并将第二文件片段的数据存入内存中。\n[0154] 从而当存储设备1接收到下一次读请求时,从内存中读取第二文件片段的数据,并将第二文件片段的数据返回给客户端2。\n[0155] 可选的,当更新虚拟文件链表后,客户端2还用于向存储设备发送更新后的虚拟文件链表;\n[0156] 或者,当更新虚拟文件链表后,客户端2还用于向存储设备发送链表更新信息;\n[0157] 存储设备1还用于根据链表更新信息对已存储的虚拟文件链表进行更新,得到更新后的虚拟文件链表;\n[0158] 或者,客户端2还用于周期性的向存储设备发送虚拟文件链表。\n[0159] 可选的,描述字段可以包括:\n[0160] 文件片段所属原始文件的文件名、读取原始文件的起始地址、读取原始文件的长度。\n[0161] 可选的,私有接口为采用客户端/服务器C/S模式的接口,客户端2与存储设备1之间通过私有接口传输心跳报文保持私有接口的连接状态。\n[0162] 本实施例用于实现上述各方法实施例,本实施例中各个单元的工作流程和工作原理参见上述各方法实施例中的描述,在此不再赘述。\n[0163] 在本发明所提供的几个实施例中,应该理解到,所揭露的方法、装置和系统,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。\n[0164] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。\n[0165] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。\n[0166] 上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。\n[0167] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
法律信息
- 2018-08-21
- 2015-03-11
实质审查的生效
IPC(主分类): H04N 21/44
专利申请号: 201410594344.X
申请日: 2014.10.29
- 2015-02-04
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2009-03-18
|
2008-10-15
| | |
2
| |
2004-02-25
|
2002-08-20
| | |
3
| |
2014-04-16
|
2012-10-10
| | |
4
| |
2011-05-04
|
2009-10-23
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |