Nginx部署私有Web播放器全指南

1. 概述

本文档旨在指导如何在 Nginx 服务器上部署私有 Web 播放器(基于 hancplayer),并通过 WebSocket 协议接入 RTMS 流媒体服务器,实现低延迟视频实时监控。

2. 前置准备

  • Web 服务器:Nginx (已安装并运行)
  • 流媒体服务:RTMS 服务器 (已运行,端口 5555)
  • 前端文件
    • index.html (播放页面)
    • hancplayer.js (播放器主逻辑)
    • hancmedia.js (媒体处理模块)
    • hancmedia.wasm (WebAssembly 解码核心)

3. 部署步骤

3.1 文件上传

将以下四个文件上传至 Nginx 的站点根目录(例如 /usr/share/nginx/html 或自定义目录),确保它们处于同级目录

  • index.html
  • hancplayer.js
  • hancmedia.js
  • hancmedia.wasm

3.2 关键配置:添加 WASM MIME 类型支持

⚠️ 重要:浏览器加载 .wasm 文件时,要求服务器返回正确的 Content-Type。若未配置,播放器将无法初始化解码器。

验证并重载 Nginx

# 检查配置语法 sudo nginx -t # 重载配置使生效 sudo nginx -s reload

添加映射规则
在 types { ... } 代码块内添加以下行:

types { # ... 其他现有配置 ... application/wasm wasm; }

编辑 Nginx 配置文件
打开全局 MIME 类型配置文件(通常位于 /etc/nginx/mime.types

sudo vim /etc/nginx/mime.types

3.3 修改 HTML 引用路径

编辑 index.html 文件,将播放器脚本的引用地址指向您的 Nginx 服务器地址。

修改前:

<script src="./hancplayer.js"></script>

修改后(示例):

<!-- 将 IP 和端口替换为您实际的 Nginx 地址 --> <script src="http://192.168.0.141:8080/hancplayer.js"></script>

(注:如果 index.html 也托管在同一 Nginx 下,也可以直接使用相对路径 ./hancplayer.js,但需确保所有资源都在同一域下以避免跨域问题)


4. 播放测试

4.1 访问播放页面

在浏览器中访问部署好的 Nginx 地址:

http://192.168.0.141:8080/

(请根据实际 IP 和端口调整)

4.2 输入播放地址

在页面提供的输入框中,填入 RTMS 服务器生成的 WebSocket 播放地址。

URL 格式模板:

ws://<RTMS服务器IP>:<WS端口>/play.pro?cmd=live&ip=<设备IP>&port=<设备端口>&user=<用户名>&pass=<密码>&ftype=<厂家类型>&chan=<通道号>&stream=<码流类型>

测试用例:
假设 RTMS 服务器 IP 为 192.168.0.14,摄像头信息如下:

  • 设备 IP: 192.168.0.222
  • 设备端口: 8000 (海康默认)
  • 用户名: admin
  • 密码: 123456
  • 厂家类型: 0 (海康)
  • 通道号: 1
  • 码流: 0 (主码流)

完整播放地址:

ws://192.168.0.14:5555/play.pro?cmd=live&ip=192.168.0.222&port=8000&user=admin&pass=123456&ftype=0&chan=1&stream=0

4.3 开始播放

  1. 将上述地址粘贴到网页输入框中。
  2. 点击 “实时播放” (或对应按钮)。
  3. 若配置正确,视频画面将在 1-2 秒内加载出来。

5. 常见问题排查 (FAQ)

Q1: 控制台报错 Failed to compile WebAssembly 或 Incorrect response MIME type

  • 原因:Nginx 未识别 .wasm 后缀,返回了错误的 Content-Type。
  • 解决:请严格检查 步骤 3.2,确认 mime.types 中已添加 application/wasm wasm; 且 Nginx 已重载。
  • 验证方法:在浏览器 F12 -> Network 标签页,点击 hancmedia.wasm 请求,查看 Response Headers 中的 Content-Type 是否为 application/wasm

Q2: 视频黑屏或一直加载中

  • 检查网络连通性:确保运行浏览器的电脑能 ping 通 RTMS 服务器 (192.168.0.14) 和 Nginx 服务器 (192.168.0.141)。
  • 检查防火墙:确认 RTMS 服务器的 5555 端口和 Nginx 的 8080 端口已在防火墙放行。
  • 检查参数:确认 URL 中的设备 IP、账号密码、通道号是否正确。可先用 VLC 测试 RTSP 地址是否可用。

Q3: 浏览器控制台报 CORS (跨域) 错误

  • 原因index.html 所在的域名/端口 与 hancplayer.js 或 WS 地址不一致。
  • 解决
    • 尽量让所有资源(HTML, JS, WASM)托管在同一个 Nginx 站点下(同源)。
    • 如果必须跨域,需在 Nginx 配置中添加 add_header Access-Control-Allow-Origin *;

Read more

【Java Web学习 | 第15篇】jQuery(万字长文警告)

【Java Web学习 | 第15篇】jQuery(万字长文警告)

🌈个人主页: Hygge_Code🔥热门专栏:从0开始学习Java | Linux学习| 计算机网络💫个人格言: “既然选择了远方,便不顾风雨兼程” 文章目录 * 从零开始学 jQuery * jQuery 核心知识🥝 * 一、jQuery 简介:为什么选择它? * 1. 核心用途 * 2. 核心优势 * 3. 下载与引入 * 二、jQuery 语法:基础与选择器 * 1. 常用选择器 * 2. ready 方法:确保文档加载完成 * 三、DOM 元素操作:内容、属性、样式 * 1. 操作元素内容 * 2. 操作元素属性 * 3. 操作元素样式 * (1)操作宽度与高度 * (2)

Qwen3-32B在Clawdbot中如何直连Web网关?代理配置避坑指南

Qwen3-32B在Clawdbot中如何直连Web网关?代理配置避坑指南 你是不是也遇到过这样的情况:明明本地跑通了Qwen3-32B,Ollama服务正常、模型加载成功、API响应也OK,可一接入Clawdbot,聊天界面就卡在“正在连接…”、日志里反复报Connection refused或timeout?更奇怪的是,换个小模型(比如Qwen2.5-7B)却能连上——问题不出在模型本身,而卡在那一层看似简单、实则暗藏玄机的Web网关代理链路上。 这不是个例。我们在实际部署中发现,超过65%的Clawdbot+Qwen3-32B集成失败,根源都指向同一个环节:8080端口到18789网关的代理转发配置不匹配。Qwen3-32B对延迟更敏感、请求体更大、上下文窗口更长,普通代理策略在这里会集体“失灵”。本文不讲抽象原理,只说你马上能用、立竿见影的直连方案和5个真实踩过的坑——从环境准备到调试验证,全程贴着Clawdbot控制台操作,每一步都有依据、有截图、有替代解法。 1. 为什么Qwen3-32B在Clawdbot里连不上Web网关? 先破除一个常见误解:“能调通Olla

前端安全:别让你的应用变成黑客的游乐场

前端安全:别让你的应用变成黑客的游乐场 毒舌时刻 这代码写得跟网红滤镜似的——仅供参考。 各位前端同行,咱们今天聊聊前端安全。别告诉我你还在写明文存储密码,那感觉就像把家门钥匙挂在门口——方便,但不安全。 为什么你需要前端安全 最近看到一个项目,登录表单直接把密码发送到服务器,没有任何加密。我就想问:你是在做应用还是在给黑客送大礼? 反面教材 // 反面教材:不安全的登录 // components/LoginForm.jsx export default function LoginForm() { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const handleSubmit = async (e) => { e.preventDefault(); // 直接发送明文密码 const response = await

19. Flutter与Web混合开发实践:打造跨平台的统一体验

19. Flutter与Web混合开发实践:打造跨平台的统一体验 引言 Flutter 是一种强大的跨平台开发框架,它不仅可以开发移动应用,还可以开发 Web 应用。随着 Flutter Web 的不断成熟,Flutter 与 Web 混合开发成为了一种新的趋势。作为一名把代码当散文写的 UI 匠人,我始终认为:好的技术应该是无缝的,它应该让开发者能够自由地在不同平台之间切换,而不需要为每个平台重新开发。Flutter 与 Web 混合开发,就是为了实现这种无缝的体验。 什么是 Flutter 与 Web 混合开发? Flutter 与 Web 混合开发是指在同一个项目中,同时使用 Flutter 和 Web 技术(如 HTML、CSS、JavaScript)来开发应用。这种开发方式可以结合