一种音视频分片上传与重传方法与流程

文档序号:21983535发布日期:2020-08-25 19:20阅读:199来源:国知局
一种音视频分片上传与重传方法与流程

本发明涉及多媒体通信领域,具体提供一种音视频分片上传与重传方法。



背景技术:

现有技术下,整个音视频上传时,如果中途出现网络中断或是网络不好等问题,将会导致音视频文件上传失败,且不能继续之前失败文件的上传。另外,上传音视频文件过多过大都容易给文件服务器造成压力,不管是上传失败,还是重新上传,都会造成更多的成本损失。



技术实现要素:

本发明是针对上述现有技术的不足,提供一种实用性强的音视频分片上传与重传方法。

本发明解决其技术问题所采用的技术方案是:

一种音视频分片上传与重传方法,分为以下步骤,

s01、文件分片初次上传失败重传:文件小于等于5m,不进行分片,整个文件直接上传对象存储;文件大于5m,采用亚马逊分片方法,获取分片个数,分片大小;

s02、定时重传上传失败文件:定时重传上传失败文件的频率为两小时启动一次,判断当天和前一天是否有上传失败的片段,将所述上传失败的片段进行重传;

s03、定时清理上传失败记录文件:设定时间进行清除。

进一步的,在步骤s01中,首先每个文件的上传都开启一个线程,然后,将文件进行分片,初始化文件需要上传凭证id、是否分片标识、文件绝对路径和分片信息集合的信息,将得到的所有文件分片信息放入线程池中,多线程执行分片上传,并获取每个线程的回调的上传结果;

若没有上传失败的分片集合,则发起一个文件合并请求到对象存储,将分片合并成一个完整的文件,并回调文件状态上报接口,记录该音视频转码文件上传成功,结束该线程;

若有上传失败的分片集合,收集上传失败的分片集合,将上传失败的分片集合序列化到上传失败记录文件中。

进一步的,在将上传失败的分片集合序列化到上传失败记录文件中时,有以下步骤:

1)创建当天上传失败记录文件夹,命名为upload_error_data/yyyymm/dd/subtaskid,其中,subtaskid为转码唯一标识;

2)在上述创建的文件夹中再创建一个上传失败记录文件,命名为上传凭证id.errdata,其中上传凭证id为该文件上传对象存储前所获取到的一个字符串,.errdata为上传失败记录文件后缀;

3)将上传失败的分片集合转换成json,并以utf-8的编码方式写入到上传失败记录文件中;

4)最后结束该线程,等待定时重传上传失败文件进行重传。

进一步的,在线程池中,每一单个线程中某一分片上传和重传时分为以下步骤:

1)组装上传对象所需信息;

2)获取亚马逊s3请求连接;

3)发起上传请求;

4)如果上传失败,重新发起上传请求,直到成功,可尝试重传三次;

5)最后将上传结果返回。

作为优选,所述分片信息集合包括分片编号、重试次数、分片起始字节数、分片大小和创建时间,其中,初次上传重试次数为1。

进一步的,步骤s02中的具体操作过程为,获取当前时间enddate和前一天的日期startdate,格式分别为yyyymm/dd;

查找符合条件的上传失败记录文件夹,upload_error_data/enddate/、upload_error_data/startdate/;

根据上述两个文件夹,查找所有件后缀为.errdata的文件;

获取到的文件集合就是所有传失败记录文件,从这些文件中获取所有需要重传的文件信息,得到失败记录文件集合,并对每一个文件进行反序列化,获取文件中记录的上传失败文件信息,循环完成即可得到所有需要重传的文件信息集合。

进一步的,对文件信息集合中的每个文件都开启一个线程进行重传,每一个线程中重传的过程为:

1)、将每个重传分片重传次数+1;

2)、将该文件中所有重传的分片信息放入线程池中,多线程执行分片上传,并获取每个线程的回调上传结果。

进一步的,在线程池中,每一单个线程中某一分片上传和重传时分为以下步骤:

1)组装上传对象所需信息;

2)获取亚马逊s3请求连接;

3)发起上传请求;

4)如果上传失败,重新发起上传请求,直到成功,可尝试重传三次;

5)最后将上传结果返回。

进一步的,分析每一单个线程每个分片上传情况,收集上传失败的分片集合;

若没有上传失败的分片集合,则发起一个文件合并请求到对象存储,将分片合并成一个完整的文件,然后,回调文件状态上报接口,记录该音视频转码文件上传成功,最后,清除该重传文件的上传失败记录文件,结束该线程;

若有上传失败的分片集合,则将上传失败的分片集合序列化到上传失败记录文件中;

定时任务执行完成,等待两小时之后重新启动。

进一步的,若有上传失败的分片集合,具体步骤如下:

1)首先判断是否有分片重传次数已经等于3次,如果有,则回调文件状态上报接口,记录该音视频转码文件上传失败,再回调文件重传记录接口,记录该转码文件中分片重传次数超标的文件;若无,则将再次重传失败的分片信息序列化到上传失败记录文件中;

2)获取到该文件的上传失败记录文件upload_error_data/yyyymm/dd/subtaskid/上传唯一标识.errdata,其中subtaskid为转码唯一标识;

3)然后,将上传失败的分片集合转换成json,并以utf-8的编码方式写入到上传失败记录文件中;

4)最后结束线程,等待定时重传上传失败文件进行重传。

本发明的一种音视频分片上传与重传方法和现有技术相比,具有以下突出的有益效果:

本发明将音视频分割为多个分片进行上传,并且存储文件上传进度。当确定某一个分片上传失败时,只需要对该上传失败的分片进行上传即可,不用重复上传已经上传成功的部分,从而减少了对对象存储的存储资源占用。并在设置的重试次数内对发送失败的分片重复发送,以确保文件的完成性,减少音视频文件因网络等问题导致的上传失败率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

附图1是一种音视频分片上传与重传方法中文件分片初次上传失败重传的流程图;

附图2是一种音视频分片上传与重传方法中定时重传上传失败文件的流程图。

具体实施方式

为了使本技术领域的人员更好的理解本发明的方案,下面结合具体的实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本发明保护的范围。

下面给出一个最佳实施例:

如图1、2所示,本实施例中的一种音视频分片上传与重传方法,分为以下步骤,

s01、文件分片初次上传失败重传:文件小于等于5m,不进行分片,整个文件直接上传对象存储;文件大于5m,采用亚马逊分片方法,获取分片个数,分片大小;

s02、定时重传上传失败文件:定时重传上传失败文件的频率为两小时启动一次,判断当天和前一天是否有上传失败的片段,将所述上传失败的片段进行重传;

s03、定时清理上传失败记录文件:设定时间进行清除。

在步骤s01文件分片初次上传失败重传中,首先多文件并发上传采用的是亚马逊低级别api配合多线程的方案,其中文件上传至浪潮云对象存储中。

其次音视频文件分片的方案是:

文件小于等于5m,不进行分片,整个文件直接上传对象存储;

文件大于5m,采用亚马逊分片方法,获取分片个数,分片大小。

首先每个文件的上传都开启一个线程,然后,将文件进行分片,初始化文件需要上传凭证id、是否分片标识、文件绝对路径和分片信息集合的信息,将得到的所有文件分片信息放入线程池中,多线程执行分片上传,并获取每个线程的回调的上传结果;

若没有上传失败的分片集合,则发起一个文件合并请求到对象存储,将分片合并成一个完整的文件,并回调文件状态上报接口,记录该音视频转码文件上传成功,结束该线程;

若有上传失败的分片集合,收集上传失败的分片集合,将上传失败的分片集合序列化到上传失败记录文件中。

其中,分片信息集合包括分片编号、重试次数、分片起始字节数、分片大小和创建时间,其中,初次上传重试次数为1。

在将上传失败的分片集合序列化到上传失败记录文件中时,有以下步骤:

1)创建当天上传失败记录文件夹,命名为upload_error_data/yyyymm/dd/subtaskid,其中,subtaskid为转码唯一标识;

2)在上述创建的文件夹中再创建一个上传失败记录文件,命名为上传凭证id.errdata,其中上传凭证id为该文件上传对象存储前所获取到的一个字符串,.errdata为上传失败记录文件后缀;

3)将上传失败的分片集合转换成json,并以utf-8的编码方式写入到上传失败记录文件中;

4)最后结束该线程,等待定时重传上传失败文件进行重传。

在线程池中,每一单个线程中某一分片上传和重传时分为以下步骤:

1)组装上传对象所需信息;

2)获取亚马逊s3请求连接;

3)发起上传请求;

4)如果上传失败,重新发起上传请求,直到成功,可尝试重传三次;

5)最后将上传结果返回。

其中,亚马逊s3请求,mazon(s3)是一个公开的服务,web应用程序开发人员可以使用它存储数字资产,包括图片、视频、音乐和文档。s3提供一个restfulapi以编程方式实现与该服务的交互。

在步骤s02定时重传上传失败文件中,获取当前时间enddate和前一天的日期startdate,格式分别为yyyymm/dd;

查找符合条件的上传失败记录文件夹,upload_error_data/enddate/、upload_error_data/startdate/;

根据上述两个文件夹,查找所有件后缀为.errdata的文件;

获取到的文件集合就是所有传失败记录文件,从这些文件中获取所有需要重传的文件信息,得到失败记录文件集合,并对每一个文件进行反序列化,获取文件中记录的上传失败文件信息,循环完成即可得到所有需要重传的文件信息集合。

对文件信息集合中的每个文件都开启一个线程进行重传,每一个线程中重传的过程为:

1)、将每个重传分片重传次数+1;

2)、将该文件中所有重传的分片信息放入线程池中,多线程执行分片上传,并获取每个线程的回调上传结果。

在线程池中,每一单个线程中某一分片上传和重传时分为以下步骤:

1)组装上传对象所需信息;

2)获取亚马逊s3请求连接;`

3)发起上传请求;

4)如果上传失败,重新发起上传请求,直到成功,可尝试重传三次;

5)最后将上传结果返回。

分析每一单个线程每个分片上传情况,收集上传失败的分片集合;

若没有上传失败的分片集合,则发起一个文件合并请求到对象存储,将分片合并成一个完整的文件,然后,回调文件状态上报接口,记录该音视频转码文件上传成功,最后,清除该重传文件的上传失败记录文件,结束该线程;

若有上传失败的分片集合,则将上传失败的分片集合序列化到上传失败记录文件中;

定时任务执行完成,等待两小时之后重新启动。

若有上传失败的分片集合,具体步骤如下:

1)首先判断是否有分片重传次数已经等于3次,如果有,则回调文件状态上报接口,记录该音视频转码文件上传失败,再回调文件重传记录接口,记录该转码文件中分片重传次数超标的文件;若无,则将再次重传失败的分片信息序列化到上传失败记录文件中;

2)获取到该文件的上传失败记录文件upload_error_data/yyyymm/dd/subtaskid/上传唯一标识.errdata,其中subtaskid为转码唯一标识;

3)然后,将上传失败的分片集合转换成json,并以utf-8的编码方式写入到上传失败记录文件中;

4)最后结束线程,等待定时重传上传失败文件进行重传。

在步骤s03中,定时任务1天执行一次,对upload_error_data/文件夹下,时间超过6个月的文件夹进行删除,防止一直占用服务器存储空间。

上述具体的实施方式仅是本发明具体的个案,本发明的专利保护范围包括但不限于上述具体的实施方式,任何符合本发明的音视频分片上传与重传方法权利要求书的且任何所述技术领域普通技术人员对其做出的适当变化或者替换,皆应落入本发明的专利保护范围。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

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