Ma voiture n'a pas CarPlay — alors je l'ai construit. Un iPad fixé au tableau de bord affiche en temps réel le mirroring de Waze depuis mon iPhone, la musique en cours, la météo et des contacts d'appel rapide. Le tout communique en pair-à-pair sur le hotspot de l'iPhone : aucun serveur, aucune connexion Internet requise pour le flux vidéo.
Swift / SwiftUIStreaming vidéo H.264Multipeer ConnectivityReplayKitVideoToolboxTemps réelAPI REST (Open-Meteo)Architecture modulaire
Contexte & Problématique
Les systèmes CarPlay d'origine sont absents des voitures plus anciennes, et les solutions du marché (autoradios compatibles) sont coûteuses et limitées. L'idée : transformer un iPad en dashboard embarqué qui réplique l'essentiel — navigation, musique, appels — en exploitant l'iPhone déjà présent dans la voiture. Contrainte majeure : Waze ne partage ses données de navigation avec aucune app tierce, la seule voie possible est le mirroring d'écran temps réel.
Démarche
01
Dashboard & widgets autonomes
Grille SwiftUI modulaire (chaque widget conforme à un protocole commun), lecteur Apple Music interactif avec playlists, météo Open-Meteo sur 6 heures, contacts d'appel rapide configurables.
02
Liaison iPhone ↔ iPad
Canal pair-à-pair Multipeer Connectivity (découverte Bonjour, zéro configuration) transportant messages de données — batterie, position GPS relayée pour la météo — et flux vidéo sur le même lien.
03
Mirroring vidéo temps réel
Capture d'écran par Broadcast Upload Extension (ReplayKit), encodage H.264 matériel (VideoToolbox, budget mémoire 50 Mo), transport hybride fiable/non-fiable, décodage et affichage sur l'iPad.
Architecture
📱
App iPad — le dashboard
Layout adaptatif portrait/paysage, zone Waze dimensionnée au ratio exact de l'écran iPhone, widgets musique, météo, contacts et batterie.
📡
Extension broadcast — la capture
Capture chaque frame de l'écran iPhone, encode en H.264 temps réel et diffuse — keyframes en transport fiable, inter-frames en non-fiable pour minimiser la latence.
🔗
Transport Multipeer — le lien
Un seul canal pair-à-pair pour tout : vidéo, config décodeur (renvoyée à chaque keyframe pour la reconnexion à chaud), batterie et position GPS.
🎛️
App companion — le cockpit iPhone
Démarrage du broadcast en un tap (RPSystemBroadcastPickerView), ouverture de Waze, envoi périodique de la batterie et du GPS en arrière-plan.
Résultat
Le système fonctionne en conditions réelles dans ma Citroën C4 : l'iPad affiche la carte Waze avec une latence imperceptible, la musique se pilote depuis le tableau de bord, et le tout survit aux rotations d'écran et aux reconnexions. Développé intégralement avec un compte développeur Apple gratuit — le code est open source sur GitHub.