首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“Hook”libMMS to FFmpeg for iPhone流

“Hook”libMMS to FFmpeg for iPhone流
EN

Stack Overflow用户
提问于 2011-10-13 08:33:35
回答 1查看 1.2K关注 0票数 0

这些天,我正在研究iPhone流的软件体系结构(基于彩信协议)。

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

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

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

有人知道如何将mms_read/mms_ libMMS这样的libMMS接口连接到FFmpeg文件系统接口上,比如av_read_frame/av_read_frame?

EN

回答 1

Stack Overflow用户

发布于 2011-11-08 02:50:24

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

经过几个星期的反复研究和初试,我终于得到了真相。

实际上,我们不需要将libMMS“钩”到FFMpeg上。为什么?因为FFMpeg已经有了它的本机彩信协议处理模块“mms_protocol”(参见FFMpeg中的mms_protocol.c )。

我们所需要做的就是配置FFMpeg,以便像这样启用mms模块(参见FFMpeg中的config.h ):

代码语言:javascript
复制
#define ENABLE_MMS_PROTOCOL 1
#define CONFIG_MMS_PROTOCOL 1

在此配置之后,FFMpeg将将mms协议添加到其协议列表中。(实际上,协议列表已经包含了“本地文件系统协议”)。因此,FFMpeg可以像本地媒体文件一样处理“mms://hostserver/abc”媒体文件。因此,我们仍然可以使用以下方法打开和读取mms媒体文件:

代码语言:javascript
复制
av_open_input_file();
av_read_frame();

就像我们以前在本地媒体文件上做的那样!

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7751393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档