2014-10-16 34 views
3

我使用它在我的Vaadin应用程序中显示html5音频。当我在浏览器中简单地请求数据并保存文件时,它可以播放 - 但是当我在Vaadin中尝试时,它总是无法播放。当我使用它来播放.m4a声音文件(Vaadin 7.3.2)时,Vaadin音频元素不起作用

你能指出,我做错了什么?

public class AudioArea extends Audio { 

    public AudioArea(final int soundId) { 
     super(); 
     StreamResource resource = new StreamResource(
      new StreamResource.StreamSource() { 

       public InputStream getStream() { 
        byte[] data = MyVaadinUI.request.getBinaryData(
          soundId, BinaryDataSource.TYPE_SOUND, 0, 0); 
        if (data == null) { 
         return null; 
        } 
        return new ByteArrayInputStream(data); 
       } 
      }, ""); 
     setSource(resource); 
     markAsDirty(); 
    } 
} 

回答

0

您确定您的浏览器支持格式?如果你用纯html试试它,你可以玩吗?
如果浏览器支持的格式,那么我的建议是:

Audio audio = new Audio("MyAudio"); 
audio.setSource(new ThemeResource("audio/myAudio.m4a")); 
myLayout.addComponent(audio); 

而且你可以把该文件的主题文件夹下(或者你可以使用FileResource代替)。

编辑

也许缺少的MIME类型的问题是:

StreamResource resource = new StreamResource(
    new StreamResource.StreamSource() { 

     public InputStream getStream() { 
      byte[] data = MyVaadinUI.request.getBinaryData(
        soundId, BinaryDataSource.TYPE_SOUND, 0, 0); 
      if (data == null) { 
       return null; 
      } 
      return new ByteArrayInputStream(data); 
     } 
    }, "") { 
     @Override 
     public String getMIMEType() { 
      return "audio/mp4"; 
     } 
    }; 
+0

我可以直接打在Chrome的.m4a文件。它们也显示为html5