音频视频的播放的进度调整(以.net为例)
Background:对于音视频在线播放,一些小应用是靠nginx处理访问视频、音频文件的请求,对外应用的一般会托管至各种云上使用相关的服务。前者存在巨大的安全隐患,后者会有一定的成本。有的时候还是需要自己造个轮子。
step 1:先实现文件下载
[HttpGet]
public IActionResult Get()
{
var filePath = @"E:\test.wav";
var name = @"tes1t.wav";
FileStream fs = new FileStream(filePath, FileMode.Open);
return File(fs, "application/octet-stream", name);
}
前面的audio标签是可以播放和正常下载的,但是并不能实现进度控件的调整
step2:请求的区别
Nginx的处理是可以实现播放进度调整的。在前端请求相同的情况下,两者用nginx代理和刚才的下载的主要区别如下:

可以看出Content-Range对应的正是请求头中的Range

关于这几个头部信息可参考这篇文章:https://blog.csdn.net/thewindkee/article/details/80189434
这3个标签同时也是文件实现断点续传的关键。
step3:断点续传
这样进度的调整就转化为了断点续传功能。
.net可参考:https://www.cnblogs.com/Leo_wl/p/8467796.html
public FileStreamResult Index(string auth,string filename)
{
if (auth != null && auth.Length >)
{
// 处理权限问题
}
else
{
return null;
} int size, end, length = ;
int start; MemoryStream Mstream;
using (FileStream reader = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
{
byte[] bytes = new byte[reader.Length];
//var strd = new StreamReader(reader); size = bytes.Length;
start = ;
end = size - ;
length = size;
Response.Headers["Accept-Ranges"] = "0-" + size;
if (!String.IsNullOrEmpty(Request.Headers["Range"]))
{
int anotherStart = start;
int anotherEnd = end;
var headerRange = Request.Headers["Range"];
string[] arr_split = headerRange.FirstOrDefault().Split(new char[] { Convert.ToChar("=") });
Debug.WriteLine(arr_split);
string range = arr_split[];
if (range.IndexOf(",") > -)
{
Response.Headers["Content-Range"] = "bytes " + start + "-" + end + "/" + size; Response.StatusCode = ; }
if (range.StartsWith("-"))
{
// The n-number of the last bytes is requested
anotherStart = size - Convert.ToInt32(range.Substring());
}
else
{
arr_split = range.Split(new char[] { Convert.ToChar("-") });
anotherStart = Convert.ToInt32(arr_split[]);
int temp = ;
anotherEnd = (arr_split.Length > && Int32.TryParse(arr_split[].ToString(), out temp)) ? Convert.ToInt32(arr_split[]) : size;
}
anotherEnd = (anotherEnd > end) ? end : anotherEnd;
if (anotherStart > anotherEnd || anotherStart > size - || anotherEnd >= size)
{
Response.Headers["Content-Range"] = "bytes " + start + "-" + end + "/" + size;
Response.StatusCode = ; }
start = anotherStart;
end = anotherEnd;
length = end - start + ; // Calculate new content length
reader.Read(bytes, start, length);
Response.StatusCode = ;
}
else
{
reader.Read(bytes, , bytes.Length);
}
Mstream = new MemoryStream(bytes);
}
Response.Headers["Content-Range"] = "bytes " + start + "-" + end + "/" + size;
Response.Headers["Content-Length"] = length.ToString();
Response.Headers.Add("Content-Disposition", "attachment; filename=download.wav");
return new FileStreamResult(Mstream, "applicaton/octet-stream");
}
.netcore 2.2 修改版本
音频视频的播放的进度调整(以.net为例)的更多相关文章
- iOS 微信 音频 视频自动播放
iOS 微信 音频 视频自动播放 http://www.w3ctech.com/topic/1165
- HTML中的音频 视频 的播放代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- HTML5 音频视频
HTML5 视频和音频的 DOM 参考手册 HTML5 DOM 为 <audio> 和 <video> 元素提供了方法.属性和事件. 这些方法.属性和事件允许您使用 JavaS ...
- HTML5媒体(音频/视频)
摘要: 在HTML5出现之前,web媒体大部分通过Flash来实现.这种方式造成了文件大加载慢,影响网站性能,开发难度高,维护麻烦,不易扩展等.这就导致HTML5自己开始支持媒体功能.HTML5 DO ...
- html5音频视频专题
html5音频视频专题 总结 1. 操作的就是video和audio两个对象,这两个对象有他们的属性和方法,通过对象的id就可以操作他们 <audio src="../video/琴箫 ...
- HTML-参考手册: HTML 音频/视频
ylbtech-HTML-参考手册: HTML 音频/视频 1.返回顶部 1. HTML 音频/视频 DOM 参考手册 HTML5 DOM 为 <audio> 和 <video> ...
- embed标签的使用(在网页中播放各种音频视频的插件的使用)
播放器插件使用说明: 代码:< EMBED src=“music.mid”autostart=“true”loop=“2”width=“80”height=“30”> src:音乐文件的路 ...
- 照相、从相册上取照片、播放音频、播放本地视频、播放网络视频、MPMoviePlayerController
一.照相.从相册上去照片 1. 先判断是否支持照相功能 *判断当前设备是否支持照相功能,支持返回YES 否则返回NO 注意:模拟器不支持照相功能 把握一个原则只要是物理硬件相关的功能模拟器都不支持 例 ...
- 播放一个视频并用滚动条控制进度-OpenCV应用学习笔记二
今天我们来做个有趣的程序实现:利用OpenCV读取本地文件夹的视频文件,并且在窗口中创建拖动控制条来显示并且控制视频文件的读取进度. 此程序调试花费了笔者近一天时间,其实大体程序都已经很快写出,结果执 ...
随机推荐
- python getattr函数的妙用
import platform class Test: def test(self): func = getattr(self,'windows') func() @staticmethod def ...
- HDU 5418 Victor and World (状态压缩dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5418 题目大意:有n个结点m条边(有边权)组成的一张连通图(n <16, m<100000 ...
- asp.net (web)选择文件夹 上传文件
1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...
- PHP超大文件上传与下载
前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...
- 【bzoj3038】上帝造题的七分钟2
*题目描述: XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. “第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平 ...
- [spring cloud feign] [bug] 使用对象传输get请求参数
前言 最近在研究 srping cloud feign ,遇到了一个问题,就是当 get 请求 的参数使用对象接收时,就会进入熔断返回.经过百度,发现网上大部分的解决方案都是将请求参数封装到Reque ...
- va_list原理及用法
最后更新:2017-02-22 这是一篇很早很早的博客文章,虽然很基础,但是毕竟曾经历程,因此也保存下来 1. 概念 va_list 是在C语言中定义的宏,指在解决 变参问题是指参数的个数不定,可以是 ...
- 170905-MyBatis中的关系映射
===关系映射=== 参考文档复习:1对1,1对多,多对多 1.映射(多)对一.(一)对一的关联关系 1).使用列的别名 ①.若不关联数据表,则可以得到关联对象的id属性 ②.若还希望得到关联对象的其 ...
- 笨办法学Python(learn python the hard way)--练习程序41
下面是练习41,基于python3 #ex41.py 1 #打印文档字符串 print(函数名.__doc__) 2 from sys import exit 3 from random import ...
- open 函数处理文件
open函数用于文件处理 操作文件时,一般需要经历如下步骤:1 打开文件 2 操作文件 f = open("文件名" , ' 打开文件方式' ) 文件句柄 ...