gpt4 book ai didi

streaming - “Hook” libMMS 到 FFmpeg 用于 iPhone 流媒体

转载 作者:行者123 更新时间:2023-12-04 23:17:39 25 4
gpt4 key购买 nike

这些天,我正在研究 iPhone Streaming(基于 MMS 协议(protocol))的软件架构。

众所周知,为了播放彩信音频流,我们应该调用 libMMS 从远程媒体服务器读取 wma 流数据,然后调用 FFmpeg 将流数据从 wma 格式解码到 PCM 数据缓冲区,最后将 PCM 数据入队缓冲到 iPhone 的音频队列中以生成真实的声音。

上面的介绍只是描述了 iPhone 流媒体的工作过程。如果我们只需要实现这个简单的功能,那并不难。只需按照上面的介绍一步步调用libMMS、FFMpeg和audioqueue,就可以实现流功能了。实际上,我上周已经实现了代码。

但是,我需要的不仅仅是一个简单的流媒体功能!我需要一个软件架构,让 FFmpeg 访问 libMMS 就像访问本地文件系统一样!

有人知道如何将像 mms_read/mms_seek 这样的 libMMS 接口(interface)挂接到像 av_read_frame/av_seek_frame 这样的 FFmpeg 文件系统接口(interface)上吗?

最佳答案

我想这一次我必须再次回答我自己的问题……

经过几周的研究和调试,我终于得到了真相。

实际上,我们不需要将 libMMS “ Hook ”到 FFMpeg 上。为什么?因为 FFMpeg 已经拥有其原生 mms 协议(protocol)处理模块“mms_protocol”(参见 FFMpeg 中的 mms_protocol.c)。

我们需要做的只是配置 FFMpeg 以启用 mms 模块,如下所示(参见 FFMpeg 中的 config.h):

#define ENABLE_MMS_PROTOCOL 1
#define CONFIG_MMS_PROTOCOL 1

完成此配置后,FFMpeg 会将 mms 协议(protocol)添加到其协议(protocol)列表中。 (实际上,协议(protocol)列表中已经包含了“本地文件系统协议(protocol)”)。因此,FFMpeg 可以将“mms://hostserver/abc”媒体文件视为本地媒体文件。因此,我们仍然可以使用以下命令打开和读取 mms 媒体文件:
av_open_input_file();
av_read_frame();

就像我们之前在本地媒体文件上所做的一样!

顺便说一句,在我的 ffmpeg 版本中,用于处理 mms 协议(protocol)的 libAVFormat 模块中仍然存在许多错误。我花了一周的时间调试它,但是,我认为对于像你这样聪明的人来说它会更短:-)

关于streaming - “Hook” libMMS 到 FFmpeg 用于 iPhone 流媒体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7751393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com