【问题标题】:How to receive RTP Packets which are Streaming from RTP URL in iOS Device? (e.g. rtp://@225.0.0.0)如何在 iOS 设备中接收从 RTP URL 流式传输的 RTP 数据包? (例如 rtp://@225.0.0.0)
【发布时间】:2017-06-03 23:11:32
【问题描述】:
【问题讨论】:
标签:
ios
objective-c
swift
audio-streaming
rtp
【解决方案1】:
首先,您需要了解其工作原理。
发送者,即 RTP 流的创建者,可能正在执行以下操作:
- 使用数据源:如果是音频,这可能是麦克风或音频样本或文件
- 使用 AAC 或 Opus 等音频编解码器对音频进行编码。
- 使用 RTP 打包器从编码的音频帧创建 RTP 数据包
- 使用 UDP 等传输层发送这些数据包
RTSP 等协议提供了必要的信令信息,以提供更好的流信息。通常 RTP 本身是不够的,因为拥塞控制、反馈、动态比特率等事情都是在 RTCP 的帮助下处理的。
无论如何,为了存储传入的流,您需要执行以下操作:
使用 RTP 拆包器从中获取编码的音频帧。您可以自己编写或使用第三方实现。事实上,ffmpeg 是一个大框架,它包含大多数编解码器和协议所需的所有代码。但是,对于您的情况,请找到一个简单的 RTP 拆包器。可能有与特定编解码器相对应的标头,以确保您引用正确的 RFC。
一旦您可以访问编码帧,您就可以在媒体容器(如 m4a 或 ogg)中写入相同的内容,具体取决于流中使用的音频编解码器。
为了播放流,您需要执行以下操作:
使用 RTP 拆包器从中获取编码的音频帧。您可以自己编写或使用第三方实现。事实上,ffmpeg 是一个大框架,它包含大多数编解码器和协议所需的所有代码。但是,对于您的情况,请找到一个简单的 RTP 拆包器。
一旦您可以访问编码帧,请使用音频解码器(作为库提供)对帧进行解码,或检查您的平台是否直接支持该编解码器进行播放
一旦您可以访问解码的帧,在 iOS 中,您就可以使用 AVFoundation 来播放它。
如果您正在寻找一种简单的方法,可以使用第三方实现,例如 http://audiokit.io/