iOS中 MPMoviePlayer 实现视频音频播放

简介:

iOS播放视频文件一般使用 MPMoviePlayerViewController 和 MPMoviePlayerController。前者是一个view,后者是个Controller。区别就是 MPMoviePlayerViewController里面包含了一个MPMoviePlayerController

 

 注意:MPMoviePlayerViewController 必须   presentMoviePlayerViewControllerAnimated方式添加,否则Done按钮是不会响应通知MPMoviePlayerPlaybackDidFinishNotification事件的;

 

 首先要包含  #import  <MediaPlayer/MediaPlayer.h>头文件和MediaPlayer.framework。

 

 

 MPMovieControlModeDefault             显示播放 / 暂停、音量和时间控制

 MPMovieControlModeVolumeOnly          只显示音量控制

 MPMovieControlModeHidden              没有控制器

 

 

 

 你可以使用下列宽高比值:

 MPMovieScallingModeNone             不做任何缩放

 MPMovieScallingModeAspectFit        适应屏幕大小,保持宽高比

 MPMovieScallingModeAspectFill       适应屏幕大小,保持宽高比,可裁剪

 MPMovieScallingModeFill             充满屏幕,不保持宽高比

 

 

 //通知

 MPMoviePlayerContentPreloadDidFinishNotification  当电影播放器结束对内容的预加载后发出。因为内容可以在仅加载了一部分的情况下播放,所以这个通知可能在已经播放后才发出。

 

 MPMoviePlayerScallingModeDidChangedNotification  当用户改变了电影的缩放模式后发出。用户可以点触缩放图标,在全屏播放和窗口播放之间切换。

 

 MPMoviePlayerPlaybackDidFinishNotification  当电影播放完毕或者用户按下了 Done 按钮后发出

===============================================================================

需要引进的框架:MediaPlayer.framework

第一步:引进框架设置属性

[objc]  view plain  copy
  1. #import "RootViewController.h"  
  2. #import <MediaPlayer/MediaPlayer.h>  
  3.   
  4.   
  5. @interface RootViewController ()  
  6.   
  7. @property (nonatomicstrongMPMoviePlayerController *moviePlayer;  
  8.   
  9. @end  
  10.   
  11. @implementation RootViewController  

调用:

[objc]  view plain  copy
  1. - (void)viewDidLoad {  
  2.     [super viewDidLoad];  
  3.       
  4.       
  5.     // 5.调用播放器  
  6.       
  7.     //播放网络视频  
  8.     NSString *urlString = @"http://video.szzhangchu.com/qiaokeliruanxinbudingA.mp4";  
  9.     //播放本地视图,找到文件的路径  
  10.       
  11. //    NSString *urlStr = [[NSBundle mainBundle] pathForResource:@"优酷网-唐豆豆微信摇一摇惨被骗.mp4" ofType:nil];  
  12.       
  13.     [self createMPPlayerController:urlString];  
  14.       
  15. }  

第二步:创建播放器

[objc]  view plain  copy
  1. - (void)createMPPlayerController:(NSString *)string  
  2. {  
  3.    // 1.初始化播放器  
  4.       
  5.     //准备网址  
  6. //     NSURL *urlString = [NSURL fileURLWithPath:fileNamePath];  
  7.      NSURL *urlString = [NSURL URLWithString:string];  
  8.       
  9.     //初始化播放器  
  10.    self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:urlString];  
  11.      
  12.     //准备播放  
  13. //    [_moviePlayer prepareToPlay];  
  14.     //设置moviePlayer的frame  
  15.     _moviePlayer.view.frame = self.view.frame;  
  16.     //添加到父视图  
  17.     [self.view addSubview:_moviePlayer.view];  
  18.       
  19.       
  20.     // 2.配置属性  
  21.   
  22.     //是否自动播放,默认是NO  
  23.     _moviePlayer.shouldAutoplay = YES;  
  24.     //设置播放器的样式  
  25.     [_moviePlayer setControlStyle:(MPMovieControlStyleFullscreen)];  
  26.     //开始播放  
  27.     [_moviePlayer play];  
  28.       
  29.       
  30.     // 3.注册通知  
  31.     //注册通知  
  32.     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinshed:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];  
  33.       
  34.       
  35. }  

第三步:实现通知方法

[objc]  view plain  copy
  1. // 4.实现通知中的方法  
  2. - (void)movieFinshed:(NSNotification *)sender  
  3. {  
  4.     //取出通知中心的moviePlayer  
  5.     MPMoviePlayerController *movie = [sender object];  
  6.       
  7.     //移除观察者  
  8.     [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:nil];  
  9.     //将movie移出父视图  
  10.     [movie.view removeFromSuperview];  
  11.       
  12. }  

最终效果:



关注博主微博每日更新技术:http://weibo.com/hanjunqiang

原文地址:http://blog.csdn.net/qq_31810357/article/details/49922749
相关文章
|
2月前
|
编解码 Linux 开发工具
iOS平台如何实现RTSP|RTMP播放端录像?
我们在做RTSP、RTMP直播播放器的时候,有个比较重要的功能,就是拉流端实时录像,包括设置单个录像文件大小、文件前缀、audio转AAC、只录制视频或只录制音频、开始录像、停止录像事件状态回调等。
|
2月前
|
图形学 Android开发 iOS开发
穿越数字洪流,揭秘Unity3d中的视频魔法!Windows、Android和iOS如何征服RTSP与RTMP的终极指南!
【8月更文挑战第15天】在数字媒体的海洋中,实时视频流是连接世界的桥梁。对于那些渴望在Unity3d中搭建这座桥梁的开发者来说,本文将揭示如何在Windows、Android和iOS平台上征服RTSP与RTMP的秘密。我们将深入探讨这两种协议的特性,以及在不同平台上实现流畅播放的技巧。无论你是追求稳定性的RTSP拥趸,还是低延迟的RTMP忠实粉丝,这里都有你需要的答案。让我们一起穿越数字洪流,探索Unity3d中视频魔法的世界吧!
40 2
|
4月前
|
iOS开发
技术好文:xcode动态图,ios实现动态图,iosgif,暂停和继续播放
技术好文:xcode动态图,ios实现动态图,iosgif,暂停和继续播放
38 1
|
5月前
|
Android开发 iOS开发
ios后台播放声音的三种实现方式
ios后台播放声音的三种实现方式
246 1
|
编解码 开发工具 Android开发
安卓端/iOS端如何播放4K分辨率的RTMP/RTSP流
4K分辨率即4096×2160的像素分辨率,它是2K投影机和高清电视分辨率的4倍,属于超高清分辨率。在此分辨率下,观众将可以看清画面中的每一个细节,每一个特写。影院如果采用惊人的4096×2160像素,无论在影院的哪个位置,观众都可以清楚的看到画面的每一个细节,影片色彩鲜艳、文字清晰锐丽,再配合超真实音效,这种感觉真的是一种难以言传的享受。
312 0
安卓端/iOS端如何播放4K分辨率的RTMP/RTSP流
|
11月前
|
视频直播 API iOS开发
微信团队分享:详解iOS版微信视频号直播中因帧率异常导致的功耗问题
功耗优化一直是 app 性能优化中让人头疼的问题,尤其是在直播这种用户观看时长特别久的场景。怎样能在不影响主体验的前提下,进一步优化微信iOS端视频号直播的功耗占用,本文给出了一个不太一样的答案。
141 0
|
开发工具 图形学 Android开发
Windows/Android/IOS平台如何在Unity3d播放RTSP/RTMP流
如果基于Unity3d完全重新开发一个播放器,代价大,周期长,不适合快速出产品,最好的方式就是集成现有Native平台上成熟稳定播放器.
141 1
|
JavaScript Android开发 iOS开发
layui框架实战案例(6):上传图片和视频自动调用IOS或安卓系统的摄像头功能
layui框架实战案例(6):上传图片和视频自动调用IOS或安卓系统的摄像头功能
458 0
|
iOS开发
iOS MachineLearning 系列(6)—— 视频中的物体轨迹分析
轨迹分析是比物体追踪更上层的一种应用。Vision框架中提供了检测视频中多个物体的运动轨迹等能力,在健身,体育类应用中非常有用。
139 0
|
算法 API vr&ar
iOS MachineLearning 系列(5)—— 视频中的物体运动追踪
本系列的前面几篇文章中,我们将静态图片分析相关的API做了详尽的介绍。在Vision框架中,还提供了视频中物体追踪的能力。 仔细想来,其实视频的分析和静态图片的分析本质上并无太大的区别,我们可以将视频拆解成图片帧,之后再对图片进行静态分析。将所有图片帧的分析结果反馈到视频上,即实现了对视频的分析能力。 视频中物体运动的跟踪常在一些AR游戏中应用,这些现实增强类的应用常常需要实时追踪显示中的物体。
189 0