19

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

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

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

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

我假设在 iPhone 上播放视频非常容易。两者都尝试并有一个可用作为后备是否合理,还是会浪费时间?我正在尝试安排一下,所以我很想听听任何做过这件事的人的真实经历。

4

2 回答 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];
于 2009-10-15T17:28:05.257 回答
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];
于 2009-06-10T16:35:10.170 回答