2013-03-20 11 views
5

私は画面に触れることなく、UIWebViewの読み込まれたページと対話しようとしています。私はmediaplaybackrequiresuseractionを成功裏に試みました。私もhereのメソッドを試してみましたが、明らかにios 6では動作しません。this URLをロードしてプレイヤーの再生を開始しようとしています。誰もがこの作品をios 6にする方法を知っていますか?どんな助けでも大歓迎です。タッチなしでUIWebViewと対話することは可能ですか?

MY CODE

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 


    int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1]; 

    NSString * storyLink = [[stories objectAtIndex: storyIndex] objectForKey: @"link"]; 
    //storyLink is various form of http://link.brightcove.com/services/player/bcpid1683318714001?bckey=AQ~~,AAAAC59qSJk~,vyxcsD3OtBPHZ2UIrFX2-wdCLTYNyMNn&bclid=1644543007001&bctid=2238216269001 with different bctid=value 

    NSURL *kitcoURL = [NSURL URLWithString:storyLink]; 
    NSURLRequest *requestURL = [NSURLRequest requestWithURL:kitcoURL]; 
    [videoScreen setUserInteractionEnabled:YES]; 
    [videoScreen setMediaPlaybackRequiresUserAction:NO]; 
    [videoScreen loadRequest:requestURL]; 

} 

//メソッドは、あなただけの曲を再生したい場合はEDIT // videoScreenが私のUIWebView

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

NSString *urlString = @"http://link.brightcove.com/services/player/bcpid1683318714001?bckey=AQ~~,AAAAC59qSJk~,vyxcsD3OtBPHZ2UIrFX2-wdCLTYNyMNn&bclid=1644543007001&bctid=2238216269001"; 

NSError *error; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"bckey=([^&]*)" options:0 error:&error]; 
NSTextCheckingResult *match = [regex firstMatchInString:urlString options:0 range:NSMakeRange(0, urlString.length)]; 
NSString *bckey = [urlString substringWithRange:[match rangeAtIndex:1]]; 

regex = [NSRegularExpression regularExpressionWithPattern:@"bctid=([0-9]*)" options:0 error:&error]; 
match = [regex firstMatchInString:urlString options:0 range:NSMakeRange(0, urlString.length)]; 
NSString *bctid = [urlString substringWithRange:[match rangeAtIndex:1]]; 

NSString *newUrlString = [NSString stringWithFormat:@"http://c.brightcove.com/services/viewer/htmlFederated?&playerKey=%@&videoID=%@", bckey, bctid]; 

[videoScreen loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:newUrlString]]]; 

} 

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
if (!webView.isLoading) 
{ 
    [self checkForVideoReady]; 
} 

} 
// Checking player object for ready. If it ready - starting video. Otherwise waiting 1 second 
- (void)checkForVideoReady 
{ 
    if (![[videoScreen stringByEvaluatingJavaScriptFromString:@"player.ready"] isEqualToString:@"true"]) 
    { 
    [self performSelector:@selector(checkForVideoReady) withObject:nil afterDelay:1]; 
    } 
    else 
    { 
     [videoScreen stringByEvaluatingJavaScriptFromString:@"player.videoPlayer.playButton.element.click();"]; 
    } 
} 
+0

「UIWebView」の 'mediaPlaybackRequiresUserAction'プロパティはこれとまったく同じものではありませんか? –

+0

mediaPlaybackRequiresUserActionは、認識できないセレクタによるクラッシュを引き起こします。編集を確認してください。 –

+0

さて、 'setMediaPlaybackRequiresUserAction:NO'を使う必要があります。 videoScreenも 'UIWebView'でなければなりません。 –

答えて

1

HTML 5のYouTube動画をもとにした検索ボタンの表示方法。
私はあなたの問題の回避策を見つけました。それは優雅ではなく、機能しています。

あなたのリンク

http://link.brightcove.com/services/player/bcpid1683318714001?bckey=AQ~~,AAAAC59qSJk~,vyxcsD3OtBPHZ2UIrFX2-wdCLTYNyMNn&bclid=1644543007001&bctid=2238216269001

フラッシュオブジェクトとダウンロードページ。そして、私が知る限り、JSやUIWebViewを使って演奏する方法はありません。我々はplayer変数にアクセスし、JavaScriptを使用してビデオを開始することができますので、

http://c.brightcove.com/services/viewer/htmlFederated?&width=966&height=546&flashID=myExperience&bgcolor=%23FFFFFF&playerID=1683318714001&playerKey=AQ~~%2CAAAAC59qSJk~%2CvyxcsD3OtBPHZ2UIrFX2-wdCLTYNyMNn&isVid=true&isUI=true&dynamicStreaming=true&autoStart=true&debuggerID=&videoID=2238216269001&%40videoPlayer=2238216269001&lineupID=1644543007001&startTime=1364279975091&refURL=not%20available&%40videoPlayer=2238216269001

秒1は、より興味深いものです:
要求を研究した後、私は別のURLのUIWebViewクエリことがわかりました。

初期URLを変換する必要があります。

NSString *urlString = @"http://link.brightcove.com/services/player/bcpid1683318714001?bckey=AQ~~,AAAAC59qSJk~,vyxcsD3OtBPHZ2UIrFX2-wdCLTYNyMNn&bclid=1644543007001&bctid=2238216269001"; 

NSError *error; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"bckey=([^&]*)" options:0 error:&error]; 
NSTextCheckingResult *match = [regex firstMatchInString:urlString options:0 range:NSMakeRange(0, urlString.length)]; 
NSString *bckey = [urlString substringWithRange:[match rangeAtIndex:1]]; 

regex = [NSRegularExpression regularExpressionWithPattern:@"bctid=([0-9]*)" options:0 error:&error]; 
match = [regex firstMatchInString:urlString options:0 range:NSMakeRange(0, urlString.length)]; 
NSString *bctid = [urlString substringWithRange:[match rangeAtIndex:1]]; 

NSString *newUrlString = [NSString stringWithFormat:@"http://c.brightcove.com/services/viewer/htmlFederated?&playerKey=%@&videoID=%@", bckey, bctid]; 

そしてURLは、我々はplayerオブジェクトへのアクセス権を持ってロードされた後に新しいURL

[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:newUrlString]]]; 

をロード:bckeybctid - 私たちはURLで唯一の2の重要なパラメータを持っているように思えます。このオブジェクトは、ビデオの再生準備ができたとき言うと、私は、これはエレガントではないことを知って再生

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    if (!webView.isLoading) 
    { 
     [self checkForVideoReady]; 
    } 

} 
// Checking player object for ready. If it ready - starting video. Otherwise waiting 1 second 
- (void)checkForVideoReady 
{ 
    if (![[_webView stringByEvaluatingJavaScriptFromString:@"player.ready"] isEqualToString:@"true"]) 
    { 
     [self performSelector:@selector(checkForVideoReady) withObject:nil afterDelay:1]; 
    } 
    else 
    { 
     [_webView stringByEvaluatingJavaScriptFromString:@"player.videoPlayer.playButton.element.click();"]; 
    } 
} 

を開始することができ、多分誰かがそれを改善するためにどのような方法を見つけるだろう。
気軽にコメントしてください。

+0

お返事ありがとうございます。あなたの答えは大いに意味を持ちますが、実装してもうまくいきませんでした。私は行方不明のものがありますか?編集を確認してください。 –

4

あるios6

- (UIButton *)findButtonInView:(UIView *)view { 
UIButton *button = nil; 

if ([view isMemberOfClass:[UIButton class]]) { 
return (UIButton *)view; 
} 

if (view.subviews && [view.subviews count] > 0) { 
for (UIView *subview in view.subviews) { 
    button = [self findButtonInView:subview]; 
    if (button) return button; 
} 
} 

return button; 
} 

- (void)webViewDidFinishLoad:(UIWebView *)_webView { 
    UIButton *b = [self findButtonInView:_webView]; 
    [b sendActionsForControlEvents:UIControlEventTouchUpInside]; 
} 

で動作しません、webviewが読み込まれるときは&となります。

お楽しみくださいそして、あなたは自動的に&として曲を再生します。この

<UIWebView_object>.delegate = self; 

このようなあなたのWebViewにデリゲートを割り当てられていることを確認するときWebViewの負荷を

`- (void)webViewDidFinishLoad:(UIWebView *)webView { 

    // Do whatever you want here 
    // play song 
}` 

で再生機能を呼び出すが、確認する必要がありプログラミング!!

+0

お返事ありがとうございます。あなたの答えが私がすでにやっていることとどう違うのか分かりません。解説できますか? –

+1

@Foramあなたはその質問を読んだことがありますか? –

+0

@ B.Money、はい、あなたの質問から理解したものは何でも、UIWebViewから曲に触れずに曲を再生したい、つまりアプリケーションが読み込まれるとすぐに正しいですか? –

1

ウェブビューで読み込んでいるウェブページのjavascriptに「自動再生」が設定されています。

1
- (void)videoThumb:(NSString *)urlString frame:(CGRect)frame { 
     NSString *embedHTML = @"\ 
     <html><head>\ 
     <style type=\"text/css\">\ 
     body {\ 
     background-color: transparent; 
     color: white; 
     }\ 
     </style>\ 
     </head><body style=\"margin:0\">\ 
     <embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \ 
     width=\"%0.0f\" height=\"%0.0f\"></embed>\ 
     </body></html>"; 


    NSString *html = [NSString stringWithFormat:embedHTML, urlString, frame.size.width,frame.size.height]; 

    [webView loadHTMLString:html baseURL:nil]; 
    [self.view addSubview:webView]; 
    [webView release]; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    //Include above function to your page and call it by passing the urlstring 
    //frame : this parameter needs the size of the thumb you want to use. 
    [self videoThumb:url:frame]; 
} 

再生したいばかりのURLを渡してvideoThumb関数を呼び出すだけです。

+0

http://stackoverflow.com/questions/9992735/video-playing-automatically-in-uiwebview/9993698#comment22222207_9993698このリンクで同じ質問と回答を参照すると、お役立ちになります。 – Kuldeep

関連する問題