视频播放及对象销毁

1、也许你喜欢这个。。。那就点击吧!

2、最近在做项目,其中就有视频功能。大概遇到的也就是视频播放GIF的时候有卡顿的现象,下面推荐一个库给大家,喜欢的话给个赞。

FlipBoard出品的太适合你了。 https://github.com/Flipboard/FLAnimatedImage

1、AVPlayer

MPMoviePlayerController足够强大,几乎不用写几行代码就能完成一个播放器,但是正是由于它的高度封装使得要自定义这个播放器变得很复杂,甚至是不可能完成。例如有些时候需要自定义播放器的样式,那么如果要使用MPMoviePlayerController就不合适了,如果要对视频有自由的控制则可以使用AVPlayer。AVPlayer存在于AVFoundation中,它更加接近于底层,所以灵活性也更强:

视频播放及对象销毁_第1张图片
AVPlayer.png

AVPlayer本身并不能显示视频,而且它也不像MPMoviePlayerController有一个view属性。如果AVPlayer要显示必须创建一个播放器层AVPlayerLayer用于展示,播放器层继承于CALayer,有了AVPlayerLayer之添加到控制器视图的layer中即可。

要使用AVPlayer首先了解一下几个常用的类:

AVAsset:主要用于获取多媒体信息,是一个抽象类,不能直接使用。

AVURLAsset:AVAsset的子类,可以根据一个URL路径创建一个包含媒体信息的AVURLAsset对象。

AVPlayerItem:一个媒体资源管理对象,管理者视频的一些基本信息和状态,一个AVPlayerItem对应着一个视频资源。

1、首先说一下视频的播放、暂停功能,这也是最基本的功能,AVPlayer对应着两个方法play、pause来实现。但是关键问题是如何判断当前视频是否在播放,在前面的内容中无论是音频播放器还是视频播放器都有对应的状态来判断,但是AVPlayer却没有这样的状态属性,通常情况下可以通过判断播放器的播放速度来获得播放状态。如果rate为0说明是停止状态,1是则是正常播放状态。
2、播放进度就没有其他播放器那么简单了

-我们可以依靠AVPlayer的- (id)addPeriodicTimeObserverForInterval:(CMTime)interval queue:(dispatch_queue_t)queue usingBlock:(void (^)(CMTime time))block方法获得播放进度,这个方法会在设定的时间间隔内定时更新播放进度,通过time参数通知客户端。相信有了这些视频信息播放进度就不成问题了,事实上通过这些信息就算是平时看到的其他播放器的缓冲进度显示以及拖动播放的功能也可以顺利的实现。

3、最后就是视频切换的功能

在前面介绍的所有播放器中每个播放器对象一次只能播放一个视频,如果要切换视频只能重新创建一个对象,但是AVPlayer却提供了*- (void)replaceCurrentItemWithPlayerItem:(AVPlayerItem )item方法用于在不同的视频之间切换(事实上在AVFoundation内部还有一个AVQueuePlayer专门处理播放列表切换

更多请:http://www.cnblogs.com/kenshincui/p/4186022.html

在点击返回按钮后,播放器不被销毁:可以这样尝试:

  - (void)viewDidAppear:(BOOL)animated
   {
      [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

    }

// 移除界面调用
- (void)viewWillDisappear:(BOOL)animated
{
self.avplayer = nil;

      [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:nil];
}

你可能感兴趣的:(视频播放及对象销毁)