文档章节

AVPlayer播放视频

鹿微微鹿
 鹿微微鹿
发布于 2016/05/07 13:56
字数 321
阅读 166
收藏 0

//

//  ViewController.m

//  04-AVPlayer播放视频

//

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

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

//


#import "ViewController.h"

#import <AVFoundation/AVFoundation.h>

@interface ViewController ()

{

    //播放器

    AVPlayer *_player;

    //显示画面的Layer

    AVPlayerLayer *imageLayer;

    

    UIProgressView *progress;

}

@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    

    NSString *path =

        @"http://otmv.alicdn.com/new/mv_1_6/23/77/2306cd13e3dde338b53f404ece43a277.mp4?k=7125c1a8f09b70bb&t=1451830866";

    

    //1.创建item

    AVPlayerItem *item = [[AVPlayerItem alloc]

                          initWithURL:[NSURL URLWithString:path]];

    

    //2.创建播放器对象

    _player = [AVPlayer playerWithPlayerItem:item];

    

    

    //3.播放

    [_player play];


    //==================显示图像========================

    //4.创建显示视频的layer专门用来显示视频图像的

    //参数:播放器

   imageLayer   = [AVPlayerLayer playerLayerWithPlayer:

                                 _player];

    

    //2.设置frame

    imageLayer.frame = self.view.bounds;


    //3.添加到界面上

    [self.view.layer addSublayer:imageLayer];

    

    //4.获取视频界面的大小

    CGRect rect = imageLayer.videoRect;

    

   

    

    

    //=========屏幕旋转==================


    [[NSNotificationCenter defaultCenter]

     addObserver:self selector:@selector(screenChangeSite) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];

    

}


- (void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];

     CGRect rect = imageLayer.videoRect;

    //5.创建一个进度条

    progress = [[UIProgressView alloc]

                initWithFrame:CGRectMake(rect.origin.x,rect.origin.y+rect.size.height, rect.size.width, 10)];

    [self.view addSubview:progress];

      __weak UIProgressView *p = progress;

    [_player addPeriodicTimeObserverForInterval:CMTimeMake(1,10 ) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {

      

        //更新进度

        //总时间

      float total =  _player.currentItem.duration.value / _player.currentItem.duration.timescale;

        //当前时间

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

        

        p.progress = current/total;

        

    }];

    

    //显示样式

    //AVLayerVideoGravityResizeAspect 默认的,没有缩放

    //AVLayerVideoGravityResize:layer有多大就显示多大视频有缩放

    //AVLayerVideoGravityResizeAspectFill 按比例缩放,显示不全

    [imageLayer setVideoGravity:AVLayerVideoGravityResizeAspect];

    

    

}


#pragma mark - 屏幕旋转frame改变

- (void)screenChangeSite{

    

    NSLog(@"屏幕旋转");

    imageLayer.frame = self.view.bounds;

     CGRect rect = imageLayer.videoRect;

    progress.frame = CGRectMake(rect.origin.x,rect.origin.y+rect.size.height, rect.size.width, 10);

}


@end





























© 著作权归作者所有

上一篇: 自己定制tabBar
下一篇: IOS开发之AVPlayer
鹿微微鹿
粉丝 8
博文 116
码字总数 71882
作品 0
程序员
私信 提问
AVFoundation开发秘籍笔记-04视频播放

一、播放功能综述 1、AVPlayer AVPlayer用来播放基于时间的视听媒体的控制器对象。支持播放从本地、分步下载或通过HTTP Live Streaming协议得到的流媒体,并在多种播放场景中播放这些视频资源...

竹与豆
2018/05/25
0
0
AVPlayer 之avcore模块

define MEDIATYPEFILE 0 define MEDIATYPEBT 1 define MEDIATYPEHTTP 2 define MEDIATYPERTSP 3 // 渲染模式. define RENDER_DDRAW 0 define RENDER_D3D 1 define RENDER_OGL 2 class EXPOR......

Jackarain
2012/04/20
1K
18
【开源访谈】AVPlayer 作者王功铭访谈实录

关于开源访谈 开源访谈是开源中国推出的一系列针对国内优秀开源软件作者的访谈,以文字的方式记录并传播。我们希望开源访谈能全面的展现国内开源软件、开源软件作者的现状,着实推动国内开源...

虫虫
2012/11/27
5.8K
31
基于ffmpeg并支持p2p(bt), http, rtsp的播放器 avplayer

一直以来, 在多媒体播放器这块, 即使目前有许多开源的播放器项目, 但要写一个播放器仍然是件非常困难的事, 如果在windows上你有可能需要熟悉DShow, 另外的话, 你需要学习一堆开源项目(比如F...

Jackarain
2012/04/06
5.4K
6
iOS 视频播放器 腾讯新闻里面的 视频播放的时候 ​ 播放器可以变得很小,还可以拖动,怎么实现的

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

LB_Zhang
2016/01/27
121
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
7
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
10
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
9
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部