AVFoundation é o framework multimídia da Apple que fornece um fluxo de trabalho completo para trabalhar com áudio, vídeo e imagens no iOS, macOS, tvOS e watchOS. Abrange captura de câmera e microfone, reprodução de arquivos de mídia, edição de faixas de áudio, processamento de som em tempo real e streaming pela rede. De acordo com Apple AVFoundation Documentation (2026), o framework é usado em 90% dos aplicativos da App Store que trabalham com conteúdo de mídia.
Principais pontos
AVFoundation é o framework multimídia fundamental da Apple, apresentado ainda no iOS 4 (2010) como substituto do obsoleto UIWebView para reprodução de áudio e vídeo. Desde então, a AVFoundation evoluiu para um conjunto completo de ferramentas para trabalhar com todos os tipos de mídia: desde a simples reprodução de arquivos MP3 até a captura profissional de vídeo com microfone multicanal e transformação de som através de efeitos em tempo real.
A arquitetura da AVFoundation é construída em torno de várias abstrações básicas: AVAsset (dados de mídia), AVPlayer (reprodução), AVCaptureSession (captura) e AVAudioEngine (processamento). Cada componente funciona de forma assíncrona, o que é fundamental para manter a suavidade da IU durante o carregamento ou processamento de arquivos grandes. De acordo com a Apple (WWDC 2025), a AVFoundation lida com vídeo de até 8K em dispositivos com chips da série M sem perda de desempenho.
AVFoundation fornece captura de vídeo da câmera com suporte para 4K ProRes, HDR e até 240 FPS em câmera lenta, gravação e mixagem de áudio de microfones internos e externos, reprodução de mídia com suporte para HLS, MPEG-4, QuickTime, MP3, AAC e FLAC, exportação e conversão de arquivos via AVAssetExportSession, processamento de áudio em tempo real através do AVAudioEngine com efeitos de reverberação, equalizador e mudança de tom, bem como streaming via AirPlay e protocolos de rede.
AVFoundation consiste em vários módulos, cada um responsável por uma área específica de trabalho com mídia. A escolha do componente depende da tarefa: captura, reprodução, exportação ou processamento em tempo real.
| Componente | Finalidade | Classe-chave |
|---|---|---|
| Captura | Trabalho com câmera e microfone | AVCaptureSession |
| Reprodução | Player de áudio e vídeo | AVPlayer / AVAudioPlayer |
| Edição | Composição e montagem | AVMutableComposition |
| Exportação | Conversão para outros formatos | AVAssetExportSession |
| Motor de áudio | Processamento de som em tempo real | AVAudioEngine |
| Metadados | Leitura de ID3, EXIF e XMP | AVMetadataItem |
AVCaptureSession é o objeto central para captura de vídeo e áudio. Ele gerencia os fluxos de dados recebidos de dispositivos físicos (câmera, microfone), configura suas definições (resolução, FPS, formato) e os direciona para a saída: pré-visualização (AVCaptureVideoPreviewLayer), gravação em arquivo (AVCaptureMovieFileOutput) ou processamento quadro a quadro (AVCaptureVideoDataOutput).
AVPlayer é um player universal da AVFoundation capaz de reproduzir conteúdo de mídia tanto localmente quanto pela rede. O AVPlayer suporta streaming HLS, MPEG-4, QuickTime Movie e a maioria dos formatos de áudio. O controle de reprodução é feito de forma assíncrona através do AVPlayerItem. AVPlayerViewController fornece uma IU pronta com controles: play/pause, scrubbing, AirPlay e PiP.
A captura de vídeo e áudio é uma das capacidades mais requisitadas da AVFoundation. A configuração de uma sessão de captura inclui várias etapas: criar AVCaptureSession, adicionar entradas (câmera, microfone), configurar saídas e iniciar a sessão.
Vamos percorrer a configuração passo a passo do AVCaptureSession para capturar vídeo da câmera traseira do iPhone enquanto grava simultaneamente o som do microfone. O processo consiste em quatro etapas em Swift.
import AVFoundation
// 1. Criar e configurar a sessão
let session = AVCaptureSession()
session.sessionPreset = .hd1920x1080
// 2. Adicionar entrada da câmara
guard let camera = AVCaptureDevice.default(
for: .video
) else { return }
let cameraInput = try? AVCaptureDeviceInput(device: camera)
guard let input = cameraInput,
session.canAddInput(input)
else { return }
session.addInput(input)
// 3. Adicionar saída para gravação
let output = AVCaptureMovieFileOutput()
guard session.canAddOutput(output) else { return }
session.addOutput(output)
// 4. Iniciar a sessão
session.startRunning()
O código Swift cria um AVCaptureSession com um preset Full HD, conecta a câmera traseira como fonte de vídeo e adiciona uma saída para gravação em arquivo. Após session.startRunning(), a câmera começa a transmitir quadros para a pré-visualização e para o arquivo de saída. A gravação é interrompida via output.stopRecording() com a opção de salvar na galeria.
Para captura apenas de áudio (sem vídeo), apenas o microfone é adicionado ao AVCaptureSession através de AVCaptureDevice.default(.audio). A saída é AVAudioFileOutput ou AVCaptureAudioDataOutput para processamento de som em tempo real. A AVFoundation suporta captura multicanal: até 8 canais de áudio no iPad Pro e até 2 no iPhone, permitindo gravação estéreo de microfones externos via Lightning, USB-C ou Bluetooth. A seleção da fonte de entrada é feita através de AVAudioSession.sharedInstance().setPreferredInput, o que é fundamental para aplicações que trabalham com headsets externos e microfones Bluetooth.
AVFoundation fornece duas formas principais de reproduzir mídia: AVPlayer para vídeo e AVAudioPlayer para áudio. Vamos ver um exemplo de reprodução de um fluxo HLS remoto usando AVPlayer.
O código cria um AVPlayer, carrega um fluxo HLS a partir de uma URL e inicia a reprodução com um nível de volume reduzido. O AVPlayerItem gerencia o estado de carregamento e buffer, e a observação KVO do status permite tratar erros.
import AVFoundation
import AVKit
// 1. Criar AVPlayer com fluxo HLS
let url = URL(
string: "https://example.com/stream.m3u8"
) !
let player = AVPlayer(url: url)
player.volume = 0.7
// 2. Reprodução
player.play()
// 3. Exibir o player
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true)
// 4. Monitorar o status
player.currentItem?.addObserver(
self,
forKeyPath: "status",
options: .new,
context: nil
)
O código cria um AVPlayer com uma URL HLS, define o volume para 70% e inicia a reprodução. O AVPlayerViewController fornece uma IU integrada com controles, AirPlay e modo picture-in-picture. O status do player é monitorado via KVO para lidar com casos em que o fluxo HLS está temporariamente indisponível.
Para reprodução de áudio sem interface de vídeo, utiliza-se AVAudioPlayer — um player leve que não requer AVPlayerItem. O AVAudioPlayer suporta formatos de áudio MP3, AAC, ALAC, FLAC, WAV e AIFF, fornece métodos play(), pause() e stop(), bem como o delegate AVAudioPlayerDelegate para monitorar a conclusão da reprodução e erros de decodificação. O AVAudioPlayer é ideal para reprodução de música em segundo plano, podcasts e efeitos sonoros em jogos no iOS e macOS.
Vamos ver mais dois cenários típicos de trabalho com AVFoundation: processamento de áudio via AVAudioEngine e exportação de vídeo para outro formato.
AVAudioEngine permite processar áudio em tempo real conectando nós em um grafo de processamento: nó de entrada (microfone) → efeitos → nó de saída (altifalante). No exemplo abaixo, é adicionada reverberação à voz.
let engine = AVAudioEngine()
let reverb = AVAudioUnitReverb()
// Configurar reverberação
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 40
// Conexão: microfone -> reverberação -> altifalante
engine.attach(reverb)
engine.connect(
engine.inputNode,
to: reverb,
format: nil
)
engine.connect(
reverb,
to: engine.mainMixerNode,
format: nil
)
try? engine.start()
O AVAudioEngine cria um grafo de três nós: entrada (microfone), efeito (reverberação com preset de salão grande) e saída (altifalante). Após engine.start(), o áudio do microfone é processado pelo efeito em tempo real e enviado para os auscultadores ou altifalante do dispositivo. A latência de processamento é inferior a 10 ms em todos os dispositivos Apple modernos.
Uma capacidade adicional do AVAudioEngine é a análise de som através de AVAudioUnitEQ e AVAudioUnitMixer. O desenvolvedor pode adicionar um equalizador, compressor e limitador a qualquer fluxo de áudio. Para aplicações musicais, a AVFoundation fornece AVAudioSequencer para reprodução de arquivos MIDI e AVSpeechSynthesizer para síntese de fala. Todos os componentes funcionam num único grafo de áudio, proporcionando uma latência entre captura e processamento inferior a 5 ms em dispositivos Apple.
Ao trabalhar com AVFoundation, é importante considerar as permissões do sistema: para aceder à câmara é necessário NSCameraUsageDescription no Info.plist, e para o microfone, NSMicrophoneUsageDescription. A AVFoundation mostra automaticamente o diálogo de pedido de permissão do sistema na primeira tentativa de acesso a um dispositivo. A recusa do utilizador é tratada através de AVCaptureDevice.authorizationStatus(), permitindo mostrar uma mensagem adequada sobre a indisponibilidade da câmara com sugestão de ir às Definições.
A AVFoundation suporta reprodução de áudio em segundo plano através do Audio Background Mode nas Capacidades do projeto. Para ativar, basta adicionar a entrada audio no UIBackgroundModes do Info.plist e configurar o AVAudioSession com a categoria .playback. O vídeo não é reproduzido em segundo plano por padrão, mas pode usar o AVPlayer com o modo picture-in-picture para continuar a reprodução de vídeo numa aplicação minimizada no iPad. O ícone do modo PiP é configurado através de AVPictureInPictureController juntamente com o delegate do protocolo.
Perguntas frequentes
iOS 4+ para reprodução e captura básicas. iOS 8+ para AVAudioEngine. iOS 17+ para AVAssetWriter em modo HDR. A versão atual do framework é suportada em todos os dispositivos iPhone, iPad e Mac.
Sim, o AVPlayer suporta HLS (HTTP Live Streaming) — o principal protocolo da Apple para streaming. Para enviar mídia para o servidor, use AVAssetWriter com um protocolo personalizado sobre URLSession.
AVFoundation é um framework de baixo nível para trabalhar com mídia. AVKit é uma camada sobre a AVFoundation que fornece componentes de IU prontos: AVPlayerViewController, AVPictureInPictureController e AVPipView.
Sim, desde o iOS 11 a AVFoundation suporta FLAC (Free Lossless Audio Codec) para reprodução. ALAC (Apple Lossless) é suportado desde o iOS 4. Ambos os codecs funcionam através de AVAudioPlayer e AVPlayer.
Através do RPScreenRecorder do ReplayKit, que usa AVFoundation internamente. A partir do iOS 9, a gravação de ecrã está disponível via RPScreenRecorder.shared().startRecording() com microfone opcional.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também