从c#将音频流传输到网页

时间:2015-08-27 19:52:12

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

[WebMethod]
public void PlayAudio(int id)
{


    using (The_FactoryDBContext db = new The_FactoryDBContext())
    {
        if (db.Words.FirstOrDefault(word => word.wordID == id).engAudio != null)
        {
            byte[] bytes = db.Words.FirstOrDefault(word => word.wordID == id).engAudio;

            MemoryStream ms = new MemoryStream(bytes);
            System.Media.SoundPlayer myPlayer = new System.Media.SoundPlayer(ms);
            myPlayer.Play();
        }
    }



}

显然在上面的代码中实际播放音频的是通过System.Media.SoundPlayer对象的C#代码,而不是浏览器,这就是它不能在服务器上播放的原因。

任何人都可以告诉我如何将音频从c#流式传输到网页,这样我就可以使用HTML5音频标签将其挂钩到按钮

1 个答案:

答案 0 :(得分:2)

只需将流发送到客户端,浏览器就会决定如何播放它(您必须提供音频的MIME类型):

public ActionResult PlayAudio(int id)
{
    MemoryStream ms = null;
    using (The_FactoryDBContext db = new The_FactoryDBContext())
    {
        if (db.Words.FirstOrDefault(word => word.wordID == id).engAudio != null)
        {
            byte[] bytes = db.Words.FirstOrDefault(word => word.wordID == id).engAudio;

            ms = new MemoryStream(bytes);
        }
    }
    return File(ms,"audio/mpeg");//if it's mp3
}

对于网络服务,请尝试以下方法:

[WebMethod]
public void PlayAudio(int id)
{
    byte[] bytes = new byte[0];
    using (The_FactoryDBContext db = new The_FactoryDBContext())
    {
        if (db.Words.FirstOrDefault(word => word.wordID == id).engAudio != null)
        {
            bytes = db.Words.FirstOrDefault(word => word.wordID == id).engAudio;

        }
    }
    Context.Response.Clear();
    Context.Response.ClearHeaders();
    Context.Response.ContentType = "audio/mpeg";
    Context.Response.AddHeader("Content-Length", bytes.Length.ToString());
    Context.Response.OutputStream.Write(bytes, 0, bytes.Length);
    Context.Response.End();
}