视频播放(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加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明. ...
随机推荐
- shell 流程控制
for循环: #!/bin/bash for file in $(ls /ect) do echo $file done
- No Pain No Game
hdu4630:http://acm.hdu.edu.cn/showproblem.php?pid=4630 题意:给定一个排序,求区间最大GCD. 题解:离散树状数组.首先把查询按左端点从大到小排序 ...
- GridView 根据要求显示指定值
最近在写一个小项目用来练手恢复一下功力的,在Users表中有一个用户字段是状态,我使用"0"表示启用,“1”表示禁用, 存到数据库中, 由于之前有一段时间没写代码了,所以有点生疏了 ...
- SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-009-带参数的ADVICE2 配置文件为XML
一. 1.配置文件为xml时则切面类不用写aop的anotation package com.springinaction.springidol; public class Magician impl ...
- C# Json处理日期和Table
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Ru ...
- Linux内存初始化
start_kernel -> setup_arch 在这个函数中我们主要看这几个函数. machine_specific_memory_setup max_low_pfn = setup_me ...
- Android 内核初识(8)Binder
简介 Binder是Android系统提供的一种IPC(进程间通信)机制.由于Android是基于Linux内核的,因此,除了Binder外,还存在其他的IPC机制,例如管道和socket等.Bind ...
- [Hadoop源码解读](一)MapReduce篇之InputFormat
平时我们写MapReduce程序的时候,在设置输入格式的时候,总会调用形如job.setInputFormatClass(KeyValueTextInputFormat.class);来保证输入文件按 ...
- c#基础这些你都看过吗?(一)-----仅供初学者使用
1.注释(不写注释是流氓,名字瞎起是扯淡)‘///’一般用于注释函数,注释类.2.快捷键ctrl+k+d(有语法错误无法进行对齐)ctrl+j(快速弹出只能提示)shift+end,shift+hom ...
- TFS源代码管理
一.服务器配置 1.创建一个Visual Studio Online账户 打开VS,选择团队资源管理器(视图菜单下),然后在团队资源管理器中选择注册Team Foundation Service,打开 ...