2012-10-08 29 views
5

Tôi đang sử dụng mã từ codeproject article này để tải tệp video MP4 lên máy chủ SQL (varbinary (MAX)) và phát lại từ đó.Phát tệp video từ máy chủ sql thông qua bộ xử lý ashx bằng Thẻ video HTML5

Yêu cầu của tôi là sử dụng máy chủ SQL cụ thể thay vì lưu trữ và tìm nạp video từ hệ thống tệp.

Đây là mã tôi đang sử dụng để phát video:

<video id='my_video_1' controls 
    width="640" height="264" 
    data-setup="{"controls":true, "preload":none}" > 
    <source src='<%# "VideoHandler.ashx?id=" + Eval("ID") %>' type='video/mp4'> 
</video> 

Nếu tôi sử dụng một file video vật lý như các nguồn video, nó hoạt động. Tuy nhiên mã trên không hoạt động.

Trong "Internet Explorer" tag ám một hộp màu đen với một chữ thập đỏ

Trong "Chrome" các nút chơi có thể nhìn thấy nhưng khi tôi bấm nút play, không có video được phát. Khi chúng tôi nhấp chuột phải vào tùy chọn "Lưu video dưới dạng ..." và tệp đã tải xuống chạy tốt với trình phát đa phương tiện trên máy tính để bàn.

Vui lòng giúp tôi với mã đúng.

+0

Dấu ngoặc kép trong thuộc tính thiết lập dữ liệu có gây ra sự cố không? –

Trả lời

1

Kiểm tra khối mã <video> của bạn bằng nguồn video tĩnh. Sau khi đánh dấu của bạn được xác định là tốt, hãy kiểm tra trình xử lý, đảm bảo rằng nó mã hóa video chính xác và cung cấp chấp nhận chính xác. Hãy thử nó với Media player..etc

<video id='my_video_1' controls width="640" height="264" 
    data-setup='{"controls":true, "preload":none}' > 
    <source src='<%# "VideoHandler.ashx?id=" + Eval("ID") %>' 
    type='video/mp4 codecs="avc1.42E01E, mp4a.40.2"'> 
</video> 


public void ProcessRequest (HttpContext context) 
{ 
    .... 
    context.Response.AppendHeader("Content-Type", "video/mp4");` 
    context.Response.AppendHeader("Accept-Ranges", "bytes"); 

    byte[] fileContents = GetYourBytesFromWhereEver(); 
    context.Response.OutputStream.Write(fileContents, 0, fileContents.Length); 
    context.Response.Flush(); 
    ..... 
} 
5

HTML5 Video Tage yêu cầu hỗ trợ Range Requests.

Khi bạn đang phục vụ các tệp tĩnh, hỗ trợ này được cung cấp nội bộ bởi máy chủ, nhưng trong trường hợp HttpHandler, bạn cần tự mình cung cấp hỗ trợ này. Nói chung, điều này có nghĩa là xử lý các tiêu đề RangeIf-Range tiêu đề theo yêu cầu và phân phối phù hợp 206 Nội dung một phần câu trả lời với các tiêu đề Content-Range, DateETag hoặc Content-Location.

Bài viết Range Requests in ASP.NET MVC – RangeFileResult mô tả chi tiết làm thế nào để tạo ra một ASP.NET MVC ActionResult với Phạm vi Yêu cầu hỗ trợ - bạn sẽ có thể di chuyển tất cả các logic từ ExecuteResult phương pháp để ProcessRequest phương pháp HttpHandler không có vấn đề.

Các vấn đề liên quan