Подтвердить что ты не робот

Какие методы лучше всего транслировать данные видеокамеры iPhone в реальном времени на компьютер?

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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