Захватывайте, кодируйте и транслируйте видео с iPhone на сервер

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

Я прочитал довольно много материала. Может ли кто-нибудь сообщить мне, правильно ли следующее, и заполнить пробелы для меня.

  1. To record video on the iPhone I should use the AVFoundation classes. When using the AVCaptureSession the delegate method captureOutput:didOutputSampleBuffer::fromConnection I can get access to each frame of video. Now that I have the video frame I need to encode the frame
    • I know that the Foundation classes only offer H264 encoding via AVAssetWriter and not via a class that easily supports streaming to a web server. Therefore, I am left with writing the video to a file.
    • Я читал другие сообщения, в которых говорится, что они могут использовать два AssetWritter для записи 10-секундных блоков, а затем NSStream для этих 10-секундных блоков на сервер. Может кто-нибудь объяснить, как кодировать использование двух AVAssetWriters, работающих вместе для достижения этой цели. Если у кого-то есть код, поделитесь, пожалуйста.

person user1952069    schedule 06.01.2013    source источник
comment
Поделитесь, что в итоге использовали?   -  person Dheeraj Vepakomma    schedule 06.08.2015


Ответы (1)


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

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

Я нашел другой способ потоковой передачи видео здесь .

В этом примере открываются 2 файла AVAssetWriter. Затем в первом кадре он записывает в два файла, но сразу же закрывает один из файлов, поэтому атом moov записывается. Затем с данными атома moov второй файл можно использовать в качестве канала для получения потока закодированных видеоданных. Этот пример работает только для отправки видеоданных, но это очень чистый и простой для понимания код, который помог мне понять, как решать многие проблемы с видео на iPhone.

person chillyoyo    schedule 29.05.2013
comment
у меня есть вопрос по вашему ответу, как я могу встроить аудиоданные в это - person Mr.G; 26.03.2015