Giter VIP home page Giter VIP logo

wmplayer's Introduction

功能

  • 支持cocoapods
  • 支持旋转屏:全屏模式和小屏模式切换,自动感应旋转
  • 支持网络和本地视频资源播放
  • 支持播放系统相册中的视频
  • 支持cell中播放,列表播放
  • 支持手势改变屏幕的亮度(屏幕左半边)
  • 支持手势改变音量大小(屏幕右半边)
  • 支持手势滑动快进快退、拖动Slider快进快退、点击Slider跳到点击位置播放
  • 支持直接跳到某个时间点播放
  • 支持全屏锁定🔒
  • 支持后台播放视频
  • 全面适配iPhone X
  • 支持播放器静音
  • 支持循环播放
  • 支持画中画功能PictureInPicture
  • 支持倍速播放(0.5X、1.0X、1.25X、1.5X、2X)
  • 支持列表跳转详情页播放同一个视频资源,达到无缝播放效果,类似今日头条的列表到详情页。
  • 支持动态改变播放器的填充模式

备注:有关视频缓存到本地的第三方库,请移步唱吧开源的项目https://github.com/ChangbaDevs/KTVHTTPCache

pod使用的问题总结

1、pod search WMPlayer 如果pod搜到WMPlayer版本为3.0.6,或者搜索不到,那么请更新Mac的ruby版本为2.4.x,同时更新pod版本为V1.5.3,更新的文章请参考:https://www.cnblogs.com/angelgril/p/6731015.html

2、pod 'WMPlayer'

把pod 'WMPlayer'放进你项目的Podfile里面

3、pod update

4、如果是5.0.0版本,OK,enjoy it。

5、如果不行,那么直接从GitHub上下载,用下面的命令:

pod 'WMPlayer',  :git => 'https://github.com/zhengwenming/WMPlayer.git'

image

Usage

  • 播放网络视频
    WMPlayerModel *playerModel = [WMPlayerModel new];
    playerModel.title = self.videoModel.title;
    playerModel.videoURL = [NSURL URLWithString:@"http://static.tripbe.com/videofiles/20121214/9533522808.f4v.mp4"];
    WMPlayer * wmPlayer = [[WMPlayer alloc]initPlayerModel:playerModel];
    [self.view addSubview:wmPlayer];
    [wmPlayer mas_makeConstraints:^(MASConstraintMaker *make) {
        make.leading.trailing.top.equalTo(self.view);
        make.height.mas_equalTo(wmPlayer.mas_width).multipliedBy(9.0/16);
    }];
    [wmPlayer play];
  • 播放本地视频
    WMPlayerModel *playerModel = [WMPlayerModel new];
    playerModel.title = self.videoModel.title;
    NSURL *URL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"4k" ofType:@"mp4"]];
    playerModel.videoURL = [NSURL URLWithString:[URL absoluteString]];
    WMPlayer * wmPlayer = [WMPlayer playerWithModel:playerModel];        
    [self.view addSubview:wmPlayer];
    [wmPlayer mas_makeConstraints:^(MASConstraintMaker *make) {
        make.leading.trailing.top.equalTo(self.view);
        make.height.mas_equalTo(wmPlayer.mas_width).multipliedBy(9.0/16);
    }];
    [wmPlayer play]; 
  • 全屏播放视频解决方案

  •   WMPlayer 同时支持持旋转 view、单独旋转状态栏、旋转ViewController

    1、旋转view    思路:顾名思义,就是讲WMPlayer旋转90°,然后设置宽高为屏幕的宽和高,先从父视图上(可能是self.view)移除,然后在屏幕旋转的通知里面add到window上,造成全屏的效果,或者说造成全屏的假象吧。    案例:网易新闻    代码:比较low,不在维护。但是这个功能是支持的,开发者自行开发,或者看老版本的代码(5.0以前的版本)。    bug:通知栏的方向不是横屏模式;键盘和UIAlertView的弹出方向还是竖屏模式。

   2、旋转ViewController    思路:真正意义上去旋转VC,然后更新视频播放器的约束。(记住项目设置里面勾选☑️其他三个屏幕方向)    案例:腾讯视频      

3、自定义转场动画
思路:present出一个全屏的VC,同时WMPlayer做动画到全屏VC上。具体可以参考demo代码
案例:爱奇艺客户端
代码:详见demo中的新浪tab对应的DetailViewController.m里面,一定要添加全屏按钮的点击事件,并添加了代码才能有全屏的效果,不然就是一个普通的Button,点击没反应的。

使用过程中有bug,请联系我,我会及时修复。谢谢大家的支持。

欢迎加入WMPlayer+WNPlayer开发交流群

加本人微信18824905363,备注WMPlayer,我会拉你入群

wmplayer's People

Contributors

aa31140105 avatar boai avatar ds-team avatar guicai-li avatar wvqusrtg avatar zhengwenming avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wmplayer's Issues

视频不响应点击tap事件

我昨天集成了WMPlayer,全部参照demo来的,集成OK了,能显示能播放,但是有个严重的问题,就是不响应点击事件,所有点击都被表格的didSelectRowAtIndexPath截获,WMPlayer的UITapGestureRecognizer事件不响应。怎么解决啊?
但是跑你的demo是可以的。

想问下,修改self.wmPlayer.frame的同时修改self.wmPlayer.playerLayer.frame,会有问题

想问下,修改self.wmPlayer.frame的同时修改self.wmPlayer.playerLayer.frame,
会优先修改self.wmPlayer.playerLayer.frame,导致视频看起来出框了,想问下self.wmPlayer.playerLayer.frame的修改是不是自带了动画?可是找了下并没有见到有动画。

if (newOffset.y > 20) {
CGRect frame = self.frame;
if(frame.size.width>120){
frame.size.height = frame.size.height - newOffset.y;

    }
        if(frame.size.height<120){
        frame.size.height = 120;

    }
        self.wmPlayer.frame = frame;
        self.wmPlayer.playerLayer.frame = frame;
        self.wmPlayer.bottomView.frame = CGRectMake(0, self.wmPlayer.frame.size.height-40, SCREEN_WIDTH, 40);
        self.scrollView.frame = CGRectMake(0, 120, SCREEN_WIDTH, SCREEN_HEIGHT-120);
}else{
        CGRect frame = self.frame;
        if (frame.size.height<195) {
            frame.size.height = frame.size.height + newOffset.y;
        }
        if (frame.size.height>195) {
            frame.size.height = 195;
        }

        self.wmPlayer.frame = frame;
        self.wmPlayer.playerLayer.frame = frame;
        self.wmPlayer.bottomView.frame = CGRectMake(0, self.wmPlayer.frame.size.height-40, SCREEN_WIDTH, 40);
        self.scrollView.frame = CGRectMake(0, 195, SCREEN_WIDTH, SCREEN_HEIGHT-195);
}

我是这样写的。希望能指导下。

关于重连时间的问题

(。・∀・)ノ゙嗨,文明大神,我用了你的 wmPlayer ,非常好用,但是它抛出 “视频加载失败” 的时间太长了,我们希望 wmPlayer 能在15s 中重连 3 次左右,超过 15s 还没连不上就判断为加载失败,我想可以直接退了就好,但是老大表示,我不能这么残暴的对待代码,所以,我们想来征求一下你的意见 ~

WMPlayer视频播放器一个小Bug

使用您的WMPlayer视频播放器源码,在6plus上cell中播放视频是没问题的,但在小屏幕中(如iPhone5)上播放时,点击播放cell上的playBtn并不隐藏,强制隐藏会造成cell复用时其他cell没有playBtn按钮显示。

不能播放本地视频

   wmPlayer = [[WMPlayer alloc]initWithFrame:videoRect];
    wmPlayer.delegate = self;
    wmPlayer.closeBtnStyle = CloseBtnStyleClose;
    wmPlayer.URLString = [[NSBundle mainBundle] pathForResource:@"失恋33天" ofType:@"mp4"];
    [self.view addSubview:wmPlayer];
   [wmPlayer play];

当播放本地视频时,指示器一直显示,而且不能播放

开启自动旋转,全屏旋转错误

提示
2016-04-26 16:26:20.046 tableviewTest[3211:1199857] _BSMachError: (os/kern) invalid capability (20)
2016-04-26 16:26:20.049 tableviewTest[3211:1199857] _BSMachError: (os/kern) invalid name (15)

按全屏按钮旋转没问题,但是重力旋转 全屏都是错的,无法全屏,代码都一样,不清楚哪里错了

视频播放不完全问题

ios10 左上角出现一个小电视 而且播放不完整 ,且有声音,没有图像?求解 ???

一直播放失败,视频加载失败

视频加载失败===Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSUnderlyingError=0x7f82ca855a40 {Error Domain=NSOSStatusErrorDomain Code=-101 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-101), NSLocalizedDescription=The operation could not be completed}

希望能帮下我,急

这个masonry的问题可否修复一下 每次播放都提示这个

Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<MASLayoutConstraint:0x7fad86842790 UIProgressView:0x7fad82dee750.left == UISlider:0x7fad8698f0d0.left>",
"<MASLayoutConstraint:0x7fad868433a0 UIProgressView:0x7fad82dee750.right == UISlider:0x7fad8698f0d0.right>",
"<MASLayoutConstraint:0x7fad86843400 UIProgressView:0x7fad82dee750.centerX == UISlider:0x7fad8698f0d0.centerX + 0.7>"
)

Will attempt to recover by breaking constraint
<MASLayoutConstraint:0x7fad86843400 UIProgressView:0x7fad82dee750.centerX == UISlider:0x7fad8698f0d0.centerX + 0.7>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

干掉Masonry

1.干掉Masonry
2.初始化不需要url(支持xib)

手势滑动返回,视频会出现卡顿

你好,我最近也在做视频播放的项目,但是我发现进入播放详情页的时候,如果用手势滑动返回的话,视频就会卡顿,不知道你有好的解决方案不。

返回崩溃问题

dealloc释放self.currentItem 遇到崩溃现象 ,原因是重写currentItem set方法时判断使用_currentItem,_currentItem未清空.

解决cell错乱的问题

toCell方法中, VideoCell *currentCell = [self currentCell]; 改为
VideoCell *currentCell = (VideoCell *)[self.table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:currentIndexPath.row inSection:0]];

全屏时的一些建议

当点击全屏来到 toFullScreenWithInterfaceOrientation 方法时, 不用从新修改那么多控件的约束, 只需要在WMPlayer 内部初始化时, 添加一个(UIView *)containerView, 把所有的子控件放到它的上面, 以后全平时, 只修改containerView 的约束;

打开播放器黑屏?

你好,我想简单快速创建播放器。但是打开后是黑屏的。。代码如下(filePath是文件路径,可以打开,文件没问题):求指教
self.wmPlayer = [[WMPlayer alloc]initWithFrame:[UIScreen mainScreen].bounds]; self.wmPlayer.URLString = filePath.absoluteString; [self.wmPlayer.bottomView removeFromSuperview]; [self.wmPlayer.closeBtn removeFromSuperview]; [self.wmPlayer play]; [self.contentView insertSubview:self.wmPlayer belowSubview:self.feedActionView];

关于state的问题

typedef NS_ENUM(NSInteger, WMPlayerState) {
WMPlayerStateFailed, // 播放失败
WMPlayerStateBuffering, // 缓冲中
WMPlayerStatusReadyToPlay, //将要播放
WMPlayerStatePlaying, // 播放中
WMPlayerStateStopped, //暂停播放
WMPlayerStateFinished //播放完毕
};
在使用过程中,并不是很严格。
例如,在wmPlayer.state readyToPlay时,而实际上已经播放。
而且,在使用pause时,暂停时状态变化诡异

解决了滑动slide时卡顿的问题

首先,非常感谢作者的无私奉献,拿出来这么好的东西开源.该项目也是我非常欣赏的项目之一.我在使用过程中发现有出现滑动slide时,有一些卡顿现象.用了一些时间仔细分析了造成的原因是在滑动时,计时器仍然运行造成,滑动的slide与计时器的slide不匹配,造成卡顿.幸运的是,我找到了解决方案.所以拿来给大家分享一下.附件为我改过的文件上传,不为别的,也希望能像作者一样帮助更多的人.
VMPlayDemo.zip

在这里鼓励一下

能做出来却是技术了得,功能也十分强大。不过对于一个框架来说它的复用性并不是很好,继承这个类的话,可以实现,但是太多问题,所以希望还是再多多把代码封装进去

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.