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

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

  •  
  •   noobma · 180 天前 · 3620 次点击
    这是一个创建于 180 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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