视频播放(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框架
- 官网
- https://www.vitamio.org
- 主要功能
- 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
转载于:https://www.cnblogs.com/coderwjq/p/6236921.html
视频播放(iOS开发)相关推荐
- iOS 视频播放器开发
需求设计 做一个小学生教育辅导视频播放器. 参考小猿搜题视频播放器 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L0GsyFSt-1675164972791)(htt ...
- iOS开发系列–音频播放、录音、视频播放、拍照、视频录制
iOS开发系列–音频播放.录音.视频播放.拍照.视频录制 - KenshinCui - 博客园 代码改变世界 Posts - 69, Articles - 0, Comments - 1004 Cnb ...
- 【iOS开发进阶】-AVPlayer视频播放
1.AVPlayer介绍 iOS提供了多种方法来实现视频播放,包括MPMoviePlayerController,MPMoviePlayerViewController,AVPlayer,AVPlay ...
- Xamarin iOS开发实战中册 (内部资料)C#苹果应用开发
Xamarin iOS开发实战中册 (内部资料)C#苹果应用开发 Xamarin iOS开发实战中册 (内部资料)C#苹果应用开发 试读样章下载地址:http://pan.baidu.com/s/1j ...
- Xamarin iOS开发实战(内部资料)
Xamarin iOS开发实战 (内部资料) 介绍:本教程是国内Xamarin针对iOS 9开发的唯一教程.本教程针对Mac OS X10.11/Windows 10两种系统平台,讲解如何使用Xama ...
- iOS开发月报#10|201904
这里记录过去一个月,我看到的值得分享的内容,包含但不限于iOS知识,每个月的最后一天发布. 欢迎推荐内容,可以前往zhangferry/iOSMonthlyReport提交issue. Tips 关于 ...
- iOS开发系列文章(持续更新……)
iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...
- iOS开发人员不容错过的10大工具
内容简介 1.iOS简介 2.iOS开发十大实用工具之开发环境 3.iOS开发十大实用工具之图标设计 4.iOS开发十大实用工具之原型设计 5.iOS开发十大实用工具之演示工具 6.iOS开发十大实用 ...
- Android进阶:自定义视频播放器开发(下)
上一篇文章我们主要讲了视频播放器开发之前需要准备的一个知识,TextureView,用于对图像流的处理.这篇文章开始构建一个基础的视频播放器. 一.准备工作 在之前的文章已经说过了,播放器也是一个vi ...
- iOS开发-ZFPlayer的简单使用 播放单个网络视频
iOS开发-ZFPlayer的简单使用 播放单个网络视频 前言 开发准备 代码 注意 前言 关于ZFPlayer播放单个网络视频案例,它的网络列表视频案例在gitHub上面很多. 开发准备 podfi ...
最新文章
- Windows中如何正确认识和安装驱动程序
- linux bash基础
- CentOS7——vi编辑保存
- 一位资深Java的阿里系公司实战面试经验,套路还是面试官的多
- 【Tools】Ubuntu18.04破解root密码
- BZOJ 3223: Tyvj 1729 文艺平衡树-Splay树(区间翻转)模板题
- 基于JAVA+SpringMVC+Mybatis+MYSQL的博客系统
- 使用wireshark抓取qq好友ip地址
- vba获取通达信光标的坐标数据_如何把缠论分笔公式在移动端手机版通达信缠论画笔公式安装...
- Hopfield神经网络的联想记忆——数字识别的一些笔记
- elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
- 怎么恢复电脑的无线网服务器,电脑搜不到无线网络怎么恢复|电脑搜不到无线网络的恢复方法...
- Android批量打包-如何一秒内打完几百个apk渠道包
- Python -- 列表解析式习题:九九乘法表、ID号
- 原生js实现拖拽效果,js拖拽原理
- 优秀自我简介200字_优秀学生自我介绍200字范文
- 一文掌握多分类logistic回归
- H-A + B用于投入产出实践(VIII)
- 1.13正版服务器,我的世界Minecraft梦幻世界服务器(1.7-1.13版本)
- 腹直肌整体(01):器械卷腹
热门文章
- 【综述笔记】一些弱监督语义分割论文
- 关于数字孪生的一点理解
- 解决nf_conntrack: table full, dropping packet
- 2022 极术通讯-基于安谋科技 “星辰” STAR-MC1的灵动MM32F2570开发板深度评测
- apt-get update “the following signatures couldn’t be verified because the public key is not avail
- 亲自面试汇丰银行面试题目总结
- html5 图片上传进度条,html5异步上传图片显示上传文件进度条
- 设置来电铃声、卡2来电铃声、短信铃声、提示铃声、闹铃铃声
- 这世上倒底有没有神仙——说“Excel不是数据库,是不是犯了白马非马论的错误??...
- QT visual assist x不能稳定工作