Предоставление JW Player файла фильма из базы данных

То, что я пытаюсь сделать, это воспроизвести файл .mp4 в JW Player, который предоставляется базой данных в байтах.

Итак, вот мой скрипт для JW Player:

<script type="text/javascript"> 
    jwplayer("contvideo").setup({ 
    flashplayer:"jwplayer/player.swf", 
    file: "downloadvideo.aspx", 
    provider: "video", 
    height: 140, 
    width: 188, 
    skin: "jwplayer/slim.zip", 
    modes: [{type:'flash',src:'jwplayer/player.swf'},{type:'html5'},{type:'download'}] }); 
</script>

Сценарий получает файл фильма из службы веб-страницы downloadvideo.aspx.

Код для downloadvideo.aspx:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim bytes() As Byte = System.IO.File.ReadAllBytes("C:\websites\videospecialty\wdo.mp4")

    Response.Clear()
    Response.AddHeader("Content-Disposition", "attachment;filename=wdo.mp4")
    Response.ContentType = "video/mp4"
    Response.Flush()

    Response.OutputStream.Write(bytes, 0, bytes.Length)
    Response.OutputStream.Flush()

    Response.End()

End Sub

Но когда я пробую эту ошибку JW Player, она говорит, что видео не найдено.

Любая помощь с этим была бы очень признательна.


person Necro    schedule 12.11.2012    source источник


Ответы (1)


Кажется, что JW Player определяет тип файла для воспроизведения на основе расширения файла в опции file. Поскольку вы передаете их с диска через страницу ASPX, у вас ее нет.

Вот как я работал с JW Player 6 (используя mp3 - у меня не было под рукой mp4):

jwplayer("player1").setup({
    flashplayer: "/jwplayer/jwplayer.flash.swf",
    file: '/Streamer.ashx',
    height: 340,
    width: 388,
    type: 'mp3'
});

Ключом было использование type, чтобы указать, какой файл был на другом конце. Единственная ссылка, которую я могу предложить для этого, это здесь: это относится к 2007 году, но мне не удалось найти упоминания о type в документации.

Вдохновлено: Как передать файлы .flv из базы данных SQL я реализовал обработчик HTTP для потоковой передачи:

public class Streamer : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        string filePath = "my file path";
        byte[] buffer = File.ReadAllBytes(filePath);

        context.Response.Clear();
        context.Response.Cache.SetCacheability(HttpCacheability.Public);
        context.Response.Cache.SetLastModified(DateTime.Now);
        context.Response.AppendHeader("Content-Type", "audio/mpeg3");
        context.Response.AddHeader("Content-Disposition", "attachment;filename=file.mp3");
        context.Response.AppendHeader("Content-Length", buffer.Length.ToString());

        context.Response.BinaryWrite(buffer);
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

Обратите внимание, что страница ASPX, вероятно, также будет работать нормально, хотя обработчики больше подходят для такого рода задач (и должны быть более эффективными, поскольку у них нет страничного цикла).

Чтение всего файла в память не идеально, но этого достаточно для проверки концепции.

person nick_w    schedule 12.11.2012