Потоковая передача звука с микрофона на Mac на iPhone - PullRequest
3 голосов
/ 04 октября 2011

Я работаю над личным проектом, где iPhone подключается к приложению серверного типа, работающему на Mac. IPhone отправляет и получает текстовые данные / данные ASCII через стандартные разъемы. Теперь мне нужно передать микрофон с Mac на iPhone. Я уже работал с AudioServices, но хотел проверить свои мысли, прежде чем углубиться.

Я думаю, что могу:
1. Создайте аудио-очередь в стандартном приложении Cocoa на Mac.
2. В функции обратного вызова аудио-очереди вместо записи в файл запишите его в другой сокет, который я открываю для потоковой передачи звука.
3. На iPhone получите необработанные сэмплированные / закодированные аудиоданные из потока TCP и поместите их в проигрыватель аудио-очереди, который выводится на наушники / динамик.

Я знаю, что это не маленькая задача, и я значительно упростил то, что мне нужно сделать, но может ли это быть так просто?

Спасибо за любую помощь, вы можете предоставить,
Stateful

1 Ответ

2 голосов
/ 05 октября 2011

В целом это выглядит разумно, но вам почти наверняка понадобится сделать еще несколько вещей:

  • Буферизация.На стороне «записи» вы, вероятно, не хотите блокировать аудио-очередь, если буфер заполнен.С точки зрения «воспроизведения», я не думаю, что вы можете просто передавать буферы в очередь (IIRC вам нужно будет буферизовать его, пока не получите обратный вызов).
  • Параллельность.Я почти уверен, что обратные вызовы AQ происходят в их собственном потоке, поэтому вам понадобятся какие-то блокировки / барьеры для доступа к буферу.
  • Пулы буферов, если выделение памяти заканчивается большими издержками.
  • Сжатие.AQ может дать вам кадры "IMA4" (IMA ADPCM 4: 1 или около того);Я не уверен, выполняет ли он аппаратную декомпрессию MP3 на iPhone.
  • Пакетизация, если, например, вам нужно чередовать голосовой чат с текстовым чатом.
  • РЕДАКТИРОВАТЬ: Воспроизведениесинхронизировать (или как вы должны это называть).Вы должны иметь возможность обрабатывать различные эффективные тактовые частоты звука, будь то из-за изменения задержки или чего-то еще.Skype делает это, изменяя скорость воспроизведения (с коррекцией высоты тона).
  • РЕДАКТИРОВАТЬ: Потеря пакета.Возможно, вам удастся обойтись без использования TCP по короткому каналу, но это во многом зависит от качества вашей беспроводной сети.UDP - это небольшая проблема, особенно если вам необходимо обнаружить дыру в MTU.

В зависимости от вашей скорости передачи данных, возможно, стоит использовать API сокетов нижнего уровня (BSD)и, возможно, даже с использованием readv () / writev ().

Если все, что вам нужно, это услуга "онлайн-радио", и вам не важен используемый протокол, может быть проще использовать AVPlayer / MPMoviePlayer длявместо этого воспроизводите аудио с URL .Это включает в себя реализацию сервера, который говорит протокол HTTP потоковой передачи Apple;Я считаю, что у Apple есть некоторый пример кода, который делает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...