ios 视频播放器MPMoviePlayerController

这个东西和之前的音频播放差不多, 也是先需要导入系统框架MediaPlayer.framework 才能使用到MPMoviePlayerController 的文件中导入相应的头文件

初始化:这里就有些不一样了MPMoviePlayerController是可以通过远程url初始化的, 例如:

MPMoviePlayerController *moviePlayer = [ [ MPMoviePlayerController alloc]initWithContentURL:[NSURL urlWithString:@"URL"] ];

接下来是控制器样式设置:

moviePlayer.moviewControlMode = MPMovieControlModeHidden;

  

可以使用下列样式:
MPMovieControlModeDefault            显示播放/暂停、音量和时间控制
MPMovieControlModeVolumeOnly         只显示音量控制
MPMovieControlModeHidden             没有控制器

通常情况下, 我们一般都是自己来定义视频播放器, 所以大多数还是选择最后没有控制器的那个.

屏幕宽高比例:

moviePlayer.scallingMode = MPMovieScallingModeNone;

MPMovieScallingModeNone            不做任何缩放
MPMovieScallingModeAspectFit       适应屏幕大小,保持宽高比
MPMovieScallingModeAspectFill      适应屏幕大小,保持宽高比,可裁剪
MPMovieScallingModeFill            充满屏幕,不保持宽高比

[ moviePlayer play ];  // 开始播放
[ moviePlayer stop ];  // 停止播放

注册一个通知 你的程序可以配置电影播放器在何时候发送通知,包括结束加载内容、技术播放、改变宽高比等。电影播放器会将事件发送到 Cocoa 的通知中心,你可以对其进行配置,指定将这些事件转发到你的应用程序的一个对象。要接收这些通知,需要使用 NSNotificationCenter 类,为电影播放器添加一个观察者(observer):

NSNotificationCenter* notificationCenter = [NSNotificationCenter defaultCenter];
[ notificationCenter addObserver:self selector:@selector(moviePlayerPreloadFinish:) name:MPMoviePlayerContentPreloadDidFinishNotification object:moviePlayer ];
// 通知会发到你指定的委托类和目标方法。通知参数让你可以知道是哪个事件触发了委托方法:
-(void)moviePlayerPreloadDidFinish:(NSNotification*)notification{
    //添加你的处理代码
}

  

你会观察到以下通知:
MPMoviePlayerContentPreloadDidFinishNotification 
当电影播放器结束对内容的预加载后发出。因为内容可以在仅加载了一部分的情况下播放,所以这个通知可能在已经播放后才发出。
MPMoviePlayerScallingModeDidChangedNotification 
当用户改变了电影的缩放模式后发出。用户可以点触缩放图标,在全屏播放和窗口播放之间切换。
MPMoviePlayerPlaybackDidFinishNotification 
当电影播放完毕或者用户按下了Done按钮后发出。

这里有个小实例:自定义视频之用手势来控制视频进度和音量大小

#import <MediaPlayer/MediaPlayer.h>  

@interface KKBMoviePlayerController : MPMoviePlayerController<UIGestureRecognizerDelegate>  

@end

  

#import "KKBMoviePlayerController.h"
#import "AppDelegate.h"
@interface KKBMoviePlayerController(){
    BOOL _inFullScreen;
    UIPanGestureRecognizer *_pan;  

    CGPoint _lastPoint;
    BOOL _startChange;
    BOOL _changeVolume;
}  

@end  

@implementation KKBMoviePlayerController  

- (id)initWithContentURL:(NSURL *)url{
    self =[super initWithContentURL:url];
    if (self) {  

        self.view.backgroundColor = [UIColor clearColor];
        self.initialPlaybackTime = -1;
        self.endPlaybackTime = -1;
        [self prepareToPlay];
        [self play];  

        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(enterFullScreen:)
                                                     name:MPMoviePlayerWillEnterFullscreenNotification
                                                   object:nil];  

        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(leaveFullScreen:)
                                                     name:MPMoviePlayerWillExitFullscreenNotification
                                                   object:nil];
    }
    return self;
}  

#pragma mark - full screen controller  

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    return YES;
}  

- (void)handlePan:(UIPanGestureRecognizer*)rec{
    if (_inFullScreen) {
        if (rec.state == UIGestureRecognizerStateBegan) {
            _lastPoint = [rec locationInView:self.view];
        } else if (rec.state == UIGestureRecognizerStateChanged) {
            CGPoint nowPoint = [rec locationInView:self.view];  

            if (_startChange == NO) {
                if (fabs(nowPoint.y - _lastPoint.y) > fabs(nowPoint.x - _lastPoint.x)) {
                    _changeVolume = NO;
                } else {
                    _changeVolume = YES;
                }
                _startChange = YES;
            } else {
                if (_changeVolume) {
                    //change volume
                    float volume = [[MPMusicPlayerController applicationMusicPlayer] volume];
                    float newVolume = volume;  

                    if (nowPoint.x == _lastPoint.x) {  

                    } else {
                        if (nowPoint.x < _lastPoint.x) {
                            newVolume += 0.01;
                        } else {
                            newVolume -= 0.01;
                        }
                    }  

                    if (newVolume < 0) {
                        newVolume = 0;
                    } else if (newVolume > 1.0) {
                        newVolume = 1.0;
                    }  

                    [[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];
                } else {
                    //change playback state
                    if (self.playbackState != MPMoviePlaybackStateSeekingForward &&
                        self.playbackState != MPMoviePlaybackStateSeekingBackward) {
                        if (nowPoint.y == _lastPoint.y) {  

                        } else {
                            if (nowPoint.y < _lastPoint.y) {
                                [self beginSeekingForward];
                            } else {
                                [self beginSeekingBackward];
                            }
                        }
                        _lastPoint = nowPoint;
                    }
                }  

            }  

        } else if (rec.state == UIGestureRecognizerStateCancelled ||
                   rec.state == UIGestureRecognizerStateEnded ||
                   rec.state == UIGestureRecognizerStateFailed){
            _startChange = NO;
            [self endSeeking];
        }
    }
}  

- (void)enterFullScreen:(NSNotification*)notification{
    _inFullScreen = YES;  

    _pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    _pan.delegate = self;  

    [[[[UIApplication sharedApplication] windows] objectAtIndex:0] addGestureRecognizer:_pan];
}  

- (void)leaveFullScreen:(NSNotification*)notification{
    _inFullScreen = NO;
    [[[[UIApplication sharedApplication] windows] objectAtIndex:0] removeGestureRecognizer:_pan];
}  

@end

  

原文: http://blog.csdn.net/u013561113/article/details/21457903

时间: 2024-10-09 21:45:09

ios 视频播放器MPMoviePlayerController的相关文章

IOS视频播放器VKVideoPlayer

VKVideoPlayer 是一个在 Viki iOS 应用里使用的视频播放器. 主要特性: 完全可定制的 UI 任何大小乃至全屏 支持字幕显示 可定制的字幕显示风格 支持 HTTP 直播流 支持屏幕方向调整 Bulletproof event machine to easily integrate features like video ads Lots of delegate callbacks for your own logging requirements VKVideoPlayer是

使用苹果原生视频播放器MPMoviePlayerController播放来自优酷等网页的视频

没有自己的流媒体服务器,又想在app中用原生视频播放器MPMoviePlayerController将视频插入到界面,在界面可以直接播放,或者全屏播放,可以通过以下方法实现 先创建原生播放器 _moviePlayer = [[MPMoviePlayerController alloc] init]; _moviePlayer.controlStyle = MPMovieControlStyleEmbedded; _moviePlayer.shouldAutoplay = NO; _moviePl

cocos2dx ios 视频播放器 2.x到3.x版本都可以使用

在cocos2dx版本中使用视频播放器的话 需要以下步骤 1.在写一个.mm的文件 我这里的mm叫IOSPlayVedio这个 头文件定义这个 static void playOnLineVideo4IOS(char *pszVideoUrl); .mm里面写 void IOSPlayVedio::playOnLineVideo4IOS(char *pszVideoUrl) { NSString * strVideo = [NSString stringWithUTF8String:pszVid

ios系统视频播放器MPMoviePlayerController应用遇到的坑

最近在做视频播放时应用系统MPMoviePlayerController播放器播放视频,发现点击快进快退会出现黑屏现象,并且点击完成按钮也不会返回,代码以及界面如下所示: NSURL *url=[self getNetworkUrl]; _moviePlayer=[[MPMoviePlayerController alloc]initWithContentURL:url]; _moviePlayer.view.frame=CGRectMake(0, 0, kScreenWidth, kScree

iOS 视频播放器单例类

#import <Foundation/Foundation.h> #import <MediaPlayer/MediaPlayer.h> @interface XHMoviePlayer : MPMoviePlayerController -(void)playWithUrl:(NSString *)url; -(instancetype)init; +(instancetype)defaultMoviePlayer; -(void)playWithFilePath:(NSStr

iOS: ios视频播放(MPMediaPlayerController,AVPlayer,AVPlayerViewcontroller、ffmpeg-AVPlayer)

介绍: 和音频播放一样,ios也提供个很多的API.如mediaPlayer.framework下的MPMediaPlayerController.AVFounditon.framework下的AVPlayer和AVKit下的AVPlayerViewcontroller.MPMovieplayerController已经在ios9.0中被废弃了,用来替代的是AVPlayerViewcontroller.尽管如此,但还是说一下比较熟悉的MPMovieplayerController. 1.MPMo

Android进阶:自定义视频播放器开发(下)

上一篇文章我们主要讲了视频播放器开发之前需要准备的一个知识,TextureView,用于对图像流的处理.这篇文章开始构建一个基础的视频播放器. 一.准备工作 在之前的文章已经说过了,播放器也是一个view,我们要在这个view上播放视频流.所以我们要自定义一个简单的viewgroup,比如继承FrameLayout.还出就是布局简单,其他控件可以往上面添加.大家见过的视频播放器的控制器都是放在视频的上方的.这样就是用FrameLayout布局是最好的. class SmallVideoPlaye

Android进阶:十一、视频播放器初体验

上一篇文章我们主要讲了视频播放器开发之前需要准备的一直个知识,TextureView,用于对图像流的处理.这篇文章开始构建一个基础的视频播放器. 一.准备工作 在之前的文章已经说过了,播放器也是一个view,我们要在这个view上播放视频流.所以我们要自定义一个简单的viewgroup,比如继承FrameLayout.还出就是布局简单,其他控件可以往上面添加.大家见过的视频播放器的控制器都是放在视频的上方的.这样就是用FrameLayout布局是最好的. class SmallVideoPlay

ios媒体视频播放器应用项目

源码WSY_XMHelper,基于ReactiveCocoa和MVVM架构的流媒体视频播放器应用,此项目为一个完整项目.基于MVVM架构, 集成流媒体视频下载及播放,支持下拉刷新,上拉加载等.如果你想学习MVVM,此项目为一个很好的例子. 项目源码下载:http://code.662p.com/view/9891.html<ignore_js_op> <ignore_js_op> 详细说明:http://ios.662p.com/thread-2344-1-1.html