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

相关文章

spring-boot-starter-thymeleaf加载外部html文件方式

《spring-boot-starter-thymeleaf加载外部html文件方式》本文介绍了在SpringMVC中使用Thymeleaf模板引擎加载外部HTML文件的方法,以及在SpringBoo... 目录1.Thymeleaf介绍2.springboot使用thymeleaf2.1.引入spring

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

Java如何获取视频文件的视频时长

《Java如何获取视频文件的视频时长》文章介绍了如何使用Java获取视频文件的视频时长,包括导入maven依赖和代码案例,同时,也讨论了在运行过程中遇到的SLF4J加载问题,并给出了解决方案... 目录Java获取视频文件的视频时长1、导入maven依赖2、代码案例3、SLF4J: Failed to lo

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C