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,下载地址:
可以从苹果官网: 下载一些用来测试的视频文件,文件都比较小 。
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看成一个在任何系统状态下都可以安全使用的无害测试手段。