web-dev-qa-db-fra.com

Intégration de vidéos YouTube sur

J'ai intégré une vidéo de YouTube via un extrait trouvé sur Internet, voici le code que j'ai utilisé:

    @interface FirstViewController (Private)
- (void)embedYouTube:(NSString *)urlString frame:(CGRect)frame;
@end


@implementation FirstViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    [self embedYouTube:@"http://www.youtube.com/watch?v=l3Iwh5hqbyE" frame:CGRectMake(20, 20, 100, 100)];
}


- (void)embedYouTube:(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];
    UIWebView *videoView = [[UIWebView alloc] initWithFrame:frame];
    [videoView loadHTMLString:html baseURL:nil];
    [self.view addSubview:videoView];
    [videoView release];
}


- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


- (void)dealloc {
    [super dealloc];
}

@end

Il compile correctement et lorsque je l’ouvre, je vois une boîte blanche mal positionnée, créée par le code. J'ai deux questions à ce sujet:

  1. Comment savoir si la vidéo sera lue, s'il ne s'agit que d'une simple boîte blanche, le simulateur lit-il les vidéos de YouTube?

  2. Comment puis-je positionner cette boîte?

28
ayve

Vient de tester votre code, il fonctionne bien sur un iPhone. Toutefois, les vidéos Youtube ne sont pas prises en charge sur le simulateur iOS. Vous aurez donc besoin d’un véritable appareil pour les tests.

Comment puis-je positionner cette boîte?

Vous passez déjà le X (20), le Y (20), la largeur (100) et la hauteur (100) du cadre à cette ligne:

[self embedYouTube:@"http://..." frame:CGRectMake(20, 20, 100, 100)];

Pour modifier la position de la vue par la suite, modifiez sa propriété center:

videoView.center = CGPointMake(200, 100 );
13
Julio Gorgé

Voici un exemple de code qui fonctionne correctement sous iOS 5 et versions ultérieures. Il s'agit de la nouvelle implémentation fournie par l'API Youtube, myWeb est un UIWebView ici .showinfo=0 dans une URL qui supprimera l'en-tête supérieur de videoView.

NSString *html = [NSString stringWithFormat:@"<html><body><iframe class=\"youtube-player\" type=\"text/html\" width=\"%f\" height=\"%f\" src=\"http://www.youtube.com/embed/q1091sWVCMI?HD=1;rel=0;showinfo=0\" allowfullscreen frameborder=\"0\" rel=nofollow></iframe></body></html>",frame.size.width,frame.size.height];
[myWeb loadHTMLString:html baseURL:nil];

J'espère que cela vous aide :)

7
Nikesh K

Voici une version qui fonctionne dans iOS 6 et avec le nouveau code intégré YouTube:

- (void)embedYouTube:(NSString *)urlString frame:(CGRect)frame {
    NSString *html = [NSString stringWithFormat:@"<html><head><style type='text/css'>body {background-color: transparent;color: white;}</style></head><body style='margin:0'><iframe width='%f' height='%f' src='%@' frameborder='0' allowfullscreen></iframe></body></html>", frame.size.width, frame.size.height, urlString];
    UIWebView *videoView = [[UIWebView alloc] initWithFrame:frame];
    [videoView loadHTMLString:html baseURL:nil];
    [self.view addSubview:videoView];
}
5
adriandz

Pour ceux qui utilisent Monotouch et C #, vous pouvez ajouter cette classe à votre projet et l'utiliser pour visionner vos vidéos:

public class YouTubeViewer : UIWebView
{
    public YouTubeViewer(string url, RectangleF frame)
    {
        string youTubeVideoHTML = @"<object width=""{1}"" height=""{2}""><param name=""movie""
                            value=""{0}""></param><embed
                            src=""{0}"" type=""application/x-shockwave-flash"" 
                            width=""{1}"" height=""{2}""</embed></object>"; 

        string html = string.Format(youTubeVideoHTML, url, frame.Size.Width, frame.Size.Height);
        this.LoadHtmlString(html, null);
        this.Frame = frame;
    }
}

Assurez-vous que l'URL que vous transmettez est l'URL du code intégré fourni par Youtube lorsque vous cliquez sur le bouton Partager. (Et cochez la case pour l'ancien code)

0
TChadwick

Mise en œuvre rapide:

let webView = UIWebView(frame: self.view.frame) // Position your player frame here

self.view.addSubview(webView)
self.view.bringSubviewToFront(webView)

// Playback options: play in-line and start playing immediately
webView.allowsInlineMediaPlayback = true
webView.mediaPlaybackRequiresUserAction = false

// Set the id of the video you want to play
let videoID = "zN-GGeNPQEg" // https://www.youtube.com/watch?v=zN-GGeNPQEg

// Set up your player
let embededHTML = "<html><body style='margin:0px;padding:0px;'><script type='text/javascript' src='http://www.youtube.com/iframe_api'></script><script type='text/javascript'>function onYouTubeIframeAPIReady(){ytplayer=new YT.Player('playerId',{events:{onReady:onPlayerReady}})}function onPlayerReady(a){a.target.playVideo();}</script><iframe id='playerId' type='text/html' width='\(self.view.frame.size.width)' height='\(self.view.frame.size.height)' src='http://www.youtube.com/embed/\(videoID)?enablejsapi=1&rel=0&playsinline=1&autoplay=1' frameborder='0'></body></html>"

// Load the HTML into your UIWebView
webView.loadHTMLString(embededHTML, baseURL: NSBundle.mainBundle().bundleURL)

Alternativement, YouTube fournit un excellent helper class for devs pour configurer la lecture de YouTube dans leur iOS, qui configure la UIWebView pour vous.

0
JAL