MediaPlayer实现视频播放

在iOS开发中,经常会遇到视频的播放,还好ios framework 给我们提供这样的控件-MediaPlayer

但是,要是用这个控件,先要将加入framework中,以及import;


#import <MediaPlayer/MediaPlayer.h>


我的设计思路大概是先设计一个视频cell,每个cell点进去会播放视频,再定义一个tablevc去包含这些cell;


好,接下来我们看代码:

我们先在viewcontroller中定义视频对象

/** 视频播放控制器*/
@property (nonatomic,strong) MPMoviePlayerController *moviePlayer;
/** 加载动画*/
@property(nonatomic,strong) UIActivityIndicatorView *loadingAni;
@property(nonatomic,strong)NSNotificationCenter *notificationCenter;
@property(nonatomic,strong)UIImageView *backmovieplayer;


我们自定义一个tableViewCell继承自UITableViewCell

@property(nonatomic,strong)UIButton *btn;
@property(nonatomic,strong)UIImageView *myImageView;
@property(nonatomic,strong)UILabel *Labeltitle;
@property(nonatomic,strong)UIImageView *btnimage;
@property(nonatomic,strong)UILabel *playcountLabel;
@property(nonatomic,strong)UIImageView *playcountImage;
@property(nonatomic,strong)UILabel *playtimeLabel;
@property(nonatomic,strong)UIImageView *playtimeImage;

具体就是tableViewCell的初始化实现

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    if ([super initWithStyle:style reuseIdentifier:reuseIdentifier])
    {
        [self layoutCell];
    }
    return self;
    
}
-(void)layoutCell
{
    self.btn =[[UIButton alloc]initWithFrame:CGRectMake(10, 20, [UIScreen mainScreen].bounds.size.width-20, 210)];
    
    self.btnimage=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width-20, 210)];
    [self.btn addSubview:self.btnimage];
    [self.contentView addSubview:self.btn];
    
    self.myImageView=[[UIImageView alloc]initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2-30,90,40,40)];
    self.myImageView.image=[UIImage imageNamed:@"audionews_index_play@2x.png"];
    [self.btnimage addSubview:self.myImageView];
    self.Labeltitle=[[UILabel alloc]initWithFrame:CGRectMake(10,235, [UIScreen mainScreen].bounds.size.width, 20)];
    [self.Labeltitle setFont:[UIFont systemFontOfSize:14]];
    [self.contentView addSubview:self.Labeltitle];
    self.playcountLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 255, 250, 15)];
    [self.playcountLabel setFont:[UIFont systemFontOfSize:10]];
    [self.contentView addSubview:self.playcountLabel];
    self.playcountImage=[[UIImageView alloc]initWithFrame:CGRectMake(10, 255, 15, 15)];
    self.playcountImage.image=[UIImage imageNamed:@"night_video_list_cell_count@2x"];
    [self.contentView addSubview:self.playcountImage];
    self.playtimeLabel=[[UILabel alloc]initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width-40, 255, 45, 15)];
    [self.playtimeLabel setFont:[UIFont systemFontOfSize:10]];
    [self.contentView addSubview:self.playtimeLabel];
    self.playtimeImage=[[UIImageView alloc]initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width-60, 255, 15, 15)];
    self.playtimeImage.image=[UIImage imageNamed:@"night_audionews_indexheader_recent@2x"];
    [self.contentView addSubview:self.playtimeImage];
}


当设计完视频cell后,用这些cell去实现tableview的内容:

    MediaCell *cell=[tableView dequeueReusableCellWithIdentifier:@"cell"forIndexPath:indexPath];
    // NSURL *imageUrl=[NSURL URLWithString:[[self.allDataArray objectAtIndex:indexPath.row] backImage]];
    // [cell.btnimage sd_setImageWithURL:imageUrl];
    [cell.btnimage setImage:[UIImage imageNamed:@"1"]];
    cell.btn.tag=indexPath.row;
    [cell.btn addTarget:self action:@selector(doput:) forControlEvents:UIControlEventTouchUpInside];
    cell.Labeltitle.text=@"视频标题";
    cell.playcountLabel.text=@"播放次数:4123";
    if (cell.btnimage==nil)
    {
        [cell.myImageView removeFromSuperview];
    }
    cell.playtimeLabel.text=[NSString stringWithFormat:@"%02d:%02d",7,34];

接着是,注意,这个函数 didEndDisplayingCell是每个cell呈现完毕后就会被调用

-(void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (self.moviePlayer.playbackState==MPMoviePlaybackStatePlaying||self.moviePlayer.playbackState==MPMoviePlaybackStatePaused)
    {
        [self.backmovieplayer removeFromSuperview];
        [self.moviePlayer.view removeFromSuperview];
        self.moviePlayer=nil;
        
    }
    
    
}

每个cell点击后开始播放视频,也就是这个函数cell点击后的回调函数

-(void)doput:(UIButton *)btn
{
    
    if (self.moviePlayer.playbackState==MPMoviePlaybackStatePlaying||self.moviePlayer.playbackState==MPMoviePlaybackStatePaused)
    {
        [self.backmovieplayer removeFromSuperview];
        [self.moviePlayer.view removeFromSuperview];
    }
    NSString *urlStr= @"http://flv2.bn.netease.com/videolib3/1511/19/RiCBl0272/SD/RiCBl0272-mobile.mp4";//[[self.allDataArray objectAtIndex:btn.tag] mp4_url];
    NSString* UrlStr=[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url=[NSURL URLWithString:UrlStr];
    if (!_moviePlayer) {
        _moviePlayer=[[MPMoviePlayerController alloc]initWithContentURL:url];
        _moviePlayer.view.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
    }
    if ([self.moviePlayer isPreparedToPlay]) {
        [_moviePlayer setContentURL:url];
        [self.backmovieplayer removeFromSuperview];
    }
    
    self.moviePlayer.view.frame=CGRectMake(10,(btn.tag)*280+20,self.view.frame.size.width-20, 210);
    self.loadingAni.frame=CGRectMake(self.moviePlayer.view.bounds.size.width/2-18.5,self.moviePlayer.view.bounds.size.height/2-18.5, 37, 37);
    [self.myTableView addSubview:self.moviePlayer.view];
    self.backmovieplayer=[[UIImageView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width-20, 210)];
    self.backmovieplayer.image=[UIImage imageNamed:@"night_sidebar_cellhighlighted_bg@2x"];
    [self.moviePlayer.view addSubview:self.backmovieplayer];
    [self.backmovieplayer addSubview:self.loadingAni];
    [self addNotification];
    [self.loadingAni startAnimating];
    [self.myTableView reloadData];
    
}


/**
 *  播放状态改变,注意播放完成时的状态是暂停
 *
 *  @param notification 通知对象
 */

-(void)mediaPlayerPlaybackStateChange:(NSNotification *)notification{
    [self.loadingAni stopAnimating];
    [self.backmovieplayer removeFromSuperview];
    if ([self.moviePlayer loadState]!=MPMovieLoadStateUnknown)
    {
        
        switch (self.moviePlayer.playbackState) {
            case MPMoviePlaybackStatePlaying:
                
                //  NSLog(@"正在播放...");
                break;
            case MPMoviePlaybackStatePaused:
                // NSLog(@"暂停播放.");
                break;
            case MPMoviePlaybackStateStopped:
                // NSLog(@"停止播放.");
                break;
            default:
                // NSLog(@"播放状态:%li",self.moviePlayer.playbackState);
                break;
        }
    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值