视频播放(iOS开发)
视频播放
一.视频播放介绍(5种实现方案)
- AVPlayer
- 优点
- 可以自定义UI,进行控制
- 缺点
- 单纯的播放,没有控制UI,而且如果要显示播放界面,需要借助AVPlayerLayer,添加图层到需要展示的图层上
- 优点
- MPMoviePlayerController
- 优点
- 自带播放控制UI,不需要手动添加
- 缺点
- 不能自定义UI
- 只能将此控制器视图添加到其他视图进行展示
- 此控制器不是视图控制器,不能弹出
- 优点
- MPMoviePlayerViewController
- 优点
- 自带播放控制UI,不需要手动添加
- 此控制器是视图控制器,可以弹出,可以压栈
- 也可以手动调整视图大小,添加其他视图上
- 缺点
- 不能自定义UI
- 优点
- 针对第2/3种情况,在iOS9之后,统一使用AVPlayerViewController
- 优点
- 自带播放控制UI,不需要手动添加
- 此控制器是视图控制器,可以弹出,可以压栈
- 也可以手动调整视图大小,添加到其他视图上
- 缺点
- 不能自定义UI
- 优点
- 第三方框架Vitamio
二.使用AVPlayer播放远程视频
1.实现播放功能
- 通过远程URL创建AVPlayer
- NSURL *remoteURL = [NSURL URLWithString:@"http://v1.mukewang.com/57de8272-38a2-4cae-b734-ac55ab528aa8/L.mp4"];
- _player = [AVPlayer playerWithURL:remoteURL];
- 开始播放
- [self.player play];
- 存在问题
- 只能播放声音,看不到图像
- 解决方案:需要借助AVPlayerLayer对象,根据player创建图层,添加到视图上
2.实现视频显示功能
- 根据player对象,创建AVPlayerLayer对象
- AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:self.player];
- 设置图层AVPlayerLayer的大小
- layer.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height * 9 / 16);
- 添加到需要展示的视图上即可
- [self.view.layer addSublayer:layer];
3.封装专门用于播放的视图
- 主要封装一些操作的工具条
备注
- iOS9.0网络请求(ATS)适配(HTTPS->HTTP)
- NSAppTransportSecurity
- NSAllowsArbitraryLoads->true
三.使用MPMoviePlayerController播放视频
- 相比于AVPlayer播放,自带一些控制按钮
- 导入MediaPlayer框架
- 根据URL创建控制器MPMoviePlayerController
- NSURL *remoteURL = [NSURL URLWithString:@"http://v1.mukewang.com/57de8272-38a2-4cae-b734-ac55ab528aa8/L.mp4"];
- self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:remoteURL];
- 设置播放视图frame,添加到需要展示的视图上
- 设置播放视图的frame
- self.moviePlayer.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height * 9 / 16);
- 设置播放视图控制样式
- self.moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
- 添加播放视图到要显示的视图
- [self.view addSubview:self.moviePlayer.view];
- 设置播放视图的frame
- 播放
- [self.moviePlayer play];
- 注意事项
- 此控制器不是视图控制器,不能直接弹出
- 播放器的播放状态,是通过通知的方式告诉外界
四.使用MPMoviePlayerViewController播放视频
- 导入MediaPlayer框架
- 根据URL创建控制器MPMoviePlayerViewController
- NSURL *remoteURL = [NSURL URLWithString:@"http://v1.mukewang.com/57de8272-38a2-4cae-b734-ac55ab528aa8/L.mp4"];
- self.playerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:remoteURL];
- 直接modal弹出该控制器(或者设置播放视图frame,添加到需要展示的视图上)
- [self presentViewController:self.playerVC animated:YES completion:nil];
- 播放
- [self.playerVC.moviePlayer play];
五.iOS9.0之后,需要使用AVPlayerViewController
- 导入框架
- AVFoundation
- AVKit
- 根据URL创建AVPlayer
- NSURL *remoteURL = [NSURL URLWithString:@"http://v1.mukewang.com/57de8272-38a2-4cae-b734-ac55ab528aa8/L.mp4"];
- AVPlayer *player = [AVPlayer playerWithURL:remoteURL];
- 根据AVPlayer,创建AVPlayerViewController控制器
- self.playerVC = [[AVPlayerViewController alloc] init];
- self.playerVC.player = player;
- 设置播放视图frame,添加到需要展示的视图上
- 设置播放视图的frame
- self.playerVC.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height * 9 / 16);
- 添加播放视图到要显示的视图
- [self.view addSubview:self.playerVC.view];
- 或者直接弹出此控制器
- [self presentViewController:self.playerVC animated:YES completion:nil];
- 设置播放视图的frame
- 播放
- [self.playerVC.player play];
六.Vitamio框架
- 官网
- 主要功能
- Vitamio能够流畅播放720P甚至1080P高清mkv/flv/mp4/mov/ts/rmvb等常见格式的视频
- 还可以在Android和iOS上跨平台支持mms/rtsp/rtmp/hls(m3u8)等常见的多种视频流媒体协议,包括直播与点播
- 使用权限
- 非个人移动应用均需购买Vitamio使用授权
- 标准免费版仅限于个人开发者使用
- 使用步骤
- 导入框架
- 添加系统依赖库
- 项目配置
- TARGETS->Build Settings->Other Linker Flags->"-OjbC"
- 导入头文件
- #import "Vitamio.h"
- 代码实现
- 获取单例
- VMediaPlayer.sharedInstance()
- 设置承载式图,以及代理
- mMPlayer.setupPlayerWithCarrierView(view,withDelegate:self)
- 设置数据源
- mMPlayer.setDataSource(NSURL(string:videoUrl),header:nil)
- 异步准备视频
- mMPlayer.prepareAsync()
- 在代理方法中开始播放(VMediaPlayerDelegate)
- 获取单例
// 当'播放器准备完成'时, 该协议方法被调用, 我们可以在此调用 [player start] 来开始音视频的播放.
func mediaPlayer(player: VMediaPlayer!, didPrepared arg: AnyObject!) {
mMPayer.start()
}
// 当'该音视频播放完毕'时, 该协议方法被调用, 我们可以在此作一些播放器善后操作, 如: 重置播放器, 准备播放下一个音视频等
func mediaPlayer(player: VMediaPlayer!, playbackComplete arg: AnyObject!) {
player.reset()
}
// 如果播放由于某某原因发生了错误, 导致无法正常播放, 该协议方法被调用, 参数 arg 包含了错误原因.
func mediaPlayer(player: VMediaPlayer!, error arg: AnyObject!) {
print("nal")
}
- 暂停播放
- mMPlayer.pause()
- 停止播放
- mMPlayer.reset()
- mMPlayer.unSetupPlayer()
- 继续播放
- mMPlayer.start()
- 倍速播放
- mMPlayer.setPlaybackSpeed
- 播放到指定时间
- seekTo
视频播放(iOS开发)的更多相关文章
- iOS开发——视频播放 待更新……
本文主要实现调用系统自带的播放器,自带的播放器已经做好了屏幕的适配,集成播放,暂停,快进等功能.能够满足基本的视频播放功能及iOS的视频播放的开发. 最后将其简单的封装成一个iOS视频播放工具类. 一 ...
- ios开发视频播放后台下载功能实现 :1,ios播放视频 ,包含基于AVPlayer播放器,2,实现下载,iOS后台下载(多任务同时下载,单任务下载,下载进度,下载百分比,文件大小,下载状态)(真机调试功能正常)
ABBPlayerKit ios开发视频播放后台下载功能实现 : 代码下载地址:https://github.com/niexiaobo/ABBPlayerKit github资料学习和下载地址:ht ...
- iOS开发系列文章(持续更新……)
iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...
- ios开发中的小技巧
在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...
- IOS 开发中要注意的事项
1.关于拍摄 TGCameraViewController – 基于 AVFoundation 的自定义相机.样式漂亮,轻量并且可以很容易地集成到 iOS 项目中.不会内存吃紧 2.block 中对控 ...
- 文顶顶iOS开发博客链接整理及部分项目源代码下载
文顶顶iOS开发博客链接整理及部分项目源代码下载 网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...
- iOS开发常见BUG和一些小技巧(ps:耐心看完,很实用)
[385][scrollView不接受点击事件,是因为事件传递失败] // // MyScrollView.m // Created by beyond on 15/6/6. // Copyright ...
- iOS开发人员不容错过的10大工具
内容简介 1.iOS简介 2.iOS开发十大实用工具之开发环境 3.iOS开发十大实用工具之图标设计 4.iOS开发十大实用工具之原型设计 5.iOS开发十大实用工具之演示工具 6.iOS开发十大实用 ...
- iOS - 开发类库
开发类库 UI 项目名称 项目信息 1.MJRefresh 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明. ...
随机推荐
- 网站开启Gzip压缩-apache
找到并打开apache/conf目录中的httpd.conf文件 httpd.conf中打开deflate_Module和headers_Module模块,具体做法为将 如下两句前面的#去掉: Loa ...
- Unity3D热更新
原地址:http://crazylights.cnblogs.com/ 下载在这个时代实在是太平常了,每个人都深刻的理解着下载到底是什么. 这一篇文字只是把下载的代码分享并介绍,而已. 首先,下载系统 ...
- Python 之 使用 PIL 库做图像处理
http://www.cnblogs.com/way_testlife/archive/2011/04/17/2019013.html Python 之 使用 PIL 库做图像处理 1. 简介. 图像 ...
- Spring mvc 学习笔记
记录下学习spring-mvc的技术要点,项目结构路径如下: 1. 首先要在web.xml中添加Servlet和filter的配置: <!-- 转码,防止乱码--> <filter& ...
- GridView 根据要求显示指定值
最近在写一个小项目用来练手恢复一下功力的,在Users表中有一个用户字段是状态,我使用"0"表示启用,“1”表示禁用, 存到数据库中, 由于之前有一段时间没写代码了,所以有点生疏了 ...
- 一个Redis实现的分布式锁
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.redis.conne ...
- Server.MapPath()目录详解
最近在做相关的开发,碰到了Server.MapPath(),顺便来温习一下 Server.MapPath()获取网站的目录详解 ./当前目录 /网站主目录 ../上层目录 ~/网站虚拟目录 如果当前 ...
- IPAddress
Console.WriteLine("BitConverter.IsLittleEndian = {0}", BitConverter.IsLittleEndian); Conso ...
- hdu4678Mine
http://acm.hdu.edu.cn/showproblem.php?pid=4678 之前写了一并差集找连通块 貌似不对 比赛时写的dfs爆栈了 只好用bfs了 单独数字块 为1 空白+数字 ...
- hdu4671Backup Plan
http://acm.hdu.edu.cn/showproblem.php?pid=4671 这个高端的题意啊 看了N久啊 n>m时 直接第一列按顺序来 第二列为M+1 else 第一列顺序 ...