视频标签在Chrome浏览器请求不正确的范围时,寻求进度条到随机位置,Firefox正在正常工作

a9wyjsp7  于 2024-01-04  发布在  Go
关注(0)|答案(1)|浏览(238)

我有FASTAPI服务器,可以服务部分内容,响应状态206。

  1. @video_router.get("/video/file/{folder}/{name}")
  2. async def video_endpoint(folder: str, name: str, range: str = Header(None)):
  3. CHUNK_SIZE = 2048*2048
  4. video_path = Path(f"./media/{folder}/{name}")
  5. video_size = video_path.stat().st_size
  6. start, end = range.replace("bytes=", "").split("-")
  7. start = int(start)
  8. if start + CHUNK_SIZE > video_size:
  9. end = video_size
  10. else:
  11. end = start + CHUNK_SIZE
  12. with open(video_path, "rb") as video:
  13. video.seek(start)
  14. data = video.read(end - start)
  15. headers = {
  16. 'Content-Range': f'bytes {start}-{end}/{video_size}',
  17. 'Accept-Ranges': 'bytes'
  18. }
  19. return Response(data, status_code=206, headers=headers, media_type="video/mp4")

字符串
从React前端我请求这个URL给给予部分内容。

  1. <video
  2. controlsList="nodownload"
  3. key="abc"
  4. width="100%"
  5. height="100%"
  6. poster={poster_url}
  7. controls
  8. src={video_url}
  9. type="video/mp4"
  10. preload="metadata"
  11. />


这是在火狐浏览器中无故障地工作,但在谷歌Chrome中,当我向后或向前寻求进度条到任何位置时。视频播放器挂起/卡住。播放后的播放/播放按钮,视频从开始即字节=0-开始播放。
当调试这个范围参数,这是在头部传递我注意到,Chrome浏览器正在请求不正确的字节,即字节=INCORRECT_NUMBER-。此外,INCORRECT_NUMBER是相同的任何位置在进度条。请检查下面的图片。
IMAGE1: Time was equal to 15 seconds but bytes requested was the ending bytes
IMAGE2: Time was equal to 2:54 minutes but bytes requested was the ending bytes identical to previous image
在此操作之后,您可以看到video标签不再从FASTAPI服务器请求任何数据。
我试着改变标题,其他React视频播放器和iframe标签。
我期待通过fastapi服务器提供部分内容流视频。建议替代或视频标签的变通办法是非常赞赏。

ajsxfq5m

ajsxfq5m1#

视频大小- 1 结束-开始+ 1*

需要进行上述修改。

相关问题