19

我有一个客户端,他拥有Flash格式的网络视频内容。我的任务是帮助他们在iPhone应用程序中显示视频。MPMoviePlayerController的优点和缺点与启动UIWebView以流式传输电影

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

然后,我将不得不帮助客户弄清楚如何或在何处承载这些文件。如果这很棘手,我认为他们可以在YouTube上托管。

不过,我最关心的是采用哪种方法来流式传输视频。 MPMoviePlayerController与使用流的URL启动UIWebView相比有什么优点和缺点?有什么区别吗?其中一个或多或少是原谅的?他们中的一个是更好的用户体验吗?我可能会遇到任何陷阱?

我假设在iPhone上播放视频相当简单。尝试两种方法并让其中一种可以作为后备方案是合理的,否则这会浪费时间?我试图安排这一点,所以我很乐意听到任何做过这些的人的真实世界的经验。

回答

9

UIWebView实际上无法播放视频。使用UIWebview导航到Youtube页面将简单地启动iPhone的Youtube应用程序。在播放视频后,以特定方式执行此操作会将控制权返回到您的应用程序。看到这里:http://iphoneincubator.com/blog/tag/uiwebview

我会推荐使用MPMoviePlayer控制器,只要你只做简单的流。下面是一些示例代码,您开始:

NSString *url = @"http://www.example.com/path/to/movie.mp4"; 
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] 
             initWithContentURL:[NSURL URLWithString:url]]; 
[moviePlayer play]; 
+0

好的。所以我真正的选择是在YouTube应用程序和MPMoviePlayerController之间。谢谢 - 后者的选择确实很容易。我可能会继续尝试两种方式。 – Nosredna 2009-06-10 16:41:05

+0

丹 - 你能编辑你的答案,以便两条代码行都被格式化为“代码”。至少在Firefox 3.5中,我将NSString行看作格式化代码,但MPMoviePlayerController行不是。只是一个建议,使它看起来更好的下一个人。 – 2009-07-08 19:28:19

25

编辑:我在这个答案原来的例子有CGRectZero的帧而被初始化的网页流量。这适用于iOS 3.2。从iOS 4开始,webview必须具有非零框架,否则视频将无法播放。我在下面编辑了我的示例以反映此更改。


这里接受的答案并不准确。实际上,您可以使用UIWebView来流式传输视频,并且在某些方面它比MPMoviePlayerController更好。如果您通过loadRequest:告诉UIWebView请求一个视频文件(例如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];