【发布时间】:2011-07-20 09:34:31
【问题描述】:
我有一个名为 videoplay.html 的 html 文件,内容如下
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
</head>
<body>
<p>
This is demo html file for playing movie file embedded.
</p>
<p>
<video controls>
<source src="myvideoname.mov">
</video>
</p>
</body>
</html>
同时使用以下代码(Loading from application bundle)它加载html内容并显示电影并能够播放电影文件。
NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
NSString *path = [[NSBundle mainBundle] pathForResource:@"videoplay" ofType:@"html"];
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
[self.webView loadHTMLString:content baseURL:baseURL];
使用以下代码(Loading from Document folder of application)它加载html内容但显示黑色部分而不是电影文件。
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir =[documentPaths objectAtIndex:0]
NSString *pathOfHTmlFile = [documentsDir stringByAppendingPathComponent:@"videoplay.html"];
NSString *content = [NSString stringWithContentsOfFile:pathOfHTmlFile encoding:NSUTF8StringEncoding error:nil];
[self.webView loadHTMLString:content baseURL:[NSURL URLWithString:documentsDir]];
我在上面的代码中遗漏了什么导致我的代码无法工作?有什么想法吗?
我希望我的应用程序具有 UIFileSharingEnabled 功能,该功能使用户能够将视频放在文档文件夹本身中,这样我的视频文件将仅在文档文件夹中。
赏金更新 我发现如下。但它仍然只适用于较小的视频(大约小于 50 MB),如果视频较大(大约大于 100 MB)它不起作用。
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir =[documentPaths objectAtIndex:0];
NSString *pathOfHTmlFile = [documentsDir stringByAppendingPathComponent:@"videoplay.html"];
NSString *content = [NSString stringWithContentsOfFile:pathOfHTmlFile encoding:NSUTF8StringEncoding error:nil];
documentsDir = [documentsDir stringByReplacingOccurrencesOfString:@"/" withString:@"//"];
documentsDir = [documentsDir stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
NSURL *baseURL = [NSURL URLWithString:[NSString stringWithFormat:@"file:/%@//", documentsDir]];
NSLog(@"Baseurl--->%@",baseURL);
[self.webView loadHTMLString:content baseURL:baseURL];
因为我必须在我的项目中实现这一点,所以我没有其他方法可以做。
【问题讨论】:
-
只是一个疯狂的猜测,但由于您的 HTML 文件包含视频文件的相对路径,它将从 HTML 文件所在的同一目录加载它。第一个版本从应用程序包,来自文档文件夹的第二个。您确定视频文件存在于文档文件夹中吗?您可能想在模拟器中检查它并在您的 Mac 上浏览文件系统。
-
@Bjorn 是的,我已手动将视频放入文档文件夹。我有 2 个视频,一个较小,一个较大。较小的会加载,但较大的则不会。
-
@Bjorn 它只是在那里显示黑色部分。
-
在尝试播放较大的视频时是否收到内存警告?
-
@Bjorn 除了加载该视频外,没有任何其他问题。此控制器仅将 html 文件从文档文件夹加载到 webview 中。用户可以观看视频。目的就像从本地观看视频,而不是从没有互联网的实时站点加载,并且启用了文件共享,因此用户可以在网站上有新视频时替换视频。谢谢你的时间。任何猜测为什么会发生这种情况?
标签: iphone ipad uiwebview movie embedded-video