zoukankan      html  css  js  c++  java
  • 视频播放器边下边播(保存到沙盒,显示进度)

    没怎么研究视频播放器,就在网上找了个,链接:https://github.com/835239104/KrVideoPlayerPlus

    下载AFNetworking,

    1.下载最新版的会报错,没有引入相关库

    2.AFSecurityPolicy.m中:注释了一部分代码

    #pragma mark - 这里改了 ------
    #warning - 这里改了 --------
    //#if !TARGET_OS_IOS && !TARGET_OS_WATCH
    //static NSData * AFSecKeyGetData(SecKeyRef key) {
    //    CFDataRef data = NULL;
    //
    //    __Require_noErr_Quiet(SecItemExport(key, kSecFormatUnknown, kSecItemPemArmour, NULL, &data), _out);
    //
    //    return (__bridge_transfer NSData *)data;
    //
    //_out:
    //    if (data) {
    //        CFRelease(data);
    //    }
    //
    //    return nil;
    //}
    //#endif
    
    static BOOL AFSecKeyIsEqualToKey(SecKeyRef key1, SecKeyRef key2) {
    //#if TARGET_OS_IOS || TARGET_OS_WATCH
        return [(__bridge id)key1 isEqual:(__bridge id)key2];
    //#else
    //    return [AFSecKeyGetData(key1) isEqual:AFSecKeyGetData(key2)];
    //#endif
    }

    3.实现边下边播(我用的是一边在网上看一边下载,所以会有点卡)

    /**
     * 下载文件
     */
    - (void)downloadFileURL:(NSString *)aUrl savePath:(NSString *)aSavePath fileName:(NSString *)aFileName tag:(NSInteger)aTag
    {
        NSFileManager *fileManager = [NSFileManager defaultManager];
        
        //检查本地文件是否已存在
        NSString *fileName = [NSString stringWithFormat:@"%@/%@", aSavePath, aFileName];
        
        //检查附件是否存在
        if ([fileManager fileExistsAtPath:fileName]) {
             [self addVideoPlayerWithURL:[NSURL fileURLWithPath:fileName]];
        }else{
            //创建附件存储目录
            if (![fileManager fileExistsAtPath:aSavePath]) {
                [fileManager createDirectoryAtPath:aSavePath withIntermediateDirectories:YES attributes:nil error:nil];
            }
    //         [self addVideoPlayerWithURL:[NSURL fileURLWithPath:fileName]];
            [self addVideoPlayerWithURL:[NSURL URLWithString:aUrl]];
            //下载附件
            NSURL *url = [[NSURL alloc] initWithString:aUrl];
            NSURLRequest *request = [NSURLRequest requestWithURL:url];
            
            AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
            operation.inputStream   = [NSInputStream inputStreamWithURL:url];
            operation.outputStream  = [NSOutputStream outputStreamToFileAtPath:fileName append:NO];
            
            //下载进度控制
            
             [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
             NSLog(@"is download:%f", (float)totalBytesRead/totalBytesExpectedToRead);
             }];
            
            //已完成下载
            [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    //            NSData *audioData = [NSData dataWithContentsOfFile:fileName];
                NSLog(@"完成下载");
                //设置下载数据到res字典对象中并用代理返回下载数据NSData
            } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                NSLog(@"下载失败");
                //下载失败
            }];
            
            [operation start];
        }
    }

    注意:从本度读取路径:[NSURL fileURLWithPath:fileName]

    在网上读取路径:[NSURL URLWithString:aUrl]

    Demo百度云下载链接:http://pan.baidu.com/s/1c0bL9dQ

    补充:iOS边下边播放 http://blog.csdn.net/zttjhm/article/details/38063605

    iOS视频压缩:http://blog.csdn.net/lookyou111/article/details/25625775

  • 相关阅读:
    HTC(G13)野火A510e获取root权限详细图文教程
    aliyun的linux服务器配置
    js判断是否为数字, 是否为整数, 是否为浮点数
    帝国cms管理员帐号、登陆密码、登陆认证码、登陆安全答案忘记了怎么办?
    帝国cms后台登陆出现空白页的问题所在及解决方法
    jQuery1.4.2与json格式兼容问题
    [IoC容器Unity]第四回:使用范例
    [IoC容器Unity]第二回:Lifetime Managers生命周期
    [Scheduled Timer]第八回:总结
    [设计模式原则]第五回:迪米特原则
  • 原文地址:https://www.cnblogs.com/hxwj/p/4742932.html
Copyright © 2011-2022 走看看