SailorHub

iOS-音视频 (三十一) : iOS视频播放器,代码和界面分离

最近业余时间整理的一个ios播放器,界面采用storyboard,以前几乎都是用代码布局,但是用过一个项目storyboard后,就感觉storyboard很靠谱,团队合作版本控制的问题解决其实很简单,每个人一个storyboard就可以了。播放代码使用的是avplayer,最大的优化就是播放界面和播放代码完全分离。

 -(void)createPlayer

 {

        

             self.playBackView=[[AVPlayerDemoPlaybackView alloc] initWithFrame:viewBounds];

 

             [self.view addSubview:self.playBackView];

        

             self.playerManager=[[AVPlayerManager alloc] init];

             设置url

             self.playerManager.URL=[[NSBundle mainBundle] URLForResource:@”1″ withExtension:@”mp4″];

            self.playerManager.URL=[[NSBundle mainBundle] URLForResource:@”2″ withExtension:@”mov”];

 

             self.playerManager.URL=[NSURL URLWithString:@”http://static.tripbe.com/videofiles/20121214/9533522808.f4v.mp4];

             设置播放界面

             self.playerManager.mPlaybackView=self.playBackView;

 

             设置时间轴

             self.playerManager.scrubSlider=self.scrubSlider;

 

             播放出错回调

             self.playerManager.failedBlock=^(NSError *error){

                         if (error) {

                                     UIAlertView *alert=[[UIAlertView alloc] initWithTitle:[error description] message:[error debugDescription] delegate:nil cancelButtonTitle:@”OK” otherButtonTitles:nil, nil];

                                     [alert show];

                                 }

                     };

             __weak ViewController *weakself=self;

             播放状态改变

             self.playerManager.statusChangeBlock=^(BOOL isPlaying){

                         weakself.playBtn.hidden=isPlaying;

                         weakself.pauseBtn.hidden=!isPlaying;

                     };

             播放结束

             self.playerManager.playEndBlock=^(){

                         NSLog(@”播放结束);

                     };

             准备好播放

             self.playerManager.readyToPlayBlock=^(){

                         weakself.totalTimeLabel.text=[weakself convertTimetoString:weakself.playerManager.duration];

                         weakself.playBtn.enabled=YES;

                         weakself.pauseBtn.enabled=YES;

                         [weakself.playerManager play];

                

                

                     };

             播放过程时间改变

             self.playerManager.timeChangedBlock=^(double time)

             {

                         weakself.currentTimeLabel.text=[weakself convertTimetoString:time];

                     };

             声音发生改变

             self.playerManager.volumeChangedBlock=^(){

                         weakself.volumeSlider.value=weakself.playerManager.volume;

                     };

             缓冲时间

             self.playerManager.bufferChangedBlock=^(double buffered){

                         weakself.processBar.progress=buffered/weakself.playerManager.duration;

                         weakself.speedLabel.text=[NSString stringWithFormat:@”%0.0fkb/s”,weakself.playerManager.bufferSpeed];

                     };

              

             初始化完毕,准备播放

             [self.playerManager prepare];

             

              

         }

 

– (void)setUpChildViewAddScrollView:(NSInteger)index

{

 

    取出控制器

    UITableViewController *childVC=self.childViewControllers[index];

    NSLog(@”%@”,childVC);

    判断是否加载过  加载过就直接返回

    if (childVC.isViewLoaded) return;

    如果没有加载 实行下面的代码

    

    CGFloat scrollViewW=WIDTH;

    childVC.view.frame=CGRectMake(index * scrollViewW, 0, scrollViewW,HEIGHT – 212.f);

    NSLog(@”———————%@”,NSStringFromCGRect(childVC.view.frame));

    [self.baseScrollView addSubview:childVC.view];

    NSLog(@”%@”,self.baseScrollView);

    NSLog(@”%@”,self.baseScrollView.subviews);

}

     

 

 

代码下载:http://pan.baidu.com/s/1eyVMm

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注