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 スクリプト オブジェクトに割り当てていることがわかります。それは意味がありません。問題を解決する 1 つの方法は、(サーバー上の) Java で入力ストリームを読み取り、オーディオ src に基づいて一意のファイル名に保存し、そのファイルへの相対パスを二重引用符で囲まれた audio.src に指定することです。

最初に静的htmlファイルから同じことを試してください。関連するhtmlは次のようになります

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

Web サービスから取得する形式のタイプに応じて、mp3 を正しい拡張子に変更する必要があります。

入力ストリームを保存するには、任意の入力ストリームをファイル (java.io.FileOutputStream) に保存する方法を検索できます。

また、これを望まない同じオーディオを繰り返し呼び出す場合は、標準の命名規則を使用して、最初にファイルが作成および保存されているかどうかを確認します (おそらくサイズで、キャッシュの場合は何らかの種類で) ファイルが既に存在する場合は、 html (ファイルを再保存せずにオーディオ src を設定)

2 人が同時に曲を要求した場合、いくつかの問題が発生する可能性があります。キャッシュを使用し、一時停止してユーザーにフィードバックを与える必要があります。おそらくより良い方法は、ページをレンダリングしてから ajax を使用してサーバーに URL を要求し、動的 ​​html を介してページの「読み込み」をユーザーに伝えることです。サーバーがURLを取得すると(必要に応じてファイルを保存した後)、サーバーは応答し、ajaxを利用したjavascriptがaudio.srcを設定してファイルを再生します。

于 2013-06-07T15:07:24.033 に答える