2017-01-19 17 views
8

Я пытаюсь передать RTP-пакеты (которые транслируют аудио) с URL-адреса RTP, например. rtp: //@225.0.0.0 после стольких исследований по тому же, что у меня несколько потоковый URL-адрес на моем устройстве и проигрывание его с https://github.com/maknapp/vlckitSwiftSample. Это только воспроизведение потоковых данных, но не имеет функции для хранения данных.Как получить пакеты RTP, которые передаются с RTP-адреса в устройстве iOS? (например, rtp: //@225.0.0.0)

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

Я пробовал по следующей ссылке.

  1. https://github.com/kewlbear/FFmpeg-iOS-build-script

  2. https://github.com/chrisballinger/FFmpeg-iOS

Эти два даже не компиляции из-POD Issues других проектов или руководство просто дать мне ссылку на RTSP поток вместо RTP потока.

Если кто-нибудь может дать нам руководство или любую идею о том, как мы можем реализовать такие вещи, тогда это будет оценено.

ответ

6

Прежде всего, вам нужно понять, как это работает.

Отправитель т.е. создателя RTP потока, вероятно, делает следующее:

  1. Использует источник данных: В случае аудио, это может быть микрофон или аудио-сэмплы или файл
  2. Кодирует звук с помощью аудиокодека, такого как AAC или Opus.
  3. использует RTP для создания пакетирования RTP пакетов из кодированных кадров звука
  4. использует транспортный уровень, таких как UDP, чтобы отправить эти пакеты

протоколов, таких как RTSP обеспечивает необходимую информацию сигнализации, чтобы обеспечить более полную информацию потока. Обычно самого RTP недостаточно, так как с помощью RTCP обрабатываются такие вещи, как контроль перегрузки, обратная связь, динамическая скорость передачи данных.

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

  1. Используйте депакетирование RTP, чтобы получить кодированные звуковые кадры из него. Вы можете написать свой собственный или использовать стороннюю реализацию. На самом деле ffmpeg - это большая структура, которая имеет весь необходимый код для большинства кодеков и протоколов. Однако для вашего случая найдите простой депакетизатор RTP. Могут быть заголовки, соответствующие определенному кодеку, чтобы убедиться, что вы ссылаетесь на правильный RFC.

  2. Как только у вас есть доступ к закодированным фреймам, вы можете написать то же самое в медиаконтейнере, таком как m4a или ogg, в зависимости от аудиокодека, используемого в потоке.

Для того, чтобы играть в поток, вам нужно сделать следующее:

  1. Используйте депакетирование RTP, чтобы получить кодированные звуковые кадры из него. Вы можете написать свой собственный или использовать стороннюю реализацию. На самом деле ffmpeg - это большая структура, которая имеет весь необходимый код для большинства кодеков и протоколов. Однако для вашего случая найдите простой депакетизатор RTP.

  2. После того, как вы имеете доступ к закодированным кадрам, используйте звуковой декодер (имеются в библиотеке) для декодирования кадров или проверьте, если ваша платформу поддерживает этот кодек непосредственно для воспроизведения

  3. После того, как у вас есть доступ к декодированным кадрам , в iOS вы можете использовать AVFoundation, чтобы играть то же самое.

Если вы смотрите на простой способ сделать это, может быть использовать реализацию третьей стороны, такие как http://audiokit.io/