27 votes

Quelles sont les meilleures techniques pour diffuser en direct les données de la caméra vidéo de l'iPhone sur un ordinateur ?

Je voudrais diffuser une vidéo depuis une caméra iPhone vers une application fonctionnant sur un Mac. C'est un peu comme un chat vidéo, mais dans un seul sens, de l'appareil vers une application réceptrice (et ce n'est pas un chat vidéo).

Ce que j'ai compris jusqu'à présent :

  1. Vous pouvez utiliser AVFoundation pour obtenir des données de caméra vidéo "en direct" sans les enregistrer dans un fichier, mais il s'agit de données non compressées et je dois donc gérer la compression moi-même.
  2. Il n'y a pas de prise en charge intégrée de la sortie AVCaptureOutput pour l'envoi vers un emplacement réseau, il faudrait que je m'occupe de cette partie par moi-même.

Ai-je raison sur ce qui précède ou suis-je déjà hors sujet ?

Apple Tech Q&A 1702 fournit des informations sur la sauvegarde des images individuelles en tant qu'images - est-ce la meilleure façon de procéder ? Il suffit d'enregistrer 30 images par seconde et d'utiliser quelque chose comme ffmpeg pour les compresser ?

Il y a beaucoup de discussions sur le streaming en direct sur l'iPhone mais beaucoup moins d'informations sur les personnes qui envoient des vidéos en direct. J'espère avoir quelques idées générales pour m'orienter dans la bonne direction.

22voto

Chris Miles Points 2504

Vous pouvez utiliser AVCaptureVideoDataOutput et un sampleBufferDelegate pour capturer des images brutes compressées, il suffit alors de les diffuser sur le réseau. AVFoundation fournit une API pour encoder des images dans des fichiers vidéo locaux, mais n'en fournit aucune pour la diffusion sur le réseau. Votre meilleure chance est de trouver une bibliothèque qui diffuse des images brutes sur le réseau. Je commencerais avec ffmpeg ; je crois que libavformat supporte RTSP, regardez le code de ffserver.

Notez que vous devez configurer AVCaptureVideoDataOutput pour vous donner des images compressées, ce qui vous évite de devoir compresser des images vidéo brutes sans bénéficier de l'encodage matériel.

18voto

Greg Buehler Points 2639

Cela dépend beaucoup de votre résolution cible et du type de performance de fréquence d'images que vous visez.

D'un point de vue abstrait, j'aurais probablement un thread de capture pour remplir un tampon directement à partir de AVCaptureOutput, et un thread de communication pour envoyer et remettre à zéro le tampon (paddé si nécessaire) vers un hôte spécifié au préalable, chaque hôte. x millisecondes.

Après avoir réalisé le transfert de données initial, je m'efforcerais d'atteindre 15 images par seconde à la résolution la plus basse, et de travailler jusqu'à ce que la mémoire tampon déborde avant que le fil de communication puisse transmettre, ce qui nécessiterait d'équilibrer la résolution de l'image, la taille de la mémoire tampon (qui dépend probablement des tailles de trame GSM et bientôt CDMA), et enfin la vitesse maximale à laquelle vous pouvez transmettre cette mémoire tampon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X