V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
noobma
V2EX  ›  程序员

有办法在不经过服务器转码直接在浏览器播放摄像头 rtsp 流吗

  •  
  •   noobma · 2023-04-04 10:04:14 +08:00 · 4748 次点击
    这是一个创建于 466 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求是有一个海康的摄像头,需要在浏览器预览画面。

    现在是内网弄了一台服务器把 rtsp 转成 webrtc 去播放的,但是这样上线的时候就需要专门开一台转码推流的服务器,而且带宽肯定也要几十 M 起步,一个月最少估计也要几千块。

    我看 ffmpeg 有 webassembly 版本,就是能不能在前端直接通过 ffmpeg 去转码,然后前端直接播放呢。

    有没有相关实践的大佬给点建议🙏

    37 条回复    2023-04-06 09:21:46 +08:00
    newmlp
        1
    newmlp  
       2023-04-04 10:22:07 +08:00
    rtsp 建立在 tcp 或 udp 协议上,浏览器无法访问 socket ,所以不能
    opengps
        2
    opengps  
       2023-04-04 10:23:58 +08:00
    把运行浏览器的电脑一并当作服务器用呢?有什么困难吗
    lower
        3
    lower  
       2023-04-04 10:26:18 +08:00
    vlc 插件 搞起;就是只能 ie 内核😂
    learningman
        4
    learningman  
       2023-04-04 10:27:14 +08:00 via Android   ❤️ 2
    brader
        5
    brader  
       2023-04-04 10:27:41 +08:00
    我有几个构想,看你能不能接受:
    想法一:用 GO 之类的语言写一个简单的客户端.exe 软件,接受数据然后并开个端口为客户端服务,每次就让客户点击启动一个这个软件服务就好。
    方法二:写一个浏览器扩展,让客户安装这个扩展。
    op351
        6
    op351  
       2023-04-04 10:28:12 +08:00
    做插件应该是可行的
    我记得很早之前监控厂商就有在 c 端装插件 然后实现在浏览器里看摄像头流的功能
    纯粹的的 b 端不装插件应该不行 浏览器只是浏览器 不是完整的 node 环境
    leetom
        7
    leetom  
       2023-04-04 10:54:21 +08:00
    关注一下,我们目前是在客户端安装 VLC 然后关联协议,点击按钮打开本地播放器播。
    我们系统是内部使用,所以这样没啥问题。

    楼主可以看一下摄像头有没有辅流,一般辅流都是支持 http 协议的
    xhcnb
        8
    xhcnb  
       2023-04-04 11:06:39 +08:00
    关注一下, 直接访问摄像头的 rtsp 也需要带宽吧, 实在不行弄一个树莓派和摄像头绑一起吧
    superliy
        9
    superliy  
       2023-04-04 11:13:03 +08:00
    大华的录像机有 web 管理界面的,web 管理界面可以看视频,我看了一下实现是 rtsp on websocket ,理论上是可以做到的,只是摄像头是否支持 rtsp on websocket 就不知道了,也可以买个录像机
    si
        10
    si  
       2023-04-04 11:19:05 +08:00
    不用插件和软件,前端应该不能直接使用 TCP 或 UDP 吧。
    pecokie
        11
    pecokie  
       2023-04-04 11:28:21 +08:00
    海康的摄像头支持 GB28181 ,理论上通过 SIP 信令播控制放后,浏览器通过 WebRTC 接受 UDP 码流然后前端来解码播放
    xwayway
        12
    xwayway  
       2023-04-04 11:48:33 +08:00
    姑且不论通信协议问题,就单说端到端的通信,如果不是在同一个局域网内,是不是得有个公网地址,这样的话,一台服务器也是必不可少的。
    yekern
        13
    yekern  
       2023-04-04 11:49:26 +08:00
    在很久很久很久很久以前, IE 时代有一款播放器支持浏览器播放 他的名字叫 Realplayer 支持 rtsp 和 rmvb 等常见格式
    lwep
        14
    lwep  
       2023-04-04 11:53:47 +08:00
    有的摄像头能推 RTMP 的流,似乎 RTMP 能浏览器直接播放
    thinkershare
        15
    thinkershare  
       2023-04-04 12:00:09 +08:00
    这是一条死路,别折腾了,靠谱就转换为 WebRTC, 不靠谱就用本机插件(海康官方就是这么干的), 延迟没要求就是要 hls ,所有基于裸 tcp 协议的浏览器上都没戏(兼容性,稳定性都搞不定), 我以前浪费过一个月在这个上面,如果行得通,海康官方就已经提供了,我和海康的技术人员沟通过。
    yplam
        16
    yplam  
       2023-04-04 13:01:06 +08:00 via Android
    摄像头指定要海康的话可以卖多一套设备丢客户内网做 rtsp 转 webrtc ,打洞成功就不耗流量,打洞不成功按流量收维护费也很合理
    bv
        17
    bv  
       2023-04-04 13:08:42 +08:00
    @newmlp 通过 websocket 承载 rtsp 流呢?
    crazytudou
        18
    crazytudou  
       2023-04-04 13:30:55 +08:00
    之前也是海康监控遇到这需求,没找到能直接在浏览器播放 rtsp ,我也是专门搞了台服务器转成 rtmp ,ffmpeg+jsmpeg ,websocket 方式在 web 客户端播放。
    吐槽下海康给的 SDK 是真的垃圾,web 用插件只能限 ie 用,没插件也限制浏览器,有等没。
    newmlp
        19
    newmlp  
       2023-04-04 13:34:20 +08:00
    @bv 可以,但是还是需要一个中间服务把 tcp 或 udp 转成 websocket
    lovelylain
        20
    lovelylain  
       2023-04-04 13:43:29 +08:00 via Android   ❤️ 1
    浏览器直接播放 rtsp 是做不到的,必须转码,可以转 webrtc 也可以 mse jsmpeg 等,各有优缺点,mse 基于 websocket 简单方便但是不支持 ios ,jsmpeg 是图片没有声音,webrtc 数据走 udp 复杂一点。都不用自己开发,跑个 go2rtc 就行。
    NessajCN
        21
    NessajCN  
       2023-04-04 13:58:52 +08:00
    ffmpeg 的确有 wasm 版本,但你要用 ffmpeg 转码的前提是首先要有这条码流
    因此你需要开一个服务,让摄像头可以把码流推到这个服务上,
    一般海康会给配一台 nvr 就是用来开这个 rtsp 服务接收推流的。
    如果你只有一台摄像头,那你无论如何都必须自己开这么个服务,然后去摄像头那里设置好把流推到你自己开的服务上(因此需要可访问的固定 ip 或域名)。这一步无论如何也不可能在客户的机子或浏览器上完成。
    所以还是老实点整服务器吧。
    ysc3839
        22
    ysc3839  
       2023-04-04 17:15:11 +08:00 via Android
    @bv WebSocket 当然可以,但是楼主的目的是节省流量。楼主说的“转码”其实只是转封装,不吃 CPU/GPU 编解码,吃的是网络流量。
    DCELL
        23
    DCELL  
       2023-04-04 17:29:07 +08:00
    RTSP 推流服务其实还是简单的,据我了解现代浏览器都不支持 RTSP 流
    myleszzZ
        24
    myleszzZ  
       2023-04-04 17:32:03 +08:00
    感觉遇到了同样的事情,吐槽一下我们现在做的方式,后端用 zlmediakit 转码,负责将 rtsp 流转换成 flv,内网走 frp 通道; H265 + 1080P ,前端换各种组件播放,最后花钱买了一个 js 播放器,才勉强上线。
    建议
    1 、对画质没要求,摄像头降低清晰度到 720P
    2 、NVR 存储空间够用,改成 H264
    mankismi
        25
    mankismi  
       2023-04-04 17:49:45 +08:00
    我也是折腾了一个多月得出的结论,需要的还是需要。逃不了
    推荐一个小项目
    https://github.com/mpromonet/webrtc-streamer
    轻量的 webrtc 转码 简单易用
    Swimming
        26
    Swimming  
       2023-04-04 18:10:59 +08:00 via Android
    今天给客户装了 4 个 800 万像素的,他说要做 RTSP ,我们只管装,他自己在录像机配置,然后找电信拉专线去了……
    kukat
        27
    kukat  
       2023-04-05 00:02:49 +08:00
    Wasm 应该可以
    whi147
        28
    whi147  
       2023-04-05 00:29:37 +08:00 via iPhone
    @thinkershare 我用 wasm 搞定了,就是软解同时只能解一路
    whi147
        29
    whi147  
       2023-04-05 00:32:07 +08:00 via iPhone
    @NessajCN 这一步可以实现,本地拉流推到 wasm
    hanguofu
        30
    hanguofu  
       2023-04-05 01:43:59 +08:00 via Android
    谢谢推荐!
    luohuanlh
        31
    luohuanlh  
       2023-04-05 07:01:57 +08:00
    请问,如果有 500 多路海康视频,转 web 播放,除了 ffmpeg+zlmediakit ,还有更合适的方案不?
    fzcf
        32
    fzcf  
       2023-04-05 12:19:34 +08:00
    @luohuanlh #31 采购一套海康的视频平台,直接通过他转成 web 播放
    luohuanlh
        33
    luohuanlh  
       2023-04-05 18:24:08 +08:00
    @fzcf 果然还是要加钱才行呐。
    fzcf
        34
    fzcf  
       2023-04-05 23:08:01 +08:00
    @luohuanlh #33 低成本的话你用萤石云吧也没多贵,就是流量要花钱。
    luohuanlh
        35
    luohuanlh  
       2023-04-06 09:05:21 +08:00
    @fzcf 不准备通过公网服务转。内部物理服务器 24 核,128 内存,我试了下转 100 多路是极限了。
    suke119
        36
    suke119  
       2023-04-06 09:19:01 +08:00
    node+websocket+flutte-ffmpeg ,简单易用,其他的处理降级浏览器版本使用 flash 都比这个方案复杂麻烦
    suke119
        37
    suke119  
       2023-04-06 09:21:45 +08:00
    还有就是 wasm 方案也不得行,浏览器没法提供 tcp/udp 裸流的,所有 over
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   910 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 22:00 · PVG 06:00 · LAX 15:00 · JFK 18:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.