ios视频播放器,代码和界面分离

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
-(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];
    
     
}

  

     

 

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

 

posted @   Ethan_村长  阅读(4480)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示