MPMoviePlayerController和启动UIWebView以流式传输电影的优缺点

19

我有一个客户在网上拥有Flash格式的视频内容。我的任务是帮助他们在iPhone应用程序中展示这些视频。

我意识到第一步是将这些视频转换为适合iPhone的Quicktime格式。

然后,我将不得不帮助客户找出如何或在哪里托管这些文件。如果那很棘手,我认为它们可以托管在YouTube上。

然而,我最关心的是采用哪种方法来流式传输视频。使用MPMoviePlayerController和使用URL进行UIWebView启动的流式传输有什么优缺点?它们之间有什么区别吗?其中一个更容易原谅一些,还是一个更好的用户体验?我可能会遇到什么问题?

我假设在iPhone上播放视频非常容易。尝试两种方法并备用,这个想法可行吗?还是这样做浪费时间?我正在尝试安排一下时间表,所以我很乐意听取任何已经做过这件事的人的实际经验。

2个回答

25

编辑:本答案中的原始示例使用了CGRectZero来初始化webview。这在iOS 3.2之前是有效的。从iOS 4开始,webview必须具有非零框架,否则视频将无法播放。我已编辑下面的示例以反映此更改。


这里的被接受的答案并不准确。实际上,您可以使用UIWebView来流式传输视频,并且在某些方面它比MPMoviePlayerController更好。如果你告诉UIWebView通过loadRequest:请求一个视频文件(例如mp4),它将打开一个新窗口并在你的应用程序中流式传输视频。与MPMoviePlayerController不同,由UIWebView创建的视频窗口可以旋转到横向或纵向方向。当视频结束时,用户可以关闭此窗口并返回到您的应用程序。


编辑2:由于现在可以使用MPMoviePlayerViewController实现旋转的视频播放器,因此我无法想出使用UIWebView来使用本答案中描述的技术进行视频的理由。


提示:由于UIWebView会创建自己的窗口来播放视频,因此您甚至不需要将UIWebView添加到视图层次结构中。您只需创建UIWebView对象并调用loadRequest:即可播放视频,而无需将对象传递给addSubview:

self.webView = [[[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
NSURL *url = [NSURL URLWithString:@"http://www.jonathancoulton.com/music/thingaweek/CodeMonkey.mp3"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];

实际上,我确实有语法错误。我的UIWebView初始化行中括号不匹配。在编译之前应该会失败。现在,我已经编辑了我的示例,并直接粘贴了一段代码,这段代码来自一个我已经确认在iOS 4上工作的样本,当它构建为3.1.3时。 - cduhn
我的视频仍然显示路径(null),但你的mp3可以播放。这可能是因为我这边使用了不再支持的编码方式。尽管我已经尝试了几种H.264编码,你能否检查一下如果你尝试加载一个视频会发生什么?非常感谢。 - scud
你说得对,谢谢!我一定是在编码方面遇到了很大的问题。我已经尝试在Windows7中使用XMediaRecode和iPhone预设以及Quicktime X和iTunes导出iPhone格式。 - scud
好的,谢谢你的帮助。你也可以在我之前发起悬赏的问题上回答,并且我会接受你的回答。
  • 新问题在这里:http://stackoverflow.com/questions/3102583/iphone-uiwebview-safari-app-ios-4-video-movie-server-issue
- scud
我希望我能为Code Monkey给你额外的赞,但我只能在这里做个记录:巨大的成功。 - theTRON
显示剩余6条评论

9
UIWebView无法实际播放视频。使用UIWebView导航到Youtube页面只会启动iPhone的Youtube应用程序。以某种方式执行此操作将在视频播放后将控制权返回到您的应用程序。请参见此处:http://iphoneincubator.com/blog/tag/uiwebview 我建议仅进行简单流式传输时使用MPMoviePlayer Controller。以下是一些示例代码,可帮助您入门:
NSString *url = @"http://www.example.com/path/to/movie.mp4";
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc]
                                        initWithContentURL:[NSURL URLWithString:url]];
[moviePlayer play];

好的。那么我的真正选择是YouTube应用程序和MPMoviePlayerController之间。谢谢 - 后者选择看起来非常容易。我可能会继续尝试两种方法。 - Nosredna
丹 - 你能否编辑你的答案,使得这两行代码都被格式化为“代码”。至少对于我在Firefox 3.5上看到的是NSString行被格式化为代码,但MPMoviePlayerController行没有。这只是一个建议,让它看起来更好看一些。 - Chris Markle

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