文档章节

IOS开发之AVPlayer

鹿微微鹿
 鹿微微鹿
发布于 2016/05/07 13:14
字数 531
阅读 159
收藏 0

//

//  ViewController.m

//  03-AVPlayer

//

//  Created by 鹿微微鹿 on 16/5/6.

//  Copyright (c) 2016 鹿微微鹿. All rights reserved.

//

//AVPlayer

#import "ViewController.h"

#import <AVFoundation/AVFoundation.h>

@interface ViewController (){

    

    //播放器

    AVPlayer *_player;

}

@property (weak, nonatomic) IBOutlet UISlider *sliderProgress;


@end



@implementation ViewController





- (void)viewDidLoad {

    [super viewDidLoad];

   

    //1.创建播放源对象

    NSString *path = [[NSBundle mainBundle]pathForResource:@"MovieTest.mp4" ofType:nil];

    

    AVPlayerItem *playerItem = [[AVPlayerItem alloc]initWithURL:[NSURL fileURLWithPath:path]];

    

     //2.创建播放器对象

    _player = [[AVPlayer alloc]initWithPlayerItem:playerItem];

    

    //3.播放

    [_player play];

    

    //4.暂停

     //[_player pause];

    

    //5.自动检测播放进度

    //参数1:间隔时间

    //参数2:block执行的队列

    //参数3:每隔参数1调用的block在这个block中可以获取当前帧数和播放速度

   

    //block中警告的解决方法

    __weak AVPlayer  *tplayer =_player;

    __weak UISlider *tslider = _sliderProgress;

    [_player addPeriodicTimeObserverForInterval:CMTimeMake(1,10)

            queue:dispatch_get_main_queue()  usingBlock:^(CMTime time) {

                

                

    //拿到总的帧数

    CMTime totalTime = tplayer.currentItem.duration;

                

    //总的时间

      float total = totalTime.value * 1.0f / totalTime.timescale;

                

    //当前时间

    

    float current = time.value*1.0f/time.timescale;


    //设置进度条

    tslider.value = current /total;

    }];

    

    //设置音量

    _player.volume = 0.5;

    

    

    //设置播放速度范围是0.5-2.0默认是1

    _player.rate = 1.0;

    

    //使用消息中心区检测播放结束的时刻

    //AVPlayerItemDidPlayToEndTimeNotification

    //

    [[NSNotificationCenter defaultCenter]

     addObserver:self selector:@selector(endPlay) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];

    //9.切换播放源

  // [_player replaceCurrentItemWithPlayerItem:nil];

}


#pragma mark - 消息中心

- (void)endPlay{

    

    NSLog(@"结束播放");

    self.sliderProgress.value = 0;

    NSString *path = [[NSBundle mainBundle]

                      pathForResource:@"亡灵序曲.mp3" ofType:nil];

    

    AVPlayerItem *item = [[AVPlayerItem alloc]

initWithURL:[NSURL fileURLWithPath:path]];

    

    //1.切换到下一首歌曲

    [_player replaceCurrentItemWithPlayerItem:item];

    //切换后要手动播放

    [_player play];

    

}


#pragma mark - 按钮点击

//播放

- (IBAction)plsy:(id)sender {

    [_player play];

}

//暂停

- (IBAction)pause:(id)sender {

    [_player pause];

}

#pragma mark - 拖动进度条的时候音乐进度改变

- (IBAction)sliderChangeValue:(UISlider *)sender {

    

    //CMTime是一个结构体

    //value 媒体文件总的帧数

    //timeScale 每一秒播放的帧数

    //时间 = value / timeScale

    //定位到第二秒

    //[_player seekToTime:CMTimeMake(2,1)];

    //定位到第十秒

    //[_player seekToTime:CMTimeMake(10,1)];

    

    //根据进度进行定位

    //总时间 = 总的帧数/播放速度

    //slider的进度的位置:(总的帧数*slider.value)/播放速度

    

    //1.获取当前播放媒体总的帧数

    //a.获取播放源

    AVPlayerItem *current = _player.currentItem;

    //b.获取到总帧数

    //总帧数

    CMTimeValue total = current.duration.value;

    //播放速度

    CMTimeScale speed = current.duration.timescale;

    

    //设置进度

    [_player seekToTime:CMTimeMake(total * sender.value,speed )];

    

}



#pragma mark - 步进器改变速度

- (IBAction)changeSpeed:(UIStepper *)sender {

    

    

    _player.rate = sender.value;

}




@end

















© 著作权归作者所有

鹿微微鹿
粉丝 8
博文 116
码字总数 71882
作品 0
程序员
私信 提问
请问ios开发如需播放视频,一般是调用设备的视频播放器还是自己开发视频播放器?

请问ios开发如需播放视频,一般是调用设备的视频播放器还是自己开发视频播放器?如果要调用设备的视频播放器怎么写代码?AVPlayer有用过吗?有这方面的demo没?

冰透心蓝
2013/08/30
1K
1
RBPlayer —— iOS 高度可定制的播放器

RBPlayer基于AVPlayer的高度可定制的播放器,要求iOS 7.0及以上版本。

局长
2016/09/04
23
0
iOS 视频播放器 腾讯新闻里面的 视频播放的时候 ​ 播放器可以变得很小,还可以拖动,怎么实现的

iOS 视频播放器 腾讯新闻里面的 视频播放的时候 播放器可以变得很小,还可以拖动,怎么实现的 AVPlayer?

LB_Zhang
2016/01/27
124
0
iOS 如何利用 Data 型态实作串流播放影片

网上多的是从各个伺服器加载影片做串流,使用过VLCKit,AVPlayer等等,没有找到能从尚未加载完成的 Data 中播放影片,有谁能载iOS里实现的?求先进

BookerIniOS
2017/08/17
32
0
iOS-tutorial-16:TravelVlogs——使用AVKit和AVFoundation创建视频应用

TravelVlogs项目是介绍如何使用AVKit和AVFoundation框架构建简单的视频流应用。 预览图 代码 TravelVlogs 注意点 AVKit 介绍 一个有用的开发智慧:始终支持您可用的最高抽象级别。 然后,当您...

Andy_Ron
2018/11/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

BootStrap

一、BootStrap 简洁、直观、强悍的前端开发框架,让web开发更加迅速、简单 中文镜像网站:http://www.bootcss.com 用于开发响应式布局、移动设备优先的WEB项目 1、使用boot 创建文件夹,在文...

wytao1995
16分钟前
4
0
小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
今天
4
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
今天
5
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
今天
5
1
正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置

正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置 今天要用正则表达式实现匹配一个词出现一次或者不出现的情况,但是又不仅仅是这么简单的需求。先详细说下我这种情况吧,也许有...

Airship
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部