【问题标题】:HTML5 audio element with source being audio stored as varbinary bytes from database源为音频的 HTML5 音频元素,存储为数据库中的 varbinary 字节
【发布时间】:2015-11-27 01:04:50
【问题描述】:

这是一个普通的音频播放器,但如果我希望我的源是存储在我的数据库中的音频,我将如何实现这一点?

<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>

【问题讨论】:

标签: javascript c# html audio asp.net-mvc-5


【解决方案1】:

问题与您的 HTML 无关。您的 HTML 仍将通过 HTTP 引用媒体的位置。不同之处在于您将编写一个脚本,该脚本除了从数据库字段中输出原始二进制数据之外什么都不做。

<source src="yourScript.aspx?file=WhiteChristmas.mp3" />

然后在你的脚本中,一定要设置适当的标题:

Response.AddHeader("Content-Type", "audio/mpeg");

然后,回显该字段的内容。您已经有了字节数组,所以只需使用 Response.BinaryWrite(bytes) 之类的东西。

【讨论】:

  • 我将如何编写脚本?我不知道如何写它们。你可以给我看一个演示脚本吗?谢谢。
  • @LuluthoMgwali 我已经很久没有写过任何 C#了,但是你必须向我们展示你正在使用什么 ORM 以及你是如何开始获取数据的。
  • @LuluthoMgwali 这是您的客户端代码。你的服务器端代码在哪里?将其添加到您的问题中。
  • 这就是我目前使用的,但这只能在本地工作,而不是在发布时。这就是为什么我想使用 html5 音频标签。但我所有的数据都存储在我的数据库中
  • @LuluthoMgwali 我不明白你在做什么......你应该真正展示你的代码。您在服务器端所做的与您在客户端播放音频的方式无关。您可以使用 HTML5 音频标签,但浏览器必须从某个地方获取数据。您需要一个脚本来通过 HTTP 将数据库中的数据发送到浏览器。
【解决方案2】:

我可以通过问另一个略有不同但仍然相同的问题来得到这个问题的答案。

https://stackoverflow.com/a/32904927/5179424

【讨论】:

  • 如果此问题与您链接的问题重复,请将其标记为重复,而不是留下答案。如果不是重复的,请留下完整的答案,而不是仅链接的答案。
猜你喜欢
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
  • 2012-10-30
  • 2014-07-26
相关资源
最近更新 更多