一、简介

iOS提供了MPMoviePlayerController、MPMoviePlayerViewController两个类,可以用来轻松播放视频和网络流媒体\网络音频
提示:网络音频同样使用此控制器播放
YouTobe就是用MPMoviePlayerController实现的
MPMoviePlayerViewController只能全屏播放视频
上述两个类都定义在了MediaPlayer框架中
 
二、MPMoviePlayerController支持的格式
MPMoviePlayerController
继承自NSObject
内部有个view可以展示视频内容
将该视图添加其他控制器的view上,即可显示视频内容
MPMoviePlayerController可以播放的视频格式包括:
H.264、MPEG-4等
支持的文件扩展名包括:avi,mkv,mov,m4v,mp4等
 
可以从苹果官网:http://support.apple.com/kb/HT1425下载一些用来测试的视频文件,文件都比较小
 
提示:MPMoviePlayerController并不支持所有的视频格式,如果要播放不支持的视频格式,需要借助第三方框架进行解码,如VLC
 
三、MPMoviePlayerController的使用
加载视频资源(注意,如果url为nil同样可以加载)

NSAssert(self.url, @"URL不能为空");

[[MPMoviePlayerController alloc] initWithContentURL:self.url];

显示

[self.view addSubview:self.moviePlayer.view];

通过设置AutoresizingMask属性可以在横竖屏转换时自动调整视图大小

播放

[self.moviePlayer play];

全屏

[self.moviePlayer setFullscreen:YES animated:YES];

 
MPMoviePlayerController的播放状态是通过通知中心监听的
 
四、常用监听通知事件
状态变化

MPMoviePlayerPlaybackStateDidChangeNotification

播放结束

MPMoviePlayerPlaybackDidFinishNotification

退出全屏

MPMoviePlayerDidExitFullscreenNotification

截屏完成

MPMoviePlayerThumbnailImageRequestDidFinishNotification

截屏方法

-requestThumbnailImagesAtTimes:timeOption:

五、VLC(基于FFmpeg)

注意点
存放VLC的文件夹名不要有空格
一旦执行过编译脚本sh, 就别再修改存放VLC的文件夹名

1.集成

静态库 + 头文件
 
依赖库
 
C++标准库
 
导入头文件, 播放视频

#import "VLCMediaPlayer.h"

 

self.vlcPlayer = [[VLCMediaPlayer alloc] init];

self.vlcPlayer.drawable = self.view;

self.vlcPlayer.media = [VLCMedia mediaWithURL:[NSURL URLWithString:@"http://streams.videolan.org/streams/mp4/Mr_MrsSmith-h264_aac.mp4"]];

[self.vlcPlayer play];

 
1.VLCMediaPlayer – 常见方法
播放控制

- (BOOL)play;

- (void)pause;

- (void)stop;

- (BOOL)isPlaying;

@property float rate; // 播放速率

播放进度

- (void)setTime:(VLCTime *)value; // 当前的播放时间

- (VLCTime *)time;

@property (readonly) VLCTime *remainingTime; // 剩余的播放时间

- (void)setPosition:(float)newPosition; // 播放进度(0.0 ~ 1.0)

- (float)position;

 
播放的内容

- (void)setMedia:(VLCMedia *)value;

- (VLCMedia *)media;

播放的载体(显示到哪里, 一般是一个UIView)

@property (retain) id drawable;

2.VLCMediaPlayer – 播放器的状态

播放器的状态
- (VLCMediaPlayerState)state;

enum {

VLCMediaPlayerStateStopped,        // 播放器已经停止

VLCMediaPlayerStateOpening,        // 流正在打开

VLCMediaPlayerStateBuffering,      // 流正在缓冲

VLCMediaPlayerStateEnded,          // 流已经结束

VLCMediaPlayerStateError,          // 播放器产生了错误

VLCMediaPlayerStatePlaying,        //  流正在播放

VLCMediaPlayerStatePaused          // 流被暂停了

};

3.VLCMediaPlayerDelegate

通过代理对象可以监听播放器的状态
当播放器的状态改变就调用

- (void)mediaPlayerStateChanged:(NSNotification *)aNotification;

 
当播放器的时间改变就调用

- (void)mediaPlayerTimeChanged:(NSNotification *)aNotification;

 //
// ViewController.m
// IOS_0322_视频
//
// Created by ma c on 16/3/22.
// Copyright © 2016年 博文科技. All rights reserved.
// #import "ViewController.h"
#import <MediaPlayer/MediaPlayer.h>
#import <MobileVLCKit/MobileVLCKit.h> @interface ViewController () @property (nonatomic, strong) VLCMediaPlayer *player; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor cyanColor]; } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
// [self systemMoviePlayer];
[self mobileVLCMoviePlayer]; } - (void)mobileVLCMoviePlayer
{
NSURL *url = [[NSBundle mainBundle] URLForResource:@"11-传感器.mp4" withExtension:nil];
self.player = [[VLCMediaPlayer alloc] init];
self.player.media = [VLCMedia mediaWithURL:url]; //设置播放界面的载体
self.player.drawable = self.view;
//播放
[self.player play]; } - (void)systemMoviePlayer
{
MPMoviePlayerController *mpc = [[MPMoviePlayerController alloc] init];
mpc.contentURL = [[NSBundle mainBundle] URLForResource:@"11-传感器.mp4" withExtension:nil]; //缓冲之后自动播放
// [mpc prepareToPlay]; //隐藏自带的控制面板
// mpc.controlStyle = MPMovieControlStyleNone; //添加播放器的界面到控制器View上面
mpc.view.frame = CGRectMake(, , , );
[self.view addSubview:mpc.view]; //播放
[mpc play]; } @end

IOS-视频的更多相关文章

  1. 最近这么火的iOS视频直播

    快速集成iOS基于RTMP的视频推流 http://www.jianshu.com/p/8ea016b2720e iOS视频直播初窥:高仿<喵播APP> http://www.jiansh ...

  2. 浅谈iOS视频开发

     浅谈iOS视频开发 这段时间对视频开发进行了一些了解,在这里和大家分享一下我自己觉得学习步骤和资料,希望对那些对视频感兴趣的朋友有些帮助. 一.iOS系统自带播放器 要了解iOS视频开发,首先我们从 ...

  3. IOS 视频分解图片、图片合成视频

    在IOS视频处理中,视频分解图片和图片合成视频是IOS视频处理中经常遇到的问题,这篇博客就这两个部分对IOS视频图像的相互转换做一下分析. (1)视频分解图片 这里视频分解图片使用的是AVAssetI ...

  4. 最简单的基于FFmpeg的移动端例子:IOS 视频解码器-保存

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

  5. 最简单的基于FFmpeg的移动端例子:IOS 视频转码器

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

  6. <精华篇>:iOS视频大全-持续更新

    注意:新浪微博分享的资料和简书分享的资料,略有不同! 小码哥swift3.0版 斗鱼项目视频:点击下载  iOS开发25个项目实战:点击下载 2016PHP全套下载:点击下载  黑马刀哥iOS视频精选 ...

  7. iOS视频编辑SDK

    IOS视频编辑SDK接入说明 一.名词解释 分辨率:用于计算机视频处理的图像,以水平和垂直方向上所能显示的像素数来表示分辨率.常见视频分辨率的有1080P即1920x1080,720P即1080x72 ...

  8. iOS 视频开发学习

    原文:浅谈iOS视频开发 这段时间对视频开发进行了一些了解,在这里和大家分享一下我自己觉得学习步骤和资料,希望对那些对视频感兴趣的朋友有些帮助. 一.iOS系统自带播放器 要了解iOS视频开发,首先我 ...

  9. iOS视频边下载边播放

    随着视频行业的发展,很多用户对于观看体验也有了更高的要求,以前的习惯是下载好了在观看,而现在是希望1分钟都不要等,ZUI好一边看着一边下载,等把这个视频看完也下载完了,也就是我们常说的“视频边下载边播 ...

  10. iOS视频开发经验

    iOS视频开发经验 手机比PC的优势除了便携外,我认为最重要的就是可以快速方便的创作多媒体作品.照片分享,语音输入,视频录制,地理位置.一个成功的手机APP从产品形态上都有这其中的一项或多项,比如in ...

随机推荐

  1. oracle入门(3)——oracle服务解释

    [本文介绍] oracle不像mysql,安装后之后一个服务,如果mysql连接不上,打开其服务就行.oracle是有多个服务,哪些服务要开,哪些服务没必要开,对新手来说未必不是一个难点.下面对ora ...

  2. django的序列化问题

    Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式 1.serializers from django.core import seria ...

  3. 10 Spring框架 AOP (三) Spring对AspectJ的整合

    上两节我们讲了Spring对AOP的实现,但是在我们的开发中我们不太使用Spring自身的对AOP的实现,而是使用AspectJ,AspectJ是一个面向切面的框架,它扩展了Java语言.Aspect ...

  4. 保护你的代码,生成.a文件以及.framework文件需要注意的地方

    一个好的设计,一个方便使用的控件封装,一个酷炫的动画... 是不是迫不及待要分享给大家你的每一个突然蹦出来的好的idea,那就下手吧! 可是,你想要的只是让大家使用它,而不是把所有技术点都公开给每个人 ...

  5. $微信小程序开发实践点滴——接入Bmob后端云

    Bmob后端云官网:http://www.bmob.cn/ 微信公众平台官网:https://mp.weixin.qq.com/ 微信小程序官方开发文档:https://mp.weixin.qq.co ...

  6. datagrid 编辑

    spark:DataGrid编辑状态进入需要在选中一行高亮状态之后,再次点击该单元格,这样,相信非常符合开发人员的控制手法及大众使用习惯,这,是一点非常好的改良. 同时,它取缔了itemEditEnd ...

  7. 剑指offer编程题66道题 1-25

    1.二维数组中的查找 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  8. sq 如何创建全局的临时表。

    全局临时表的生命周期一直持续到创建会话(不是创建级别)才终止.例如,如果你在存储过程中创建全局临时表,当超出存储过程的范围时,该表并不会被销毁.当创建会话终止后,SQL Server才会自动尝试删除该 ...

  9. win10安装z3求解器

    因为课程要求,我不得不接触求解器,之前有在ubuntu上装过一个叫stp的求解器,没怎么用: 今天在我的电脑(win10)上上装了一款更方便的求解器---z3,下面先详细介绍一下怎么安装和配置: 1. ...

  10. Facebook力推导航库:React Navigation使用详解

    本文来自Songlcy投稿:文章地址:http://blog.csdn.net/u013718120/article/details/72357698 一.开源库介绍 今年1月份,新开源的react- ...