[英]HTML5 audio element with source being audio stored as varbinary bytes from database
这是一个普通的音频播放器,但是如果我希望将源音频存储在数据库中,该如何实现?
<audio controls="controls" autoplay="true" loop="loop">
<source src="WhiteChristmas.mp3"/>
</audio>
这是我当前使用WebService从数据库中读取音频文件的方式。
[WebMethod]
public void PlayXhosa(int id)
{
using (The_FactoryDBContext db = new The_FactoryDBContext())
{
if (db.Words.FirstOrDefault(word => word.wordID == id).xhosaAudio != null)
{
byte[] bytes = db.Words.FirstOrDefault(word => word.wordID == id).xhosaAudio;
MemoryStream ms = new MemoryStream(bytes);
System.Media.SoundPlayer myPlayer = new System.Media.SoundPlayer(ms);
myPlayer.Play();
}
}
}
这就是我目前的客户端代码
function PlayXhosa() {
var id = $("[id$=hiddenWord_id]").val();
$.ajax({
url: "../../WebService.asmx/PlayXhosa",
data: "{ 'id': '" + id + "'}",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
success: function (data) {
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
}
});
};
然后,我尝试调用此函数,如下所示:
var audio = document.createElement('audio');
audio.autoplay = false;
audio.oncanplaythrough = function() {
foo.disabled = false;
};
audio.src = 'PlayXhosa()';
foo.onclick = function() {
audio.play();
}
然后是按钮。
<button id="foo" disabled>play xhosa audio</button>
该问题与您的HTML无关。 您的HTML仍将通过HTTP引用媒体的位置。 不同之处在于您将编写一个脚本,该脚本除了从数据库字段输出原始二进制数据外,什么也不做。
<source src="yourScript.aspx?file=WhiteChristmas.mp3" />
然后在脚本中,确保设置适当的标题:
Response.AddHeader("Content-Type", "audio/mpeg");
然后,回显该字段的内容。 您已经有了字节数组,因此只需使用类似Response.BinaryWrite(bytes)
类的东西。
通过提出另一个稍有不同但仍然相同的问题,我就能得到这个问题的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.