ios网络学习------9 播放网络视频

本文介绍如何使用iOS的MPMoviePlayerController进行视频播放,包括播放器的初始化、播放控制及监听播放状态等关键步骤,并展示了如何实现视频截图功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IOS提供了叫做MPMoviePlayerController  MPMoviePlayerViewController两个类,可以轻松用来实现视频播放。MPMoviePlayerViewController只能全屏播放视频。

  1. #import "MainViewController.h"  
  2. #import <MediaPlayer/MediaPlayer.h>  
  3.   
  4. @interface MainViewController ()  
  5. //视频播放器  
  6. @property (strongnonatomicMPMoviePlayerController *player;  
  7. @property (strongnonatomicUIImageView *imageView;  
  8. @end  
  9.   
  10. @implementation MainViewController  
  11.   
  12. - (void)viewDidLoad  
  13. {  
  14.     [super viewDidLoad];  
  15.     //实例化视频播放器  
  16.     NSURL *url = [[NSBundle mainBundle]URLForResource:@"promo_full" withExtension:@"mp4"];  
  17.       
  18.     //视频播放是流媒体的播放模式,所谓流媒体就是把视频数据像流水一样,变加载,变播放。  
  19. //    //提示:如果url中包含中文,需要添加百分号。  
  20. //    NSString *urlString = @"http:www.xxx.com/video/xxx.mp4";  
  21. //    NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];  
  22.       
  23.     self.player = [[MPMoviePlayerController alloc]initWithContentURL:url];  
  24.     //1设置播放器的大小  
  25.     [self.player.view setFrame:CGRectMake(00320180)]; //16:9是主流媒体的样式  
  26.     //2将播放器视图添加到根视图  
  27.     [self.view addSubview:self.player.view];  
  28.       
  29.     //4播放  
  30.     [self.player play];  
  31.     //[self.player stop];  
  32.     //通过通知中心,以观察者模式监听视频播放状态  
  33.     //1 监听播放状态  
  34.     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(stateChange) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];  
  35.     //2 监听播放完成  
  36.     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(finishedPlay) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];  
  37.     //3视频截图  
  38.     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(caputerImage:) name:MPMoviePlayerThumbnailImageRequestDidFinishNotification object:nil];  
  39.     //3视频截图  
  40.     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(caputerImage:) name:MPMoviePlayerThumbnailImageRequestDidFinishNotification object:nil];  
  41.       
  42.     //4退出全屏通知  
  43.     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(exitFullScreen) name:MPMoviePlayerDidExitFullscreenNotification object:nil];  
  44.       
  45.     //异步视频截图,可以在attimes指定一个或者多个时间。  
  46.     [self.player requestThumbnailImagesAtTimes:@[@10.0f@20.0f] timeOption:MPMovieTimeOptionNearestKeyFrame];  
  47.       
  48.     UIImageView *thumbnailImageView = [[UIImageView alloc]initWithFrame:CGRectMake(8020016090)];  
  49.     self.imageView = thumbnailImageView;  
  50.     [self.view addSubview:thumbnailImageView];  
  51. }  
  52.   
  53. #pragma mark 退出全屏  
  54. - (void)exitFullScreen  
  55. {  
  56.     NSLog(@"退出全屏");  
  57. }  
  58.   
  59. #pragma mark -播放器事件监听  
  60. #pragma mark 视频截图 这个方法是异步方法  
  61. - (void)caputerImage:(NSNotification *)notification  
  62. {  
  63.     NSLog(@"截图 %@", notification);  
  64.     UIImage *image = notification.userInfo[@"MPMoviePlayerThumbnailImageKey"];  
  65.     [self.imageView setImage:image];  
  66. }  
  67.   
  68. #pragma mark 播放器事件监听  
  69. #pragma mark 播放完成  
  70. - (void)finishedPlay  
  71. {  
  72.     NSLog(@"播放完成");  
  73. }  
  74.   
  75. #pragma mark 播放器视频的监听  
  76. #pragma mark 播放状态变化  
  77. /* 
  78.  MPMoviePlaybackStateStopped,  //停止 
  79.  MPMoviePlaybackStatePlaying,  //播放 
  80.  MPMoviePlaybackStatePaused,   //暂停 
  81.  MPMoviePlaybackStateInterrupted,  //中断 
  82.  MPMoviePlaybackStateSeekingForward, //快进 
  83.  MPMoviePlaybackStateSeekingBackward  //快退 
  84.  */  
  85. - (void)stateChange  
  86. {  
  87.     switch (self.player.playbackState) {  
  88.         case MPMoviePlaybackStatePaused:  
  89.             NSLog(@"暂停");  
  90.             break;  
  91.         case MPMoviePlaybackStatePlaying:  
  92.             //设置全屏播放  
  93.             [self.player setFullscreen:YES animated:YES];  
  94.             NSLog(@"播放");  
  95.             break;  
  96.         case MPMoviePlaybackStateStopped:  
  97.             //注意:正常播放完成,是不会触发MPMoviePlaybackStateStopped事件的。  
  98.             //调用[self.player stop];方法可以触发此事件。  
  99.             NSLog(@"停止");  
  100.             break;  
  101.         default:  
  102.             break;  
  103.     }  
  104. }  
  105.   
  106. @end 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值