Какие методы лучше всего транслировать данные с видеокамеры с iPhone на компьютер? - PullRequest
29 голосов
/ 19 октября 2010

Я бы хотел транслировать видео с камеры iPhone в приложение, работающее на Mac. Подумайте, что-то вроде видеочата, но только в одном направлении, от устройства до приложения-получателя (и это не видеочат).

Мое базовое понимание до сих пор:

  1. Вы можете использовать AVFoundation для получения «живых» данных видеокамеры без сохранения в файл, но это несжатые данные, и поэтому мне придется самостоятельно обрабатывать сжатие.
  2. Нет встроенной поддержки AVCaptureOutput для отправки в сетевое расположение, мне бы пришлось поработать над этим самостоятельно.

Я прав насчет вышесказанного или я уже не в курсе?

Apple Tech Q & A 1702 предоставляет некоторую информацию о сохранении отдельных кадров в качестве изображений - это лучший способ сделать это? Просто сэкономив 30 кадров в секунду, а затем что-то вроде ffmpeg, чтобы сжать их?

Существует много дискуссий о прямой трансляции на iPhone, но гораздо меньше информации о людях, отправляющих живое видео. Я надеюсь на несколько широких ударов, чтобы направить меня в правильном направлении.

Ответы [ 2 ]

24 голосов
/ 10 ноября 2010

Вы можете использовать AVCaptureVideoDataOutput и sampleBufferDelegate для захвата необработанных сжатых кадров, тогда вам просто нужно передать их по сети. AVFoundation предоставляет API для кодирования кадров в локальные видеофайлы, но не обеспечивает его для потоковой передачи в сеть. Лучше всего найти библиотеку, которая передает потоковые кадры по сети. Я бы начал с ffmpeg; Я считаю, что libavformat поддерживает RTSP, посмотрите код ffserver.

Обратите внимание, что вы должны настроить AVCaptureVideoDataOutput для предоставления сжатых кадров, чтобы избежать необходимости сжатия необработанных видеокадров без использования аппаратного кодирования.

20 голосов
/ 10 ноября 2010

Это во многом зависит от вашего целевого разрешения и типа производительности, на которую вы ориентируетесь.

С абстрактной точки зрения, я бы, вероятно, имел бы поток захвата для заполнения буфера непосредственно из AVCaptureOutput и коммуникационный поток для отправки и сброса буфера (дополненного, если необходимо) на ранее указанный хост каждый х миллисекунды.

После того, как вы выполните начальную передачу данных, я буду работать над достижением 15 кадров в секунду при самом низком разрешении и продолжу свой путь до тех пор, пока буфер не переполнится, прежде чем коммуникационный поток сможет передавать, что потребует балансировки разрешения изображения, размера буфера (вероятно, зависит от GSM и скоро будут размеры кадра CDMA) и, наконец, максимальная скорость, с которой вы можете передавать этот буфер.

...