1

我正在从 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= <%=getvmMsgResp[0].getVmailMessageWAVFile().getDataSource().getInputStream()%>;

任何想法 ?

4

1 回答 1

1

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

首先从静态 html 文件中尝试相同的内容,相关的 html 将类似于

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

必须根据您从 Web 服务获得的格式类型将 mp3 更改为正确的 extn。

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

同样对于您不希望重复调用的相同音频,insted 有一个标准的命名约定,首先检查文件是否已创建和保存(可能通过大小和某种缓存)如果它已经存在然后只需制作html(设置音频src而不重新保存文件)

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

于 2013-06-07T15:07:24.033 回答