使用FMOD从Internet流式传输MP3

时间:2011-08-22 22:13:31

标签: mp3 fmod

我认为这将是一个相对简单的任务,如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);

编辑:

这是我在阅读Mathew的答案后修改的内容

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”,它与网络上名为test.mp3的文件相同,但不再适用于上述更改。也许这些文件只是错误的格式或什么?对不起我在这个领域缺乏知识,我真的不太了解声音,但试图搞清楚。

谢谢, 凯尔

1 个答案:

答案 0 :(得分:3)

MP3可能在开始时有大量标签,因此FMOD会读取它们然后尝试回到起点(由于它是一个网络流,它无法做到)。您可以尝试使用FMOD_IGNORETAGS和FMOD_CREATESOUNDEXINFO,并将suggestsoundtype设置为FMOD_SOUND_TYPE_MPEG吗?

如果这不起作用,您可以将网址发布到已知无效的MP3流吗?

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