您的位置:首页 > 其它

关于视频播放的断点续传实现(.NET)

2017-08-02 10:34 357 查看
在实现视频播放功能时,如果不是采用了CDN服务器,而是将视频播放文件直接放在了站点下,这时考虑采用断点续传,有利于优化播放速度。而且,大多数播放器支持缓冲播放。

闲话不多说,直接上代码:

using System;
using System.IO;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace Video3dApp.Controllers
{
public class Video3dController : Controller
{

public ActionResult BrandUSA() {
return View();
}

public ActionResult Detail() {
return View();
}

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post | HttpVerbs.Options)]
public void ReadVideo() {
var reqRange = Request.Headers["Range"];
string[] reqBlockRange = null;
if ( !string.IsNullOrEmpty(reqRange) ) {
reqBlockRange = reqRange.Replace("bytes=", "").Split('-');
Response.StatusCode = 206;
Response.AddHeader("status", "206");
}

Response.AddHeader("accept-ranges", "bytes");
Response.AddHeader("access-control-allow-methods", "HEAD, GET, OPTIONS");
Response.AddHeader("access-control-allow-origin", "*");
Response.AddHeader("cache-control", "public, max-age=30726563");
Response.AddHeader("content-disposition", $"attachment;  filename=test.mp4");
Response.ContentType = "video/mp4";

string fileName = Server.MapPath("/UploadFiles/test.mp4");

using ( var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) )
using (var reader=new BinaryReader(stream)) {
long fileSize = stream.Length;

long startPosition = 0;
long partialSize = fileSize;
if ( reqBlockRange != null ) {
startPosition = Convert.ToInt32(reqBlockRange[0]);
partialSize = fileSize - startPosition;
}

//Read partial content into the buffer with a specified size
byte[] buffer = new byte[(int)partialSize];
// go to offset address
reader.BaseStream.Seek(startPosition, SeekOrigin.Begin);

// fill buffer from starting at address to address + BlockSise
reader.Read(buffer, 0, (int)partialSize);
Response.AddHeader("content-range", $"bytes {startPosition}-{startPosition + partialSize - 1}/{fileSize}");
Response.AddHeader("Content-Length", $"{partialSize}");
Response.BinaryWrite(buffer);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  断点续传 .net 视频 cdn