Nasıl YouTube video oynatma UİWebView gömülü NSNotifications almak için
MPMoviePlayerController
herhangi bir uyarı aldı bilmiyordum. Neyi yanlış yapıyorum?
Şu mantık kullanıyorum.
UIWebView
youtube video oynamaya başlıyorum. UIWebView
bir standart MPMoviePlayerController
çağırır. MPMoviePlayerController
oluşturmak istemedim çünkü MPMoviePlayerController
kontrol edemiyorum.
Otomatik Kullan ile youtube klibi (1 saniyelik bir gecikme) çalıştırın:
[self performSelector:@selector(touchInView:) withObject:b afterDelay:1];
Benim kod:
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadStateDidChange:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackDidFinish:) name:MPMoviePlayerDidExitFullscreenNotification object:nil];
[self embedYouTube];
}
- (void)loadStateDidChange:(NSNotification*)notification
{
NSLog(@"________loadStateDidChange");
}
- (void)playbackDidFinish:(NSNotification*)notification
{
NSLog(@"________DidExitFullscreenNotification");
}
- (void)embedYouTube
{
CGRect frame = CGRectMake(25, 89, 161, 121);
NSString *urlString = [NSString stringWithString:@"http://www.youtube.com/watch?v=sh29Pm1Rrc0"];
NSString *embedHTML = @"<html><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];
UIWebView *videoView = [[UIWebView alloc] initWithFrame:frame];
videoView.delegate = self;
for (id subview in videoView.subviews)
if ([[subview class] isSubclassOfClass: [UIScrollView class]])
((UIScrollView *)subview).bounces = NO;
[videoView loadHTMLString:html baseURL:nil];
[self.view addSubview:videoView];
[videoView release];
}
- (void)webViewDidFinishLoad:(UIWebView *)_webView
{
UIButton *b = [self findButtonInView:_webView];
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(touchInView:) object:b];
[self performSelector:@selector(touchInView:) withObject:b afterDelay:1];
}
- (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)touchInView:(UIButton*)b
{
[b sendActionsForControlEvents:UIControlEventTouchUpInside];
}
GÜNCELLEME:Youtube video oynatan uygulama yaratıyorum. Çalma listesi çalıştırabilirsiniz ve ilk video göreceksiniz. İlk video bittiğinde, ikinci video ve otomatik olarak oynamaya başlar.
İos 4.1 ve üzeri desteğe ihtiyacım var.
UPDATE2:@H2CO3 url düzeni kullanmaya çalışıyorum, ama işleri yok. Temsilci yöntemi çıkışta denilen olay yoktu. Benim html günlüğü url ekledim. :
<html><head> <body style="margin:0">
<script>function endMovie()
{document.location.href="somefakeurlscheme://video-ended";}
</script> <embed id="yt" src="http://www.youtube.com/watch?v=sh29Pm1Rrc0"
onended="endMovie()" type="application/x-shockwave-flash"
width="161" height="121"></embed>
</body></html>
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if ([[[request URL] absoluteString] hasPrefix:@"somefakeurlscheme://video-ended"])
{
[self someMethodSupposedToDetectVideoEndedEvent];
return NO; // prevent really loading the URL
}
return YES; // else load the URL as desired
}
UPDATE3 @Kadar, UİMoviePlayerControllerDidExitFullscreennotification yakaladı edemem, ama MPAVControllerİtemPlaybackDidEndnotification buldum. MPAVControllerİtemPlaybackDidEndnotification video oynatma sona erdiğinde görünür.
Ama nasıl onDone bildirimleri yakalamak miyim? anlamıyorum
CEVAP
Belgelenmiş bildirimleri UIWebView
gömülü bir film oyuncu ile gönderilir yok.
Aslında, kapalı uygulama UIWebView
içinde kullanılan pek çok açıdan kamu MPMoviePlayerController
(örneğin DRM) farklılık gösteriyor.
En önemli sınıfları UIWebView
içinde video içeriği çalmak için kullanılan MPAVController
UIMoviePlayerController
denir. İkinci bir oyuncu MPMoviePlayerController
tam ekran arayüzü gibi görünmesini sağlar.
Apple tarafından reddedilmesi riski almaya nasıl cüret edersin diye, aslında sen ne arıyorsun hala elde etmenin yolları var.
NOT Bu belgelenmiş ve her yeni iOS sürümü üzerinde mola tabidir. Ancak iOS4 üzerinde çalışır.3, 5.0 ve 5.01, 5.1 ve 6.0 veolabilirdiğer sürümler üzerinde çalışmak gibi.
İOS 4.1 ve 4.2, o kadar yapmak için bu çözüm test bulunamam. Ben çok çalışır şüpheli.
Fullscreen State
Örneğin kullanıcı dokunarak üzerine tepki edeceksenizBİTTİdüğme, bu şekilde yapmak mümkün olabilir:
GÜNCELLEMEBu cevap eski bir sürümünün kullanılması önerilirUIMoviePlayerControllerDidExitFullscreenNotification
bu yeni sürüm (iOS6 için güncellendi) kullanarak önerir oysaUIMoviePlayerControllerWillExitFullscreenNotification
.
C-Dil Seviyesi:
void PlayerWillExitFullscreen (CFNotificationCenterRef center,
void *observer,
CFStringRef name,
const void *object,
CFDictionaryRef userInfo)
{
//do something...
}
CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(),
NULL,
PlayerWillExitFullscreen,
CFSTR("UIMoviePlayerControllerWillExitFullscreenNotification"),
NULL,
CFNotificationSuspensionBehaviorDeliverImmediately);
Objective-C Düzeyi:
- (void)playerWillExitFullscreen:(NSNotification *)notification
{
//do something...
}
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerWillExitFullscreen:)
name:@"UIMoviePlayerControllerWillExitFullscreenNotification"
object:nil];
Yaptığım taslak her ikisi de, C-Seviyesi ve Objective-C-Düzey seçenekler, çünkü en iyi yolu bulmak için aslında tüm bu C-Düzey (CoreFoundation) işlevleri olarak gösterilen son cevabım. Eğer bir bildirim Gönderen Objective-C (NSNotifications) kullanıyor mu yoksaolabiliraslında NSNotification-mekaniği kullanarak onları tuzağa düşürmek için mümkün değildir.
Oynatma Durumu
Oynatma durumunu incelemek için, "MPAVControllerPlaybackStateChangedNotification"
için yukarıda taslak olarak bakmak ve bu gibi görünebilir: userInfo
inceleyin
{
MPAVControllerNewStateParameter = 1;
MPAVControllerOldStateParameter = 2;
}
Ayrıca Tersine Mühendislik
Ters ve tüm bildirimleri gönderdi Mühendisliği keşfetmek için aşağıdaki parçacığını kullanın.
void MyCallBack (CFNotificationCenterRef center,
void *observer,
CFStringRef name,
const void *object,
CFDictionaryRef userInfo)
{
NSLog(@"name: %@", name);
NSLog(@"userinfo: %@", userInfo);
}
CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(),
NULL,
MyCallBack,
NULL,
NULL,
CFNotificationSuspensionBehaviorDeliverImmediately);
Nasıl YouTube APİ ile video gösterim s...
DÜZENLİ Javascript: URL youtube video ...
Nasıl bir YouTube video için bir bitiş...
Nasıl bir video Youtube için yeni bir ...
Nasıl bir dize bir düzenli ifade kulla...