android Http分块顺序上传大视频

最近项目组需求上传大视频到服务器,纵观海量应用支持上传大视频、大文件的聊聊无几,经过和服务器共同制定方案采用分块顺序上传,最后确定采用http协议来实现,问题来了,http不可能直接读取很大的视频文件一定会导致oom,而且传送很容易失败,一旦失败又要重新开始传输,这样体验可想而知,最后我们采用断点续传的方式来实现,最终的效果可谓杠杠的,可以自信的说不在优酷视频上传体验之下。具体步骤简单记录下来,方便大家学习分享。


整个过程是分3步来完成的

1、uploadVedioMetaDataInfo

功能描述:

上传视频metadata信息,metadata信息包括:md5、文件容量大小、文件名称。

返回视频的上传信息: 如果正在上传,返回当前文件的进度;如果上传成功,返回文件的保存url,视频截图的尺寸、视频时长

2、getUploadVedioInfo

功能描述:

获取文件的上传信息,如果正在上传返回当前文件的进度; 如果上传成功返回文件的保存url,如果是视频返回视频时长,和截屏.

3、uploadFileByBlock

功能描述:

分块顺序上传文件,最终返回视频时长、视频缩略图等信息(由于用户录制视频较大,客户端播放很慢、卡,最终通过服务器异步压缩处理的方式解决体验)

4、publish

功能描述:

将返回的视频信息发送到逻辑服务器完成发布


后面会考虑将这块的内容封装成一个上传组件,最后上客户端断点上传关键代码,整体流程就不贴出来了。

public class FileUtils {


public static byte[] getBlock(long offset, File file, int blockSize) {
byte[] result = new byte[blockSize];
RandomAccessFile accessFile = null;
try {
accessFile = new RandomAccessFile(file, "r");
accessFile.seek(offset);
int readSize = accessFile.read(result);
if (readSize == -1) {
return null;
} else if (readSize == blockSize) {
return result;
} else {
byte[] tmpByte = new byte[readSize];
System.arraycopy(result, 0, tmpByte, 0, readSize);
return tmpByte;
}


} catch (IOException e) {
e.printStackTrace();
} finally {
if (accessFile != null) {
try {
accessFile.close();
} catch (IOException e1) {
}
}
}
return null;
}

}


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值