如何一键使用树莓派搭建RTMP直播服务

10年前,我写过一篇文章,给大家介绍了一下如何用最低的成本转播PlayStation 4到国内的直播平台。简单来说,就是用PS4自带的直播功能,推流到twitch,并使用树莓派截取信号并重新推送到其他的直播平台。这样做的好处是,不需要购买昂贵的视频采集卡,只需要一个树莓派就可以了。

10年后,我又有了类似的需求,只不过这次,我想做的是自己搭建一个直播服务来输出视频信号,这样,无论我身处何地,都可以通过网络来观看自己的视频。

当然,和10年前不同的,这次我购买了昂贵的视频采集卡,以及新的树莓派。并且,当时我研究了很久如何配置服务器之类的,这次chatgpt帮我一波搞定,并且连脚本都给我写好了。稍微调整一下就能用。所以也在这里分享给大家。这次的思路是,用树莓派搭建一个RTMP服务,然后用我的台式机将视频采集卡采集的内容通过OBS推给树莓派,这样我就可以通过VLS甚至浏览器直接观看内容了。

#!/bin/bash

# Raspberry Pi 5 RTMP Streaming Server Setup Script
# Installs NGINX with RTMP, configures HLS, and sets up systemd service

set -e

echo "🚀 Updating system..."
apt update && apt upgrade -y

echo "📦 Installing dependencies..."
apt install -y build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev git wget

echo "🌐 Downloading NGINX and RTMP module..."
cd /opt
git clone https://github.com/arut/nginx-rtmp-module.git
wget http://nginx.org/download/nginx-1.27.5.tar.gz
tar -zxvf nginx-1.27.5.tar.gz
cd nginx-1.27.5

echo "⚙️ Building NGINX with RTMP module..."
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module
make -j$(nproc)
make install

echo "📝 Writing NGINX config with RTMP + HLS..."
cat > /usr/local/nginx/conf/nginx.conf <<EOF
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    sendfile off;
    tcp_nopush on;
    directio 512;

    server {
        listen 8080;

        location / {
            root html;
            index index.html index.htm;
        }

        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;
            add_header Cache-Control no-cache;
            add_header 'Access-Control-Allow-Origin' '*';
        }
    }
}

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;
            hls on;
            hls_path /tmp/hls;
            hls_fragment 3s;
            hls_playlist_length 60s;
        }
    }
}
EOF

echo "📁 Creating HLS output directory..."
mkdir -p /tmp/hls

echo "🔧 Creating systemd service for NGINX RTMP..."
cat > /etc/systemd/system/nginx-rtmp.service <<EOF
[Unit]
Description=NGINX RTMP Streaming Server
After=network.target

[Service]
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PIDFile=/usr/local/nginx/logs/nginx.pid
Type=forking
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

echo "🔁 Enabling and starting NGINX service..."
systemctl daemon-reexec
systemctl daemon-reload
systemctl enable nginx-rtmp
systemctl start nginx-rtmp

echo ""
echo "✅ All done!"
echo ""
echo "🎥 Set OBS to stream to: rtmp://<RPI_IP_ADDRESS>/live/<key>"
echo "📺 Watch via VLC or player: rtmp://<RPI_IP_ADDRESS>/live/<key>"
echo "🌐 Or in browser (HLS): http://<RPI_IP_ADDRESS>:8080/hls/<key>.m3u8"

记得用sudo run一下就好了……这个脚本会帮你自动下载nginx和rtmp插件,自动编译和安装,自动配置,自动设置自动启动……

欢迎讨论……

酒后乱语(音乐)

查了一下,博客已经一年多没有更新了,今晚吃着鸡架和烤鱿鱼,喝了点朗姆可乐,有点感触,所以回来写篇文章。可能明天早上我就已经不记得今天都写过啥了。但是,这是自己的博客,忘了又怎样呢?

在过去的一年,我的身上也发生了很多事情,比如买房,搬家,生娃,公司裁员。虽然暂时没有裁到自己头上,但是也有种劫后余生的感觉。总之,听我播客的朋友应该可以体会到,我去年是有多么风雨飘摇。

但是今天想聊的不是我去年的生活,而是通过今晚喝的朗姆可乐,回忆起的中学时的一段往事。自从上大学,我养成了一个毛病,那就是周五晚上必须要稍微来一杯,虽然这个习惯由于某些原因暂停了一段时间,但是,周五晚上还是必须要得吃点好的。于是,今晚也是同样借着周五晚上,吃了一波烤鸡架和烤鱿鱼。由于是周五晚上嘛,叫外卖的等待时间比较久,于是我就跑去店里买了瓶朗姆酒,正好家里有冰可乐,于是在家鼓捣起了朗姆可乐。

说起来,朗姆可乐,也叫自由古巴,可能是肉壳第一款有概念的鸡尾酒。虽然我自己喝过的第一款广义上的鸡尾酒是7-11里买的杰克丹尼可乐,但是朗姆可乐在我的心目中还是有些和其他鸡尾酒不一样的地位。

大概,那还是我上初中的时候吧,在我很早以前写的文章改变自己的三首歌中,我提到过我爸给我买过的一套5张CD的精选集,让我喜欢上了欧美老歌,后来初中时,那5张CD都被我听了无数遍了,就开始在家里找找看有没有什么其他的CD,结果还真的被我找到了好多。其中有一张,我已经不太记得专辑里的其他歌曲了,但是里面有一首Rum & Coca-Cola让我印象深刻。虽然后来才知道演唱的是The Andrews Sisters,但这已经是后话了。当时年纪还小,也不喝酒,所以对Rum是什么并没有什么概念。但是吧,我还是知道Coca-Cola也就是可口可乐是什么。所以对这首歌就会有些特别的印象,外加歌曲本身欢快的节奏也非常得我心,于是就搜了一下这首歌的歌名,才知道了朗姆可乐这款鸡尾酒。也就像是我说的,这是我第一款有概念的鸡尾酒。

说个小插曲,我司内部的某个工具名叫Daiquery,这工具的图表示一个马提尼杯,就是那种V字形的高脚杯。我之前一直不知道为什么要用这个图标。最近才知道,这是因为这个工具的名字和Daiquiri这款鸡尾酒很像。只不过Daiquiri好像用玛格丽特杯多一点。

回到正题,你们懂得,喝了点酒嘛,就想找点歌听,于是在Spotify和Youtube上,以Rum & Coca-Cola开始搜起来。然后我突然意识到,现在的人们,想找首歌是多么的容易,只要你知道这首歌叫什么,几乎就没有找不到的。总有一款音乐App或者视频App能找到你想要的歌。真的非常羡慕现在的人,想要找一些在本时代相对冷门的音乐,是多么的容易。回想起15,20年前,在网络还不是那么发达的时代。因为我喜欢的音乐品类比较另类,即使在今天,和同龄人也没有什么共同话题。我最期待我妈带我,或者和朋友一起去淘打口盘。每次都能找到一些我认识的,或者我不认识的歌手。买盘回家一遍一遍的听。但是呢,能买到的盘终究是少数。想要知道更多的歌手,或者歌曲,还得自己想办法从网上找。也是在那个时候,我知道了熊猫音乐网(Panda123),关于这件事,我在刚才提到的改变自己的三首歌纪念老熊猫这篇文章中都有提及,这里就不赘述了。就是这歌网站,让我接触到了更多喜爱爵士乐和轻音乐的朋友,也让我开始了解到了很多相关的知识。说起来,这也是我在自己的播客中开办老声常弹节目的灵感源泉。

除了自己淘打口盘,以及熊猫音乐网,另外一个对我很有帮助的工具,是高中时,泽少介绍给我的一个软件,名字叫做soulseek。令我惊讶的是,时至今日,这个工具还一直存在,甚至到2021年还在更新。在我高中那会儿,P2P下载盛行,什么BT,电驴什么的,全都有。只可惜,中文互联网还是很少有我喜欢的音乐资源的下载。于是这款soulseek就变成我的宝贝工具。这样是一款P2P软件,但是专注于音乐分享。于是我就用这款软件,下载了很多音乐,时至今日,我的硬盘里,还有很多当年下载的mp3。虽然,我已经很少听了。但是这确实是我自己的一段珍贵的回忆。时至今日,在我听到某一首歌的时候,我还能回忆起第一次听到,或者第一次记住,亦或者是我经常听这首歌的时候,眼前浮现的场景。也确实是一段非常有趣的经历吧。

如今,我已经是一个30多岁的大叔,俨然不是那个初中高中的小孩子了,但是我的音乐喜好却一直没有改变过,他们带给我的,除了此时此刻身心的愉悦,也能帮我助我回忆起以前的快乐时光。可能,对于音乐类型的偏好,我这辈子都不会有什么特别大的改变了。但是我觉得这样也挺好的,不是么?

如何升级大气层Atmosphere到1.1.0以及以上版本

最近搬家太忙了,Switch吃灰了几个月。虽然没有想玩什么新游戏,但是就是想给系统啥的升个级。看到大气层又升级了好几个版本呢,而且1.1.0有个大更新。虽然我不知道都更新了啥,但是根据描述来说,原来的的几个重要文件都被改名了,非常的莫名其妙……比如fusee-primary.bin改成了fusee.bin, fusee-secondary.bin改成了package3。所以,在从1.1.0之前的版本更新到1.1.0的版本以及以后的版本,就不是简单的复制粘贴这么简单了。所以在这里记录一下,以防以后忘了……

先说一下我目前的NS的状态,unpatched的NS,目前的版本是大气层0.19.4版,双系统,OFW也就是正版系统还是9.x,CFW也就是盗版系统是12.0.3. hekate是5.5.7。这个教程只在我自己的NS上尝试过,破解有风险,大家自己承担哈。

在这个教程里,我只告诉大家如何升级大气层,至于怎么升级系统,请看这里。方法没变,就是注意版本号就好了,直接选最新的就行了。

另外,我是用的注入器是TegraRcmGUI,这个东西的用处就是选择想要通过哪个文件来引导启动系统。之前写的教程里有提到过这个东西,可以自己看一下。

另外感谢下面的教程教会我如何升级

https://nh-server.github.io/switch-guide/extras/updating/

首先,我们开始下载一堆东西。

Atmosphère 1.2.0 prerelease

  • 这个是大气层的主文件,以及引导文件,1.2.0是个预发布版本,我个人比较喜欢用新版本,所以就下的最新的。如果我说,在之前的教程里,下载的第二个文件叫fusee-primary.bin,现在叫fusee.bin了。
  • https://github.com/Atmosphere-NX/Atmosphere/releases
    • atmosphere-1.2.0-prerelease-f7f83b474+hbl-2.4.1+hbmenu-3.4.1.zip
    • fusee.bin

Sigpatches (Supports HOS firmware 13.0.0 and AMS 1.2.0-prerelease)

hekate v5.6.3 & Nyx v1.0.8

hekate_ipl.ini

先来总结一下我们现在有哪些文件了

  1. atmosphere-1.2.0-prerelease-f7f83b474+hbl-2.4.1+hbmenu-3.4.1.zip
  2. fusee.bin
  3. fusee.zip
  4. hekate_ctcaer_5.6.3_Nyx_1.0.8.zip
  5. hekate_ipl.ini

后面提到某个文件的时候,我会用代号来指代。

首先,我们先看SD卡里都有什么。

就是这些文件,首先,我们先删除3个文件,第一个是这张图里的sept这个文件夹,第二个是hekate_ctcaer_5.5.7.bin

第三个是atmosphere文件夹里的fusee-secondary.bin。

然后将1,3,4都解压到电脑本地的同一个目录下。

得到这些文件。然后把5,也就是hekate_ipl.ini这个文件复制到上图中bootloader的文件夹里。之后把这个文件夹里的内容,复制到SD卡中并覆盖同名文件。

然后把SD卡放回到NS上,通过TegraRcmGUI,使用hekate_ctcaer_5.6.3.bin来启动系统到Hekate。

点击右上角的Options

确认右下角的Update Reboot 2 Payload是ON,如果不是,点一下让他变成ON。然后就可以Save Options,并且关机了。

之后,再通过TegraRcmGUI,使用fusee.bin来启动机器,就大功告成了。

可以看到,我的AMS也就是大气层系统的版本号已经是1.2.0了。(版本号中的最后一个字母是E,说明这是虚拟系统,如果是运行在真实系统里,最后一个字母是S)

大功告成!

如何给使用大气层Atmosphere的Switch系统升级

10月17日更新:

如果你打算升级Atmosphere到1.1.0以上的版本。本教程可能不适用。请结合这篇文章来看。

—- 分割线 —-

肉壳最开始破解自己的Switch的时候,使用的是SX OS。所以之前写过一篇文章,介绍如何给使用SX OS的Switch升级系统

但是,自从2020年12月开始,SX OS就没有再更新了,新的Switch系统也不能使用了,所以我把自己的Switch转换到了大气层Atmosphere中。如果大家有兴趣可以看看这个教程

那么问题来,我们如何给使用Atmosphere的Switch升级NS的系统呢?其实比使用SX OS还要简单。

首先要说的是,我在这篇文章里,只记录我自己的Switch的转换和升级方式。我的Switch是最初的没有patch的,换句话说,就是可以软破的那批机器。其次,我的SX OS是装在emunand里的,也就是虚拟系统。而且是装在SD卡里,没有隐藏分区。另外,我的正版系统虽然没有在用了,但是一直保持者9.x的系统版本。如果你的机器和我不一样,请参考上面两个链接,虽然是英文的,但是讲解的非常清楚。最终,破解有风险,如果在破解在转换过程中出现任何问题,请大家自行承担风险。

和之前一样,大家要先去下载一些文件。

Firmware 12.0.3

Atmosphère 0.19.4

Sigpatches (Supports HOS firmware 12.0.3 and AMS 0.19.4)

hekate v5.5.7 & Nyx v1.0.4

OK,我们先来整理一下,我们现在应该有如下几个文件。后面在引用到下列文件时,直接用数字代替了。

  1. Firmware 12.0.3.zip
  2. atmosphere-0.19.4-master-2ab01ad3+hbl-2.4.1+hbmenu-3.4.0.zip
  3. fusee.zip
  4. hekate_ctcaer_5.5.7_Nyx_1.0.4.zip

首先,将1解压到随便一个新的文件夹中,我们就叫它Firmware 12.0.3。将这个文件夹拷贝到Switch的SD卡的根目录下。

如果你的大气层已经是最新版本的话,就啥也不用做了,如果不是的话,需要把2,3,4都解压到SD的根目录。

然后把SD卡放回机器,开机进入大气层系统。

点击相册,会看到下面的界面

请无视第一个程序,我忘记删了,哈哈。在大气层下,升级系统我们需要用到第二个程序Daybreak,点击进入。

点击Install

选择最上面的Firmware 12.0.3

稍等一下,直到Continue变亮,然后点击Continue。

点击Preserve settings

点击Install (FAT 32 + exFAT)。这里假设你的SD卡是用exFAT的格式。如果你的SD卡不能放比4G大的文件,那么你的SD卡就是FAT32格式。

继续点击Continue

坐等安装结束,点击Reboot重启机器。

进入系统后检查主机系统,已经是12.0.3了。

大概就是这样……

如何从SX OS转换到大气层Atmosphere

10月17日更新:

如果你打算升级Atmosphere到1.1.0以上的版本。本教程可能不适用。请结合这篇文章来看。

—- 分割线 —-

之前我写过一篇文章介绍如何给已经安装SX OS的Switch升级破解系统。但是从2020年12月,SX OS的小组被抓,而且受到任天堂起诉后,就再也没更新过SX OS的系统了,以至于无法给Switch升级到最新的系统,进而很多新游戏都没法玩。虽然可以使用魔改版的xci来解决这个问题。但是,我总觉得这也不是个长久之计。在经过半年多的等待,依旧没有消息。于是我决定自己动手把破解系统换到大气层。

在阅读了下面的文章和视频后,我也试着自己做了一下,发现还挺简单的。

https://www.sthetix.info/migrating-from-the-sx-os-to-atmosphere/

https://github.com/dsync89/Ultimate-Guide-to-Migrate-SXOS-SX-Core-to-Atmosphere

首先要说的是,我在这篇文章里,只记录我自己的Switch的转换和升级方式。我的Switch是最初的没有patch的,换句话说,就是可以软破的那批机器。其次,我的SX OS是装在emunand里的,也就是虚拟系统。而且是装在SD卡里,没有隐藏分区。另外,我的正版系统虽然没有在用了,但是一直保持者9.x的系统版本。如果你的机器和我不一样,请参考上面两个链接,虽然是英文的,但是讲解的非常清楚。最终,破解有风险,如果在破解在转换过程中出现任何问题,请大家自行承担风险。

首先下载所有所需文件 (版本号截止于2021年6月27日,目前这些版本都是最新版,而且版本也是互相支持的。如果未来有更新版本,也可以下载更新版本,就是注意一下兼容性的问题就好):

Atmosphère 0.19.4

Sigpatches (Supports HOS firmware 12.0.3 and AMS 0.19.4)

hekate v5.5.7 & Nyx v1.0.4

TegraRcmGUI_v2.6

  • 大家使用SX OS的时候,都会先把注入器接到Switch的type-c接口上,这样才能进入引导界面,对吧?因为SX OS的注入器,在默认情况下,只支持SX OS的引导,所以这个程序的目的就是让你的电脑成为一个注入器,这样,你可以随意选择引导文件。
  • https://github.com/eliboa/TegraRcmGUI/releases
  • tegrarcmgui_v2.6_portable.zip

OK,我们先来整理一下,我们现在应该有如下几个文件。后面在引用到下列文件时,直接用数字代替了。

  1. atmosphere-0.19.4-master-2ab01ad3+hbl-2.4.1+hbmenu-3.4.0.zip
  2. fusee-primary.bin
  3. fusee.zip
  4. hekate_ctcaer_5.5.7_Nyx_1.0.4.zip
  5. tegrarcmgui_v2.6_portable.zip

首先,将SD卡接上电脑,然后解压文件1,3,4到SD卡的根目录。解压后文件结构大致如下图,可能会有出入。然后可以将SD卡放回机器中了。

然后解压5。会得到一个名叫TegraRcmGUI_v2.6_portable的文件夹,进入这个文件夹里面的favorites,将文件2,以及4中的hekate_ctcaer_5.5.7.bin放到这个favorites文件夹,并删除Fusee_Atmosphere.bin和hekate_ctcaer_5.0.0.bin。整理后的文件结构如下图,应该是一模一样的。

然后我们回到TegraRcmGUI_v2.6_portable这个文件夹,运行TegraRcmGUI.exe。打开后,先去到Setting,点击Install Driver来安装驱动程序。

安装成功后,回到Payload,添加我们刚刚放到favorites的fusee-primary.bin和hekate_ctcaer_5.5.7.bin添加到程序中的favorites,方便以后使用,并删除favorites中的Fusee_Atmosphere.bin和hekate_ctcaer_5.0.0.bin,因为他们已经不存在了。整理后如下图。可能此时,你的左下角图标还是红色的,这个没关系。我懒得重新截图了-。-

OK,现在万事俱备,首先,把右手柄取下,装上短接器。按住加音量键并按电源键。这时,你的Switch就会开机,并进入黑屏状态。别慌,找一条USB线,把Switch和电脑连起来,此时TegraRcmGUI中右下角的图标会变成绿色。这时候,双击Favorites中的hekate_ctcaer_5.5.7.bin。此时,Switch应该就进入了Hekate的引导界面。界面如下

点击右边的emuMMC,解释一下emuMMC其实就是SX OS下所谓的emuNand的概念,就是在SD卡上搞一个虚拟环境,然后把破解系统放到虚拟环境里,以免影响正版系统。点击之后,进入下面的界面。

此时我们还可以看到屏幕左上角有个黄色的Disabled! 不用怕,先点右边的Migrate emuMMC。注意,因为此教程是如何从安装在emuNand的SX OS转换到大气层,如果你是其他操作,可能需要选择其他选项。点击Migrate emuMMC之后,会弹出下面的对话框。

然后选择Emunand,会提示在SD卡中找到emunand,是否转换?

选择Continue,然后瞬间就会完成。

确实很快,然后点击OK

此时我们会发现左上角已经变成绿色的Enabled了!太好了,然后点击右上角的Close,回到主菜单。

再点击右下角的Power Off关机。

然后,如果你没有手欠把短接器和USB线拔下来的话,按住加音量键和电源键重新开机。然后回到TegraRcmGUI中,双击Favorites中的fusee-primary.bin。请继续忽略左下角的图标,此时你的图标应该是绿的-。-

然后,我们就能直接进入大气层的系统了。

进入设置,我们可以看到现在的系统版本是12.0.3,也就是Switch系统的最新版本。大气层系统是AMS M.19.4。并且是运行在虚拟系统中(版本号中的最后一个字母是E,如果是运行在真实系统里,最后一个字母是S)。

至此,我们就完成了从SX OS到大气层的Atmosphere的转换。

如果你的NS系统的版本还是比较低的版本,可以参考这篇文章来升级NS的版本到12.0.3。