我使用node-rtsp-stream和jsmpeg在浏览器中流和显示来自IP摄像机的视频。我使用rtsp://:554 / Steaming / Channels / 102地址在vlc中获得了良好的质量。但是,当我使用jsmpeg在浏览器中显示流时,其质量太低。
我的机器是Windows 10,
网络摄像机不在我的本地网络中,因此可以通过Internet访问它(在vlc中没有问题),
我尝试了以下一些选项,但没有帮助。
wsPort: 9999,
width: 352,
height: 288,
fps: '24',
kbs: '2048k',
ffmpegOptions: { // options ffmpeg flags
'-stats': '', // an option with no neccessary value uses a blank string
'-r': 20, // options with required values specify the value after the key
'-q:v': 32, // quality video in scale [2, 32]
'-b': '2000K' // video bitrate
}
这是我的源代码,
app.js
Stream = require('node-rtsp-stream')
stream = new Stream({
name: 'name',
streamUrl: rtspUrlAddress,
wsPort: 9999,
width: 352,
height: 288,
fps: '24',
kbs: '2048k',
ffmpegOptions: {
'-stats': '',
'-r': 20,
'-q:v': 32,
'-b': '2000K'
}
})
和 index.html
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>rtsp-stream</title>
<div><canvas id="videoCanvas" width="352" height="288"></canvas></div>
<script type="text/javascript" src="jsmpeg.js"></script>
<script type="text/javascript">
var canvas = document.getElementById("videoCanvas");
var ws = new WebSocket("ws://localhost:9999")
var player = new jsmpeg(ws, {
canvas: canvas,
autoplay: true,
audio: false,
loop: true
});
</script>
</head>
<body>
<div class="jsmpeg" data-url=""></div>
</body>
</html>
它没有给出任何错误,因此它似乎没有问题。 任何帮助表示赞赏。 预先感谢。
答案 0 :(得分:0)
对此有相同的问题,并使用新版本的JSMpeg(jsmpeg.min.js)进行修复。还使用了node-rtsp-stream-es6。
您应将html修改为:
<script type="text/javascript" src="jsmpeg.min.js"></script>
<script type="text/javascript">
var canvas = document.getElementById('video');
var url = 'ws://localhost:8082/';
var player = new JSMpeg.Player(url, {canvas:canvas, autoplay:true,audio:false,loop:true})
</script>
从https://github.com/phoboslab/jsmpeg下载websocket-relajy.js。
在该文件中,有说明使其生效。 您需要使用node命令运行websocket-relay.js,然后使用另一个终端将ffmpeg -i -f mpegts http://localhost:8081/yoursecret提交给ws,然后您可以在浏览器中打开html,然后您会看到视频流式传输。