{"id":2082,"date":"2010-02-06T21:21:34","date_gmt":"2010-02-06T20:21:34","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=2082"},"modified":"2010-02-08T09:52:16","modified_gmt":"2010-02-08T08:52:16","slug":"t024-aggiungiamo-i-video-alle-nostre-applicazioni","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t024-aggiungiamo-i-video-alle-nostre-applicazioni\/","title":{"rendered":"T#024 &#8211; Aggiungiamo i video alle nostre applicazioni"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/t024_IS.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/t024_IS.jpg\" alt=\"T024 - Inseriamo i video all&#039;interno delle nostre applicazioni\" title=\"t024_IS\" width=\"80\" height=\"120\" class=\"alignleft size-full wp-image-2083\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/t024_IS.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/t024_IS-200x300.jpg 200w\" sizes=\"auto, (max-width: 80px) 100vw, 80px\" \/><\/a> Oggi vedremo come inserire un video all&#8217;interno della nostra applicazione. Nello specifico vedremo tre modalit\u00e0 differenti che ci permetteranno di sfruttare questa funzione multimediale dell&#8217;iPhone: avvieremo un video salvato all&#8217;interno del nostro progetto, uno disponibile in una pagina web html e infine vedremo come visualizzare un video YouTube direttamente nell&#8217;applicazione nativa presente su tutti gli iPhone.<\/p>\n<p>Partiamo con il nostro tutorial aprendo Xcode e creando un nuovo progetto. Dall&#8217;elenco dei template disponibili scegliamo &#8220;View-based Application&#8221; e proseguiamo. Diamo ora un nome alla nostra applicazione, ad esempio &#8220;myVideo&#8221;, scegliamo la posizione dove salvare il progetto e andiamo avanti.<!--more--><\/p>\n<p>Per prima cosa dobbiamo importare un nuovo framework: MediaPlayer. Per farlo clicchiamo col pulsante destro del mouse su &#8220;Frameworks&#8221; in &#8220;Groups &#038; Files&#8221;, quindi su &#8220;Add&#8221; e successivamente su &#8220;Existing Frameworks&#8230;&#8221;. Si aprir\u00e0 una finestrella come quella mostrata nell&#8217;immagine seguente:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/MediaPlayerFramework.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/MediaPlayerFramework.png\" alt=\"MediaPlayer.Framework\" title=\"MediaPlayerFramework\" width=\"338\" height=\"534\" class=\"aligncenter size-full wp-image-2086\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/MediaPlayerFramework.png 338w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/MediaPlayerFramework-189x300.png 189w\" sizes=\"auto, (max-width: 338px) 100vw, 338px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Da qui selezionate, come mostrato, MediaPlayer.framework e premete &#8220;Add&#8221;. Non abbiamo ancora finito con il framework, dobbiamo infatti ancora aprire il file &#8220;myVideoViewController.h&#8221; (se avete chiamato il progetto come noi &#8220;myVideo&#8221;) e aggiungere la seguente riga di codice:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n#import <MediaPlayer\/MediaPlayer.h>\r\n<\/pre>\n<p>Ora potremo usare tutto quanto offerto da questo framework. Rimaniamo nel file di intestazione .h e modifichiamo il suo codice in modo da ottenere quanto riportato qui sotto:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n#import <MediaPlayer\/MediaPlayer.h>\r\n\r\n@interface myVideoViewController : UIViewController {\r\n    IBOutlet UIWebView *webView;\r\n}\r\n\r\n@property (nonatomic, retain) IBOutlet UIWebView *webView;\r\n\r\n-(IBAction)avviaVideo:(id)sender;\r\n-(IBAction)avviaVideoYouTube:(id)sender;\r\n\r\n@end\r\n<\/pre>\n<p>Come vedete non abbiamo fatto altro che dichiarare un oggetto IBOutlet (che collegheremo al rispettivo disegnato tramite Interface Builder) di tipo UIWebView chiamato webView. In queste poche righe di codice abbiamo inoltre dichiarato 2 metodi che ci permetteranno di avviare il video in due modi diversi.<\/p>\n<p>Aggiungiamo ora un video al nostro programma, nel nostro caso &#8220;filmato.m4v&#8221;, trascinandolo semplicemente nella cartella &#8220;Resources&#8221; e facendo attenzione di mettere la spunta su &#8220;Copy items into destination group&#8217;s folder (if needed)&#8221; in modo tale che venga di fatto copiato il file nella cartella del progetto.<\/p>\n<p>Create ora un file HTML con al suo interno il seguente codice, chiamatelo &#8220;filmato.html&#8221; e importatelo nel progetto allo stesso modo di come avete appena fatto con il video &#8220;filmato.m4v&#8221;:<\/p>\n<pre lang=\"html\" escaped=\"true\">\r\n<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd\">\r\n<html xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text\/html; charset=UTF-8\" \/>\r\n<title>www.devAPP.it<\/title>\r\n<\/head>\r\n\r\n<body>\r\n\r\n\t<object width=\"425\" height=\"344\"><param name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/YQdgr1KtDFY&#038;hl=it_IT&#038;fs=1&#038;\"><\/param><param name=\"allowFullScreen\" value=\"true\"><\/param><param name=\"allowscriptaccess\" value=\"always\"><\/param><embed src=\"http:\/\/www.youtube.com\/v\/YQdgr1KtDFY&#038;hl=it_IT&#038;fs=1&#038;\" type=\"application\/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"425\" height=\"344\"><\/embed><\/object>\r\n\r\n<\/body>\r\n<\/html>\r\n<\/pre>\n<p>Questa sar\u00e0 la pagina HTML che verr\u00e0 mostrata nella webView, ovviamente nulla vi vieta di puntare ad una pagina online presente in rete \ud83d\ude09<\/p>\n<p>Ora che abbiamo tutto l&#8217;occorrente all&#8217;interno del progetto possiamo aprire Interface Builder facendo doppio click sul file &#8220;myVideoViewController.xib&#8221; e disegnare quindi l&#8217;interfaccia utente, simile a quella mostrata in figura qui in basso:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/t024_IB.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/t024_IB.png\" alt=\"T024 - Aggiungiamo video alle nostre applicazioni (Interfaccia Utente)\" title=\"t024_IB\" width=\"320\" height=\"502\" class=\"aligncenter size-full wp-image-2087\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/t024_IB.png 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/t024_IB-191x300.png 191w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Questi elencati sono gli elementi indispensabili per il tutorial, tutto il resto sono solo elementi decorativi:<\/p>\n<ul>\n<li>N. 2 UIButton<\/li>\n<li>N. 1 UIWebView<\/li>\n<\/ul>\n<p>Come vedete noi abbiamo personalizzato l&#8217;aspetto grafico del primo pulsante inserendo un&#8217;immagine al suo interno e allo stesso modo abbiamo aggiunto UILabel e altri elementi per rendere pi\u00f9 chiaro il programma in esecuzione.<\/p>\n<p>Inseriti gli elementi, cliccate su &#8220;File&#8217;s Owner&#8221; e dalla finestra &#8220;My Video View Controller Connections&#8221; collegate webView alla UIWebView appena inserita e i due metodi (Received Actions) &#8220;avviaVideo&#8221; e &#8220;avviaVideoYouTube&#8221; ai due pulsanti, facendo attenzione a selezionare &#8220;Touch Up Inside&#8221; nella finestrella che compare al rilascio del mouse.<\/p>\n<p>Salviamo e chiudiamo Interface Builder. Apriamo quindi il file di implementazione &#8220;myVideoViewController.m&#8221; e andiamo a scrivere il codice vero e proprio che ci permetter\u00e0 di visualizzare i video nella nostra App.<\/p>\n<p>Prima di tutto aggiungiamo la seguente linea di codice in modo tale da poter usare le propriet\u00e0 (dichiarate prima) della webView:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n@synthesize webView;\r\n<\/pre>\n<p>&#8220;Scommentiamo&#8221; quindi il metodo viewDidLoad e modifichiamo il codice come segue:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n- (void)viewDidLoad {\r\n    [super viewDidLoad];\r\n\t\r\n\t\/\/[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"filmato\" ofType:@\"html\"]isDirectory:NO]]];\r\n\t\/\/[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:test isDirectory:NO]]];\r\n\r\n\tNSString *strIndirizzo =[[NSBundle mainBundle] pathForResource:@\"filmato\" ofType:@\"html\"];\t\r\n\tNSURL *url = [NSURL fileURLWithPath:strIndirizzo isDirectory:NO];\r\n\tNSURLRequest *request = [NSURLRequest requestWithURL:url];\r\n\t[webView loadRequest:request];\r\n\t[webView setScalesPageToFit:YES];\r\n}\r\n<\/pre>\n<p>Questo far\u00e0 in modo di caricare la pagina HTML aggiunta precedentemente nel Bundle dell&#8217;app, con all&#8217;interno il codice che punta al video (tra i Tag &#8220;object&#8221;). Ovviamente nessuno ci vieta, come detto poco fa, di puntare ad una pagina web presente su internet. Durante l&#8217;esecuzione, dopo aver visualizzato il video, si torner\u00f2 all&#8217;applicazione senza di fatto uscirne.<\/p>\n<p>Aggiungiamo ora il codice del primo metodo &#8220;avviaVideo&#8221; grazie al quale, premendo l&#8217;apposito tasto, partir\u00e0 sul player dell&#8217;iPhone il video integrato nel nostro progetto (anche in questo la visualizzazione del video non ci far\u00e0 uscire dalla nostra applicazione):<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n-(IBAction)avviaVideo:(id)sender{\r\n\tNSString *resourcePath = [[NSBundle mainBundle]pathForResource:@\"filmato\" ofType:@\"m4v\"];\r\n\tNSURL *link = [NSURL fileURLWithPath:resourcePath];\r\n\tMPMoviePlayerController *movie = [[MPMoviePlayerController alloc] initWithContentURL:link];\r\n\t\r\n\t[movie setBackgroundColor:[UIColor blackColor]];\r\n\t[movie setScalingMode:MPMovieScalingModeAspectFit];\r\n\t[movie play];\r\n}\r\n<\/pre>\n<p>Il vantaggio i caricare i video nel progetto \u00e8 che i video saranno visibili ovviamente anche senza connessione, lo svantaggio \u00e8 che le app in questo modo peseranno molto di pi\u00f9.<\/p>\n<p>Ultima modalit\u00e0 di visualizzazione presentata, permette, alla pressione del relativo UIButton, di avviare un video di YouTube direttamente dall&#8217;applicazione nativa, appunto YouTube, uscendo quindi dalla nostra applicazione per non tornarci pi\u00f9, neanche al termine della visualizzazione del video (un chiaro svantaggio di questo metodo):<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n-(IBAction)avviaVideoYouTube:(id)sender {\r\n\tNSURL *url = [NSURL URLWithString:@\"http:\/\/www.youtube.com\/watch?v=YQdgr1KtDFY\"];\r\n\t[[UIApplication sharedApplication] openURL:url];\r\n}\r\n<\/pre>\n<p>Sia questa ultima modalit\u00e0 che quella tramite webView necessitano di connessione attiva per la visione del video che di fatto non \u00e8 all&#8217;interno del progetto, rendendolo in questo modo molto pi\u00f9 leggero, ma legato alla presenza della connettivit\u00e0. Star\u00e0 a voi, ora, scegliere il metodo migliore per implementare uno o pi\u00f9 video nelle vostre applicazioni.<\/p>\n<p>Ecco uno screenshot dell&#8217;app presentata in esecuzione:<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/t024_IS1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/t024_IS1.jpg\" alt=\"t024 - Inseriamo i video all&#039;interno delle nostre applicazioni\" title=\"t024_IS\" width=\"320\" height=\"480\" class=\"aligncenter size-full wp-image-2095\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/t024_IS1.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/t024_IS1-200x300.jpg 200w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oggi vedremo come inserire un video all&#8217;interno della nostra applicazione. Nello specifico vedremo tre modalit\u00e0 differenti che&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[103,5,4,14,1,104],"class_list":["post-2082","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-mediaplayer","tag-objective-c","tag-programmazione","tag-sdk","tag-tutorial-pratici","tag-video"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/2082","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=2082"}],"version-history":[{"count":13,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/2082\/revisions"}],"predecessor-version":[{"id":2104,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/2082\/revisions\/2104"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=2082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=2082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=2082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}