• 用 MPMoviePlayerController 实现简单的视频下载播放功能


    初始化MPMoviePlayerController

       MovieView = [[MPMoviePlayerController alloc]init];
        [MovieView.view setFrame:CGRectMake(145, 0, 1024-145, 651)];
        [MovieView setControlStyle:MPMovieControlModeVolumeOnly];
        [MovieView setFullscreen:YES animated:YES];
        MovieView.repeatMode = MPMovieRepeatModeOne;
        [MovieView setInitialPlaybackTime:0.0];
        MovieView.movieSourceType = MPMovieSourceTypeFile;
        MovieView.scalingMode = MPMovieScalingModeAspectFit;
        [self.view addSubview:MovieView.view];

    判断本地是否有视频,没的的话下载然后播放,有的话直接播放本地视频

    NSURL *playerFileURL;
        if ([[[arryImageInfo objectAtIndex:0] objectForKey:@"outlink"]isEqualToString:@""]) {
            playerFileURL =[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",[DataPist shared].ipString,[[arryImageInfo objectAtIndex:0] objectForKey:@"video"]]];
        }else
        {
            playerFileURL =[NSURL URLWithString:[[arryImageInfo objectAtIndex:0] objectForKey:@"outlink"]];
        }
        
        NSString *movieNames=[NSString stringWithFormat:@"%@.mp4",[[arryImageInfo objectAtIndex:0] objectForKey:@"name"]];
        if ([[NSFileManager defaultManager]fileExistsAtPath:[DataPist getFilePath:movieNames]]) {
            NSString *moviePath=[NSString stringWithFormat:@"%@",[DataPist getFilePath:movieNames]];
            NSURL *url=[[NSURL alloc]initFileURLWithPath:moviePath];
            [MovieView setContentURL:url];
            [MovieView.view setHidden:NO];
    //        [MovieView thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame];
            [MovieView play];
        }else
        {
            for ( int i=0; i<arryImageInfo.count; i++) {
                UIButton *btn=(UIButton *)[self.view viewWithTag:i];
                btn.userInteractionEnabled=NO;
            }
                [self waitView];
                dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
                dispatch_async(concurrentQueue, ^{
                    dispatch_sync(concurrentQueue, ^{
                        /* Download the image here */
                        [self download:playerFileURL tag:0];
                    });
                    dispatch_sync(dispatch_get_main_queue(), ^{
                        /* Show the image to the user here on the main queue*/
                        
                    });
                });
        }
    }

    实现下载功能

    -(void)download:(NSURL *)url tag:(int )tag{
            ASIHTTPRequest *request=[ASIHTTPRequest requestWithURL:url];
            [request setDelegate:self];
            movieName=[NSString stringWithFormat:@"%@.mp4",[[arryImageInfo objectAtIndex:tag] objectForKey:@"name"]];
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
            NSString *documentsDirectory = [[paths objectAtIndex:0] stringByAppendingPathComponent:movieName];
            NSLog(@"%@",documentsDirectory);
            [request setAllowResumeForFileDownloads:YES];
            [request setDownloadDestinationPath:documentsDirectory];
            [request setDidReceiveResponseHeadersSelector:@selector(didReceiveResponseHeadersSelector:)];
            [request setDidReceiveDataSelector:@selector(request:didReceiveData:)];
            [request setDidFailSelector:@selector(Failed:)];
            [request setDidFinishSelector:@selector(Finished:)];
            [request startAsynchronous];
    }
    -(void)didReceiveResponseHeadersSelector:(ASIHTTPRequest *)request{
        NSString  *string=[[NSString alloc]initWithFormat:@"%@",[request.responseHeaders valueForKey:@"Content-Length"]];
        byteall=[string integerValue];
        NSLog(@"byteall=%i M",byteall/1024/1024);
    }
    -(void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)Data{
        [DataAll appendData:Data];
        [TanChuView setHidden:NO];
        NSLog(@"%lli M",(long long)[DataAll length]/1024/1024);
        LoadLabel.text=[NSString stringWithFormat:@"共%i M,正在下载%lli M",byteall/1024/1024,(long long)[DataAll length]/1024/1024];
    }
    -(void)Finished:(ASIHTTPRequest *)request{ NSLog(@"下载完成"); LoadLabel.text=@"下载完成,开始播放"; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *documentsDirectory = [[paths objectAtIndex:0] stringByAppendingPathComponent:movieName]; NSLog(@"%@",documentsDirectory); [MBProgressHUD hideHUDForView:self.view animated:YES]; [DataAll writeToFile:documentsDirectory atomically:YES]; // sleep(1); NSURL *url=[[NSURL alloc]initFileURLWithPath:documentsDirectory]; [MovieView setContentURL:url]; [MovieView.view setHidden:NO]; [MovieView play]; [TanChuView removeFromSuperview]; for ( int i=0; i<arryImageInfo.count; i++) { UIButton *btn=(UIButton *)[self.view viewWithTag:i]; btn.userInteractionEnabled=YES; } } -(void)Failed:(ASIHTTPRequest *)Failed{ [MBProgressHUD hideHUDForView:self.view animated:YES]; UIAlertView *alter=[[UIAlertView alloc]initWithTitle:@"提示" message:@"播放失败,请查看网络是否连接" delegate:Nil cancelButtonTitle:@"确定" otherButtonTitles:Nil, nil]; [alter show]; [TanChuView removeFromSuperview]; for ( int i=0; i<arryImageInfo.count; i++) { UIButton *btn=(UIButton *)[self.view viewWithTag:i]; btn.userInteractionEnabled=YES; } }

    加载进度百分比的

    -(void)waitView{
        [TanChuView removeFromSuperview];
        TanChuView=[[UIView alloc]initWithFrame:CGRectMake(300, 250, 200, 50)];
        NSLog(@"-----%@",NSStringFromCGRect(TanChuView.frame));
        TanChuView.backgroundColor=[UIColor whiteColor];
        TanChuView.alpha=0.5;
        TanChuView.layer.cornerRadius = 6;
        TanChuView.layer.masksToBounds = YES;
        LoadLabel=[[UILabel alloc]initWithFrame:CGRectMake(30, 10, 150, 30)];
    //    LoadLabel.text=@"正在下载";
        LoadLabel.font=[UIFont systemFontOfSize:12];
        LoadLabel.backgroundColor=[UIColor whiteColor];
        [TanChuView addSubview:LoadLabel];
        [MovieView.view addSubview:TanChuView];
    }

    实现完成,主要用到了ASI下载,并显示下载进度,还有GCD 的异步下载,

    另一种加载进度百分比显示:

    - (void)setProgress:(float)newProgress

    {

        progressView.progress = newProgress;

        [progressValuesetText:[NSStringstringWithFormat:@"%0.f%%",progressView.progress * 100]];

    }

  • 相关阅读:
    初试 Elastic Search
    索引分类
    Nginx
    LINQ入门
    CSS学习
    Keras 安装
    火车进站
    2016年网易笔试编程题2
    Java GC
    linux 安装 mysql
  • 原文地址:https://www.cnblogs.com/zhangsongbai/p/3441592.html
Copyright © 2020-2023  润新知