iOS 加载网络视频之(AVFoundation.framewor)的MPMoviePlayerController

本文主要是介绍iOS 加载网络视频之(AVFoundation.framewor)的MPMoviePlayerController,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//引用 AVFoundation.framework

#import "FirstViewController.h"

#import <MediaPlayer/MediaPlayer.h>

@interfaceFirstViewController ()

//视频播放器

@property (strong,nonatomic) MPMoviePlayerController *player;

@property (strong,nonatomic) UIImageView *imageView;

@end

@implementation FirstViewController

- (void)viewDidLoad {

    [superviewDidLoad];

    

}

- (void)viewWillAppear:(BOOL)animated {

    

}

- (IBAction)media:(UIButton *)sender {

    // 本地视频

//        NSURL *url = [[NSBundle mainBundle]URLForResource:@"1" withExtension:@"mp4"];

//        url = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8"];

    // 网络视频

   //    提示:如果url中包含中文,需要添加百分号。

    NSString *urlString =@"http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8";

    NSURL *url = [NSURLURLWithString:[urlStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

    

   //实例化视频播放器

    self.player = [[MPMoviePlayerControlleralloc]initWithContentURL:url];

   //1设置播放器的大小

    [self.player.viewsetFrame:CGRectMake(0,200, self.view.frame.size.width,180)]; //16:9是主流媒体的样式

   //2将播放器视图添加到根视图

    [self.viewaddSubview:self.player.view];

    

   //异步视频截图,可以在attimes指定一个或者多个时间。

    [self.playerrequestThumbnailImagesAtTimes:@[@10.0f,@20.0f] timeOption:MPMovieTimeOptionNearestKeyFrame];

    

//    UIImageView *thumbnailImageView = [[UIImageView alloc]initWithFrame:CGRectMake(80, 200, 160, 90)];

//    self.imageView = thumbnailImageView;

//    [self.view addSubview:thumbnailImageView];

   //视频播放是流媒体的播放模式,所谓流媒体就是把视频数据像流水一样,边加载,边播放。

    //4播放

    //    [self.player play];

    //暂停

    //    [self.player stop];

   //通过通知中心,以观察者模式监听视频播放状态

    //1 监听播放状态

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(stateChange)name:MPMoviePlayerPlaybackStateDidChangeNotificationobject:nil];

    //2 监听播放完成

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(finishedPlay)name:MPMoviePlayerPlaybackDidFinishNotificationobject:nil];

    //3视频截图

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(caputerImage:)name:MPMoviePlayerThumbnailImageRequestDidFinishNotificationobject:nil];

    //3视频截图

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(caputerImage:)name:MPMoviePlayerThumbnailImageRequestDidFinishNotificationobject:nil];

    

    //4退出全屏通知

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(exitFullScreen)name:MPMoviePlayerDidExitFullscreenNotificationobject:nil];

}


#pragma mark 退出全屏

- (void)exitFullScreen {

    NSLog(@"退出全屏");

}


#pragma mark -播放器事件监听

#pragma mark 视频截图这个方法是异步方法

- (void)caputerImage:(NSNotification *)notification {

    NSLog(@"截图 %@", notification);

    UIImage *image = notification.userInfo[@"MPMoviePlayerThumbnailImageKey"];

    [self.imageViewsetImage:image];

}


#pragma mark 播放器事件监听

#pragma mark 播放完成

- (void)finishedPlay {

    NSLog(@"播放完成");

}


#pragma mark 播放器视频的监听

#pragma mark 播放状态变化

/*

 MPMoviePlaybackStateStopped,  //停止

 MPMoviePlaybackStatePlaying,  //播放

 MPMoviePlaybackStatePaused,   //暂停

 MPMoviePlaybackStateInterrupted,  //中断

 MPMoviePlaybackStateSeekingForward, //快进

 MPMoviePlaybackStateSeekingBackward  //快退

 */

- (void)stateChange {

    switch (self.player.playbackState) {

        case MPMoviePlaybackStatePaused:

            NSLog(@"暂停");

            break;

        case MPMoviePlaybackStatePlaying:

            //设置全屏播放

            [self.playersetFullscreen:YESanimated:YES];

            NSLog(@"播放");

            break;

        case MPMoviePlaybackStateStopped:

           //注意:正常播放完成,是不会触发MPMoviePlaybackStateStopped事件的。

           //调用[self.player stop];方法可以触发此事件。

            NSLog(@"停止");

            break;

        default:

            break;

    }

}


@end



这篇关于iOS 加载网络视频之(AVFoundation.framewor)的MPMoviePlayerController的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/319333

相关文章

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

在 PyQt 加载 UI 三种常见方法

《在PyQt加载UI三种常见方法》在PyQt中,加载UI文件通常指的是使用QtDesigner设计的.ui文件,并将其转换为Python代码,以便在PyQt应用程序中使用,这篇文章给大家介绍在... 目录方法一:使用 uic 模块动态加载 (不推荐用于大型项目)方法二:将 UI 文件编译为 python 模

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component