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

相关文章

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

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

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序