IPhone 网络开发之如何使用NSURLConnection(一)

NSURLConnection 提供了很多灵活的方法下载URL内容 
也提供了一个简单的接口去创建和放弃连接,同时使用很多的delegate 
方法去支持连接过程的反馈和控制 

如何创建一个连接呢? 

为了下载url的内容,程序需要提供一个delegate对象,并且至少实现下面的方法 
connection:didReceiveResponse:,conncetion:didReceiveData, 
conncetion:didFailWithError:和connectionDidFinishLoading: 

举例一: 
1、先创建一个NSURL 
2、在通过NSURL创建NSURLRequest,可以指定缓存规则和超时时间 
3、创建NSURLConnection实例,指定NSURLRequest和一个delegate对象 
   如果创建失败,则会返回nil,如果创建成功则创建一个NSMutalbeData的实例用来存储数据 

代码: 
NSURLRequest *theRequest=[NSURLRequest requestWithURL: 
                  [NSURL URLWithString:@“http://www.sina.com.cn/”] 
                 cachePolicy:NSURLRequestUseProtocolCachePolicy 
                 timeoutInterval:60.0]; 
NSURLConnection *theConncetion=[[NSURLConnection alloc]      
                   initWithRequest:theRequest delegate:self]; 
if(theConnection) 
{ 
//创建NSMutableData 
  receivedData=[[NSMutableData data] retain]; 
}else 创建失败 

NSURLConnection还有几个初始化函数,有个初始化函数可以做到创建连接但是并 
不马上开始下载,而是通过start:开始 

当收到initWithRequest: delegate: 消息时,下载会立即开始,在代理(delegate) 
收到connectionDidFinishLoading:或者connection:didFailWithError:消息之前 
可以通过给连接发送一个cancel:消息来中断下载 

当服务器提供了足够客户程序创建NSURLResponse对象的信息时,代理对象会收到 
一个connection:didReceiveResponse:消息,在消息内可以检查NSURLResponse 
对象和确定数据的预期长途,mime类型,文件名以及其他服务器提供的元信息 

要注意,一个简单的连接也可能会收到多个connection:didReceiveResponse:消息 
当服务器连接重置或者一些罕见的原因(比如多组mime文档),代理都会收到该消息 
这时候应该重置进度指示,丢弃之前接收的数据 

-(void)connection:(NSURLConnection *)connectiondidReceiveResponse: 
                        (NSURLResponse*)response 
{ 

   [receiveData setLength:0]; 

} 

当下载开始的时候,每当有数据接收,代理会定期收到connection:didReceiveData:消息 
代理应当在实现中储存新接收的数据,下面的例子既是如此 

-(void) connection:(NSURLConnection*)connection didReceiveData: 
            (NSData *) data 
{ 
   [receiveData appendData:data]; 

} 
在上面的方法实现中,可以加入一个进度指示器,提示用户下载进度 

当下载的过程中有错误发生的时候,代理会收到一个connection:didFailWithError消息 
消息参数里面的NSError对象提供了具体的错误细节,它也能提供在用户信息字典里面失败的 
url请求(使用NSErrorFailingURLStringKey) 

当代理接收到连接的connection:didFailWithError消息后,对于该连接不会在收到任何消息 

举例 
-(void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error 
{ 
[connection release]; 

  [receivedData release]; 
   NSLog(@"Connection failed! Error - %@ %@", 
          [error localizedDescription], 
          [[error userInfo] objectForKey:NSErrorFailingURLStringErrorKey]); 
} 

最后,如果连接请求成功的下载,代理会接收connectionDidFinishLoading:消息 
代理不会收到其他的消息了,在消息的实现中,应该释放掉连接 

举例: 
-(oid)connectionDidFinishLoading:(NSURLConnection*)connection 
{ 
   //do something with the data 
  NSLog(@“succeeded  %d byte received”,[receivedData length]); 

[connection release]; 
[receivedData release]; 

} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com
### 回答1: iOS开发可以使用AVPlayer来播放加密的m3u8视频。首先,需要获取加密m3u8视频的URL地址。然后,可以使用AVAsset来创建一个播放资源对象,通过指定URL地址初始化AVURLAsset对象,如下所示: ``` NSURL *url = [NSURL URLWithString:@"加密m3u8视频的URL地址"]; AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil]; ``` 接下来,可以创建一个AVPlayerItem对象,将asset设置为其参数,用于加载加密m3u8视频资源。同时,需要为AVAsset设置相应的解密密钥,以解密加密的m3u8视频,代码如下: ``` // 创建AVPlayerItem对象 AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset]; // 设置解密密钥,以解密加密m3u8视频 NSData *keyData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"密钥URL地址"]]; NSDictionary *encryptionInfo = @{AVAssetResourceLoadingRequestStreamingContentKeyRequestRequiresPersistentKey: @NO, AVAssetResourceLoadingRequestStreamingContentKeyRequestRequiresExternalization: @NO, AVAssetResourceLoadingRequestStreamingContentKeyRequestInitializationData: keyData}; [playerItem setExternalProtectionStatusDelegate:self queue:dispatch_get_main_queue()]; [playerItem setResourceLoaderDelegate:self queue:dispatch_get_main_queue()]; [playerItem setInitializationData: @[encryptionInfo] forAsset:asset]; ``` 最后,可以使用AVPlayer来播放加密的m3u8视频,代码如下: ``` AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem]; AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player]; playerLayer.frame = self.view.bounds; [self.view.layer addSublayer:playerLayer]; [player play]; ``` 通过以上步骤,就可以在iOS开发中通过AVPlayer来播放加密的m3u8视频。同时,还需要实现相关的代理方法来处理密钥请求和解密操作,以确保视频播放正常。 ### 回答2: iOS开发中,播放加密m3u8需要进行以下步骤。 首先,我们需要获取加密m3u8文件的url地址,并进行网络请求,获取到m3u8文件的内容。可以使用NSURLConnection或者NSURLSession来进行网络请求。 接下来,我们需要解析m3u8文件的内容,找到其中的加密信息。一般来说,加密信息是包含在EXT-X-KEY标签中的。可以使用正则表达式或者解析库来提取加密信息。 获取到加密信息之后,我们需要下载加密的密钥(key文件)。可以使用NSURLSession来进行密钥的网络请求,并将密钥保存到本地。 接着,我们需要将下载的加密的密钥设置到AVAssetResourceLoaderDelegate的代理方法中。通过实现AVAssetResourceLoaderDelegate的方法,我们可以对资源的请求进行拦截,并替换成解密后的数据。在这个方法中,我们需要解密每个ts文件的内容,然后将解密后的数据返回给播放器进行播放。 最后,我们将解密后的数据传递给AVPlayer,用AVPlayer来进行播放。我们可以使用AVPlayerItem和AVPlayer来创建一个播放器,然后将解密后的数据设置给AVPlayerItem,最后将AVPlayerItem设置给AVPlayer。 综上所述,播放加密m3u8文件需要进行加密信息解析、密钥下载和解密处理等步骤。通过以上步骤,我们可以在iOS开发中实现播放加密m3u8文件的功能。 ### 回答3: iOS开发中要播放加密的m3u8文件,可以借助AVFoundation框架来实现。以下是一个简单的实现步骤: 首先,需要将m3u8文件下载到本地,并解析得到m3u8文件中的密钥以及ts片段的URL。 然后,借助AVAssetResourceLoaderDelegate协议,自定义一个资源加载器,用于处理加密文件的逻辑。在该协议的代理方法中,先判断是否需要加载加密密钥,并根据m3u8文件中的密钥信息,将其加载到AVAssetResourceLoader中。 接下来,当AVPlayer需要加载排队的媒体数据时,资源加载器会被调用。在这个代理方法中,我们需要处理对ts片段的加载请求,通过AVAssetResourceLoadingDataRequest的requestRange属性可以得到要加载的范围,然后根据范围从本地缓存中读取对应的加密ts片段数据进行解密,再通过AVAssetResourceLoadingDataRequest的respond方法回传给AVPlayer。 最后,将AVPlayer与AVPlayerLayer绑定,通过AVPlayer的play方法来开始播放加密的m3u8文件。 需要注意的是,由于涉及到解密操作,所以在自定义资源加载器中,我们需要实现对ts片段数据的解密逻辑,通常使用AES等加密算法进行解密。 综上所述,通过借助AVFoundation框架的AVAssetResourceLoaderDelegate协议和自定义资源加载器,我们可以实现在iOS开发中播放加密的m3u8文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值