Как я могу преобразовать CMSampleBuffer с данными изображения в формат, подходящий для отправки по сетевому соединению? - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу отправлять кадры видеопотока по сетевому соединению, поэтому я реализовал функцию AVCaptureVideoDataOutputSampleBufferDelegate:

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)

Как преобразовать CMSampleBuffer в данные как функцию NWConnection:

func send(content: Data?, contentContext: NWConnection.ContentContext = default, isComplete: Bool = default, completion: NWConnection.SendCompletion)

, который я использую для работы в сети, ожидает данные для своего параметра содержимого?

1 Ответ

0 голосов
/ 01 февраля 2019

Предположительно, вы хотите сжать видеокадры перед их отправкой по сети, поскольку для несжатых видеокадров может потребоваться более высокая пропускная способность, чем у вас есть.И вы захотите использовать аппаратный компрессор для скорости.

Вы можете получить доступ к аппаратному компрессору и декомпрессору, используя каркас VideoToolbox .

Вам следует посмотреть сеанс 513 WWDC 2014, «Прямой доступ к кодированию и декодированию видео» .Вот цитата из введения:

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

Стенограмму сеанса можно найти по адресу ASCIIwwdc .

...