【问题标题】:Streaming MP3 from Internet with FMOD使用 FMOD 从 Internet 流式传输 MP3
【发布时间】:2011-08-23 15:42:56
【问题描述】:

我认为这将是一个相对简单的任务,比如 FMOD,但我无法让它工作。即使是示例代码 netstream 似乎也不能解决问题。无论我尝试使用 netstream 示例程序播放什么 mp3,我都会收到此错误:

FMOD error! (20) Couldn't perform seek operation.  This is a limitation of the medium (ie netstreams) or the file format.

我真的不明白这是什么意思。这不正是 netstream 示例程序的用途吗?从互联网流式传输一些文件?

我无法通过 createSound 方法

result = system->createSound(argv[1], FMOD_HARDWARE | FMOD_2D | FMOD_CREATESTREAM | FMOD_NONBLOCKING,  0, &sound);

编辑:

这是我在阅读马修的回答后修改的

FMOD_CREATESOUNDEXINFO soundExInfo;
memset(&soundExInfo, 0, sizeof(FMOD_CREATESOUNDEXINFO));
soundExInfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
soundExInfo.suggestedsoundtype = FMOD_SOUND_TYPE_MPEG;

result = system->createSound(argv[1], FMOD_HARDWARE | FMOD_2D | FMOD_CREATESTREAM | FMOD_NONBLOCKING | FMOD_IGNORETAGS,  &soundExInfo, &sound);

根据我使用的文件,我得到两个不同的错误。

测试 1 网址:http://kylegobel.com/test.mp3

测试 1 错误:(25) 不支持的文件或音频格式。


测试 2 网址:http://kylegobel.com/bullet.mp3

测试 2 错误:(20) 无法执行查找操作。这是媒体(即网络流)或文件格式的限制。

在进行更改之前,我可以使用 netstream 播放“C:\test.mp3”,它与 web 上名为 test.mp3 的文件相同,但不再适用于上述更改。也许这些文件只是格式错误或其他什么?对不起,我缺乏这方面的知识,我真的不太了解声音,但试图弄清楚。

谢谢, 凯尔

【问题讨论】:

    标签: mp3 fmod


    【解决方案1】:

    可能 MP3 在开头有大量标签,因此 FMOD 读取它们然后尝试回到开头(它不能这样做,因为它是一个网络流)。您可以尝试使用 FMOD_IGNORETAGS 或者 FMOD_CREATESOUNDEXINFO 并将建议的声音类型设置为 FMOD_SOUND_TYPE_MPEG 吗?

    如果这不起作用,您可以将 URL 发布到已知的不工作的 MP3 流吗?

    编辑: 有问题的文件有大约 60KB 的标签数据,FMOD 很乐意阅读这些内容,但要让 MPEG 编解码器工作,它需要做一些小的搜索。由于您无法搜索网络流,所有搜索必须包含在低级文件缓冲区中。如果您调整文件缓冲区大小,使其更大一点,您可以克服此限制。见 System::setFileSystem "blockalign" 参数。

    【讨论】:

    • 我根据您的要求进行了编辑,知道为什么在本地播放文件时它会起作用吗?像 c:\test.mp3 而不是 mysite.com/test.mp3?
    • 因为您告诉它建议的格式是 MPEG(它会跳过标签编解码器),而 MPEG 只搜索 4k 的数据来寻找它会失败的音频。您可以使用 FMOD_MPEGSEARCH 来解决这个问题。我还编辑了我的答案以使文件为您工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 2010-10-14
    相关资源
    最近更新 更多