1  原因分析

https://www.zhihu.com/question/41818719

2 代码实现

1 注意点: 请求时 : header中 range 请求多少长度 代码要返回相应的长度  比如Byte 0-1

  /// <summary>
/// 返回mp4 兼容苹果
/// </summary>
/// <param name="context"></param>
/// <param name="filePath"></param>
private void CreateVideoResponse(HttpContext context, string filePath)
{
var reqRange = context.Request.Headers["Range"];
string[] reqBlockRange = null;
if (!string.IsNullOrEmpty(reqRange))
{
reqBlockRange = reqRange.Replace("bytes=", "").Split(new[] { "-"},StringSplitOptions.RemoveEmptyEntries);
context.Response.StatusCode = ;
context.Response.AddHeader("status", "");
}
using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var reader = new BinaryReader(stream))
{
long fileSize = stream.Length; long startPosition = ;
long partialSize = fileSize;
if (reqBlockRange != null)
{
            //safari
startPosition = Convert.ToInt64(reqBlockRange[]);
if(reqBlockRange.Length > )
{
long endPosition = fileSize;
if (long.TryParse(reqBlockRange[], out endPosition))
{
partialSize = endPosition - startPosition + ;
}
}else
{
              // chrome 等
partialSize = fileSize - startPosition;
}
} byte[] buffer = new byte[(int)partialSize];
reader.BaseStream.Seek(startPosition, SeekOrigin.Begin);
reader.Read(buffer, , (int)partialSize); context.Response.AddHeader("accept-ranges", "bytes");
context.Response.AddHeader("access-control-allow-methods", "HEAD, GET, OPTIONS");
context.Response.AddHeader("cache-control", "public, max-age=30726563");
context.Response.ContentType = "video/mp4";
context.Response.Cache.SetLastModified(DateTime.Now);
context.Response.AddHeader("Connection", "keep-alive");
context.Response.AddHeader("content-range", $"bytes {startPosition}-{startPosition + partialSize-1 }/{fileSize}");
context.Response.AddHeader("Content-Length", $"{partialSize}");
context.Response.BinaryWrite(buffer);
} }

Safari 不能播放Video ,Chrome等可以 问题解决。的更多相关文章

  1. Animator 动画第一次播放正常,之后播放都不正常的问题解决

    Animator 动画第一次播放正常,之后播放都不正常的问题解决 问题描述 第一次点击图片动画播放正常,在点击文字之后,图片没有显示出来,点击空白,播放动画,显示文字. 写了一个卡片翻转的动画,代码如 ...

  2. html5 点击播放video的方法

    html5 点击播放video的方法<pre> <video videosrc="{$vo.shipinurl}" controls="" x ...

  3. Video标签播放视频?谷歌浏览器?safari?? 谷歌浏览器播放不了mp4格式的视频的原因

    webm格式和mp4格式,判断了浏览器能否支持的视频类型后,给了一个if判断,如果是支持mp4格式,就返回视频后缀mp4,如果是webm,就返回后缀webm.结果,在谷歌浏览器中播放不了,为什么我指定 ...

  4. 【转】Android HTML5 Video视频标签自动播放与自动全屏问题解决

    为了解决 HTML5Video视频标签自动播放与全屏问题,在网上找了很多相关资料,网上也很多关于此问题解决方法,但几乎都不能解决问题,特别对各大视频网站传回来的html5网页视频自动播放与全屏问题,我 ...

  5. safari坑之 video

    博客地址: https://www.seyana.life/post/19 本来是打算给博客左上角的gif做个优化, 把gif换成webm,以video的形式自动播放,能从180k降到50k, 现在浏 ...

  6. google无法播放mp4 chrome无法播放h264

    写在前面 我在chrome上无法播放h264+Acc的mp4,在firefox.ie都可以播放,而且此mp4在vlc终可以正常播放. 视频链接:http://106.14.221.185:7001/p ...

  7. CSS Hack技术详解,支持IE 6-11、Chrome、FireFox、Safari、Opera 6-11、Chrome、FireFox、Safari、Opera6-11、Chrome、FireFox、Safari、Opera6-11、Chrome、FireFox、Safari、Opera

    转自: http://www.365mini.com/page/css-hack-ie-chrome-firefox-safari-opera.htm 当前网络时代,各种各样的网页向我们展示着丰富多彩 ...

  8. 【实战问题】【3】iPhone无法播放video标签中的视频

    问题:视频都是MP4格式,视频可以在手机上正常播放.video标签中的视频在安卓点击可以播放,但在iPhone无法播放 解决方案: 1,视频编码格式问题,具体iPhone手机支持的是哪些格式可见官方的 ...

  9. [完美]原生JS获取浏览器版本判断--支持Edge,IE,Chrome,Firefox,Opera,Safari,以及各种使用Chrome和IE混合内核的浏览器

    截至自2017-08-11,支持现世已出的几乎所有PC端浏览器版本判断. 受支持的PC端浏览器列表: Edge IE Chrome Firefox Opera Safari QQ浏览器 360系列浏览 ...

随机推荐

  1. ubuntu库文件路径pkgconfig

    settings--->compiler and bug settings -->link settings 在左边添加libpthread.a  ,右边添加 -lpthread即可. u ...

  2. sizeToFit & sizeThatFits

    [sizeToFit & sizeThatFits] 1.sizeToFit,根据sizeThatFits方法返回的大小来调整receiver的大小.自定义子类不应该覆盖这个方法. 2.siz ...

  3. redis集群种类(转)

    原文:http://blog.csdn.net/c295477887/article/details/52487621 关于redis主从.哨兵.集群的介绍网上很多,这里就不赘述了. 一.主从 通过持 ...

  4. Google’s Project Tango is shutting down because ARCore is already here

    https://www.theverge.com/2017/12/15/16782556/project-tango-google-shutting-down-arcore-augmented-rea ...

  5. ZOJ2256 Mincost 2017-04-16 19:36 44人阅读 评论(0) 收藏

    Mincost Time Limit: 2 Seconds      Memory Limit: 65536 KB The cost of taking a taxi in Hangzhou is n ...

  6. spark on yarn模式下配置spark-sql访问hive元数据

    spark on yarn模式下配置spark-sql访问hive元数据 目的:在spark on yarn模式下,执行spark-sql访问hive的元数据.并对比一下spark-sql 和hive ...

  7. 【MVC】使用FormCollection获取Form表单数据

    public ActionResult Create(FormCollection form) { string name = form["name"]; //姓名 string ...

  8. ASP.NET2.0 Newtonsoft.Json 操作类分享

    JSON 是现在比较流行的数据交互格式,NET3.0+有自带类处理JSON,2.0的话需要借助Newtonsoft.Json来完成,不然自己写的话,很麻烦. 网上搜索下载 Newtonsoft.Jso ...

  9. JS三个编码函数和net编码System.Web.HttpUtility.UrlEncode比较

    JS三个编码函数和net编码比较 总结 1.escape.encodeUri.encodeUriComponent均不会对数字.字母进行编码.2.escape:对某些字符(如中文)进行unicode编 ...

  10. UWP开发砸手机系列(一)—— Accessibility

    因为今天讨论的内容不属于入门系列,所以我把标题都改了.这个啥Accessibility说实话属于及其蛋疼的内容,即如何让视力有障碍的人也能通过声音来使用触屏手机……也许你这辈子也不会接触,但如果有一天 ...