2014-10-16 53 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