SimpleCaptcha和wav播放

我们的客户正在使用SimpleCaptcha 。 我的理解是SimpleCaptcha能够以WAVE格式(.wav)生成音频validation码。 之后这些CAPTCHA-s使用HTML5音频标签播放,如下所示:

 

当然这不是跨浏览器兼容的,其中一个原因是WAVE格式。 此链接表明IE9仅支持MP3,而大多数其他浏览器都支持OGG和WAVE。 进一步的MP3是给Fraunhofer的专利吗?

注意:我们的后端是基于Java的。

我的问题是,我们可能为不支持WAVE格式(例如IE9)或HTML5音频标签的客户提供什么样的最佳后备? 由于专利问题,我想在服务器端动态转换为mp3不是一种选择。 此外我不知道任何可以做到这一点的java库…我已经看到了很好的解决方案,比如jPlayer,但他们说“对于跨浏览器支持,必须提供一种既适用于HTML5又适用于Flash的格式。”,即mp3 ,mp4。 我也没有找到任何可靠的基于闪光的WAVE播放器。

在社区中其他人的帮助下,我创建了一个Flash按钮,可以将WAV文件从服务器传输到客户端。 它与Securimage PHP Captcha一起分发,用于将音频CAPTCHA流式传输到客户端。

您可以简单地使用此Flash按钮,或下载并修改Flash 源代码,以基于相同的代码创建您自己的自定义代码。

当HTML5音频不可用时,您可以将其用作后备。

示例用法是:

    

您可以将这些附加选项传递给securimage_play.swf

  • bgcol :Flash按钮的背景颜色
  • icon_file :png图像的URL,显示为Flash按钮上的图标

另外,我确实发现微软决定不支持标签中的WAV音频,特别是因为他们是IBM的先驱WAV格式。 是的WAV文件比它们支持的其他压缩音频格式更大,但带宽也增加到无关紧要的程度。

希望有所帮助。 如果您尝试实施它并有任何问题,请告诉我。 您可以在此处查看音频流的演示。

我认为@ drew010的帮助和他们的按钮真棒! 谢谢。

为了解决SimpleCaptcha(16000Hz)和闪存播放器支持的音频(11025Hz)之间的速率频率支持相同的问题,我使用了替代解决方案而不是更改simplecaptcha源或尝试在flash编程时解决它。

我的validation码实现有一个自定义音频validation码servlet(由simplecaptcha支持),所以我在这篇文章中使用@Claude提供的提示,使用tritonus lib转换音频采样率。 这段代码看起来像这样:

  AudioFormat outDataFormat = new AudioFormat((float) 11025.0, (int) 16, (int) 1, true, false); AudioInputStream lowResAIS = AudioSystem.getAudioInputStream(outDataFormat, audioCapthca.getChallenge().getAudioInputStream()); 

我的validation码servlet代码如下:

 public class AudioCaptchaServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Map voicesMap = new HashMap(); String[] fileLocs0 = {"/captcha/pt_BR/0.wav"}; String[] fileLocs9 = {"/captcha/pt_BR/1.wav"}; (...) voicesMap.put(0, fileLocs0); voicesMap.put(1, fileLocs1); (...) VoiceProducer voiceProducer = new RandomNumberVoiceProducer(voicesMap); AudioCaptcha ac = new AudioCaptcha.Builder() .addAnswer() .addNoise() .addVoice(voiceProducer) .build(); req.getSession().setAttribute(AudioCaptcha.NAME, ac.getAnswer()); //Converte Sons com bitrate de 16000Hz (simplecaptcha) para 11025Hz (suportada pelo flash player) AudioFormat outDataFormat = new AudioFormat((float) 11025.0, (int) 16, (int) 1, true, false); AudioInputStream lowResAIS = AudioSystem.getAudioInputStream(outDataFormat, ac.getChallenge().getAudioInputStream()); CaptchaServletUtil.writeAudio(resp, new Sample(lowResAIS)); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } } 

如果还有人还在寻找它。 这是我的代码。 它适用于所有浏览器。