在UIWebView中使用iframe播放Youtube视频

时间:2012-09-23 11:42:46

标签: iphone xcode cocoa-touch ipad uiwebview

您好我正在将html字符串解析为网页视图,以下是我检查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;
}

以下是我显示网络视图的方式:

- (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 6 SDK和iOS 6。 iOS 6 sdk打破了代码 - 现在它在iOS 5中没有显示任何内容。

1 个答案:

答案 0 :(得分: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];

运行该应用,您将在视图中看到该视频。这种方式对我来说非常有效,我认为这对你也有帮助。