14

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機能を備えたアプリケーションが必要です。これにより、ユーザーはビデオをドキュメントフォルダー自体に配置できるため、ビデオファイルはドキュメントフォルダーのみに配置されます。

バウンティのアップデート 私は次のようなものを見つけました。ただし、それでも、ビデオが大きい(約100 MBを超える)場合は、小さいビデオ(約50 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];

これを自分のプロジェクトに実装する必要があるので、他に方法はありません。

4

5 に答える 5

10

たくさんの苦労と研究開発の後で、私はそれを見つけました、

バージョンでは、次のコードを使用Simulator 3.2device 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が、それはデバイス上で動作するので、コードは絶対に問題ないと思います。

これを回答として投稿すると、同じことをしている人が役立つ場合があります。

于 2011-08-06T04:22:03.583 に答える
1

HTML5を使用しますか?

<video src = "myvideoname.mov">

すべてがフォルダではなくグループにある場合は、他のビデオを見つけて機能するはずです。

于 2011-08-05T04:02:03.120 に答える
0

ローカルコンテンツを表示するための1つのトリックUIWebViewは、置換キャッシュを使用することです。Matt Gallagherは、彼のブログにいくつかのサンプルコードを掲載しています。

基本的に、映画にURLを割り当てます。たとえば、「http://www.example.com/movie.mp4」と言います。これは、HTMLで映画を参照するために使用します。ムービーがロードされると、URLに移動する代わりに、置換キャッシュがデータをローカルにフェッチします。

AFAIKこれはすべてのiOSバージョンで機能します。

于 2011-08-09T02:31:16.177 に答える
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];
}

これはあなたのために働きませんか?

于 2011-08-03T15:17:45.180 に答える
0

同様の問題がありました。アセットと呼ばれるDocumentsディレクトリのサブフォルダにあるindex.htmlと呼ばれるhtmlファイル。


Documents / Assets / 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>

アセットディレクトリ内の他のファイルを参照していることに注意してください。つまり、bundle.jsstyles.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];
于 2014-06-03T03:26:44.077 に答える