ios支持video标签吗_video标签在iPhone手机上不能播放?万能的知乎大神请指引我,实在没办法了...

为了解释这个问题,用node写个简单例子

以下是server.js,同目录下还有个1.mp4

浏览器访问:http://localhost:3000,

const {createServer:server}=require('http')

const url=require('url')

const fs=require('fs')

const mp4Path='./1.mp4'

server((req,res)=>{

let pathname=url.parse(req.url).pathname

if(pathname==='/'){

res.writeHead(200,{'Content-Type':'text/html'})

res.end(``)

return

}

if(pathname==='/1.mp4'){

res.writeHead(200,{'Content-Type':'video/mp4'})

fs.createReadStream(mp4Path).pipe(res)

return

}

res.end()

}).listen(3000,()=>{

console.log(`server listen on 3000`)

})

chrome正常播放,而苹果手机不能播放

我们打印下请求头,可以看到: range: 'bytes=0-1',

if(pathname==='/1.mp4'){

console.log(req.headers)

res.writeHead(200,{'Content-Type':'video/mp4'})

fs.createReadStream(mp4Path).pipe(res)

return

}

也就是说safari遇到mp4格式,第一次会请求文件的0-1个字节,这里写个函数getRange来获取

range字段的开始结束

const {createServer:server}=require('http')

const url=require('url')

const fs=require('fs')

const mp4Path='./1.mp4'

server((req,res)=>{

let pathname=url.parse(req.url).pathname

if(pathname==='/'){

res.writeHead(200,{'Content-Type':'text/html'})

res.end(``)

return

}

if(pathname==='/1.mp4'){

fs.stat('./1.mp4',(err,stats)=>{

let [start,end]=getRange(req.headers['range'],stats)

res.setHeader('Content-Range',`bytes ${start}-${end}/${stats.size}`)

res.setHeader('Content-Type','video/mp4')

res.setHeader('Content-Length',end==start?0:end-start+1)

res.writeHead(206)

fs.createReadStream(mp4Path,{

start:start,

end:end

}).pipe(res)

})

return

}

res.end()

}).listen(3000,()=>{

console.log(`server listen on 3000`)

})

function getRange(range,stats){

var r=range.match(/=(\d+)-(\d+)?/)

var start=r[1]

var end=r[2]||stats.size-1

return [parseInt(start),parseInt(end)];

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值