文件分段请求

如何播放分段式连接的视频 项目是一个视频类的app 刚开始找很多播放器,感觉都还不错,随着业务不断的变迁,对视频播放也要求越来越高,要满足基本的视频播放,如MP4 、m3u8...正常的播放地址,后来又有分段式的视频地址,有的还要设置视频连接的请求头,一般的播放器都满足简单的地址播放,多段播放的就很少了,后来在网上查了好久,满足多段播放比较不错的播放器有两个:一个是ijkplayer ,一个是vitamin 都能支持分段时 阅读详情

最近下载视频遇到限速,限到无法忍受

观察了一下:

1.下载前请求文件所有备份地址,能断点续传

2.单独请求这个地址也会有一定的限速,但好过直接从应用里请求时的速度,差不多高10-20倍

3.使用提速机会时随机生成token

4.客户端定时发送请求,提速机会完成时,请求结果变化然后恢复限速

突破点其实很多,为了顺便实践下iOS上文件下载的管理,定了这么一个方案:

根据本地带宽和限速信息,生成多个请求,从不同的range开始下载,下载完成后合并文件


延期的工程

但结果有点不尽人意:第三方下载器直接下载资源地址也经常停滞,下载速度为0。于是这套方案近期不再维护,等做完第二版的应用再来做一个真正的分段下载器,做点记录:

工程基于AFNetworking3.0+开发,省去了对请求头、响应报文的一些处理

1.发一起一个breakertask(自定义名称)进行下载

2.开始下载,task请求文件总大小。

2-1)拓展:目前通过发起完整请求,progress获取后取消请求来处理,是否有更好的方式

2-2)拓展:目前在下载方法调用时请求,如果在初始化时请求,考虑下载方法调用a与请求文件总大小b的时机,a调用时b在执行中则需要记录a已经调用过并在b完成后真正开始a。

3.再根据传入的带宽和限速信息,计算适当的请求数,发起urlsessiondownloadtask

3-1).发起urlsessiondownloadtask:1)构造NSURLRequest,加入range信息2.生成downloadtask,记录相关信息:请求过程、请求结果、临时存储地址

3-2)拓展:目前主动计算请求数,可以计算过程抽取作为智能分配任务逻辑

3-3)  拓展:目前所有请求直接发起,可以创建待发起请求队列,设置最大并发请求

4.urlsessiondownloadtask更新时汇总progress

4-1)拓展:目前监听task的progress新、旧值,有没有更好的方法,或者考虑直接监听task的变化放弃AFNetworking的progress的处理

5.urlsessiondownloadtask结束时通知需要更新文件

5-1)拓展:失败时加入重连机制

6.按序拼接文件
6-1)完善:判断是否为最后一次文件拼接,如果是调用任务结束回调

6-2)拓展:删除临时文件

7.完善:

1)加入暂停功能

2)调试进入app后台时的请求

3)breakertask的管理器考虑对多个task进行管理,但基于目前的自动分配任务,不会并发多个breakertask,但需要自动进行下个breakertask
breakertask

6-2)完善:判断是否为最后一次文件拼接,如果是调用任务结束回调

p.s. 

还是贴个代码吧,说不定有人需要 点击打开链接
STM32F407用FSMC+DMA驱动LVGL,3.5寸屏流畅度翻倍实战(附CubeMX配置避坑) 本文详细介绍了如何在STM32F407上通过FSMC+DMA驱动LVGL,显著提升3.5寸屏的显示流畅度。从FSMC与DMA的配置原理到LVGL驱动层适配,提供了完整的优化方案和实测数据,帮助开发者解决界面卡顿问题,实现流畅度翻倍的效果。 阅读详情

相关推荐

5步搞定ABB机器人RobotStudio与S7-1500PLC的Profinet通讯(附PLCSIM调试技巧)

本文详细介绍了如何利用RobotStudio与TIA Portal软件,结合PLCSIM Advanced仿真器,在零硬件条件下实现ABB机器人与西门子S7-1500 PLC之间的Profinet通讯虚拟调试。通过五个核心步骤,从环境搭建、网络配置、信号映射到联合仿真与高级调试,帮助工程师在项目前期高效验证逻辑、压缩现场调试周期,并掌握实用的PLCSIM调试技巧。

weixin_29188043的博客 505

页面置换算法与请求分段存储管理方式详解

4.7 页面置换算法(重点!!!) 在进程运行过程中,若其访问的页面不在内存而需将其调入,但内存已无空闲空间时,需从内存中调出一页程序或数据,送入磁盘的对换区。但应将哪个页面调出,需根据一定的算法来确定。 把选择换出页面的算法称为页面置换算法,其好坏直接影响系统的性能。 一个好的置换算法应具有较低的页面更换频率。从理论上讲,应将那些以后不会再访问的页面换出,或者把那些在较长时间内不会再访问的页面换出。 缺页中断率越少越好。 一、最佳置换算法和先进先出置换算法 二、最近最久未使用(LRU)算法 三、Clo

loveCC_orange的博客 1858

保姆级教程:用Qlib和LightGBM从零搭建你的第一个AI量化选股策略(附完整代码)

本文提供了一份详细的教程,教你如何使用Qlib和LightGBM从零搭建AI量化选股策略。教程涵盖了环境配置、数据获取、特征工程、模型训练和策略回测等关键步骤,并附有完整代码和常见问题解决方案,适合量化投资初学者快速上手。

weixin_29191081的博客 444

断点续传-http中Header参数Range(分段请求基础)

告知服务端,客户端下载该文件想要从指定的位置开始下载,至于 Range 字段属性值的格式有以下几种:<unit> 类型,一般来说是bytes;<range-start> 表示范围的起始值,一般是数字,如果不是数字就看服务端逻辑如何处理;<range-end> 表示范围的结束值。这个值是可选的,如果不存在,表示此范围一直延伸到文档结束,如果非数字,同上。例子表示下载从0到500字节的文件,即头500个字节 ,[0-500]前闭后闭。表示下载从500到1000这部分的文件,单位字节。

wang13679201813的博客 3064

23.网工入门篇--------介绍一下园区网典型组网架构及案例实践

园区网典型组网架构主要分为小型、中型、大型三种类型,以下是详细介绍及相关案例实践:

qq_31450765的博客 964

TP4056在单节锂电池充电管理中的创新应用与电路优化

本文深入探讨了TP4056线性充电管理芯片在单节锂电池充电电路中的创新应用与优化方案。针对“边充边用”的核心挑战,文章详细解析了利用PMOS管构建智能供电切换电路的原理,实现了外部电源与电池供电的无缝、安全切换,有效杜绝了电池“边充边放”的风险。同时,提供了关键的元器件选型、PCB布局布线技巧及常见问题排查指南,为创客和硬件开发者提供了高性价比、高可靠性的锂电池电源管理实践方案。

rock5的博客 501

实现大视频,分段下载在线播放

实现大视频播放

m0_65496547的博客 421

Allegro规则管理器实战:5步搞定Xnet等长组设置(含Relative Propagation Delay配置)

本文详细介绍了在Cadence Allegro规则管理器中,通过5个实战步骤高效设置Xnet等长组的方法。核心内容包括创建Xnet属性、定义引脚对、建立匹配组,并重点讲解了Relative Propagation Delay规则的配置与应用,帮助PCB设计师确保高速信号时序对齐,提升系统稳定性与性能。

weixin_29193259的博客 517

前端 实现数据的分批加载

UNI-APP上拉分段加载数据 当服务端数据没有进行分页处理时,ajax请求一次接口返回所有的数据;当请求数据过多的时候页面渲染会非常慢,并且很容易造成页面卡死现象;因此,前端可以通过js进行分页,达到分批加载数据的目的。 思路: 1、获取数据的分段处理   (1)无数据 不显示加载状态栏 显示无数据信息提示   (2)有数据 动态设置API参数取值 加载数据时动态改变API参数值,这里设置time来控制,追加数据时time++,确保查询的追加数据条数比上次获取的数据多十条。 分段截取数据

织网的博客 4399

LPDDR5 学习笔记02:上电初始化与下电时序

LPDDR5上电初始化流程需严格遵守时序要求:首先确保电源按顺序上电(VDD1→VDD2H→VDD2L→VDDQ),RESET_n保持低电平至电压稳定。初始化包含自动ZQ校准、命令总线训练(CBT)、WCK2CK电平校准和DQ总线训练四个关键阶段,需完成全部训练后才能正常操作。在双电源轨系统中,须在CBT前设置MR13寄存器。复位操作需保持RESET_n低电平至少tPW_RESET时间,断电时要求CS保持低电平且电源电压有序下降。非受控下电时电压斜率需低于0.5V/μs,器件生命周期内不得超过400次非受控

一只豌豆象的博客 2040

PS射击游戏射线检测优化:原理、工程与全链路高性能实现

射线池:减少GC,提升批量检测效率。分层检测:先粗后细,远距离射击高效判定。批量检测:并行处理,适合大量射线场景。空间结构:进一步加速大场景检测。下面继续深入射线检测优化,补充更多实用细节和进阶技巧,包括空间分区加速、射线检测多线程/异步化、射线合并与分帧、射线池通用模板、常见性能陷阱与调优建议等。对于极端性能需求,可自定义轻量级物理系统,仅检测关键对象(如玩家、子弹),跳过复杂物理引擎。结合AABB、OBB、球体等简单碰撞体,射线-包围体检测极快。空间分区+分层检测是大场景射线优化核心。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 434

React移动端 视频链接分段加载

chat gpt生成的代码。 移动端视频链接,分段加载

持斧三笑 639

扩展卡尔曼滤波 (EKF, Extended Kalman Filter) 算法详解及案例分析

扩展卡尔曼滤波是一种用于估计非线性动态系统状态的递归算法。其目标是通过结合非线性系统模型和观测数据,估计系统的最优状态。

闲人编程的博客 2385

Web请求和响应---文件分段下载

Web请求和响应---文件分段下载

博客标题不能为空 2045

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

minio spring boot分段请求文件

最后还想问一个问题,Minio如果我有objectName,如何获取到这个objectName所有的历史版本呢。重点在响应头,如果返回了状态200,会导致只能播放视频的前几秒,然后拖动进度条提示加载错误。首先背景是这样的,前端有个在线预览mp4的需求,视频播放器会去分段请求视频文件。这玩意我看好多人没提到,我就想着发个笔记,说不定也有人会遇到。在后端中通过判断请求的范围然后返回对应的字节流给前端。正确的响应头应该是206,设置以后视频正常加载并播放。

qq_39912821的博客 441

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ajax 分段请求,关于ajax分段上传文件实例~

本来打算写的勤快一点的,谁知道最近好忙啊,忙着应聘的事情,这里突然想提一下自己的历程自己现在是一只大三狗,高中三年是玩过去了,上了一所省内普通的不能再普通的二本。不过在大学里还算的上勤奋,大一上在学生会搅搅水,大一下就开始在学校网络中心里面干活,网络维护是工作,编程是兴趣,基本上每天网络中心寝室两点一线,所以说还算得上勤奋。不过现在我自己算是明白,很多事情不是勤奋就好了的,方法不对,真的是事倍功半...

weixin_39531378的博客 256

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

js请求读取后端大文件时 如何分段读取

当前我们做这个小说网站,一章的文字很多,请求接口的时候请求大小达到了10M,如果js正常请求会导致等待时间过长,用户体验感就很很差。

荷逸的博客 1214

文件分段请求(二)

上一篇好像过去好久了。。 最近得闲把上篇的下载器写完了,这里简单介绍下 项目地址 VWChaplin 实际上是对NSURLSession的一层包装 1.管理者VWChaplin拥有一个session 2.session创建出的task被管理者产出的下载任务VWChaplinSmile关联 对断点续传的支持,API层的"继续"功能 1.NSURLSessionDownloadTa

iOSiri的博客 645

IOS/Mac/Safari无法播放MP4文件流及Http1.1 Range分段请求相关

故事背景 公司项目需要将多媒体文件迁移至阿里OSS,原本直接从后端静态文件的<img> <video> 等标签都要改成从OSS获取展示。 于是乎拦截了所有静态链接,调用了OSS接口获取了文件流返回到前台进行展示,简单粗暴,但是也遇到了问题 —— ios的 <video> 标签全军覆没。 由于项目里视频比较少,这问题还是在上线前三天发现的,那个急的,一开始还找不到...

https://syra-ti.icu 6763

requests如何友好地请求下载大文件?requests实现分段下载、断点续传

用requests.get()请求一个视频连接,如果视频太大怎么办? requests.get()下载到一半,以后想要接着下载怎么办? 这里有解决方案。

FujLiny的博客 3391

android分段加载_Android 多线程分段下载文件

下文中所用到的依赖:implementation 'com.squareup.retrofit2:retrofit:2.1.0',虽然用的retrofit的包,但是只用了里面的okhttp部分,因为是demo项目,原先就已经加了依赖了,不方便换了。现在我们开始多线程分段下载一个大文件,用的是服务上一个apk文件(23M,假设是大文件)开工,ps:网络权限,文件读写权限,别忘了1. 既然是多线程下载...

weixin_39898380的博客 629

iOS文件分段下载

在Web开发中主要的请求方法有如下几种:          GET请求:get是获取数据的意思,数据以明文在URL中传递,受限于URL长度,所以传输数据量比较小。          POST请求:post是向服务器提交数据的意思,提交的数据以实际内容形式存放到消息头中进行传递,无法在浏览器url中查看到,大小没有限制。         HEAD请求:请求头信息,并不返回请求数据体,而只返回请

欢迎来到Jack的程序世界 2092

Java后端实现视频分段渐进式播放

大文件的分片上传可以看笔者前面的文章:大文件分片上传前后端实现。 这篇文章,主要记录一下,服务端如何将一个大的视频文件做切分,分段响应给客户端,让浏览器可以渐进式的播放。

程序员小潘 1万+

java 图片分段上传_java 分段读取文件 并通过HTTP上传

1、首先将文件分段,用RandomAccessFile2、分段后将分出的内容上传到http1.[代码][Java]代码URL url = new URL(actionUrl);HttpURLConnection con = (HttpURLConnection) url.openConnection();/** 允许Input、Output,不使用Cache */con.setDoInput(tr...

weixin_39779537的博客 197

例程五、HTTP Range使用 分段下载 与 下载后c语言合成例程 以照片为例

1. HTTP分段下载 可靠reference: https://www.bbsmax.com/A/gVdnERW15W/ https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Range_requests 简单的讲就是首先看服务器端是否支持范围请求 然后,支持的话,就可以通过在http请求头中加Range字段来获取指定长度的内容。 注意Range使...

dingdongkk~博客 1365

视频分段下载

由于浏览器安全策略的限制,javascript程序不能自由地访问本地资源,一般网页通常也只是用此来分段下载视频在线播放,通常只在客户端会实现分段下载功能,所以这里只展示后端部分的代码。Content-Range:bytes 0-200/3000 表示服务器返回了0-200个字节的数据,总共3000字节的数据。Accept-Ranges:bytes 当浏览器发现Accept-Ranges头时,可以尝试继续中断了的下载,而不是重新开始。每个请求只下载其中一段数据,可以看情况采用是并行还是串行的方式。

FinelyYang的专栏 647
上一篇: 捋捋ARC
下一篇: 文件分段请求(二)
iOSiri
博客等级 码龄10年 0粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值