无法使用 Angular 显示实时摄像机 RTSP 流
Not able to Show live camera RTSP streaming with Angular
我正在使用 angular 开发 Web 应用程序,我需要添加一个 window 来显示实时 RTSP 流。经过搜索我发现可以用 JSMpeg js 库来完成。
在服务器端,我找到了这个 nodejs 示例
Stream = require('node-rtsp-stream')
stream = new Stream({
name: 'name',
streamUrl: 'rtsp_url',
wsPort: 9999,
ffmpegOptions: { // options ffmpeg flags
'-stats': '', // an option with no neccessary value uses a blank string
'-r': 30 // options with required values specify the value after the key
}
})
在网络方面,我首先尝试了一个简单的 HTML5 示例:
<html>
<body>
<div>
<canvas id="canvas" width="1920" height="1080" style="display: block; width: 40%;"></canvas>
</div>
</body>
<script type="text/javascript" src="jsmpeg.min.js"></script>
<script type="text/javascript">
//var ws = new WebSocket('ws://localhost:9999');
player = new JSMpeg.Player('ws://localhost:9999', {
canvas: document.getElementById('canvas'), autoplay: true, audio: false, loop: true
})
</script>
</html>
这个 HTML5 页面工作正常,我在我的网页上进行了直播。之后,我尝试将此 HTML 代码改编为 angular,我使用 npm 安装了第一个 JSMpeg:
npm install jsmpeg-player --save
我在对应的html文件中添加了canvas标签:
<canvas #streaming id="canvas" width="1920" height="1080" style="display: block; width: 40%;"></canvas>
然后我尝试在相应的组件中将js脚本适配为ts脚本:
@ViewChild('streaming', {static: false}) streamingcanvas: ElementRef;
constructor( ... ) { }
ngOnInit() {
....
let player = new JSMpeg.Player('ws://localhost:9999', {
canvas: this.streamingcanvas, autoplay: true, audio: false, loop: true
})
}
我得到的结果是添加了 canvas 标签,但我的网页中没有流式传输,控制台中也没有脚本错误。我在浏览器中查看了流量:
并且 nodejs 服务器似乎收到了 websocket 请求,如他的踪迹所述:
但正如我所说,我的页面中没有流式传输:
我的问题是:我的 ts 代码中缺少什么?我应该修理什么?
ngOnInit 的变化 this.streamingcanvas
this.streamingcanvas.nativeElement
应该是这样的
ngOnInit() {
\ ...
let player = new
JSMpeg.Player('ws://localhost:9999', {
canvas: this.streamingcanvas.nativeElement,
autoplay: true,
audio: false,
loop: true
})
}
我正在使用 angular 开发 Web 应用程序,我需要添加一个 window 来显示实时 RTSP 流。经过搜索我发现可以用 JSMpeg js 库来完成。 在服务器端,我找到了这个 nodejs 示例
Stream = require('node-rtsp-stream')
stream = new Stream({
name: 'name',
streamUrl: 'rtsp_url',
wsPort: 9999,
ffmpegOptions: { // options ffmpeg flags
'-stats': '', // an option with no neccessary value uses a blank string
'-r': 30 // options with required values specify the value after the key
}
})
在网络方面,我首先尝试了一个简单的 HTML5 示例:
<html>
<body>
<div>
<canvas id="canvas" width="1920" height="1080" style="display: block; width: 40%;"></canvas>
</div>
</body>
<script type="text/javascript" src="jsmpeg.min.js"></script>
<script type="text/javascript">
//var ws = new WebSocket('ws://localhost:9999');
player = new JSMpeg.Player('ws://localhost:9999', {
canvas: document.getElementById('canvas'), autoplay: true, audio: false, loop: true
})
</script>
</html>
这个 HTML5 页面工作正常,我在我的网页上进行了直播。之后,我尝试将此 HTML 代码改编为 angular,我使用 npm 安装了第一个 JSMpeg:
npm install jsmpeg-player --save
我在对应的html文件中添加了canvas标签:
<canvas #streaming id="canvas" width="1920" height="1080" style="display: block; width: 40%;"></canvas>
然后我尝试在相应的组件中将js脚本适配为ts脚本:
@ViewChild('streaming', {static: false}) streamingcanvas: ElementRef;
constructor( ... ) { }
ngOnInit() {
....
let player = new JSMpeg.Player('ws://localhost:9999', {
canvas: this.streamingcanvas, autoplay: true, audio: false, loop: true
})
}
我得到的结果是添加了 canvas 标签,但我的网页中没有流式传输,控制台中也没有脚本错误。我在浏览器中查看了流量:
并且 nodejs 服务器似乎收到了 websocket 请求,如他的踪迹所述:
但正如我所说,我的页面中没有流式传输:
我的问题是:我的 ts 代码中缺少什么?我应该修理什么?
ngOnInit 的变化 this.streamingcanvas
this.streamingcanvas.nativeElement
应该是这样的
ngOnInit() {
\ ...
let player = new
JSMpeg.Player('ws://localhost:9999', {
canvas: this.streamingcanvas.nativeElement,
autoplay: true,
audio: false,
loop: true
})
}