解决了语音上传到问题,接下来要解决下载播放问题

This commit is contained in:
joywayer
2025-06-15 12:36:47 +08:00
parent bba3ed1cb4
commit c11fc62bf1
513 changed files with 31197 additions and 2969 deletions

View File

@@ -0,0 +1,346 @@
//
// QNConfiguration.h
// QiniuSDK
//
// Created by bailong on 15/5/21.
// Copyright (c) 2015年 Qiniu. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "QNRecorderDelegate.h"
#import "QNDns.h"
/**
* 断点上传时的分块大小
*/
extern const UInt32 kQNBlockSize;
/**
* DNS默认缓存时间
*/
extern const UInt32 kQNDefaultDnsCacheTime;
/**
* 转换为用户需要的url
*
* @param url 上传url
*
* @return 根据上传url算出代理url
*/
typedef NSString * (^QNUrlConvert)(NSString *url);
typedef NS_ENUM(NSInteger, QNResumeUploadVersion){
QNResumeUploadVersionV1, // 分片v1
QNResumeUploadVersionV2 // 分片v2
};
@class QNConfigurationBuilder;
@class QNZone;
@class QNReportConfig;
/**
* Builder block
*
* @param builder builder实例
*/
typedef void (^QNConfigurationBuilderBlock)(QNConfigurationBuilder *builder);
@interface QNConfiguration : NSObject
/**
* 存储区域
*/
@property (copy, nonatomic, readonly) QNZone *zone;
/**
* 断点上传时的分片大小
*/
@property (readonly) UInt32 chunkSize;
/**
* 如果大于此值就使用断点上传否则使用form上传
*/
@property (readonly) UInt32 putThreshold;
/**
* 上传失败时每个上传域名的重试次数默认重试1次
*/
@property (readonly) UInt32 retryMax;
/**
* 重试前等待时长默认0.5s
*/
@property (readonly) NSTimeInterval retryInterval;
/**
* 单个请求超时时间 单位 秒
* 注:每个文件上传肯能存在多个操作,当每个操作失败时,可能存在多个请求重试。
*/
@property (readonly) UInt32 timeoutInterval;
/**
* 是否使用 https默认为 YES
*/
@property (nonatomic, assign, readonly) BOOL useHttps;
/**
* 单个文件是否开启并发分片上传默认为NO
* 单个文件大小大于4M时会采用分片上传每个分片会已单独的请求进行上传操作多个上传操作可以使用并发
* 也可以采用串行,采用并发时,可以设置并发的个数(对concurrentTaskCount进行设置)。
*/
@property (nonatomic, assign, readonly) BOOL useConcurrentResumeUpload;
/**
* 分片上传版本
*/
@property (nonatomic, assign, readonly) QNResumeUploadVersion resumeUploadVersion;
/**
* 并发分片上传的并发任务个数在concurrentResumeUpload为YES时有效默认为3个
*/
@property (nonatomic, assign, readonly) UInt32 concurrentTaskCount;
/**
* 重试时是否允许使用备用上传域名默认为YES
*/
@property (nonatomic, assign) BOOL allowBackupHost;
/**
* 是否允许使用加速域名,默认为 false
*/
@property (nonatomic, assign, readonly) BOOL accelerateUploading;
/**
* 持久化记录接口,可以实现将记录持久化到文件,数据库等
*/
@property (nonatomic, readonly) id<QNRecorderDelegate> recorder;
/**
* 为持久化上传记录根据上传的key以及文件名 生成持久化的记录key
*/
@property (nonatomic, readonly) QNRecorderKeyGenerator recorderKeyGen;
/**
* 上传请求代理配置信息
*/
@property (nonatomic, readonly) NSDictionary *proxy;
/**
* 上传URL转换使url转换为用户需要的url
*/
@property (nonatomic, readonly) QNUrlConvert converter;
/**
* 默认配置
*/
+ (instancetype)defaultConfiguration;
/**
* 使用 QNConfigurationBuilder 进行配置
* @param block 配置block
*/
+ (instancetype)build:(QNConfigurationBuilderBlock)block;
@end
#define kQNGlobalConfiguration [QNGlobalConfiguration shared]
@interface QNGlobalConfiguration : NSObject
/**
* 是否开启dns预解析 默认开启
*/
@property(nonatomic, assign)BOOL isDnsOpen;
/**
* dns 预取失败后 会进行重新预取 dnsRepreHostNum为最多尝试次数
*/
@property(nonatomic, assign)UInt32 dnsRepreHostNum;
/**
* dns 预取超时,单位:秒 默认2
*/
@property(nonatomic, assign)int dnsResolveTimeout;
/**
* dns 预取, ip 默认有效时间 单位:秒 默认120
* 只有在 dns 预取未返回 ttl 时使用
*/
@property(nonatomic, assign)UInt32 dnsCacheTime;
/**
* dns预取缓存最大有效时间 单位:秒 默认 1800
* 当 dns 缓存 ip 过期并未刷新时,只要在 dnsCacheMaxTTL 时间内仍有效。
*/
@property(nonatomic, assign)UInt32 dnsCacheMaxTTL;
/**
* 自定义DNS解析客户端host
*/
@property(nonatomic, strong) id <QNDnsDelegate> dns;
/**
* dns解析结果本地缓存路径
*/
@property(nonatomic, copy, readonly)NSString *dnsCacheDir;
/**
* 是否使用 udp 方式进行 Dns 预取,默认开启
*/
@property(nonatomic, assign)BOOL udpDnsEnable;
/**
* 使用 udp 进行 Dns 预取时的 server ipv4 数组;当对某个 Host 使用 udp 进行 Dns 预取时,会使用 udpDnsIps 进行并发预取
* 当 udpDnsEnable 开启时,使用 udp 进行 Dns 预取方式才会生效
* 默认
*/
@property(nonatomic, copy) NSArray <NSString *> *udpDnsIpv4Servers;
/**
* 使用 udp 进行 Dns 预取时的 server ipv6 数组;当对某个 Host 使用 udp 进行 Dns 预取时,会使用 udpDnsIps 进行并发预取
* 当 udpDnsEnable 开启时,使用 udp 进行 Dns 预取方式才会生效
* 默认nil
*/
@property(nonatomic, copy) NSArray <NSString *> *udpDnsIpv6Servers;
/**
* 是否使用 doh 预取,默认开启
*/
@property(nonatomic, assign)BOOL dohEnable;
/**
* 使用 doh 预取时的 server 数组;当对某个 Host 使用 Doh 预取时,会使用 dohServers 进行并发预取
* 当 dohEnable 开启时doh 预取才会生效
* 注意:如果使用 ip需保证服务证书与 IP 绑定,避免 sni 问题
*/
@property(nonatomic, copy) NSArray <NSString *> *dohIpv4Servers;
/**
* 使用 doh 预取时的 server 数组;当对某个 Host 使用 Doh 预取时,会使用 dohServers 进行并发预取
* 当 dohEnable 开启时doh 预取才会生效
* 默认nil
* 注意:如果使用 ip需保证服务证书与 IP 绑定,避免 sni 问题
*/
@property(nonatomic, copy) NSArray <NSString *> *dohIpv6Servers;
/**
* Host全局冻结时间 单位:秒 默认60 推荐范围:[30 ~ 120]
* 当某个Host的上传失败后并且可能短时间无法恢复会冻结该Host
*/
@property(nonatomic, assign)UInt32 globalHostFrozenTime;
/**
* Host局部冻结时间只会影响当前上传操作 单位:秒 默认5*60 推荐范围:[60 ~ 10*60]
* 当某个Host的上传失败后并且短时间可能会恢复会局部冻结该Host
*/
@property(nonatomic, assign)UInt32 partialHostFrozenTime;
/**
* 网络连接状态检测使用的connectCheckURLStrings网络链接状态检测可能会影响重试机制启动网络连接状态检测有助于提高上传可用性。
* 当请求的 Response 为网络异常时,并发对 connectCheckURLStrings 中 URLString 进行 HEAD 请求,以此检测当前网络状态的链接状态,其中任意一个 URLString 链接成功则认为当前网络状态链接良好;
* 当 connectCheckURLStrings 为 nil 或者 空数组时则弃用检测功能。
*/
@property(nonatomic, copy)NSArray <NSString *> *connectCheckURLStrings;
/**
* 是否开启网络连接状态检测,默认:开启
*/
@property(nonatomic, assign)BOOL connectCheckEnable;
/**
* 网络连接状态检测HEAD请求超时默认2s
*/
@property(nonatomic, assign)NSTimeInterval connectCheckTimeout;
+ (instancetype)shared;
@end
@interface QNConfigurationBuilder : NSObject
/**
* 默认上传服务器地址
*/
@property (nonatomic, strong) QNZone *zone;
/**
* 断点上传时的分片大小
* 分片 v1 最小为 1024即 1K建议用户配置 >= 512K
* 分片 v2 最小为 1024 * 1024即 1M
*/
@property (assign) UInt32 chunkSize;
/**
* 如果大于此值就使用断点上传否则使用form上传
*/
@property (assign) UInt32 putThreshold;
/**
* 上传失败时每个上传域名的重试次数默认重试1次
*/
@property (assign) UInt32 retryMax;
/**
* 重试前等待时长默认0.5s
*/
@property (assign) NSTimeInterval retryInterval;
/**
* 超时时间 单位 秒
*/
@property (assign) UInt32 timeoutInterval;
/**
* 是否使用 https默认为 YES
*/
@property (nonatomic, assign) BOOL useHttps;
/**
* 重试时是否允许使用备用上传域名默认为YES
*/
@property (nonatomic, assign) BOOL allowBackupHost;
/**
* 是否允许使用加速域名,默认为 false
*/
@property (nonatomic, assign) BOOL accelerateUploading;
/**
* 是否开启并发分片上传默认为NO
*/
@property (nonatomic, assign) BOOL useConcurrentResumeUpload;
/**
* 分片上传版本
*/
@property (nonatomic, assign) QNResumeUploadVersion resumeUploadVersion;
/**
* 并发分片上传的并发任务个数在concurrentResumeUpload为YES时有效默认为3个
*/
@property (nonatomic, assign) UInt32 concurrentTaskCount;
/**
* 持久化记录接口,可以实现将记录持久化到文件,数据库等
*/
@property (nonatomic, strong) id<QNRecorderDelegate> recorder;
/**
* 为持久化上传记录根据上传的key以及文件名 生成持久化的记录key
*/
@property (nonatomic, strong) QNRecorderKeyGenerator recorderKeyGen;
/**
* 上传请求代理配置信息
*/
@property (nonatomic, strong) NSDictionary *proxy;
/**
* 上传URL转换使url转换为用户需要的url
*/
@property (nonatomic, strong) QNUrlConvert converter;
@end