我有一个名为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功能,该功能允许用户将视频放在文档文件夹中,这样我的视频文件就只能在文档文件夹中。
Bounty更新 我发现了如下内容。但是它仍适用于较小的视频(大约小于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];
由于我必须在我的项目中实现这一点,因此没有其他办法可以帮助我。
答案 0 :(得分:10)
经过大量的挣扎和R&amp; D后我发现了,
在Simulator 3.2
和device with iOS 4.3.3
版本下,如果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];
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];
仍然在Simulator 4.2
下,它不起作用。而不是视频,它显示黑色部分。然而无法找到Simulator 4.2
的解决方案,但它适用于设备,所以我猜代码绝对没问题。
将此作为答案发布,以便任何做同样事情的人都可能有用。
答案 1 :(得分:1)
使用HTML5?
&LT; video src =“myvideoname.mov”&gt;
如果一切都在一个组而不是一个文件夹中,它应该找到另一个视频并且工作。
答案 2 :(得分:0)
为什么使用HTML文件播放视频而不使用MPMoviePlayerViewController?
NSURL *assetURL = [NSURL fileURLWithPath:<#path_to_movie#>];
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:assetURL];
if ([moviePlayer respondsToSelector:@selector(setFullscreen:animated:)]) {
// Use the new 3.2 style API
moviePlayer.shouldAutoplay = YES;
[_delegate.view addSubview:moviePlayer.view];
[moviePlayer setFullscreen:YES animated:YES];
} else {
// Use the old 2.0 style API
[moviePlayer play];
}
这不适合你吗?
答案 3 :(得分:0)
在UIWebView
中显示本地内容的一个技巧是使用替换缓存。 Matt Gallagher在他的博客上有一些sample code。
基本上,您为电影指定了一个网址,例如“http://www.example.com/movie.mp4”,您可以在HTML中使用该网址来引用电影。加载影片时,替换缓存不是转到URL,而是在本地获取数据。
AFAIK适用于所有iOS版本。
答案 4 :(得分:0)
我有类似的问题。名为 assets 的Documents目录的子文件夹中名为 index.html 的html文件。
文档/资产/ index.html中
<html>
<head>
<script src="bundle.js"></script>
<link href="styles.css" rel="stylesheet" type="text/css"></link>
<base href="https://wikipedia.org">
</head>
<body>
...
</body>
</html>
请注意,它引用了assets目录中的其他文件。即, bundle.js 和 styles.css 。
接受答案的代码示例的以下变体允许UIWebView加载index.html并使其引用的js和css文件仍然有效:
NSArray *documentsPath = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
NSString *assetsPath = [[documentsPath firstObject] stringByAppendingPathComponent:@"assets"];
NSString *indexHTMLFilePath = [assetsPath stringByAppendingPathComponent:@"index.html"];
NSString *encodedAssetsPath = [assetsPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *baseURL = [NSURL URLWithString:[NSString stringWithFormat:@"file:///%@/", encodedAssetsPath]];
NSData *indexHTMLFileData = [[NSFileManager defaultManager] contentsAtPath: indexHTMLFilePath];
[self.webView loadData:indexHTMLFileData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:baseURL];