使用Node Media Server从IP摄像头重新流传输RTSP到http/ws,并使用html显示

6

目标

我的目标是在标准HTML页面(html5 + css3 +原生JavaScript,无插件=无魔法)上显示我的IP摄像头的RTSP输出流。HTML页面应该托管在我树莓派上的NGINX web服务器上。

我的设备

我使用的设置是带有Rasbian操作系统、Node.js和Node-Media-Server package的Raspberry Pi 3 B+、NGINX(但我认为NGINX对我的问题并不重要?我没有在其中为Node-Media-Server进行任何配置。)、一个IP摄像头和一个浏览器。enter image description here

我尝试过什么

Node-Media-Server项目中的自述文件非常详细,有一个教程描述了我想做的事情。具体来说,有一个标记示例说明如何访问实时流:

<html>

<head>
    <title>Camera</title>
</head>

<body>
    <script src="https://cdn.bootcss.com/flv.js/1.4.0/flv.min.js"></script>
    <video id="videoElement"></video>
    <script>
        if (flvjs.isSupported()) {
            var videoElement = document.getElementById('videoElement');
            var flvPlayer = flvjs.createPlayer({
                type: 'flv',
                url: 'http://localhost:8000/live/uterum.flv'
            });
            flvPlayer.attachMediaElement(videoElement);
            flvPlayer.load();
            flvPlayer.play();
        }
    </script> 
</body>

</html>

以下是我在树莓派上启动媒体服务器的方法,kommandoran-mediaserver.js

const { NodeMediaServer } = require('node-media-server');

const config = {
    logType: 3, // 3 - Log everything (debug)
    rtmp: {
        port: 1935,
        chunk_size: 60000,
        gop_cache: true,
        ping: 60,
        ping_timeout: 30
    },
    http: {
        port: 8000,
        allow_origin: '*'
    },
    relay: {
        ffmpeg: '/usr/local/bin/ffmpeg',
        tasks: [
            {
                app: 'cctv',
                mode: 'static',
                edge: 'rtsp://<USER>:<PASSWORD>@10.0.0.111/live1.sdp',
                name: 'uterum',
                rtsp_transport : 'tcp' //['udp', 'tcp', 'udp_multicast', 'http']
            }
        ]
    }
};

var nms = new NodeMediaServer(config)
nms.run();

我的问题和疑问

我试图通过树莓派上的Chromium浏览器(即本地主机)查看camera.html(请参见上面的标记),但没有显示任何内容。在Chromium调试检查器中没有JavaScript错误,但是我得到了这个错误:
GET http://localhost:8000/live/uterum.flv net::ERR_EMPTY_RESPONSE

这里是来自节点终端的截图: enter image description here 红框区域说明了当我尝试请求 http://localhost:8000/live/uterum.flv 时的输出。

我猜我尝试访问了错误的端点,但正确的是哪个呢?文档中写道 http://localhost:8000/live/STREAM_NAME.flv。而我的情况下, "STREAM_NAME" 是什么意思?

1个回答

2

从配置中可以看出,你的RTSP流被推送到了“cctv”应用程序。

因此,你的播放地址应该是:

rtmp://localhost/cctv/uterum

或者

http://localhost:8000/cctv/uterum.flv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接