将视频嵌入到UIWebView中从应用程序的Documents文件夹加载的html文件中

Jan*_*mal 14 iphone movie uiwebview embedded-video ipad

我有一个名为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>
Run Code Online (Sandbox Code Playgroud)

使用以下代码(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];
Run Code Online (Sandbox Code Playgroud)

使用以下代码(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]];
Run Code Online (Sandbox Code Playgroud)

我在上面的代码中遗漏了什么导致我的代码无法正常工作?任何的想法 ?

我希望我的应用程序具有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];
Run Code Online (Sandbox Code Playgroud)

因为我必须在我的项目中实现这一点,没有其他办法可以帮助我.

Jan*_*mal 10

经过大量的挣扎和研发,我发现了

在版本之下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];
Run Code Online (Sandbox Code Playgroud)

仍然在Simulator 4.2它下面不起作用.而不是视频,它显示黑色部分.然而无法找到解决方案,Simulator 4.2但它在设备上工作,所以我猜代码绝对没问题.

将此作为答案发布,以便任何人做同样的事情可能会有用.