1

こんにちは私はhtml文字列をWebビューに解析しています。これが、YouTubeビデオをチェックしてiframeに追加する方法です。

- (NSString *)extendYouTubeSupportInHtml:(NSString *)html {
    static dispatch_once_t onceToken;
    static NSRegularExpression *youtubeEmbedRegex;
    dispatch_once(&onceToken, ^{
        youtubeEmbedRegex = [[NSRegularExpression alloc] initWithPattern:@"<object.*src.*/v/(.*?)['|\"].*object\\s*>" options:NSRegularExpressionCaseInsensitive error:nil];
    });
    NSArray *matchs;
    if (html != nil) {

        matchs = [youtubeEmbedRegex matchesInString:html options:0 range:NSMakeRange(0, html.length)];

    }else{
        matchs = nil;
    }

    NSInteger rangeOffset = 0;
    for (NSTextCheckingResult *match in matchs) {    
        NSRange objectRange = NSMakeRange([match rangeAtIndex:0].location + rangeOffset, [match rangeAtIndex:0].length);
        NSRange idRange = NSMakeRange([match rangeAtIndex:1].location + rangeOffset, [match rangeAtIndex:1].length);
        NSString* youtubrId = [html substringWithRange:idRange];

        // Add uniq id to img tag
        NSString* iframe = [NSString stringWithFormat:@"<iframe src=\"http://www.youtube.com/embed/%@\" frameborder=\"0\" allowfullscreen></iframe>", youtubrId];
        html = [html stringByReplacingCharactersInRange:objectRange withString:iframe];

        rangeOffset += iframe.length - objectRange.length;
    }

    return html;
}

そして、これが私がWebビューを表示する方法です:

- (id)initWithFrame:(CGRect)frame dict:(NSDictionary *)dict {
    self = [super initWithFrame:frame];
    if (self) {
        self.webView = [[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)] autorelease];
        self.webView.backgroundColor = [UIColor clearColor];
        self.webView.opaque = NO;
        self.webView.delegate = self;
        self.webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
        self.webView.scalesPageToFit = NO;
        self.webView.allowsInlineMediaPlayback = YES;
        self.webView.mediaPlaybackRequiresUserAction = NO;

        [self removeBackgroundFromWebView:self.webView];      
        [self addSubview:self.webView];
        self.dictionary = dict;

    }
    return self;
}

私の問題は、ビデオの再生を開始すると(メモリ使用量が最大30MBになり、ビデオが途切れ始め、オーディオ/ビデオが一致せず、閉じても)メモリ使用量が同じであるということです。

AudioToolboxにもいくつかリークがあります。iOS 6SDKとiOS6を使用しています。iOS6sdkがコードを壊しました。現在、iOS5では何も表示されていません。

4

1 に答える 1

3

これは、アプリ内でYouTubeビデオを再生する私の方法です。

私はiFrameを使用してアプリ内にYouTubeビデオをロードしています。

この手順に従うと、あなたもそうします。

uiwebviewを作成し、それを.hファイルに接続します。私のは_webViewです。

このメソッドを.mファイルに追加します。

-(void)embedYouTube{

    NSString *embedHTML = @"<iframe width=\"300\" height=\"250\" src=\"http://www.youtube.com/embed/rOPI5LDo7mg\" frameborder=\"0\" allowfullscreen></iframe>";

    NSString *html = [NSString stringWithFormat:embedHTML];

    [_webView loadHTMLString:html baseURL:nil];
    [self.view addSubview:_webView];

}

YouTubeビデオに埋め込まれたコードを使用しています。(私はあなたがそれが何であるかを知っていることを望みます)

viewdidload内でこのメソッドを呼び出します

[self embedYouTube];

アプリを実行すると、ビューにビデオが表示されます。この方法は私にとって完璧に機能しており、これはあなたにも役立つと思います。

于 2013-04-10T05:05:52.263 に答える