Как лучше всего отправить кадры на сервер или как работает прямая трансляция на iOS? - PullRequest
3 голосов
/ 01 ноября 2011

Так как в текущем iOS SDK нет способа получить сжатые кадры из видео, как мы можем реализовать потоковую трансляцию, как это делал скайп? Единственное, что я вижу сейчас:

  1. получение несжатых кадров из AVCaptureVideoDataOutput
  2. сжать эти кадры с помощью сторонней библиотеки
  3. отправка фреймов на сервер

Есть ли другие способы выполнить эту задачу? Какие библиотеки можно использовать для сжатия и совместимы ли они с appstore? Заранее спасибо

1 Ответ

3 голосов
/ 29 ноября 2011

Я тоже с этим борюсь. Библиотека ffmpeg, похоже, работает для сжатия, но лицензирование означает, что вам нужно выпустить исходный код.

Вы можете установить свой объект в качестве делегата из AVCaptureVideoDataOutput и реализовать этот обратный вызов в очереди отправки:

  • (void) captureOutput: (AVCaptureOutput *) captureOutput didOutputSampleBuffer: (CMSampleBufferRef) sampleBuffer fromConnection: (AVCaptureConnection *) соединение;

Затем вы получите несжатое видео, которое вы можете обработать в виде uiimage или jpeg (для этого у Apple есть примеры кода), но нет способа получить аппаратно сжатые кадры H264, чего мы действительно хотим. Здесь вы можете реализовать такую ​​библиотеку, как ffmpeg, для сжатия видео в H264 или что-то еще.

В настоящее время я пытаюсь выяснить, могу ли я интерпретировать вывод файла AVAssetWriter и перенаправить его в поток (он может записывать видео с аппаратным сжатием), но Apple почему-то затрудняет это по какой-то причине.

Дайте мне знать, если найдете что-то, что работает.

...