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. C++11中std::unordered_map的使用

    unordered map is an associative container that contains key-value pairs with unique keys. Search, in ...

  2. Laravel trait 使用心得

    trait 是在PHP5.4中为了方便代码复用的一种实现方式,但目前我在看的的PHP项目中较少看的有程序员去主动使用这个实现方式,在laravel中有很多 trait 的使用,关于trait 在 la ...

  3. gcc支持的一种结构体赋值方式

    struct info{ int a; char b; struct fd{    int c;    int d;          }fg;}; 其实我们也可以这样赋值:同样对于其他的类型也是一样 ...

  4. shllter自动和手动实例

    加壳: wineconsole shellter A,选自动 将putty.exe移到/usr/share/shllter/目录,PE设置为putty.exe LHOST,LPORT 监视: use ...

  5. express4.x Request对象获得参数方法小谈【原创】

    最近看完慕课网 “node.js 建站攻略”后, 对mongodb 操作有了进一步认识, 为了进一步巩固该数据库知识, 于是使用学到的知识搭建一个最简单的mongoDemo. 搭建完成后已放到Gith ...

  6. 看图说说class文件结构(部分)

  7. IntricCondition和expliciteCondition比较

    IntricCondition 和 expliciteCondition 的区别 与 intrinsicLoc和expliciteLock的区别很相似, expliciteCondition提供了更多 ...

  8. Hdu4280 Island Transport 2017-02-15 17:10 44人阅读 评论(0) 收藏

    Island Transport Problem Description In the vast waters far far away, there are many islands. People ...

  9. linux 流量统计

    因为很多vps或者服务器都是限流量的,但是又很多服务商并没有提供详细的流量表,比如每天的流量表,所以肯定有人很想知道自己服务器到底跑了多少流量. vnstat就是一个很好用的服务器流量统计命令.我截几 ...

  10. .net core redis使用

    整理下.net core的redis使用  可以分布式 Nuget安装 StackExchange.Redis using System; using System.Collections.Gener ...