如何从字节数组播放音频? (没有网址)

时间:2013-06-07 12:58:36

标签: javascript java-ee bytearray inputstream html5-audio

我从Web服务接收ByteArray,我希望能够在HTML5音频标签中播放音频ByteArray。我想知道是否可能,因为音频标签需要一个URL

<!DOCTYPE html>
<%@page import="yourphone.voicemail.*"%>
<%@page import="com.verscom.ws.*"%>
<%@page import="com.verscom.methods.*"%>

<body>
    <button onclick="playSound()">Play Me</button>
    <button onclick="pausrSound()">Pause</button>
    <audio id="audio" controls="controls">
        <source id="mainSrc" type="audio/mp3" onplay="playSound()"></source>
    </audio>
</body>


<script type="text/javascript"> 
var audio = document.getElementById("audio");

function playSound(){ 
<% 
EndUserPortalWSServiceStub.GetVoiceMailMessageVcomResponse[] getvmMsgResp = new EndUserPortalWSServiceStub.GetVoiceMailMessageVcomResponse[2];
EndUserMethods endUserMethods = new EndUserMethods();
getvmMsgResp = endUserMethods.getVoiceMailList();

%>
audio.src= <%=getvmMsgResp[0].getVmailMessageWAVFile().getDataSource().getInputStream()%>;
audio.play(); }

function pausrSound(){ audio.pause(); }

</script>

以下代码不起作用:

audio.src =&lt;%= getvmMsgResp [0] .getVmailMessageWAVFile()。getDataSource()。getInputStream()%&gt;;

任何想法?

1 个答案:

答案 0 :(得分:1)

从firefox(ctrl U)这样的浏览器中查看生成的源代码,可以看到您将Java输入流分配给java脚本对象。那没有意义。解决问题的一种方法是读取Java中的输入流(在您的服务器上),将其保存到基于音频src的唯一文件名,然后将该文件的相对路径提供给双引号之间的audio.src。

首先从静态html文件中尝试相同的html,就像

一样
audio.src= "resources/audio/mysong.mp3";

必须将mp3更改为正确的extn,具体取决于您从Web服务获取的格式类型。

要保存输入流,您可以搜索如何将任何输入流保存到文件(java.io.FileOutputStream)

对于重复调用您不想要的相同音频,insted有一个标准的命名约定,首先检查文件是否已创建并保存(如果文件大小可能,如果缓存有一些),如果它已经存在那么只需制作html(设置音频src而不重新保存文件)

如果两个人同时要求播放歌曲,可能会出现许多问题,必须使用缓存和暂停,并向用户提供一些反馈。也许更好的方法是呈现页面,然后使用ajax向服务器询问URL,并通过动态html告诉用户页面'loading'。当服务器有url时(如果需要保存文件后)它将响应,然后ajax驱动的javascript将设置audio.src并播放文件。