Основная цель приложения, которое я пытаюсь сделать, - это одноранговая потоковая передача видео.(Вроде как FaceTime с использованием Bluetooth / WiFi).
Используя AVFoundation, я смог захватить буферы сэмплов видео / аудио.Затем я отправляю данные буфера данных видео / Audo.Теперь проблема состоит в том, чтобы обработать данные буфера сэмплов на принимающей стороне.
Что касается буфера сэмплов видео, я смог получить UIImage из буфера сэмплов.Но для буфера аудиосэмпла я не знаю, как его обработать, чтобы я мог воспроизвести аудио.
Поэтому вопрос как мне обработать / воспроизвести буферы аудиосэмпла ?
Прямо сейчас я просто строю график формы волны, как в примере кода Apple Wavy:
CMSampleBufferRef sampleBuffer;
CMItemCount numSamples = CMSampleBufferGetNumSamples(sampleBuffer);
NSUInteger channelIndex = 0;
CMBlockBufferRef audioBlockBuffer = CMSampleBufferGetDataBuffer(sampleBuffer);
size_t audioBlockBufferOffset = (channelIndex * numSamples * sizeof(SInt16));
size_t lengthAtOffset = 0;
size_t totalLength = 0;
SInt16 *samples = NULL;
CMBlockBufferGetDataPointer(audioBlockBuffer, audioBlockBufferOffset, &lengthAtOffset, &totalLength, (char **)(&samples));
int numSamplesToRead = 1;
for (int i = 0; i < numSamplesToRead; i++) {
SInt16 subSet[numSamples / numSamplesToRead];
for (int j = 0; j < numSamples / numSamplesToRead; j++)
subSet[j] = samples[(i * (numSamples / numSamplesToRead)) + j];
SInt16 audioSample = [Util maxValueInArray:subSet ofSize:(numSamples / numSamplesToRead)];
double scaledSample = (double) ((audioSample / SINT16_MAX));
// plot waveform using scaledSample
[updateUI:scaledSample];
}