Cómo desarrollar un programa AVPlayer para iPad
En resumen, AirPlay consiste en transmitir contenido multimedia a una pantalla (TV) de alta definición o a un sistema de sonido de alta definición, y Apple TV 2 es un puente entre los dispositivos iOS o iTunes y los dispositivos de alta definición.
En iOS 5, cualquier programa que utilice las clases de AV Foundation puede transmitir contenido de audio y vídeo desde el programa al Apple TV. Puede utilizar MPMoviewPlayerController para transmitir el contenido que se está reproduciendo actualmente a un HDTV u otro dispositivo de visualización HD a través de AirPlay. Otro avance es la transmisión de video desde UIWebView, lo cual es una mejora interesante porque significa que podemos transmitir audio y video en línea directamente desde la web a un televisor o Apple TV 2.
Utilice AVFoundation para proyectar contenido de vídeo
Para utilizar AVFoundation en su aplicación, debe implementar AVPlayer y configurar AllowAirPlayVideo en "SÍ" para activar AirPlay, o configurarlo en "NO". "para desactivar AirPlay, como se muestra en el siguiente código:
-(BOOL)setAirPlay:(BOOL)airplayMode{
return self.player.allowsAirPlayVideo=airplayMode;
}
Escribir una aplicación
Para demostrar cómo crear una aplicación AVPlayer e implementar AirPlay, crearemos una aplicación de vista única (tenga en cuenta que UseStoryboards está seleccionado). crea una nueva clase AVPlayer e implementa la funcionalidad AirPlay.
Para crear una aplicación de vista única dirigida a iPhone, iPod o iPad, después de crear el proyecto, importe el marco de AV Foundation.
A continuación, cree una nueva clase llamada Player y herede de la clase UIView. En el archivo de encabezado, agregue la clase AVPlayer y agregue la propiedad AVPlayer. Como se muestra en el siguiente código.
@class AVPlayer;
@interface Player: UIView
@property(nonatomic, strong) AVPlayer * player;
Siguiente paso Es implementar la clase Player.
Hemos implementado los cuatro métodos más básicos que el AVPlayer básico necesita implementar y proporcionamos un método como nuestro conmutador AirPlay.
Primero, necesitamos crear una clase contenedora para la clase AVLayer. Esta clase es una subclase CALayer que se utiliza para gestionar el contenido visual de los medios. El código para crear la clase de encapsulación es el siguiente:
+ (Class)layerClass {
return [AVPlayerLayer class];
}
Entonces, necesitamos una forma de crear una instancia del objeto AVPlayer (que definimos en el archivo de encabezado). Como se muestra en el siguiente código.
-(AVPlayer *) jugador{
return [(AVPlayerLayer *)[self Layer] jugador];
}
en En el método setPlayer, como se muestra en el siguiente código, hay un parámetro AVPlayer que se usa para agregar una instancia de AVPlayer a UIView. UIView es una subclase de UIView y se usará en el controlador de vista principal.
- (void)setPlayer:(AVPlayer*)player {
[(AVPlayerLayer*)[self Layer] setPlayer:player];
} p>
El último método de esta clase es el método setAirPlay. Sus parámetros se utilizarán para especificar la propiedadallowAirPlayVideo de AVPlayer UIView (reproductor). Como se muestra en el siguiente código.
-(BOOL)setAirPlay:(BOOL)airplayMode{
return self.player.allowsAirPlayVideo=airplayMode;
}
Especificar Para la capa (AVPLayerLayer) utilizada para generar el video, puede especificar cualquier número de capas siempre que sea conveniente controlar la visualización del contenido. Por ejemplo, maneje la sincronización horaria entre audio y video. Con setDisplayMode, puede configurar la capa utilizada para la visualización creando primero un objeto AVPlayerLayer como capa de visualización y luego modificando sus propiedades. La configuración predeterminada es la propiedad AVLayerVideoGravityResizeAspect. Alternativamente, puede configurar la propiedad AVLayerVideoGravityResizeAspectFill y la propiedad AVLayerVideoGravityResize. AVLayerVideoGravityResizeAspect mantiene la relación de aspecto del video y ajusta automáticamente el contenido de reproducción según el tamaño de la ventana de reproducción. AVLayerVideoGravityResizeAspectFill es similar a AVLayerVideoGravityResizeAspectFill, pero llena el contenido de reproducción en lugar de ajustarlo al tamaño de la ventana de reproducción. El último valor ampliará el contenido de reproducción para que quepa dentro de la ventana de reproducción.
h>
@class AVPlayer;
@interface Player: UIView
@property(noatómico, fuerte) AVPlayer * player;
-(BOOL) setAirPlay:(BOOL) airplayMode;
@ end
#import "Player.h"
#import
@implementation Player
+ (Clase)layerClass {
return [AVPlayerLayer class];
}
- (AVPlayer *) jugador{
return [(AVPlayerLayer *)[self Layer] jugador];
}
- (void) setPlayer: (AVPlayer*)player {
[(AVPlayerLayer*)[self Layer] setPlayer:player];
}
// Activar o desactivar AirPlay Modo
-(BOOL)setAirPlay:(BOOL)airplayMode{
return self.player.allowesAirPlayVideo=airplayMode;
}
@end
No se requiere ningún reproductor cuando se utiliza Player (subclase UIView de AVPlayer)
El código anterior incluye el archivo .h y el archivo .m de Player (subclase UIView de AVPlayer).
Para usar la vista AVPlayer en un UIViewController, abra el guión gráfico de Xcode (siempre que haya utilizado la opción "useStoryboard" al crear el proyecto). Seleccione UIView (no UIViewController) y cambie su clase a Reproductor, que puede ingresar en el campo de clase personalizada del panel Identidad o seleccionar de su lista desplegable.
Abra el Editor Asistente y cree un IBOutlet para la subclase UIView Player, haga clic derecho en la vista y arrástrela al encabezado de la derecha. Como se muestra a continuación.
Crear conexiones IBActions e IBOutlets
Crear un delegado para klViewController. Como se muestra en la imagen a continuación, haga clic derecho en el Reproductor y arrastre una línea de conexión desde IBOutlet hasta klViewController (cuadrado amarillo en el muelle).
Agregue una conexión delegada a klViewController
En el Storyboard, agregue una barra de herramientas. En la barra de herramientas, agregue dos botones para configurar el texto de la etiqueta para reproducir y pausar, y luego agregue un interruptor para activar o desactivar AirPlay. Cree las IBActions correspondientes para estos 3 controles (puede utilizar el Editor asistente). El resto del trabajo se realiza en la clase klViewController.
Abra el archivo klViewController.h, agregue las declaraciones @class Player y @class AVPlayer e importe el marco AVFoundation y Player.h.
El código fuente es el siguiente:
#import
#import
#import " Player.h "
@class Player;
@class AVPlayer;
@ interfaz klViewController : UIViewController
Declara que el contenido será cargado en las propiedades de AVPlayer de la vista Palyer.
Declarar un atributo NSURL. Luego está el IBOutlet para el control Switch (creado usando el Editor Asistente).
El archivo kvLiewController.h contiene el siguiente código:
#import
#import
#import Player.h
@class Player;
@class AVPlayer;
@interface klViewController:
@ propiedad (no atómica, fuerte) AVPlayer * myPlayer;
@property(no atómica, fuerte) NSURL * avContentUrl;
@property (fuerte, no atómica) IBOutlet Player * airPlayView <; /p >
@property (no atómico, retener) IBOutlet UISwitch * AirPlaySwitch;
- (IBAction)PlayVideo: (id)sender;
- (IBAction)PauseVideo:( id) remitente;
- (IBAction)isAirPlayOn:(id)sender;
@end
El siguiente es el archivo de implementación de la clase. En el método viewDidLoad, inicialice avContentUrl con la dirección URL del archivo de video:
avContentUrl = [[NSURL alloc] initWithString
Luego use avContentUrl para inicializar AVPlayer, que se usa para definir en el archivo de encabezado Asigne un valor a la propiedad myPlayer. Asigne myPlayer a la propiedad del reproductor de airPlayView, que es un objeto de reproductor. Como se muestra en el siguiente código:
self.myPlayer = [AVPlayer playerWithURL:avContentUrl];
[airPlayView setPlayer:[self myPlayer]];
Ahora , Los dos botones se utilizan para las funciones de reproducción y pausa de vídeo y la función de conmutación AirPlay del control Switch.
El código del método de operación del botón de reproducción es el siguiente:
- (IBAction)PlayVideo:(id)sender {
[self.myPlayer play];
}
El código del método de operación del botón de pausa es el siguiente:
- (IBAction)PauseVideo:(id)sender {
[self.myPlayer pausa];
}
El código del método de operación del botón de pausa es el siguiente:
- (IBAction)PauseVideo:(id)sender { p>
[ self.myPlayer pausa];
}
myPlayer pausa];
}
El código del método de operación del control Switch es el siguiente:
- (IBAction)isAirPlayOn:(id)sender {
AirPlaySwitch = (UISwitch *) sender;
if ( AirPlaySwitch.on) {
[airPlayView setAirPlay:NO];
}else
{
[airPlayView setAirPlay:YES];
}
}
End
Otra propiedad relacionada con AirPlay es usesAirPlayVideoWhileAirPlayScreenIsActive, que se utiliza para cambiar automáticamente AVPlayer a AirPlay durante la reproducción. , pero solo Solo cuando AirPlay está habilitado. El valor predeterminado es falso.
Para ejecutar este programa de muestra, necesitas un iPad conectado a la misma red wifi que tu Apple TV y la URL de la fuente del vídeo debe ser válida. AirPlay no es compatible con el emulador.
archivo klViewController.h
#import
#import
#importar " Player.h"
@class Player;
@class AVPlayer;
@interface klViewController:
@property( no atómico, fuerte) AVPlayer * myPlayer;
@property (no atómico, fuerte) NSURL * avContentUrl;
@property (fuerte, no atómico) IBOutlet Player * airPlayView;
@property (no atómico, retener) IBOutlet UISwitch * AirPlaySwitch;
- (IBAction)PlayVideo: (id)sender;
- (IBAction)PauseVideo:(id)sender;
- (IBAction)isAirPlayOn:(id)sender;
@end
archivo klViewController.m
#import " klViewController. h"
@implementation klViewController
@synthesize airPlayView;
@synthesize avContentUrl, myPlayer.
- (void)didReceiveMemoryWarning p>
{
[super didReceiveMemoryWarning];
// Libera los datos, imágenes, etc. almacenados en caché que no se utilizan en la vista.
}
#pragma mark - Ver ciclo de vida
- (void)viewDidLoad
{
[ super viewDidLoad];
[super viewDidLoad];
// Esta es la primera vista de Apple.
p> //Este es un vídeo de muestra de Apple
avContentUrl = [[NSURL alloc] initWithString:@" self.myPlayer = [AVPlayer playerWithURL:avContentUrl];
[airPlayView setPlayer:[self.myPlayer]];
[self.myPlayer play];
}
- (void)viewDidUnload
{
[self setAirPlayView:nil];
[super viewDidUnload];
// Libera cualquier subvista retenida de la vista principal.
// por ejemplo, self.myOutlet = nil;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animado];
}
- (void)viewDidAppear :(BOOL)animado
{
[super viewDidAppear: animado];
}
- (void)viewWillDisappear:(BOOL)animado
{
[ super viewWillDisappear :animado];
}
- (void)viewDidDisappear:(BOOL)animado
{
[super viewDidDisappear.animated] ;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Devuelve SÍ para las direcciones admitidas p>
return (interfazOrientación! = UIInterfaceOrientationPortraitUpsideDown);
}
- (IBAction)PlayVideo:(id)sender {
[self.myPlayer pausa];
}
- (IBAction)isAirPlayOn:(id)remitente {
AirPlaySwitch = (UISwitch *) remitente;
if (AirPlaySwitch.on) {
[airPlayView setAirPlay:NO];
}else
{
[ airPlayView setAirPlay:SÍ];
}
}
@end