MovieNight

MovieNight

单实例流媒体服务器集成实时聊天系统

MovieNight是一个集成实时聊天系统的单实例流媒体服务器。该项目支持OBS推流,通过Web界面提供视频观看和聊天互动功能。MovieNight使用Go语言开发,支持跨平台编译,易于部署,并支持Docker容器化。它提供多种配置选项,包括访问控制、聊天管理和流媒体统计等。这个开源项目适合小型群组在线观影,可作为Rabbit等类似平台的替代方案。

MovieNight流媒体服务器DockerGo编程实时聊天Github开源项目

目录

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.jsonsettings.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 许可证。

编辑推荐精选

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

堆友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成AI工具AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机AI图像热门
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

下拉加载更多