紫影基地

 找回密码
 立即注册
查看: 328|回复: 0

基于 WebRTC 的 RTSP 视频实时预览

[复制链接]
阅读字号:

598

主题

635

帖子

9069

积分

审核员

Rank: 7Rank: 7Rank: 7

积分
9069
发表于 2021-10-25 10:48:48 | 显示全部楼层 |阅读模式
本帖最后由 moonstar 于 2021-10-25 11:00 编辑

简介

背景

由于项目需要,需要使用摄像头预览功能,设备型号为海康威视。目前已存在的基于 FFmpeg 的方案延迟都太高,所以项目最终选择基于此方案。
方案

方案选用为基于 WebRTC 的视频即时通讯,它原生支持对 RTP 协议的解码,所以能够做到延迟很低,大概0.2-0.4秒左右,其他方案都有大于1秒的延迟。
WebRTC对浏览器有要求,可以在下面的地址中查看支持的浏览器。
https://caniuse.com/rtcpeerconnection

105331xybxz7xdunyabncy.png

以下介绍内容来自百度百科
WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。
WebRTC实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单的javascript就可以达到实时通讯(Real-Time Communications (RTC))能力。
WebRTC 的实现方案在 Github 有非常多,经过一序列对比和测试,最终选择的是使用 webrtc-streamer 这个项目,其容易使用并且较为稳定。
Getting Started

webrtc-streamer 不仅支持对 RTSP 流的捕获而且还支持对V4L2以及屏幕窗口快照的捕获。
webrtc-streamer 内置了一个小型的 HTTP server 来对 webrtc 需要的相关接口提供支持。
下面具体开始如何设置:
对摄像头进行配置

由于 webrtc 的核心库还不支持 h265, 所以需要设置为 h264 编码。
登录到海康威视摄像头的后台配置中心,在 “视音频” 菜单下进行设置,然后保存。
105333g6wjx8yddr8b8dbg.jpg
下载最新包

在github 发布页面根据需要的平台选择相应的包下载
https://github.com/mpromonet/webrtc-streamer/releases
下载完成后可以使用以下命令进行测试:
./webrtc-streamer rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov打开 localhost:8000 已访问页面
测试设备

如果没有问题,就可以使用本地的设备进行测试了,海康威视视频流默认地址为:
rtsp://账号:密码@IP地址:554/Streaming/Channels/101替换相应的信息以进行测试。
如果是在 windows 下,webrtc-streamer 也会抓取到窗口和屏幕的快照页面,可以使用 -q 参数进行过滤,其支持正则表达式。这个参数没有在 help 列表里面列出来是我查看源码发现的。
./webrtc-streamer  rtsp://账号:密码@IP地址:554/Streaming/Channels/101 -q (?=rtsp).*集成

你可以在下载的发布包中的html文件夹中找到 index.html 来查看示例代码,下面列出来核心代码:
  1. <html>
  2. <head>
  3. <script src="libs/adapter.min.js" ></script>
  4. <script src="webrtcstreamer.js" ></script>
  5. <script>        
  6.     var webRtcServer      = null;
  7.     window.onload         = function() {
  8.         webRtcServer      = new WebRtcStreamer("video",location.protocol+"//"+window.location.hostname+":8000");
  9.     webRtcServer.connect("rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov");
  10.     }
  11.     window.onbeforeunload = function() { webRtcServer.disconnect(); }
  12. </script>
  13. </head>
  14. <body>
  15.     <video id="video" />
  16. </body>
  17. </html>
复制代码


     使用 WebComponent 集成
  1. <html>
  2. <head>
  3.     <script type="module" src="webrtc-streamer-element.js"></script>
  4. </head>
  5. <body>
  6.    <webrtc-streamer url="rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov"></webrtc-streamer>
  7. </body>
  8. </html>
复制代码


       总结

主要还是对 webrtc 的熟悉,你可以在 https://webrtc.org/getting-started/overview 找到相关指南。
比如什么是 TURN server,什么是peer connections 都可以在上面的指南中找到。
<hr>
本文地址:http://www.cnblogs.com/savorboard/p/webrtc-rtsp.html
作者博客:Savorboard

来源:https://www.jianshu.com/p/28b0f2a586ca
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
天之所衡,道之所倚
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|紫影基地

GMT+8, 2025-1-12 11:57 , Processed in 0.086125 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表