EMBY通过反代后视频加载缓慢解决


avatar
铭心 2024-10-16 2.92k

 

Emby 反代后外网访问慢的解决方案

由于一台服务器上部署了多个服务,所以 Emby 只能通过域名区分进行访问。为了解决这个问题,我通过 Nginx 对 Emby 进行反向代理。然而,反代后发现 Emby 在内网可以瞬间加载视频,但在外网加载速度非常慢,甚至会出现视频未播放完就跳跃的问题。

问题描述

通过抓包分析发现,Nginx 反代 Emby 后,请求媒体的响应状态码是 200;而在内网直接访问(与 Emby 在同一网段)时,请求媒体的响应状态码是 206

  • Nginx 反代 Emby,此时请求视频媒体的响应状态码是 200:

    Nginx 反代 200 状态码
  • 家里直接访问(与 Emby 在同一网段),此时请求视频媒体的响应状态码是 206:

    内网访问 206 状态码

状态码解释

  • 200 OK:表示请求成功,服务器已成功处理了请求。对于 GET 请求,响应包含所请求的资源。
  • 206 Partial Content:表示服务器已成功处理了部分 GET 请求。通常用于支持范围请求,客户端可以请求资源的一个或多个部分。

解决方案

经过排查发现,这是因为 Nginx 反代 Emby 时进行了缓存,并且不允许只处理部分请求。解决方法是在 Nginx 反代配置中加入如下配置:

proxy_buffering off;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;

加入上述配置后,请求视频媒体将返回状态码 206,此时外网观看视频将和内网一样可以立即播放,不会出现跳跃的问题,且拖动进度条后不需要等待很久的加载时间。

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1usz1yhdm4zlh

  • avatar
    游客

    为什么有时候是http206部分加载,有的时候他显示的是hls推送的ts文件呢,http200的,这样虽然也是分片,但是拖动进度条相比http206差远了,用不用你的配置都一样。明明我都关了用户解码了

    • avatar
      博主

      @ ddd 你说的问题我还没有遇到过,你可以把出问题的资源给我,我下载下来试试

  • avatar
    游客

    我是用lucky反代的emby,也是出现卡顿的现象,直连恨流畅。请问如何解决?

    • avatar
      博主

      @ 非云 可以先F12打开调试台,然后播放视频,看一下响应code是200还是206,需要先确定一下我们是不是同一个问题。有的时候可能也会因为带宽等因素导致播放缓慢

  • avatar
    游客

    UP你好,我遇到的问题是外网反代之后,网页播放流畅,但是客户端无法播放,网页状态码是200,一直没找到问题所在,好像跟你的问题也不太一样。但不用反代,用IP直接连接,无论浏览器还是客户端都可以流畅播放

    • avatar
      游客

      @ Sinbad 你可以先看我的方法能不能解决你网页状态码200的问题,之所以网页播放流畅有可能是视频画质不高或者你的上行带宽可以支撑,不代表不存在这个问题

      • avatar
        游客

        @ 铭心 解决了,就是这个缓存的问题

        • avatar
          游客

          @ Sinbad 好耶ヾ(✿゚▽゚)ノ,能帮到你就证明我这偏文章没有白写heil

        • avatar
          游客

          @ Sinbad lucky不支持proxy_buffering off;
          你是怎么解决的

          • avatar
            游客

            @ nb lucky是什么?内网转发的吗?我是用的frps

          • avatar
            博主

            @ nb 先确定一下状态码是不是206,看了一下你说的lucky按理说是支持的,他的核心实现逻辑在这里lucky/module/reverseproxy/conf
            /reverseproxy.go

  • avatar
    游客

    好的,我有空再试试

发表评论
OωO表情

已阻挡的垃圾评论