音频视频的播放的进度调整(以.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读取本地文件夹的视频文件,并且在窗口中创建拖动控制条来显示并且控制视频文件的读取进度. 此程序调试花费了笔者近一天时间,其实大体程序都已经很快写出,结果执 ...
随机推荐
- 用C语音编写python的扩展模块,也就是python调c库
用C语音编写python的扩展模块,也就是python调c库 1.用C语言扩展Python的功能: http://www.ibm.com/developerworks/cn/linux/l-pyt ...
- eclipse中export 的jar file与 runnable jar file的区别
(1)直接运行 .class的方法 java -cp . com.guangfa.demo1 , 不用加.class后缀 .-cp 是 -classpath 缩写,是指定类运行所依赖其他 ...
- vue组件结构
1.组件结构 2.项目结构
- Java日期时间以及日期相互转换_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 Java日期时间,以及相互转化,供大家参考,具体内容如下 package com.study.string; impor ...
- 大数加法(A + B Problem Plus)问题
解题思路 两个⼤数可以⽤数组来逐位保存,然后在数组中逐位进⾏相加,再判断该位相加后是否需要进位.为了⽅便计算,可以把数字的低位放到数组的前面,高位放在后面. 样例输入 3 18 22 56 744 5 ...
- Django模板自定义标签和过滤器,模板继承(extend),Django的模型层
上回精彩回顾 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 Quer ...
- Java——开发环境配置
[1]JDK的安装与卸载 (1)卸载程序 控制面板--添加或删除程序--J2SE Development Kit和J2SE Runtime Envioroment--删除 (2)安装程 ...
- 一本通【例题4】Addition Chains——题解
又是一道剪枝剪了半天的搜索题...题目传送 要充分利用题目中的约束条件:1.:2.对于每个k(1≤k≤m)k(1≤k≤m)满足ak=ai+aj(0≤i,j≤k−1)ak=ai+aj(0≤i,j≤k−1 ...
- (10.1)Python学习笔记二
1.在项目工程中要模块化测试一个开发的功能,在测试通过后交付给项目组其他人员继续开发.要保证代码开发的性能和效率以及可扩展性. 2.项目工程中的文件夹分类要功能模块明确清晰,在python中引入某一个 ...
- 小程序swiper实现订单页面
小程序swiper实现订单页面 myOrder.wxml <!--pages/myorder/myorder.wxml--> <view class="swiper-tab ...