当前位置:  开发笔记 > IOS > 正文

将视频播放到UITableView中

如何解决《将视频播放到UITableView中》经验,为你挑选了2个好方法。

我在这里看了几篇关于直播的帖子video/audio.不幸的是,似乎没有任何"好"的解决方案.

我想SDWebImageView为图像提供相同的视频功能.

现在,我正在使用以下代码: -

NSURL *url=[[NSURL alloc] initWithString:@"http://www.ebookfrenzy.com/ios_book/movie/movie.mov"];
MPMoviePlayerController *moviePlayer=[[MPMoviePlayerController alloc] initWithContentURL:url];
moviePlayer.controlStyle=MPMovieControlStyleDefault;
moviePlayer.shouldAutoplay=YES;

但是当我滚动时tableview,所有视频都会一次又一次地下载.那么我怎么能停止下载呢?

是否有更好的解决方案来播放视频UITableView?相同的Facebook,Instagram和Vine Apps在做什么



1> JAL..:

不要使用MPMoviePlayerController,使用AVFoundationAVPlayer.

此外,不要将资产下载与UITableViewCell子类联系起来.使用其他数据源下载和管理视频资产.

有几种方法可以做到这一点.

    保留AVPlayerItem由URL初始化的对象的数据源数组.每次滚动到单元格时,不要加载资源,只需将其加载AVPlayerItem到单元格的播放器中,然后在滚动时将其删除.

    如果您需要保留视频数据,请考虑将每个视频下载到Documents目录中的临时文件.文件下载完成后,将该数据加载到AVAsset使用其initWithURL:方法的数据中,并将URL指向本地文件.准备好后,您可以将资源加载到AVPlayerItem使用中initWithAsset:并播放视频.



2> 小智..:

滚动表视图-tableView:cellForRowAtIndexPath:时会触发方法(实际上每次调用此方法时单元格都可见).我相信您正在使用此方法分配和初始化您的MediaPlayer,这就是为什么再次下载视频的原因.您可以尝试添加数组并在其中存储已创建的单元格(某种缓存).然后你-tableView:cellForRowAtIndexPath应该检查它是否已经缓存了实际索引.如果是,则显示缓存的单元格.如果不是那么它应该创建cell,alloc和init player然后将单元格存储在缓存中.

我的视图控制器具有性能:NSMutableDictionary *cache;ViewDidLoad我:cache = [[NSMutableDictionary alloc] init];-tableView:cellForRowAtIndexPath:看起来像这样:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellId = @"myCellId";

    MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];

    if ([cache objectForKey:[NSString stringWithFormat:@"key%lu", indexPath.row]] != nil) {
        cell = [cache objectForKey:[NSString stringWithFormat:@"key%lu", indexPath.row]];
    } else {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];

        AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc] init];
        playerViewController.player = [AVPlayer playerWithURL:[[NSURL alloc] initWithString:@"http://www.ebookfrenzy.com/ios_book/movie/movie.mov"]];
        [cell addSubview:playerViewController.view];
        [cache setValue:cell forKey:[NSString stringWithFormat:@"key%lu", indexPath.row]];
    }

    return cell; 
}

这个对我有用.当然你需要使用自己的数据源等.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有