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

相关文章

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

springboot 加载本地jar到maven的实现方法

《springboot加载本地jar到maven的实现方法》如何在SpringBoot项目中加载本地jar到Maven本地仓库,使用Maven的install-file目标来实现,本文结合实例代码给... 在Spring Boothttp://www.chinasem.cn项目中,如果你想要加载一个本地的ja

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS