28 votes

Intégration de vidéos YouTube sur

J'ai intégré une vidéo de YouTube via un extrait que j'ai 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 se compile correctement et lorsque je l'ouvre, je vois une boîte blanche positionnée incorrectement, que le code a créée. J'ai deux questions à ce sujet :

  1. Comment puis-je savoir si la vidéo sera lue, c'est juste une simple boîte blanche, est-ce que le simulateur lit les vidéos de YouTube ?

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

0 votes

Ce code fonctionne-t-il sous iOS 6 ?

13voto

Julio Gorgé Points 8061

Je viens de tester votre code, il fonctionne bien sur un iPhone, les vidéos Youtube ne sont pas prises en charge sur le simulateur iOS cependant, vous aurez donc besoin d'un appareil réel pour le tester.

Comment puis-je positionner cette boîte ?

Vous transmettez déjà les valeurs X (20), Y(20), width(100) et height(100) de la boîte à cette ligne :

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

Pour changer ensuite la position de la vue, vous modifiez sa propriété center :

videoView.center = CGPointMake(200, 100 );

0 votes

Si vous faites cela dans une vue modale, lorsque la vidéo se termine, mon application se comporte bizarrement, elle ferme la vue modale et les boutons UIButtons ne répondent plus. Une fois que j'ai retiré l'application de la vue modale, elle a fonctionné correctement.

0 votes

Bonjour, j'ai eu le même problème et maintenant je réussis à lire la vidéo dans l'appareil mais il y a un autre problème que la vidéo n'est lue que dans la version 5.1.1 d'ios, si je veux lire la vidéo en dessous de la version 5.1.1 d'ios que dois-je faire ?

0 votes

Bonjour, j'utilise le code ci-dessus pour lire une vidéo. Il fonctionne parfaitement pour la lecture de vidéos, mais lorsque je mets la vidéo en pause, elle revient à l'application et se bloque. Il donne EXC_BAD_ACESS. Avez-vous une idée à ce sujet ?

7voto

Nikesh K Points 480

Voici l'exemple de code, il fonctionne bien sur iOS 5 et plus, il s'agit de la nouvelle implémentation fournie par l'API Youtube, myWeb est un UIWebView ici. showinfo=0 dans l'URL supprimera l'en-tête supérieur dans l'affichage vidéo.

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 aidera :)

5voto

adriandz Points 713

Voici une version qui fonctionne sous iOS 6 et avec le nouveau code d'intégration de 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];
}

0 votes

Pouvez-vous lire automatiquement le film après l'avoir chargé dans la vue Web ?

0 votes

Je n'utilise plus ce code donc je ne suis pas sûr. L'avez-vous essayé ? Je ne serais pas surpris qu'il n'y ait pas de lecture automatique. Je ne charge qu'une vidéo mp4 externe maintenant et ça marche très bien.

0voto

TChadwick Points 290

Pour ceux qui utilisent Monotouch et C#, vous pouvez ajouter cette classe à votre projet et l'utiliser pour visualiser 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 lui transmettez est l'URL du code d'intégration fourni par Youtube lorsque vous cliquez sur le bouton Partager. (Et vérifiez la case à cocher pour l'ancien code)

0 votes

La question était pour iOS

2 votes

@NSCoder, cette réponse est pour iOS, Monotouch est un logiciel fourni par une société appelée Xamarin qui permet de développer des applications iOS natives en C# au lieu du désormais déprécié objective-c. (Swift)

0voto

JAL Points 3432

Mise en œuvre de Swift :

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 une grande classe d'aide pour que les développeurs puissent configurer la lecture de YouTube dans leur iOS, ce qui configure le UIWebView pour vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X