HTML5播放RTSP视频的实例代码
⽬前⼤多数⽹络摄像头都是通过 RTSP 协议传输视频流的,但是 HTML 并不标准⽀持 RTSP 流。除了 Firefox 浏览器可以直
接播放 RTSP 流之外,⼏乎没有其他浏览器可以直接播放 RTSP 流。Electron 应⽤是基于 Chromium 内核的,因此也不能直
接播放 RTSP 流。
在借助⼀定⼯具的情况下,可以实现在 Web 页⾯上播放 RTSP 流。本⽂介绍的⽅法可以应⽤于传统 Web 应⽤和 Electron 应
⽤中,唯⼀的区别是将 Electron 应⽤的主进程当作传统 Web 应⽤的服务器。
⽬前已有 RTSP 播放⽅案的对⽐
既然是做直播,就需要延迟较低。当摄像头掉线时,也应当有⼀定的事件提⽰。处于这两点,对⽬前已有的已经实现、⽆需购
买许可证的 RTSP 播放⽅案进⾏对⽐(处于原理阶段的暂时不分析)。
我对这四种⽅式都进⾏了实现,整体效果最好的还是第4种⽅案,占⽤端⼝少,延迟低,渲染速度快,⽽且离线事件易于处
理。
基于 flv.js 的 RTSP 播放⽅案
flv.js 是 Bilibili 开源的⼀款 HTML5 浏览器。依赖于 Media Source Extension 进⾏视频播放,视频通过 HTTP-FLV 或
WebSocket-FLV 协议传输,视频格式需要为 FLV 格式。
服务器端(主进程)
服务器端采⽤ express + express-ws 框架进⾏编写,当有 HTTP 请求发送到指定的地址时,启动 ffmpeg 串流程序,直接将
RTSP 流封装成 FLV 格式的视频流,推送到指定的 WebSocket 响应流中。
import * as express from "express";
import * as expressWebSocket from "express-ws";
import ffmpeg from "fluent-ffmpeg";