基于利用AVFoundation 解决视频文件边下边播简析

简介:现阶段下主要利用AVFoundation解决视频文件边下边播的问题.


其大致思路是


1.AVPlayerItem 是利用相应的AVURLAsset资源创建的

2.根据媒体资源URL创建AVURLAsset时需要对url进行修改,以便确保下一步的实施.

3.将asset的resourceLoader设置代理对象,代理对象有必要实现其中相关方法.


下面根据源码一步步讲解具体实现方法

        self.resouerLoader          = [[DLXAVAssetResourceLoaderalloc] init];
        self.resouerLoader.delegate = self;
        //设置URL SCHEME
        NSURL *url =[_resouerLoader getSchemeVideoURL:[NSURL URLWithString:urlString]];
        self.videoURLAsset = [AVURLAsset URLAssetWithURL:url options:nil];\
        [self.videoURLAsset.resourceLoader setDelegate:self.resouerLoader queue:dispatch_get_main_queue()];
        playerItem = [AVPlayerItem playerItemWithAsset:self.videoURLAsset];


根据上诉代码可以实现第一二步,并设置了其代理对象.现在来看看代理对象的实现.

首先,创建代理对象时应遵循一下AVAssetResourceLoaderDelegate协议,如


@interface DLXAVAssetResourceLoader : NSObject <AVAssetResourceLoaderDelegate>

并实现下面协议方法

-(BOOL)resourceLoader:(AVAssetResourceLoader *)resourceLoader shouldWaitForLoadingOfRequestedResource:(AVAssetResourceLoadingRequest *)loadingRequest;
-(void)resourceLoader:(AVAssetResourceLoader *)resourceLoader didCancelLoadingRequest:(AVAssetResourceLoadingRequest *)loadingRequest;


这两个方法正是第二步中修改了URL以确保程序实施的方法.其中第一个方法中应返回YES,并处理相关视频分段下载以及将数据填回给相关请求的问题.其中下载问题可以通过重新创建对象文件来处理以更好优化项目架构,这里不再赘述.

然后在AVAssetResourceLoader代理对象文件需要将数据请求的文件长度文件格式等进行获取设置,并将获取的视频数据传送给相关请求.

其中数据格式请求是根据loadingRequest.contentInformationRequest来操作的.

.- (void)respondWithData:(NSData *)data; //传送获取的数据


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值