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

ffmpeg.wasm 关于 rtsp 推流

  •  
  •   andyskaura · 210 天前 · 2098 次点击
    这是一个创建于 210 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求:rtsp 协议 ip 摄像头转码 webrtc 协议在线播放。


    疑问:本地的 ffmpeg 可以解析 rtsp 通过端口推流并转发出去,这个方案非常灵活,但局限于 cs 模式,在浏览器上偶然发现 ffmpeg 的 wasm 版本,了解后发现 github 上打包出来的解析库并不全,其次看 demo ,输入输出都是以文件的形式放在内存访问,并没有流的形式输入输出。所以想问下 wasm 解析 rtsp 的可行性。
    22 条回复    2022-07-13 13:28:14 +08:00
    3dwelcome
        1
    3dwelcome  
       210 天前   ❤️ 1
    应该不行,浏览器对网络安全要求很严格,只允许访问 ws://或 wss://之类 http 封装过的前缀,不允许直接访问 rstp://加端口的 url 。

    流的输入输出到时无所谓,wasm 处理的都是内存二进制数据。
    3dwelcome
        2
    3dwelcome  
       210 天前
    “输入输出都是以文件的形式放在内存访问”

    这是第三方封装过的 indexedDB 额外库,比如 emscripten 自己写的库。

    单纯的 wasm 没这些东西。demo 里用文件输入,也就是为了和传统的 C Api 进行对接。
    andyskaura
        3
    andyskaura  
    OP
       210 天前
    @3dwelcome
    都忘了还有访问限制的问题,也就是说从根源就排除了浏览器解析 rtsp 的可能性。感谢回复!
    还是老老实实弄个服务负责转发吧。
    thinkershare
        4
    thinkershare  
       210 天前   ❤️ 1
    不明白你究竟想要做什么? 使用 ffmpeg 在客户端直接解码 rtsp 协议的流, 还是准备干嘛?
    churchill
        5
    churchill  
       210 天前
    我想说任何在客户端硬解视频的都是流氓
    不是你的第一行不是写着转 webrtc 么,那还需要什么客户端 ffmpeg
    thinkershare
        6
    thinkershare  
       210 天前   ❤️ 1
    浏览器是没法解析 rtsp 的, 我目前用的是 hls 的流, 延迟 1-3s, 用的 H265, 在浏览器上使用 ffmpeg 的 wasm 解码 H265, 大部分浏览器都不支持直接播放 H265.
    thinkershare
        7
    thinkershare  
       210 天前
    @churchill 你这个说法, 我严重不同意, 针对互联网项目, 这样搞的确不大合适. 但政企很多项目, 在客户端直接好维护的多. 完全不需要搭建一套后端找人长期维护.
    fgodt
        8
    fgodt  
       210 天前   ❤️ 1
    wasm 是不能使用 tcp 建立 rtsp 连接的,网页上你还是只能 http 和 ws 建立连接
    andyskaura
        9
    andyskaura  
    OP
       210 天前
    @thinkershare 之前试过 hls 的 延迟 5s 以上,偶尔 10s ,后来放弃了,改用视频流 ts 切片,h264 延迟 0.5s 内。现在设备多了,想弄个中间件把所有输入都统一成 webrtc ,用它这一套成熟的体系。
    andyskaura
        10
    andyskaura  
    OP
       210 天前
    @fgodt 感谢 已经意识到这个问题了。
    andyskaura
        11
    andyskaura  
    OP
       210 天前
    @churchill 是想用 ffmpeg 将 rtsp 协议转 webrtc
    churchill
        12
    churchill  
       210 天前
    @andyskaura
    ffmpeg 干不了这事吧,最多转个 mpeg 用 websocket 输出?
    我用过这个 https://github.com/deepch/vdk/tree/master/format/rtspv2
    novolunt
        13
    novolunt  
       210 天前
    @3dwelcome
    @thinkershare
    可以让浏览器支持其他协议
    blog.51cto.com/aeolian/2858445
    twosix
        14
    twosix  
       210 天前
    @churchill 提供的 deepch 的方案里就有 rtsptowebrtc 的 demo 了,如果想做大批量的话可以参考下 SRS ,用 flv 的话延迟应该也能接受
    thinkershare
        15
    thinkershare  
       210 天前
    @novolunt 你和我们说的不是一个东西, 而且根本不是解决问题的办法
    zscself
        16
    zscself  
       210 天前   ❤️ 1
    感觉这个就符合需求:[ZLMediaKit]( https://github.com/ZLMediaKit/ZLMediaKit)
    cwaken
        18
    cwaken  
       210 天前 via iPhone
    webrtc 方案做过,服务端拉流转码 h264 。wasm 方案做过,服务端拉流转发 wasm 解码
    microxiaoxiao
        19
    microxiaoxiao  
       210 天前
    那么多人让人都说不行,我不信。你的需求如果是使用 webrtc 协议播放的话,可以用 janus 等,俗称信令媒体网关。如果仅仅是播放 rtsp 。流程肯定就是利用类似 websocket 的形式,去进行信令交互( option, describle ,play 这些)。现成的也有很多。
    learningman
        20
    learningman  
       210 天前 via Android   ❤️ 1
    https://chromestatus.com/feature/6398297361088512
    可以直接操作 TCPUDP 的,只不过特性还是实验性的
    ByteCat
        21
    ByteCat  
       209 天前 via iPhone
    直接用 srs 提供的那个 ffmpeg docker 就行了,我用了好久了
    andyskaura
        22
    andyskaura  
    OP
       208 天前
    @zscself 感谢! 这个拿来嵌在桌面服务里面做中转非常合适!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   1188 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 21:55 · PVG 05:55 · LAX 13:55 · JFK 16:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.