//
//  AVPlayerNetViewController.m
//  PodsTest
//
//  Created by ZhuYi on 16/4/29.
//  Copyright © 2016年 DDP. All rights reserved.
//

#import "AVPlayerNetViewController.h"
#import <AVFoundation/AVFoundation.h>

@interface AVPlayerNetViewController (){
    AVPlayer *player;//播放器对象
    UIView *container; //播放器容器
    UIButton *playOrPause; //播放/暂停按钮
    UIProgressView *progress;//播放进度
    AVPlayerItem *playerItem;//播放项
}
@end

@implementation AVPlayerNetViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.view.backgroundColor = [UIColor whiteColor];

    [self container];
    [self progressView];
    [self setUpPlayer];
}
- (void)container{
    container = [[UIView alloc] initWithFrame:CGRectMake(, , self.view.frame.size.width, )];
    [self.view addSubview:container];
}
- (void)progressView{
    progress = [[UIProgressView alloc] initWithFrame:CGRectMake(, , self.view.frame.size.width - , )];
    progress.progress = ;
    progress.progressTintColor = [UIColor orangeColor];
    progress.trackTintColor = [UIColor grayColor];
    [self.view addSubview:progress];

    playOrPause = [UIButton buttonWithType:UIButtonTypeCustom];
    playOrPause.frame = CGRectMake(, , self.view.frame.size.width - , );
    playOrPause.selected = NO;
    playOrPause.backgroundColor = [UIColor orangeColor];
    [playOrPause setTitle:@"播放" forState:UIControlStateNormal];
    [playOrPause setTitle:@"暂停" forState:UIControlStateSelected];
    [playOrPause addTarget:self action:@selector(playControlClicked:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:playOrPause];
}
- (void)playControlClicked:(UIButton *)sender{
    sender.selected = !sender.selected;
    if (sender.selected) {
        [player play];
    }else{
        [player pause];
    }
}
- (void)setUpPlayer{
    NSURL *url = [NSURL URLWithString:@"http://7s1sjv.com2.z0.glb.qiniucdn.com/9F76A25D-9509-DEE9-3D8A-E93F360BB0E5.mp4"];
    playerItem = [AVPlayerItem playerItemWithURL:url];
    [playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];// 监听status属性
    [playerItem addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:nil];// 监听缓冲进度
    //给AVPlayerItem添加播放完成通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];

    player = [AVPlayer playerWithPlayerItem:playerItem];

    AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
    playerLayer.frame = container.frame;
    [container.layer addSublayer:playerLayer];
}
-(void)playbackFinished:(NSNotification *)notification{
    NSLog(@"视频播放完成.");
}
#pragma mark - KVO - status
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    AVPlayerItem *item = (AVPlayerItem *)object;
    if ([keyPath isEqualToString:@"status"]) {
            if ([item status] == AVPlayerStatusReadyToPlay) {
                NSLog(@"AVPlayerStatusReadyToPlay");
                CMTime duration = item.duration;// 获取视频总长度
                NSLog(@"%f", CMTimeGetSeconds(duration));
            }else if([item status] == AVPlayerStatusFailed) {
                NSLog(@"AVPlayerStatusFailed");
            }else{
                NSLog(@"AVPlayerStatusUnknown");
            }
    }else if ([keyPath isEqualToString:@"loadedTimeRanges"]) {
    }
}
@end

AVFoundation--AVPlayer的更多相关文章

  1. AVPlayer

    AVPlayer     AVPlayerLayer是CALayer的一个子类,由于AVPlayer这个播放器只能安置在AVPlayerLayer 这个图层之上,所以我们需要实例化一个UIView,并 ...

  2. 基于 AVPlayer 自定义播放器

    如果我只是简单的播放一个视频,而不需要考虑播放器的界面.iOS9.0 之前使用 MPMoviePlayerController, 或者内部自带一个 view 的 MPMoviePlayerViewCo ...

  3. iOS:基于AVPlayer实现的视频播放器

    最近在学习AVFoundation框架的相关知识,写了一个基于AVPlayer的视频播放器,相关功能如下图: 代码github:https://github.com/wzpziyi1/VideoPla ...

  4. iOS开发 - AVPlayer实现流音频边播边存

    边播边下有三套左右实现思路,本文使用AVPlayer + AVURLAsset实现. 概述 1. AVPlayer简介 AVPlayer存在于AVFoundation中,可以播放视频和音频,可以理解为 ...

  5. AVPlayer的使用本地视频

    1引入AVFoundation.framework框架 2引入头文件<AVFoundation/AVFoundation.h>,并拖入需要播放的视频文件 代码如下: 自定义播放的View, ...

  6. iOS - AVPlayer 音视频播放

    前言 NS_CLASS_AVAILABLE(10_7, 4_0) @interface AVPlayer : NSObject @available(iOS 4.0, *) public class ...

  7. iOS在线音乐播放SZKAVPlayer(基于AVPlayer的封装)

    由于最近闲着没事,想找有关在线音乐播放的demo学习一下,在gitHub跟code4APP上面查找了很多帖子,结果很多在线音乐都是基于AudioStream实现的,我感觉用起来不太方便.后来突然发现, ...

  8. iOS的影片播放 MediaPlayer 和 AVPlayer(转)

    分类: Iphone2013-01-28 16:19 5230人阅读 评论(0) 收藏 举报 在iOS開發上,如果遇到需要播放影片,如開機動畫…,我們很習慣地會使用MediaPlayer來播放影片,因 ...

  9. iOS 视频开发-AVPlayer

    如果我只是简单的播放一个视频,而不需要考虑播放器的界面.iOS9.0 之前使用 MPMoviePlayerController, 或者内部自带一个 view 的 MPMoviePlayerViewCo ...

  10. 第六篇、AVplayer定制视频播放控件

    1.引用头文件#import AVFoundation 2.自定义AVPlayer(播放的机器) 3.自定义AVPlayerItem(胶片) >> 视频的URL转成AVAsset 4.AV ...

随机推荐

  1. MPICH3.2 单机编译、安装及测试

    MPI,即信息传递接口(Message Passing Interface),是基于消息传递这种并行计算模型的一个并行程序设计标准,可以直接通过C/C++.Fortran调用,目前最主要的实现由MPI ...

  2. (89C51)定时器计时1s

    unsigned ; void initT1() { EA=; TH1=0xDC; TL1=0X00; TMOD=0x10; TR1=; ET1=; } { TH1=0xDC; TL1=0X00; c ...

  3. Python 的基本使用说明

    1.先定义一个被调用的模块,文件名 cnf.py #!/usr/bin/ #coding=utf- import sys reload(sys) sys.setdefaultencoding( &qu ...

  4. hdu 2824 The Euler function(欧拉函数)

    题目链接:hdu 2824 The Euler function 题意: 让你求一段区间的欧拉函数值. 题解: 直接上板子. 推导过程: 定义:对于正整数n,φ(n)是小于或等于n的正整数中,与n互质 ...

  5. winform自动更新并实现文件的批量异步下载

    public partial class update : Form    {        private WebClient client;        int downfilenum = 0; ...

  6. Leetcode easy

    1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...

  7. USB硬盘 raw之后,DiskGenius 恢复

    最近,为了在E560上安装LINUX(先是gentoo,后是rhel7,最后是 centos7),用UltralISO 把一块移动硬盘给写成RAW格式了.现在又想把移动硬盘给恢复回去.采用一些方法,效 ...

  8. shell中bash的常见命令

    shell 在计算机科学中,Shell俗称壳,用来区别Kernel(核) Shell分类:1:图形界面shell:通过提供友好的可视化界面,调用相应应用程序,如windows系列操作系统,Linux系 ...

  9. openstack私有云布署实践【18 修改实例DHCP服务的DNS IP】

    某天,由于Linux服务器默认没有DNS缓存功能,每次服务器每访问一个http域名链接时,都会触发一次DNS域名解析查询,降低了调用API接口的时延,所以我司后续启用的内网的dnsmasq DNS服务 ...

  10. OpenGL编译问题随手记

    1.error C2381: "exit" : 重定义:__declspec(noreturn) 不同 编译OpenGL   Red   Book   的例子时出现错误, stdl ...