实施例一
本发明实施例提供一种录播系统的网络挂载异常处理方法,如图1所示,该方法包括:
步骤101,获取录播系统当前写操作失败的文件名称;
步骤102,根据写操作失败的文件名称获取写操作失败对应的挂载路径;
步骤103,当写操作失败对应的挂载路径为异常状态时,选择新的录制路径继续录制写操作失败的文件;
步骤104,在写操作失败对应的挂载路径恢复正常状态时,将新的录制路径录制的文件复制到恢复正常的挂载路径下。
由以上描述可以看出,通过将检测到的挂载异常路径下的文件重新在新的路径下录制,并在异常路径恢复正常状态后,将新路径下录制的文件复制到恢复正常的路径下,这样,就不会出现现有技术中的由于挂载异常而导致的录制数据不完整的问题,克服了现有技术中的缺陷,通过本发明实施例,可以实现在挂载异常时保证录制数据的完整性。
具体地,通过如下方式确定写操作失败对应的挂载路径为异常状态:获取录播系统当前可用的所有挂载路径集合;判断写操作失败对应的挂载路径是否存在于所有挂载路径集合中;如果写操作失败对应的挂载路径未存在于所有挂载路径集合中,则表示写操作失败对应的挂载路径为异常状态;否则,表示写操作失败对应的挂载路径为正常状态。
优选地,上述步骤103选择的新的录制路径为录播系统的本地临时路径。这样,可以方便后续的复制操作。
在实际操作中,当写操作失败对应的挂载路径为异常状态时,方法还包括:记录发生异常状态的时间。这样,进一步方便了后续的复制操作。
图2是挂载异常路径的检测流程图,如图2所示,该流程包括:
步骤201,录播系统持续地往指定的网路路径地址写录制文件;
步骤202,进行写录制文件操作,在每次写操作执行完成后,判断写操作的执行是否失败;如果是,则进行步骤203,否则返回步骤201;
步骤203,当写操作执行失败时,得到写操作失败的文件名,例如,命名为error_file;
步骤204,由error_file可以得到其对应的网络挂载路径,命名为net_path;
步骤205,获得录播系统当前可用的所有挂载路径集合,可以命令这个路径集合为paths;
步骤206,判断net_path是否在paths这个路径集合中,如果是,则进行步骤207,否则,进行步骤208;
步骤207,如果net_path依然在路径集合paths中,则说明写文件失败并非是网络挂载异常引起的,即网络挂载状态正常。
步骤208,如果net_path不在路径集合paths中,则表示网络挂载异常。
在现有技术中,如果网络挂载发生,当有录制任务的写操作是在这个网络路径上进行录制,则这些录制任务将会出错。并且,这些录制任务因录制出错而将导致录播服务器放弃对这个录制任务的继续执行,则后续的所有内容将丢失。或者,某个录制任务对应的录制文件既在录播服务器的本地硬盘中、又有部分存放在网络存储中,这将造成录制数据的混乱,不利于后期点播业务的实现及录制数据的管理。又由于录播系统在录制文件结束时才添加上结束时间,而对这种挂载异常发生时的文件没能及时写上结束时间,后续也无法继续文件的录制。
为了要处理好网络挂载异常,本发明实施例需要保证录制文件的内容尽量少的丢失;保证录制文件名的一致性,即给异常录制文件补填上录制结束时间;一次录制任务的所有录制文件在一个文件夹下统一管理,便于点播等业务的使用。以下结合图3、图4来详细描述挂载异常后的处理流程,其中图3主要是对异常发生时要处理的事务进行描述,图4主要是描述原异常的挂载路径又恢复正常后的处理。
首先,对图3、图4中出现的几个名词进行简要解决:
error_time:异常发生时间,这个值用于修复网络路径上录制文件名没有结束时间的文件。
net_path:为检测出的挂载出现异常的挂载路径。
录制任务的定义:录制任务包括录制名,录制的码流来源的Url,录制的路径。其中录制名用来唯一的标识此录制任务。
recorder_tasks:为录制任务集合,存放着录播服务器当前正在进行的且录制路径为net_path指向的网络地址的录制任务。
recorder_task:为recorder_tasks的一个元素,多个recorder_task组成一个recorder_tasks。
recorder_tasks_new:为录制任务集合,与recorder_tasks内容除录制任务对应的录制路径不同外其余都相同;recorder_tasks对应的录制路径为网络的录制地址,而recorder_tasks_new对应的录制路径为本地硬盘的录制地址。
recorder_task_new:为recorder_tasks_new的一个元素,多个recorder_task_new组合一个recorder_tasks_new。
error_info.xml:xml格式文件,里面存放的内容为多个录制异常任务,每个录制异常任务包含以下信息:网络挂载异常发生时间,异常的挂载路径,recorder_task,recorder_task_new。
如图3所示,挂载异常发生时的处理流程包括:
步骤301,发生挂载异常;
步骤302,当异常发生时,记录下异常发生的时间error_time,该异常发生时间用于修复网络路径上录制文件名没有结束时间的文件;
步骤303,获得挂载异常路径net_path;
步骤304,获得与这个挂载路径net_path对应的所有录制任务recorder_tasks;
步骤305,主动通知录播服务器对recorder_tasks执行停止录制;
步骤306,修改recorder_tasks的录制路径生成recorder_tasks_new,recorder_tasks_new的录制路径为录播服务器本地硬盘对应的路径;
步骤307,通知录播服务器对recorder_tasks_new执行开始录制操作;
步骤308,记录下录制recorder_tasks任务,recorder_tasks_new任务到文件error_info.xml,此文件在当挂载的路径恢复正常时使用;执行recorder_tasks_new的任务,直到此次录制任务结束。
如图4所示,挂载异常恢复后的流程包括:
步骤401,挂载异常恢复正常;
步骤402,查找error_info.xml得到与net_path对应的recorder_task;
步骤403,判断recorder_task是否结束,如果是,进行步骤404,否则,进行步骤405;
步骤404,修复recorder_task对应的网络路径下的文件;
步骤405,将recorder_tasks_new录制在本地临时目录下录制的文件拷贝到recorder_tasks对应的网络路径下。
以下给出一实例。
图5是录制系统的结构示意图,如图5所示,录播服务器IP为10.1.10.158,命名为media_server。集中存储服务器IP为10.1.10.17,命名为net_storage_server。编码器IP为10.1.10.53,命令为codec_server。media_server将net_storage_server挂载到media_serves上,media_server接收codec_server发送的音视频数据,并且将音视频数据转存到net_storage_server上。
以下详细描述录播系统的网络挂载异常处理流程。
流程一:
net_storage_server有一共享的网络地址:如:\\10.1.10.17\Share\
media_server将“\\10.1.10.17\Share\”路径挂载到本地“/home/netstorage/”。
当前正在执行一个录制任务record_task,此录制任务对应的录制目录为“/home/netstorage/”。录制的文件名为10.1.10.53_20120101121500.mp4,其中20120101121500为录制的开始时间。
流程二:
在录制的过程中media_server持续往10.1.10.53_20120101121500.mp4上写数据,当写操作执行失败,执行流程三。
流程三:
判断“\\10.1.10.17\Share\”的挂载是否还有效。如果有效,则对写操作失败进行其他分析处理;如果挂载路径无效,则执行流程四。
流程四:
media_server停止对record_task的录制,即不再往10.1.10.53_20120101121500.mp4写数据。
将record_task的录制目录从原来的“/home/netstorage/”改为“/home/netstorage_error_tmp_path”,并新生成一个录制任务record_task_new。其中:“/home/netstorage_error_tmp_path/”为本地的临时路径。需要说明的是:record_task_new与record_task对应的录制名称相同,这就保证了,当要求结束record_task时,实际结束的是record_task_new任务。
对record_task_new执行录制操作,录制生成文件放置在“/home/netstorage_error_tmp_path/”目录下,录制文件名名为10.1.10.53_20120101123000.mp4。
将当前时间、record_task的信息、record_task_new的信息保存到error_info.xml中。执行流程五。
流程五:
media_server将音视频数据写到“/home/netstorage_error_tmp_path/”目录下的10.1.10.53_20120101123000.mp4文件中,直到这个录制任务结束。
在录制任务结束时,给文件名打上结束时间。如,结束时间为2012-01-0113:30:00。则结束时文件名“10.1.10.53_20120101123000.mp4”改为“10.1.10.53_20120101123000_20120101133000.mp4”。
流程六:
当挂载的路径“\\10.1.10.17\Share\”恢复正常,且流程五已经执行完成。则根据error_info.xml文件中记录的挂载异常时间,给“10.1.10.53_20120101121500.mp4”添加上结束时间,即文件名改为“10.1.10.53_20120101121500_20120101123000.mp4”。将“10.1.10.53_20120101123000_20120101133000.mp4”文件拷贝到“/home/netstorage/”目录下。至此,对应本此录制的所有录制文件都存放在网络路径下了。
实施例二
本发明实施例还提供一种录播系统的网络挂载异常处理装置,优选地用于实现上述实施例一中的方法。图6是该装置的结构示意图,如图6所示,该装置包括:
文件名获取单元1,用于获取录播系统当前写操作失败的文件名称;
挂载路径获取单元2,用于根据写操作失败的文件名称获取写操作失败对应的挂载路径;
录制路径选择单元3,用于当写操作失败对应的挂载路径为异常状态时,选择新的录制路径继续录制写操作失败的文件;
文件复制单元4,用于在写操作失败对应的挂载路径恢复正常状态时,将新的录制路径录制的文件复制到恢复正常的挂载路径下。
由以上描述可知,通过录制路径选择单元将检测到的挂载异常路径下的文件重新在新的路径下录制,并在异常路径恢复正常状态后,文件复制单元将新路径下录制的文件复制到恢复正常的路径下,这样,就不会出现现有技术中的由于挂载异常而导致的录制数据不完整的问题,克服了现有技术中的缺陷,通过本发明实施例,可以实现在挂载异常时保证录制数据的完整性。
上述录制路径选择单元选择的新的录制路径为录播系统的本地临时路径。
具体地,如图7所示,上述装置还包括:
挂载路径集合获取单元5,用于获取录播系统当前可用的所有挂载路径集合;
路径状态判断单元6,用于判断写操作失败对应的挂载路径是否存在于所有挂载路径集合中;如果写操作失败对应的挂载路径未存在于所有挂载路径集合中,则表示写操作失败对应的挂载路径为异常状态。
在实际操作时,上述的装置还包括:时间记录单元,用于记录发生异常状态的时间。
上述各单元的具体功能可以参见上述实施例一中的描述,此处不再赘述。
综上所述,本发明实施例利用当挂载异常发生时,必定导致流媒体服务器写录制文件的操作失败这个必要条件作为判断挂载是否异常的一个触发点,通过准确快速地确定挂载异常情况,重新确定新的路径继续录制文件,克服了录制数据不完整的问题,可以实现在挂载异常时保证录制数据的完整性。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读取存储介质中,比如ROM/RAM、磁碟、光盘等。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。