Nginx流媒体代理功能初探

Nginx流媒体代理功能初探

背景(只关心技术实现的不用看)

最近在复习大物,所以在web技术上并没有太多的突破。我有便复习边听音乐的习惯,然而很多我喜欢的音乐都听过很多遍了,作为一个(伪)收音机爱好者,边复习边听国际广播似乎也是个不同的选择。然而VOA的 、RFA的节目有时稍显弱智,NHK的节目时长太短,KBS、RTI很多时段的的节目我不喜欢,我最喜欢的是RFI这样的电台,客观而有深度。然而...只有RFI的节目源被墙了,不翻墙很难收听,就算翻了墙也容易出现断流的现象。有没有一种方法可以稳定的收听RFI的节目呢?

——当然有!那就是Nginx的流媒体代理功能!

它可以代理常见的.m3u8 .ts .mp3等多种格式的流媒体。

Nginx配置

这个功能需要用到一个Nginx模块 http_sub_module.请确认你的Nginx服务器安装了这个模块,方法也很简单:

  1. 运行命令nginx -V
  2. 检查输出结果是否包含--with-http_sub_module,没有就表示没安装,需要进行安装。

如果你是自己编译安装的Nginx,网上有很多添加模块重新编译的教程,请自行查找下吧~

我是用的是oneinstack一键安装包,先备份好Nginx配置文件,修改oneinstack配置文件后卸载Nginx并进行重装即可安装模块。

  1. 备份Nginx配置文件cp -r /usr/local/nginx/conf/. /home/conf/ 同时备份一下存放网站的wwwroot文件夹,防止卸载Nginx时造成网站数据丢失。
  2. 进入oneinstack目录,编辑配置文件vim options.conf
  3. 在第37行,nginx_modules_options处加入--with-http_sub_module(多个模块用空格分隔)
  4. 运行卸载程序,注意只卸载Ngnix服务器./uninstall.sh,根据提示进行选择。
  5. 运行安装程序,注意只安装Nignx服务器./install.sh,根据提示进行选择。
  6. 还原配置文件cp -rf /home/conf/. /usr/local/nginx/conf/

现在Nginx的http_sub_module模块已经安装好了~

我们为什么要使用这个比较冷门的模块呢?主要是为了替换m3u8文件中的.aac格式的连接。m3u8文件只是一个“指路标”,指向了音视频文件的地址。因此,我们需要用这个模块,将其中指向源服务器的音视频文件指向我们自己的代理服务器。其他格式如mp3文件原因也是如此。

进入你Nginx的配置文件,在合适的地方加入下面的内容,需要的地方请进行替换:

location ~* \.(m3u8|ts|aac)$ {
    proxy_cache off;                    # 禁用代理缓存
    expires -1;                         # 禁用页面缓存
    proxy_pass http://example.com;      # 反代目标 URL
    sub_filter 'http://example.com/' 'http://$host/';   # 替换 m3u8 文件里的资源链接
    sub_filter_last_modified off;       # 删除原始响应里的浏览器缓存值
    sub_filter_once off;                # 替换所有匹配内容
    sub_filter_types *;                 # 匹配任何 MIME 类型
}

下面是我的配置文件,我需要对RFI进行反代:

location ~* \.(mp3)$ {
    proxy_cache off;
    expires -1;
    proxy_pass http://live02.rfi.fr;
    sub_filter 'http://live02.rfi.fr/' 'https://$host/';
    sub_filter_last_modified off;
    sub_filter_once off;
    sub_filter_types *;
}

没有问题就可以运行systemctl restart nginx重启Nginx了。

如何使用呢?打个比方,比如,原链接是http://example.com/playlist.m3u8,将域名改为你自己的,其它的不变就可以访问了。

Then, Enjoy It!

中间还可以使用CDN加速,经过了一层cloudflare CDN加速,延迟和丢包率都有明显下降,节目的延迟也自然大大下降,收听体验得到了明显提升~

本文永久链接:https://blog.xmgspace.me/archives/nginx-media-proxy.html
本文文章标题:Nginx流媒体代理功能初探
如无特殊说明,只要您标明转载自Xiaomage's Blog,就可自由转载本文。禁止CSDN/采集站采集转载。
授权协议:署名-非商业性使用-相同方式共享 4.0(CC BY-NC-SA 4.0)

评论

  1. 自镇流高压汞灯
    Windows Firefox
    6月前
    2023-9-28 23:03:40

    时长够长且节目质量高的还有良友。可以直接用IP访问的站点,像HFCC这种,只需在cloudflare控制面板中将IP填入自己域名的A记录或AAAA记录,就可以实现cloudflare反代加速,不需要有自己的服务器。但这招只试过给静态网页用,不知直播源是否也可以这样。

    • 博主
      自镇流高压汞灯
      Windows Chrome
      6月前
      2023-9-30 21:42:38

      应该是只能只支持HTTP的串流可以这样做吧...cloudflare似乎对串流容忍度不是很高,跑串流太多的话是会被封号的,否则就得买他家的Cloudflare Stream。

  2. Android Chrome
    4年前
    2019-11-04 23:38:28

    xmg666🤗

    • 博主
      yhlchao
      Windows Chrome
      4年前
      2019-11-06 19:58:47

      哇,是超哥!快,捉活的 :i_f02:

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇