视频播放(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加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明. ...
随机推荐
- css 多行显示省略号....
CSS属性如下: white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
- 将CMD内的显示内容输出到txt文件
将CMD内的显示内容输出到txt文件 xxxx -t >c:\test.txt //xxxx为命令 如ping www.baidu.com //-t >c:\test.tx ...
- [转载]C#多线程学习(一) 多线程的相关概念
原文地址:http://www.cnblogs.com/xugang/archive/2008/04/06/1138856.html 什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的 ...
- php多线程thread开发与应用的例子
Php多线程的使用,首先需要PHP5.3以上版本,并安装pthreads PHP扩展,可以使PHP真正的支持多线程,扩展如何安装请自行百度 PHP扩展下载:https://github.com/kra ...
- php nl2br() 函数
nl2br() 函数在字符串中的每个新行 (\n) 之前插入 HTML 换行符 (<br />).
- SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-004-使用AspectJ’s pointcut expression language定义Pointcut
一. 1.在Spring中,pointcut是通过AspectJ’s pointcut expression language来定义的,但spring只支持它的一部分,如果超出范围就会报Illegal ...
- ANDROID_MARS学习笔记_S01原始版_004_TableLayout
1.xml <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android ...
- Spring的annotation用在set方法上 hibernate的annotation用get方法上
1.Spring的annotation用在set方法上 2.hibernate的annotation用在get方法上
- AOP 实现的原理简析
AOP简介 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能 ...
- struct ifconf和struct ifreq,获取网线插入状态
这两天看用C获取当前网口的插入网线状态的程序,遇见了这两个不熟悉的结构体,看了头文件中的说明和详细. struct ifreq 这个结构定义在include/net/if.h,用来配置ip地址,激活接 ...