ffmpeg.wasm 关于 rtsp 推流

2022-07-11 14:38:46 +08:00
 andyskaura
需求:rtsp 协议 ip 摄像头转码 webrtc 协议在线播放。


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

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

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/865431

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX