# H5播放RTSP视频流 **Repository Path**: Mr-Format/rtsp-to-flv ## Basic Information - **Project Name**: H5播放RTSP视频流 - **Description**: 服务端使用express+express-ws将rtsp转换为flv,通过websocket将flv流推送到前端进行显示 - **Primary Language**: JavaScript - **License**: ISC - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 3 - **Created**: 2021-07-02 - **Last Updated**: 2025-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HTML5 播放 rtsp视频流 ## 基于flv.js的RTSP播放方案 ### 1.服务端 服务端采用express+express-ws框架,当有http请求发送到指定地址时,启动ffmpeg串流程序,直接将RTSP流封装成FLV格式的视频流,推送到指定的WebSocket响应流中。 ```js const express = require("express"); const expressWebSocket = require("express-ws"); const ffmpegPath = require('@ffmpeg-installer/ffmpeg').path; const ffmpeg = require("fluent-ffmpeg"); ffmpeg.setFfmpegPath(ffmpegPath); const webSocketStream = require("websocket-stream/stream"); const WebSocket = require("websocket-stream"); const http = require("http"); const path = require("path"); const app = express(); app.use(express.static(__dirname)); expressWebSocket(app, null, { perMessgaeDeflate: true }); app.ws("/rtsp/:id", rtspRequestHandle); app.listen(8888); console.log("express listen: 8888"); function rtspRequestHandle(ws, req) { console.log("rtsp request handle"); const stream = webSocketStream(ws, { binary: true, browserBufferTimeout: 1000000 }, { browserBufferTimeout: 1000000 }); let url = req.query.url; console.log("rtsp url:", url); console.log("rtsp params:", req.params); try { ffmpeg(url).addInputOption("-rtsp_transport", "tcp", "-buffer_size", "102400").on("start", () => { console.log(url, "stream stated.") }).on("codecData", () => { console.log(url, "Stream codecData."); }).on("error", err => { console.log(url, "An Error occured:", err.message); }).on("end", () => { console.log(url, "Stream end!"); }).outputFormat("flv").videoCodec("copy").noAudio().pipe(stream); } catch (error) { console.log(error); } } ``` ### 2.客户端 ```vue ``` ## VLC方案 - 下载VLC media player软件 - 媒体 -> 流 -> 网络,输入rtsp流地址(rtsp://...) -> 串流 -> 下一个 - 文件选项切换为HTTP -> 添加 -> 设置端口和路径 -> 下一个 - 选中激活转码,配置文件切换为Video-Theora+Vorbis(OGG) -> 下一个 - 选中串口所有基本流,点击流,开始转换。 转换完成后,将链接(http://本机IP地址:端口号/路径/)设置为video标签src属性值即可 ## HLS方案 服务端将rtsp流转换为hls视频格式,前端获取http视频地址(.m3u8格式),判断是否支持hlc视频,直接或者通过hlc.js插件使用video元素播放视频 - 服务端 略 - web端 ```js // 引入hls.js // 获取视频地址 url // ... // 获取video元素 const video = this.$refs.video; // 判断是否支持Hls 或 能否直接播放hls if (Hls.isSupported()) { const hls = new Hls(); // 实例化Hls对象 hls.loadSource(url); // 传入路径 hls.attachMedia(video); hls.on(Hls.Events.MANIFEST_PARSED, () => { video.play(); // 调用播放 API }); } else if (video.canPlayType("application/vnd.apple.mpegurl")) { video.src = url; video.addEventListener("canplay", () => { video.play(); }); } ```