Question Quelles techniques sont les meilleures pour diffuser des données de caméra vidéo iPhone sur un ordinateur?


Je voudrais diffuser de la vidéo depuis une caméra iPhone vers une application fonctionnant sur un Mac. Pensez à une sorte de chat vidéo, mais seulement dans un sens, depuis l’appareil jusqu’à l’application de réception (et non le chat vidéo).

Ma compréhension de base jusqu'à présent:

  1. Vous pouvez utiliser AVFoundation pour obtenir des données de caméra vidéo «en direct» sans les sauvegarder dans un fichier, mais ce sont des données non compressées et je devrais donc gérer moi-même la compression.
  2. Il n'y a pas de support AVCaptureOutput intégré pour l'envoi vers un emplacement réseau, je devrai travailler ce bit seul.

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

Apple Tech Q & A 1702 fournit des informations sur la sauvegarde d'images individuelles sous forme d'images - est-ce la meilleure façon de procéder? Juste économiser 30 images par seconde et puis quelque chose comme ffmpeg pour les compresser?

Il y a beaucoup de discussions sur la diffusion en direct sur iPhone, mais beaucoup moins sur les personnes qui envoient des vidéos en direct. J'espère que je pourrai faire quelques grands pas pour me diriger dans la bonne direction.


29
2017-10-19 00:04


origine


Réponses:


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

D'un point de vue abstrait, j'aurais probablement un thread de capture pour remplir un tampon directement à partir d'AVCaptureOutput, et un thread de communication pour envoyer et redéfinir le tampon (rempli si besoin est) à un hôte précédemment spécifié X millisecondes.

Après avoir effectué le transfert de données initial, je travaillerais à atteindre 15 ips à la résolution la plus basse et à progresser jusqu'à ce que le tampon déborde avant que le thread de communication puisse transmettre, ce qui nécessiterait un équilibrage de la résolution de l'image être des tailles de trames CDMA), et enfin le débit maximal auquel vous pouvez transmettre ce tampon.


19
2017-11-10 03:24



Vous pouvez utiliser AVCaptureVideoDataOutput et un sampleBufferDelegate pour capturer des images compressées brutes, il vous suffit de les diffuser sur le réseau. AVFoundation fournit une API pour encoder les images en fichiers vidéo locaux, mais ne fournit aucune information pour la diffusion en continu sur le réseau. Votre meilleur pari est de trouver une bibliothèque qui diffuse des images brutes sur le réseau. Je commencerais par ffmpeg; Je pense que libavformat supporte RTSP, regardez le code ffserver.

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


24
2017-11-10 09:11