天天看點

iOS 關于Safari浏覽器和Chrome浏覽器Video标簽的差別

Safari

GET /haoyun-web/fdfs/viewFdfsFile.action?groupName=group1&fileId=M00/00/05/wKgB8llDiPyAWf21AAL5k9M1ds4632.mp4 HTTP/1.1
Host 183.134.110.234:18080
Cookie JSESSIONID=306cc3b9-4428-4624-b8ad-5bb331187ced; sdktoken=3b6ccb1f39b0c43b4c644b9184699714; uid=user_100; yxAccount=user_91
X-Playback-Session-Id D91FBAEA-2E94-4984-B26A-C0FC8C5E4F5B
Range bytes=0-1
Accept **
Referer http://www.runoob.com/try/try.php?filename=tryhtml5_video
Accept-Language zh-CN,zh;q=0.8,en;q=0.6
Cookie JSESSIONID=189317e9-462f-475d-9a09-e9f607e42bfc; JSESSIONID.7178883c=kc1daruvzmv16tltjdtz7ybe; yxAccount=user_91; uid=user_100; sdktoken=3b6ccb1f39b0c43b4c644b9184699714
Range bytes=0-194962

從中我們可以看出Safari預設range為 bytes=0-1,而Chrome則是 bytes=0-194962 safari多了個keep-alive 而對于safari來說,他不是一次性請求全部檔案的(不論osx還是ios),一般首先會請求0-1位元組,這個寫在request header的"range"字段中: range:'bytes=0-1' 如果是想要傳輸視訊, 必須要解析range字段,然後按照range字段的要求傳回對應的資料,同時response header至少要包含三個字段:"Content-Type", "Content-Range", "Content-Length" "Content-Type"必需明确指定視訊格式,有"video/mp4", "video/ogg", "video/mov"等等,網上可以查到。 "Content-Range"格式是 "bytes <start>-<end>/<total>",其中start和end必需對應request header裡的range字段,total是檔案總大小,不是傳回的資料長度 "Content-Length"指定傳回的二進制長度

是以想要在Safari上播放需要服務端傳回 Content-Range Content-Length

其實也就是将fastfds的路徑用ngix代理改成真正的檔案位址即可