我从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;;
任何想法?
答案 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并播放文件。