目录
MovieNight 流媒体服务器
这是一个带聊天功能的单实例流媒体服务器。最初是为了替代 Rabbit 作为与一群人在线观看电影的平台而编写的。
构建要求
- Go 1.16 或更新版本
- GNU Make
较旧的 Go 版本
你可以按照以下指南在操作系统发行版的 Go 版本旁边安装更新的 Go 版本:https://golang.org/doc/manage-install
安装完成后,添加一个名为 GO_VERSION
的环境变量,并将其设置为你安装的版本(例如,1.16.1
)。Makefile 现在将使用较新的版本。
编译和安装
你需要:
- 下载
git clone https://github.com/zorchenhimer/MovieNight
,进入源代码目录cd MovieNight
; - 运行
go build
如果你想交叉编译,而不是运行 go build
:
- 选择你的
TARGET
,可选项为 "android darwin dragonfly freebsd linux nacl netbsd openbsd plan9 solaris windows"; - 选择你的
ARCH
,可选项为 "386 amd64 amd64p32 arm arm64 ppc64 ppc64le mips mipsle mips64 mips64le mips64p32 mips64p32leppc s390 s390x sparc sparc64"; - 构建
make TARGET=windows ARCH=386
(在 BSD 系统上使用gmake
); - 然后运行
./MovieNight
;
示例:
$ git clone https://github.com/zorchenhimer/MovieNight
$ cd MovieNight
$ (make|gmake) TARGET=windows ARCH=386
$ ./MovieNight
Docker 包
可以使用以下命令拉取镜像。在 ghcr 查看标记版本
docker pull ghcr.io/zorchenhimer/movienight:master
Docker 构建
MovieNight 提供了 Dockerfile 和 docker-compose 文件,用于使用 Docker 运行 MovieNight。
构建容器
安装 Docker,克隆仓库并构建:
docker build -t movienight .
运行容器
构建完成后运行镜像:
# 使用默认设置文件(使用 settings_example.json 配置文件)
docker run -d -p 8089:8089 -p 1935:1935 movienight
# 使用自定义设置文件
docker run -d -p 8089:8089 -p 1935:1935 -v ./settings.json:/data/config/settings.json movienight
解释:
- -d 在后台运行容器。
- -p 8089:8089 将 MovieNight 网页界面映射到服务器的 8089 端口。
- -p 1935:1935 将 OBS 的 RTMP 端口映射到服务器的 1935 端口(默认 RTMP 端口)。
- -v ./settings.json:/config/settings.json 将 settings.json 文件映射到容器中。[可选]
docker-compose
docker-compose 将自动构建镜像,无需手动构建。
安装 Docker 和 docker-compose,克隆仓库并进入 ./docker 目录。然后运行:
docker-compose up -d
这个 docker-compose 文件将创建一个名为 movienight-config 的卷,并自动将标准的 settings.json 文件添加到其中。它还将端口 8089 和 1935 映射到主机的相同端口。
使用docker-compose运行的注意事项
对settings.json进行任何更改后,需要重启容器才能应用这些更改。
FreeNAS-FreeBSD构建和运行
已发布FreeNAS & TrueNAS插件。你应该能在管理界面的插件部分找到MovieNight。但你仍然可以进行手动插件部署,文档在这里。 如果你更喜欢不使用插件管理创建Jail,这里有一个脚本可以设置Jail并在其中构建和运行MovieNight,你可以在freenas-iocage-movienight找到它。
Clever-Cloud部署和运行
如果你不想处理MovieNight实例的构建和运行,这里有一个"如何在Clever-Cloud上运行"的简短手册。 在你的Clever-Cloud控制面板中:
- 创建一个"全新应用"并选择
Go
运行时实例 - 命名它,选择你的数据中心
- 你不需要任何"附加组件",除非你想为MovieNight实例提供一些表情符号
- 添加以下环境变量(专家模式允许你从本页复制粘贴):
CC_GO_BUILD_TOOL="gobuild"
设置构建方法CC_GO_PKG="github.com/zorchenhimer/MovieNight"
设置Go
依赖项来源CC_PRE_RUN_HOOK="echo \"{\\\"ApprovedEmotes\\\": true, \\\"Bans\\\": [], \\\"LetThemLurk\\\": false, \\\"ListenAddress\\\": \\\":8080\\\", \\\"LogFile\\\": \\\"thelog.log\\\", \\\"LogLevel\\\": \\\"debug\\\", \\\"MaxMessageCount\\\": 300, \\\"NoCache\\\": false, \\\"NewPin\\\": true, \\\"PageTitle\\\": \\\"Movie Night\\\", \\\"RateLimitAuth\\\": 5, \\\"RateLimitChat\\\": 1, \\\"RateLimitColor\\\": 60, \\\"RateLimitDuplicate\\\": 30, \\\"RateLimitNick\\\": 300, \\\"RegenAdminPass\\\": true, \\\"RtmpListenAddress\\\": \\\":4040\\\", \\\"RoomAccess\\\": \\\"pin\\\", \\\"RoomAccessPin\\\": \\\"9999\\\", \\\"StreamKey\\\": \\\"ALongStreamKey\\\", \\\"StreamStats\\\": true, \\\"TitleLength\\\": 50, \\\"WrappedEmotesOnly\\\": true}\" >> /home/bas/go_home/bin/settings.json"
构建默认配置文件settings.json
的命令CC_RUN_COMMAND="${MN_BIN_DIR}/${MN_BIN_NAME} -l ${MN_PORT} -r ${MN_RTMP} -s ${MN_STATIC} -k ${MN_STREAM_KEY}"
运行命令MN_BIN_DIR="/home/bas/go_home/bin"
构建的二进制文件目录MN_BIN_NAME="MovieNight"
可运行二进制文件的名称MN_PORT=":8080"
HTTP端口MN_RTMP=":4040"
RTMP端口MN_STATIC="${APP_HOME}/static"
静态内容目录MN_STREAM_KEY="YourStreamKey"
你的秘密流密钥,你需要更改它
- 开启TCP重定向
- 尝试运行你的MovieNight实例
这是你可以在进行一些自定义后使用的Clever-Cloud应用环境变量示例:
CC_GO_BUILD_TOOL="gobuild"
CC_GO_PKG="github.com/zorchenhimer/MovieNight"
CC_PRE_RUN_HOOK="echo \"{\\\"ApprovedEmotes\\\": true, \\\"Bans\\\": [], \\\"LetThemLurk\\\": false, \\\"ListenAddress\\\": \\\":8080\\\", \\\"LogFile\\\": \\\"thelog.log\\\", \\\"LogLevel\\\": \\\"debug\\\", \\\"MaxMessageCount\\\": 300, \\\"NoCache\\\": false, \\\"NewPin\\\": true, \\\"PageTitle\\\": \\\"Movie Night\\\", \\\"RateLimitAuth\\\": 5, \\\"RateLimitChat\\\": 1, \\\"RateLimitColor\\\": 60, \\\"RateLimitDuplicate\\\": 30, \\\"RateLimitNick\\\": 300, \\\"RegenAdminPass\\\": true, \\\"RtmpListenAddress\\\": \\\":4040\\\", \\\"RoomAccess\\\": \\\"pin\\\", \\\"RoomAccessPin\\\": \\\"9999\\\", \\\"StreamKey\\\": \\\"ALongStreamKey\\\", \\\"StreamStats\\\": true, \\\"TitleLength\\\": 50, \\\"WrappedEmotesOnly\\\": true}\" >> /home/bas/go_home/bin/settings.json"
CC_RUN_COMMAND="${MN_BIN_DIR}/${MN_BIN_NAME} -l ${MN_PORT} -r ${MN_RTMP} -s ${MN_STATIC} -k ${MN_STREAM_KEY}"
MN_BIN_DIR="/home/bas/go_home/bin"
MN_BIN_NAME="MovieNight"
MN_PORT=":8080"
MN_RTMP=":4040"
MN_STATIC="${APP_HOME}/static"
MN_STREAM_KEY="YourStreamKey"
使用方法
现在你可以使用OBS向服务器推流。将流URL设置为
rtmp://your.domain.host/live
并输入流密钥。
然后你可以在以下地址观看直播:
http://your.domain.host:8089/
仅视频版本的地址为:
http://your.domain.host:8089/video
仅聊天版本的地址为:
http://your.domain.host:8089/chat
默认监听端口为:8089
。可以在启动时提供新的端口来更改:
MovieNight.exe 的用法:
-e bool
是否在启动时下载已批准的表情(默认为"false")
-k string
流密钥,用于保护你的直播(默认为"")
-l string
MovieNight的主机:端口(默认为":8089")
-r string
RTMP服务器的主机:端口(默认为":1935")
-f string
你想使用的设置文件(默认为"./settings.json")
配置
MovieNight的配置由settings.json
控制:
AdminPassword
:用户可以在聊天中输入/auth <值>
来授予自己管理员权限。除非RegenAdminPass
设为 false,否则此值会自动重新生成。Bans
:被禁用户列表。LetThemLurk
:如果为 false,会宣布用户进入和离开聊天室。ListenAddress
:MovieNight 监听的端口,格式为:8089
。LogFile
:MovieNight 日志文件的路径,相对于可执行文件。LogLevel
:日志级别,默认为debug
。MaxMessageCount
:聊天窗口显示的消息数量。NewPin
:如果为 true,服务器启动时重新生成RoomAccessPin
。NewStreamKey
:如果为 true,服务器启动时使用随机的StreamKey
。命令行选项优先,如果设置了则使用命令行选项。PageTitle
:页面<title>
元素中使用的基本字符串。当使用/playing
设置流媒体标题时,它会被附加;例如,Movie Night | 杀死希特勒与大脚怪的男人
RegenAdminPass
:如果为 true,服务器启动时重新生成AdminPassword
。RoomAccess
:聊天室的访问策略;这由应用程序管理,不应手动编辑。RoomAccessPin
:如果设置,作为进入聊天室所需的密码。SessionKey
:用于存储会话数据(如 cookies 等)的密钥。StreamKey
:OBS 用于连接 MovieNight 的密钥。StreamStats
:如果为 true,在服务器关闭时打印流媒体统计信息。TitleLength
:流媒体标题(通过/playing
设置)允许的最大长度。WrappedEmotesOnly
:如果为 true,要求表情代码必须用冒号或括号包裹;例如,:PogChamp:
RateLimitChat
:非特权用户在聊天中发送每条消息之间的秒数。RateLimitNick
:用户再次更改昵称前的等待秒数。RakeLimitColor
:用户再次更改颜色前的等待秒数。RateLimitAuth
:每次允许的身份验证尝试之间的秒数。RateLimitDuplicate
:用户发送重复消息前的等待秒数。NoCache
:如果为 true,在 HTTP 头中设置Cache-Control: no-cache, must-revalidate
,以防止缓存响应。
许可证
flv.js
使用 Apache 2.0 许可证。本项目使用 MIT 许可证。