如何在iOS中使用MPMoviePlayerController播放视频流

16

我试图通过按下按钮在iPhone上播放来自互联网的视频流。我使用了很多代码示例,但没有任何效果。使用这段代码时,它打开一个黑色视图,没有任何视频流或控制器。(视频流本身可以工作。)

NSURL *url = [NSURL URLWithString:@"http://MyStreamURL.com"];
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(moviePlayBackDidFinish:)
                                             name:MPMoviePlayerPlaybackDidFinishNotification
                                           object:moviePlayer];

moviePlayer.controlStyle = MPMovieControlStyleDefault;
moviePlayer.shouldAutoplay = YES;
[self.view addSubview:moviePlayer.view];
[moviePlayer setFullscreen:YES animated:YES];
4个回答

27

不需要创建一个MPMoviePlayerController并将其添加到视图中,可能更简单的方法是创建一个MPMoviePlayerViewController并以模态方式呈现该视图控制器(因为您试图全屏显示视频)。然后,MPMoviePlayerViewController可以为您管理视频的呈现。

MPMoviePlayerViewController *mpvc = [[MPMoviePlayerViewController alloc] initWithContentURL:url];

[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(moviePlaybackDidFinish:)
                                         name:MPMoviePlayerPlaybackDidFinishNotification
                                       object:nil];    

mpvc.moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;

[self presentMoviePlayerViewControllerAnimated:mpvc];
[mpvc release];

在您的moviePlayBackDidFinish代理方法中,您可以关闭模态视图控制器。


2
小修正一下,您应该使用 presentMoviePlayerViewControllerAnimated 而不是 presentModalViewController。这将产生适当的动画效果,符合用户对电影播放器的期望。 - Till
谢谢@Till,我不知道这一点。我已经编辑了我的代码示例以反映这个变化。 - jonkroll
5
为什么使用MPMoviePlayerController的上述方法不起作用? - Alper
@alper,这是因为moviePlayer没有被保留。至少在我的项目中是这样的。 - Yingpei Zeng

2
需要提到电影来源类型为流媒体。
moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;

1
在“链接库”部分添加AVFoundation框架
在您的.h文件中添加:
#import <MediaPlayer/MediaPlayer.h>
@interface video_liveViewController : UIViewController<MPMediaPickerControllerDelegate,MPMediaPlayback>

在你的 .m 文件中。
NSURL *movieURL = [NSURL URLWithString:@"http://172.31.17.252:1935/live/myStream/playlist.m3u8"];
movieController = [[MPMoviePlayerViewController alloc] initWithContentURL:movieURL];
[self presentMoviePlayerViewControllerAnimated:movieController];
[movieController.moviePlayer play];

-1
只需将 "MPMovieSourceTypeStreaming" 添加到 "moviesourcetype" 中即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接