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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架