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

ffmpeg.wasm 关于 rtsp 推流

  •  
  •   andyskaura · 2022-07-11 14:38:46 +08:00 · 3622 次点击
    这是一个创建于 867 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求:rtsp 协议 ip 摄像头转码 webrtc 协议在线播放。


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

    流的输入输出到时无所谓,wasm 处理的都是内存二进制数据。
    3dwelcome
        2
    3dwelcome  
       2022-07-11 15:03:17 +08:00
    “输入输出都是以文件的形式放在内存访问”

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

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