iOS中的视频播放
iOS提供了MPMoviePlayerController 和 MPMoviePlayerViewController两个类,可以用来轻松播放视频和网络流媒体\网络音频。这两个类都定义在MediaPlayer框架中。
YouTobe就是用MPMoviePlayerController实现的。
MPMoviePlayerViewController只能全屏播放视频。
网络音频同样可以使用此控制器播放。
MPMoviePlayerController:
1> 继承自NSObject;
2> 内部有个view可以展示视频内容;
3> 将该视图添加到其他控制器的view上,即可显示视频内容。
MPMoviePlayerController可以播放的视频格式包括:H.264 、MPEG-4等。
支持的文件扩展名包括:avi、mkv、mov、m4v、mp4等。
提示:
MPMoviePlayerController并不支持所有的视频格式,如果要播放不支持的视频格式,需要借助第三方框架进行解码,如VLC,下载地址: https://github.com/videolan/vlc
可以从苹果官网:http://support.apple.com/kb/HT1425 下载一些用来测试的视频文件,文件都比较小 。
MPMoviePlayerController的使用:
1> 加载视频资源(如果url为nil同样可以加载);
NSAssert(self.url, @"URL不能为空");
[[MPMoviePlayerController alloc] initWithContentURL:self.url];
2> 显示:通过设置AutoresizingMask属性可以在横竖屏转换时自动调整视图大小 ;
[self.view addSubview:self.moviePlayer.view];
3> 播放
[self.moviePlayer play];
4> 全屏
[self.moviePlayer setFullscreen:YES animated:YES];
MPMoviePlayerController的播放状态是通过通知中心监听的。
常用监听通知事件:
// 添加播放状态的监听
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
// 1.监听状态变化
[nc addObserver:self selector:@selector(stateChanged) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];
// 2. 播放完成
[nc addObserver:self selector:@selector(finished) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
// 3. 全屏
[nc addObserver:self selector:@selector(finished) name:MPMoviePlayerDidExitFullscreenNotification object:nil];
// 4. 截屏完成通知
[nc addObserver:self selector:@selector(captureFinished:) name:MPMoviePlayerThumbnailImageRequestDidFinishNotification object:nil];
截屏方法
// 数组中有多少时间,就通知几次
// MPMovieTimeOptionExact 精确
// MPMovieTimeOptionNearestKeyFrame 大概齐
[self.moviePlayer requestThumbnailImagesAtTimes:@[@(5.0), @(20.0)] timeOption:MPMovieTimeOptionNearestKeyFrame];
NSAssert(断言)在程序开发中的意义:
1> 断言NSAssert仅在debug版本起作用,用于检查“不应该”发生的情况;
2> 可以把NSAssert看成一个在任何系统状态下都可以安全使用的无害测试手段。