我制作了一个可以播放mp3的播放器,并且做得很好(在flash AS3中构建一个安全稳定的播放器不是一件容易的任务)。它还可以播放多个电台的mp3流。mp3流的"问题"是,我不知道如何检测它是flash中的mp3流(在互联网和adobe网站上找不到任何文档)。此外,我不知道缓冲这些流的最佳方式是什么。
无论如何,我已经制定了一些复杂的检测方法,通过检查getBytesLoaded()
和sound.length
在一段(长)时间内的变化来确定它是一个流。这是为了"告诉"播放器在流/文件完成时不要等待,或者在文件损坏时跳过文件。这种检测方法的问题是连接速度慢或连接速度快(两者都有副作用)。
例如,当它是一个慢速连接时,检测方法会失败,因为它认为文件是一个流,而当它是快速连接(或Chrome,它比Firefox更快地预加载流)时,它会认为文件已损坏,并跳过播放并启动下一个文件。
这一切都不容易解释,但主要问题是:我能在流的开头(打开后)看到/检测到它是mp3流吗?这样我就可以跳过我愚蠢的"guess-is-it-a-file-or-stream-test"了吗?
很抱歉我今天英语不好,但我必须解决这个问题。有人知道这个问题的稳定解决方案吗?我已经尝试过标头查找,但不能依赖它(发现了太多差异服务器标头)。
对不起,没有办法做到这一点,因为MP3文件和MP3流之间没有区别——它们完全是相同的数据。然而,如果你碰巧有一个文件描述符,或者另一个程序向你的播放器发出特定的响应,以确认要发送的数据的大小是已知的,那么你可以将该响应视为一个文件。