2011-08-22 212 views
1

我认为这将是一个相对简单的任务,像FMOD,但我无法让它工作。即使是示例代码netstream似乎也没有办法。无论我尝试的NetStream实例程序,玩什么MP3,我得到这个错误:使用FMOD从互联网上流式传输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)无法执行搜索操作。这是媒体(即netstreams)或文件格式的限制。

在我进行更改之前,我可以使用netstream播放“C:\ test.mp3”,它是网上名为test.mp3的文件,但不再适用于上述更改。也许这些文件只是在错误的格式或东西?对不起,我对这方面的知识缺乏了解,我对声音知之甚少,但试图找出答案。

感谢, 凯尔

回答

3

这是可能的MP3已经在开始大量的标签,所以FMOD读取它们,然后尝试争取回到开始(它可以这样做,因为它是一个净流)。你可以尝试使用FMOD_IGNORETAGS,也许FMOD_CREATESOUNDEXINFO与建议的音频类型设置为FMOD_SOUND_TYPE_MPEG?

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

编辑: 有问题的文件有大约60KB的标签数据,FMOD很乐意阅读这些东西,但对于MPEG编解码器来说,它需要做一些小的寻求。既然你不能搜索网络流,所有的搜索都必须包含在低级文件缓冲区内。如果你调整了文件缓冲区的大小,使其更大一点,你可以克服这个限制。请参阅System :: setFileSystem“blockalign”参数。

+0

我是根据你的要求编辑的,当你在本地播放文件时,为什么它能工作?像c:\ test.mp3而不是http://mysite.com/test.mp3? –

+0

因为您告诉它建议的格式是MPEG(它会跳过标签编解码器),并且MPEG只搜索4k的数据来查找音频,所以它会失败。您可以使用FMOD_MPEGSEARCH来解决这个问题。此外,我编辑了我的答案,让文件为你工作。 –