Reproducción de Audio y Video en iOS con AVKit y AVFoundation

Clase 17 de 31Curso de Integración Nativa iOS

Resumen

¿Cómo reproducir archivos de audio en una aplicación iOS?

Integrar audio en tus aplicaciones iOS puede ofrecer una experiencia multimedia enriquecedora. Con el uso de AV Foundation y AVKit, puedes reproducir tanto audio como video sin complicaciones. Aquí te mostramos cómo implementar la reproducción de un archivo de audio local usando un view model llamado AudioPlayerViewModel, aprovechando las capacidades de Swift y sus frameworks.

Configuración inicial del proyecto

Para empezar, debes ubicar el archivo de audio en el directorio raíz de tu proyecto. Lo ideal es no colocarlo en la carpeta de assets, ya que podrías enfrentar dificultades para acceder al archivo. Supón que el archivo se llama audio.mp3.

Creación del ViewModel para controlar el audio

Nuestra clase AudioPlayerViewModel será el núcleo para manejar la reproducción de audio.

import AVFoundation

class AudioPlayerViewModel: ObservableObject {
    private var audioPlayer: AVAudioPlayer?
    @Published var isPlaying = false

    init() {
        guard let sound = Bundle.main.path(forResource: "audio", ofType: "mp3") else {
            print("No se pudo encontrar el archivo")
            return
        }
        
        do {
            audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound))
        } catch {
            print("No se pudo inicializar el audio")
        }
    }
    
    func playOrPause() {
        guard let player = audioPlayer else { return }
        if player.isPlaying {
            player.pause()
            isPlaying = false
        } else {
            player.play()
            isPlaying = true
        }
    }
}

Integración del ViewModel en la interfaz de usuario

En tu archivo DemoAudioView, incorporarás la lógica para observar el estado del audio y controlarlo mediante un botón.

import SwiftUI

struct DemoAudioView: View {
    @StateObject private var audioPlayerViewModel = AudioPlayerViewModel()

    var body: some View {
        VStack {
            Button(action: {
                audioPlayerViewModel.playOrPause()
            }) {
                Image(systemName: audioPlayerViewModel.isPlaying ? "pause.circle" : "play.circle")
                    .resizable()
                    .frame(width: 70, height: 70)
            }
        }
    }
}

En el código anterior, se agregó un botón que cambia su ícono según el estado de reproducción del audio, permitiendo tanto pausar como reanudar el audio.

¿Cómo reproducir un video remoto en una aplicación iOS?

La reproducción de video en aplicaciones iOS, especialmente desde una fuente remota, es una tarea sencilla utilizando AVKit. Aquí se muestra un ejemplo de cómo lograrlo.

Configuración del reproductor de video

Se debe crear una instancia de AVPlayer para manejar el streaming de video desde una URL.

import AVKit
import SwiftUI

struct VideoView: View {
    @State private var player = AVPlayer()

    var body: some View {
        VideoPlayer(player: player)
            .onAppear {
                guard let url = URL(string: "https://path/to/your/video.mp4") else { return }
                player = AVPlayer(url: url)
                player.play()
            }
            .edgesIgnoringSafeArea(.all)
            .onDisappear {
                player.pause()
            }
    }
}

Reproducción y control del ciclo de vida

Este código permite que el video se inicie automáticamente al abrir la vista y se pause al cerrar. El uso del método onAppear asegura que el video comience a reproducirse una vez que la vista esté lista, y onDisappear garantiza la liberación de recursos al cerrar.

Con estos sencillos pasos, puedes enriquecer tus aplicaciones iOS con capacidades multimedia, ofreciendo así una experiencia interactiva y dinámica a tus usuarios. Sin embargo, este es solo el inicio. Explora más funciones avanzadas de AVKit y AVFoundation para mejorar aún más tus proyectos. ¡El mundo multimedia en iOS te espera!