一款用Object-C语言编写的视频播放器框架

网友投稿 741 2022-10-30

一款用Object-C语言编写的视频播放器框架

一款用Object-C语言编写的视频播放器框架

功能

支持横竖屏切换支持从上一次终止播放的地方继续播放支持水平滑动屏幕和使用滑动条快进快退,并在横屏模式下有预览图支持音量调节(右半屏幕垂直滑动)和亮度调节(左半屏幕垂直滑动)支持网络视频和本地视频播放支持多视频播放,可播放下一集支持cell上播放,并可设置当cell(整个cell或一半cell)滑出屏幕时终止播放、可设置小屏播放提供锁屏、截图功能支持分辨率切换含有视频-功能含有网络监听可自定义播放界面(即控制层,默认的控制层是SPVideoPlayerControlView)

如何使用

// 创建视频播放的模型- (SPVideoItem *)videoItem { if (!_videoItem) { _videoItem = [[SPVideoItem alloc] init]; _videoItem.title = @"视频标题"; _videoItem.videoURL = [NSURL URLWithString:_videoModel.playUrl]; _videoItem.placeholderImage = [UIImage imageNamed:@"qyplayer_aura2_background_normal_iphone_375x211_"]; // playerView的父视图,如果是在cell上播放,则需要设置fatherViewTag而不是fatherView,fatherViewTag就是playerView父视图的tag值 _videoItem.fatherView = self.playerFatherView; } return _videoItem;}// 创建播放器对象- (SPVideoPlayerView *)playerView { if (!_playerView) {        // 创建,如果是cell上播放,用sharedPlayerView单例创建        _playerView = [[SPVideoPlayerView alloc] init]; // 这一步非常重要,这一步相当于设置了控制层和视频模型,如果控制层传nil,则默认自带的的控制层        [_playerView configureControlView:nil videoItem:self.videoItem]; // 如果有多个视频需要播放,如电视剧有很多集,则用这个方法 //[_playerView configureControlView:nil videoItems:self.videoItems]; // 设置代理 _playerView.delegate = self; // 打开-功能(默认没有这个功能) _playerView.hasDownload = YES; // 打开预览图,默认是打开的 _playerView.requirePreviewView = YES; } return _playerView;}注:您无需手动添加playerView,[_playerView configureControlView:nil videoItem:self.videoItem];这一步内部会自动将playerView添加到模型中指定的fatherView上去

// 开始播放,只有调用startPlay才会开始播放[self.playerView startPlay];

如何自定义播放界面

调用方法传入自定义控制层(方法内部会自动添加到父view上)

[self.playerView configureControlView:这里传你自定义的界面 videoItem:这里传视频模型];

你搭建完界面之后,必然会有很多控件,如播放暂停按钮,滑动条,全屏按钮,返回按钮,-按钮等,那么这些控件触发的方法该如何实现呢,这个非常简单,你不需要去关心怎么做,这些事情全都交给代理去做,代理就是播放层SPVideoPlayerView,代理方法详见框架中的SPVideoPlayerControlViewDelegate.h 例:

// 下一集按钮的触发方法- (void)nextButtonAction:(UIButton *)sender { if ([self.delegate respondsToSelector:@selector(sp_controlViewNextButtonClicked:)]) { [self.delegate sp_controlViewNextButtonClicked:sender]; }}

播放层有一些事件发生了变化,控制层也需要发生变化,如正在水平滑动屏幕进行快进快退,那控制层的滑动条就需要跟随这个进度,这里你自定义的控制层就需要监听播放层所发出的通知,通知方法的具体实现可以参考SPVideoPlayerControlView.m:

// 监听播放状态的改变 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoPlayerStateChanged:) name:SPVideoPlayerStateChangedNSNotification object:nil]; // 监听播放进度的改变 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoPlayerProgressValueChanged:) name:SPVideoPlayerProgressValueChangedNSNotification object:nil]; // 视频播放进度将要跳转 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoPlayerWillJump:) name:SPVideoPlayerWillJumpNSNotification object:nil]; // 视频播放进度条转完毕 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoPlayerDidJumped:) name:SPVideoPlayerDidJumpedNSNotification object:nil]; // 监听缓冲进度的改变 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoPlyerBufferProgressValueChanged:) name:SPVideoPlayerBufferProgressValueChangedNSNotification object:nil]; // 监听视频截图 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cutVideoFinished:) name:SPVideoPlayerCutVideoFinishedNSNotification object:nil]; // 监听媒体网络加载状态 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadStatusDidChanged:) name:SPVideoPlayerLoadStatusDidChangedNotification object:nil];

另外还有几个方法值得你关心,这些方法(见框架中的分类文件夹里头的“UIView+CustomControlView”)如下:(这些方法的具体实现可以参考框架中的SPVideoPlayerControlView.m)

/** * 实现此方法,控制层可以得到播放模型以及正在播放的视频url,正在播放的url并不一定是模型中的url,有可能是分辨率字典中的某一个 */- (void)sp_setPlayerItem:(SPVideoItem *)videoItem playingUrlString:(NSString *)playingUrlString;/** * 实现此方法,单击播放器时可以显示或隐藏控制层 */- (void)sp_playerShowOrHideControlView;/** * 实现此方法,重置ControlView,如播放新的视频,播放结束等都需要重置 */- (void)sp_playerResetControlView;/** * 实现此方法,可以设置快进快退时的预览视图 */- (void)sp_playerDraggedWithThumbImage:(UIImage *)thumbImage;/** * 实现此方法,可以决定是否要-按钮 */- (void)sp_playerHasDownloadFunction:(BOOL)sender;/** * 实现此方法,可以设置-按钮的状态,如可-状态和不可-状态 */- (void)sp_playerDownloadBtnState:(BOOL)state;/** * 实现此方法, 可以设置锁定屏幕方向按钮的状态,如选中状态和未选中状态 */- (void)sp_playerLockBtnState:(BOOL)state;/** * 实现此方法,可以设置在cell上播放时,控制层的相关设置 */- (void)sp_playerCellPlay;/** * 实现此方法,可以设置小屏播放时,控制层的相关设置 */- (void)sp_playerBottomShrinkPlay;

没有任何一套播放器框架的播放界面是通用的,每个公司的需求也不同,本框架的自带播放界面是根据爱奇艺而搭建,如果您使用此框架中的默认界面作为商行业用途,由此带来的一切不良后果作者一律不承担。作者建议您最好自定义控制层。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于人际关系的一些问答
下一篇:第一章 集合与点集
相关文章

 发表评论

暂时没有评论,来抢沙发吧~