h5实现ftps流媒体(视频)的播放

发布于 2022-12-16  117 次阅读


h5实现ftps流媒体(视频)的播放

类似于监控的一个系统吧,接到这个要求之后我查阅过很多资料

什么NGINX转录啊,FFmpeg转码呀,websocket事实播放呀....零零散散的,不是这出问题就是那出问题

而且可以一步一步照着来的视频教程可以说是没有!!!

在找了两天的教程后,结合自己的摸索,有了思路

原理:nodejs+websocket实现ftps视频播放

首先找一个能播放的ftps视频流,现在网络上绝大多数的都封了.这里我找了两个可以用的

rtmp://ns8.indexforce.com/home/mystream
rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4
rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov

同时,推荐下载一个检测rtps的软件VLC media player

奉上下载地址:https://pan.baidu.com/s/1UYpH5XlK3jhbqakEM0GOag

提取码:ftps

源码部分

流程

  1. 安装node (如何安装,自行百度)

  2. 安装 node-rtsp-stream
    命令如下:npm install node-rtsp-stream

  3. 注意:第一次执行改命令后,会在当前路径下产生 node_modules文件夹,里面包含了大量的js相关文件(当然需要联网第一次),另外会产生package-lock.json文件。
    如果有了这个文件后,第二次应该不需要执行 npm install node-rtsp-stream

  4. 编写server.js文件

  5. 编写test.html文件

  6. 启动node server.js

//serve.js

var Stream = require('node-rtsp-stream')
var stream = new Stream({
    name: 'socket',
    streamUrl: 'rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov',
    wsPort: 9990,
    ffmpegOptions:{
        '-stats': '',
        '-r': 20,
        '-s': '1920 1080'
    }
})
//html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div style="position: absolute;">
        <canvas id="canvas_9990" style="width: 240px;height: 160px;" onclick="pauseBtnShow()"></canvas>
        <div id="pauseBtn" onclick="startOrPause()" style="z-index: 2; position: absolute; top: 0px; bottom: 0px; left: 0px; right: 0px; max-width: 75px; max-height: 75px; margin: auto; opacity: 0.7; cursor: pointer; display: none;"><svg style="max-width: 75px; max-height: 75px;" viewBox="0 0 200 200" alt="Play video"><circle cx="100" cy="100" r="90" fill="none" stroke-width="15" stroke="#fff"></circle><polygon points="70, 55 70, 145 145, 100" fill="#fff"></polygon></svg></div>
    </div>
    <script src="jsmpeg.min.js"></script>
    <script>
        var player = new JSMpeg.Player('ws://localhost:9990', {
            canvas: document.getElementById('canvas_9990'),
            autoplay:false,//是否自动播放
            loop:true,
        });
 
        function startOrPause(){
            if (player.isPlaying) {
                player.pause();
            }
            else {
                player.play();
                document.getElementById('pauseBtn').style.display = 'none'
            }
        }
        function pauseBtnShow(){
            if (player.isPlaying) {
                player.pause();
                document.getElementById('pauseBtn').style.display = 'block'
            }
        }
    </script>
</body>
</html>

img
img


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。