1引入AVFoundation.framework框架

2引入头文件<AVFoundation/AVFoundation.h>,并拖入需要播放的视频文件

代码如下:

自定义播放的View,PlayerView

PlayerView.h

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>

@interface PlayerView : UIView

//播放器和当前view进行关联
- (void)setPlayer:(AVPlayer *)player;

@end

.m文件代码如下:

#import "PlayerView.h"

@implementation PlayerView

+ (Class)layerClass {
    return [AVPlayerLayer class];
}

- (void)setPlayer:(AVPlayer *)player {
    [(AVPlayerLayer *)[self layer] setPlayer:player];
}

@end

控制器代码如下:

#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
#import "PlayerView.h"

@interface ViewController ()
{
    PlayerView* _playerView;
    UISlider* _proSlider;
    AVPlayer* _player;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor whiteColor];
    
    _playerView = [[PlayerView alloc] initWithFrame:CGRectMake(0, 20, 320, 240)];
    [self.view addSubview:_playerView];
    
    _proSlider = [[UISlider alloc] initWithFrame:CGRectMake(50, 300, 220, 20)];
    _proSlider.minimumValue = 0.0;
    _proSlider.maximumValue = 1.0;
    _proSlider.value = 0.0;
    [_proSlider addTarget:self action:@selector(setProgress) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:_proSlider];
    
    UIButton* playButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    playButton.frame = CGRectMake(110, 340, 100, 40);
    [playButton setTitle:@"play" forState:UIControlStateNormal];
    [playButton addTarget:self action:@selector(play) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:playButton];
    
    UIButton* stopButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    stopButton.frame = CGRectMake(110, 390, 100, 40);
    [stopButton setTitle:@"stop" forState:UIControlStateNormal];
    [stopButton addTarget:self action:@selector(stop) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:stopButton];
    
    NSString* path = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"mp4"];
    NSURL* url = [NSURL fileURLWithPath:path];
    //资源类
    AVURLAsset* asset = [AVURLAsset assetWithURL:url];
    //加载
    [asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler:^{
        //得到状态
        AVKeyValueStatus status = [asset statusOfValueForKey:@"tracks" error:nil];
        if (status == AVKeyValueStatusLoaded) {
            //AVPlayer->AVPlayerItem->AVURLAsset
            AVPlayerItem* item = [AVPlayerItem playerItemWithAsset:asset];
            //播放器
            _player = [[AVPlayer alloc] initWithPlayerItem:item];
            //播放器进行关联
            [_playerView setPlayer:_player];
            
            //进度监听
            //CMTime 1帧 1帧/每秒
            [_player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:dispatch_get_global_queue(0, 0) usingBlock:^(CMTime time) {
                //当前时间 / 总时间
                CMTime currentTime = _player.currentItem.currentTime;
                CMTime duration = _player.currentItem.duration;
                float pro = CMTimeGetSeconds(currentTime) / CMTimeGetSeconds(duration);
                dispatch_async(dispatch_get_main_queue(), ^{
                    [_proSlider setValue:pro animated:YES];
                });
            }];
        }
    }];
    
   
}
//设置进度
- (void)setProgress{
    //总时间 * 进度 = 当前时间
    CMTime duration = _player.currentItem.duration;
    CMTime currentTime = CMTimeMultiplyByFloat64(duration, _proSlider.value);
    //从当前时间播放
    [_player seekToTime:currentTime];
}

- (void)play{
    [_player play];
}

- (void)stop{
    [_player pause];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

AVPlayer的使用本地视频的更多相关文章

  1. iOS 本地视频和网络视频流播放

    需求:最近公司需要做一个楼宇对讲的功能:门口机(连接WIFI)拨号对室内机(对应的WIFI)的设备进行呼叫,室内机收到呼叫之后将对收到的数据进行UDP广播的转发,手机(连接对应的WIFI)收到视频流之 ...

  2. octopress 如何添加youku视频和本地视频(octopress how to add a youku video or a local video)

    用octopress 官方的video tag 可以添加视频,但是由于国内经常使用的是youku,所以下面是如何添加youku视频到octopress的教程. 首先添加youku.rb文件到路径:oc ...

  3. iOS Dev (21) 用 AVPlayer 播放一个本地音频文件

    iOS Dev (21) 用 AVPlayer 播放一个本地音频文件 作者:CSDN 大锐哥 博客:http://blog.csdn.net/prevention 前言 这篇文章与上一篇极其相似,要注 ...

  4. Swift - 使用Media Player播放本地视频,在线视频

    Media Player框架用于播放本地视频.音频,也可以在线播放视频和音频. 1,播放器MPMovieControlStyle样式有如下几种: (1)None: 没有播放控制控件 (2)Embedd ...

  5. UIImagePickerController拍照/相册/录像/本地视频

    1.导入系统库 #import <MobileCoreServices/MobileCoreServices.h> 2.遵守协议 <UIImagePickerControllerDe ...

  6. Android 跳转系统选择本地视频的功能

    今天在项目开发的过程中产品要求添加选择本地视频的功能,于是就翻阅和查找各种资料,进行功能的开发,但是在开发过程中发现,各种不同的品牌的手机跳转至系统选择本地视频的功能结果不太一样,所以我就对一些主流的 ...

  7. video.js不能控制本地视频或者音频播放时长

    问题: 把视频放到本地,然后对视频进行测试,想要控制视频或者音频的播放时长,没办法做到,每次拉动进度条,都会使得本地视频重新播放 原因: 所有浏览器默认js无法访问本地地址,也就是说js不能对本地文件 ...

  8. potplayer 网页调用potplayer播放本地视频

      网页调用potplayer播放本地视频 CreateTime--2018年1月3日10:36:24 Author:Marydon 源码展示: <!DOCTYPE html> <h ...

  9. 照相、从相册上取照片、播放音频、播放本地视频、播放网络视频、MPMoviePlayerController

    一.照相.从相册上去照片 1. 先判断是否支持照相功能 *判断当前设备是否支持照相功能,支持返回YES 否则返回NO 注意:模拟器不支持照相功能 把握一个原则只要是物理硬件相关的功能模拟器都不支持 例 ...

随机推荐

  1. SQL之 CAST 和 CONVERT

    原文来自于: http://bbs.csdn.net/topics/330251394 CAST 和 CONVERT将某种数据类型的表达式显式转换为另一种数据类型.CAST 和 CONVERT 提供相 ...

  2. Spring-2-B Save the Students(SPOJ AMR11B)解题报告及测试数据

    Save the Students Time Limit:134MS     Memory Limit:0KB     64bit IO Format:%lld & %llu   Descri ...

  3. JSON 格式介绍

    转自:http://www.json.org/json-zh.html JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器 ...

  4. C++分类

    VS的ncb.pdb文件分析 在C/C++函数中使用可变参数 #pragma VS查看DLL接口 线程本地存储TLS(Thread Local Storage)的原理和实现--分类和原理

  5. SSH服务器拒绝了密码,xshell连不上虚拟机怎么办

    用Xshell链接虚拟机的时候,出现下面情况: 这是sshd的设置不允许root用户用密码远程登录 解决方案: 修改 vim /etc/ssh/sshd_config 找到# Authenticati ...

  6. Shell basic1

    A shell script is a text file that typically begins with a shebang, as follows: #!/bin/bash /bin/bas ...

  7. ORA-01034: ORACLE not available如何解决

    一个小小的问题,让我折腾了一个上午,下午三点彻底解决了,分享一个给大家解决方法,尽管在测试服务器上,但是经验是值得总结和分享的. ERROR:ORA-01034: ORACLE not availab ...

  8. java lambda小纪

    一个通俗的说法是 :C#委托和Java中实现了 函数式编程的方法,它是函数式编程中的概念,为了更快的处理集合,在Java,c#等静态类型语言中想要引用一个函数的一种方式,(实现了通过封装匿名方法来达到 ...

  9. 孙鑫视频学习:“operator +=” 不明确的问题解决方法

    在基于单文档应用程序的MFC程序中,在OnChar函数中使用m_strLine+=nChar时,出现了error C2593:“operator +=”不明确的错误,经百度,找到如下解决方法,亲测可用 ...

  10. Python天猫淘宝评论爬虫

    说明 由于Github 打包的exe某些文件上传被.gitignore了,所以不提供windows二进制包 https://github.com/hunterhug/taobaocomment 一个抓 ...