我正在尝试从RTP URL流式传输RTP数据包(流式传输音频),例如rtp:// @225.0.0.0经过如此多的研究,我在设备上有点流式传输URL并使用https://播放github.com/maknapp/vlckitSwiftSample.这只是播放流数据,但没有任何存储数据的功能.
从研究和其他来源,我发现了很多内容和简单的信息,这些信息应该有助于通过RTP流式传输数据包并将其存储在iOS设备中.
我试过以下链接.
https://github.com/kewlbear/FFmpeg-iOS-build-script
https://github.com/chrisballinger/FFmpeg-iOS
这两个甚至没有编译,因为POD问题其他项目或指南只是给我参考RTSP流而不是RTP流.
如果有人能给我们一个指导或任何想法,我们如何能够实现这些事情,那么我们将不胜感激.
首先,您需要了解其工作原理.
发件人即RTP流的创建者可能正在执行以下操作:
使用数据源:如果是音频,则可以是麦克风或音频样本或文件
使用音频编解码器(如AAC或Opus)对音频进行编码.
使用RTP打包器从编码的音频帧创建RTP数据包
使用UDP等传输层发送这些数据包
诸如RTSP之类的协议提供必要的信令信息以提供更好的流信息.通常RTP本身是不够的,因为在RTCP的帮助下处理拥塞控制,反馈,动态比特率等事情.
无论如何,为了存储传入流,您需要执行以下操作:
使用RTP解包器从中获取编码的音频帧.您可以自己编写或使用第三方实现.事实上,ffmpeg是一个大框架,它拥有大多数编解码器和协议的所有必需代码.但是对于您的情况,找一个简单的RTP解包器.可能存在与特定编解码器对应的标头,以确保您引用正确的RFC.
一旦您可以访问编码的帧,您就可以在媒体容器(如m4a或ogg)中编写相同的内容,具体取决于流中使用的音频编解码器.
要播放流,您需要执行以下操作:
使用RTP解包器从中获取编码的音频帧.您可以自己编写或使用第三方实现.事实上,ffmpeg是一个大框架,它拥有大多数编解码器和协议的所有必需代码.但是对于您的情况,找一个简单的RTP解包器.
一旦您可以访问编码的帧,使用音频解码器(可用作库)来解码帧或检查您的平台是否支持该编解码器直接播放
一旦您可以访问已解码的帧,在iOS中,您可以使用AVFoundation播放相同的内容.
如果您正在寻找一种简单的方法,可以使用第三方实现,例如http://audiokit.io/