Web的实时视频广播

今年才知道 WebRTC 这个视频API, 可能也是因为很少见到和用到这功能吧(用网页来微信或QQ又完全没必要).
近期准备开发一个教育管理系统, 老师能通过Web端的系统实时讲课, 我想如果只需要"绘画/写字" 功能, 那就用 Canvas2D+WebSocket 就够了(买个硬件画板可以让你写字的’笔’被mousemove等JS事件监听到), 但是可能还是不够
后面搜查才了解到WebRTC, 貌似就解决了这个问题? 而且还可以直接分享电脑屏幕(包括桌面)!!

问题就是这个貌似是P2P的, 如果有多个学生, 那我要用广播的形式, 就是要让老师的视频数据"实时"(还是说积累一定帧数数量的视频, 例如一秒才发送, 而不是每帧发送, 方便压缩减少流量损耗? 还是没必要?)
发送到服务器(我用Lisp可以吗? quiciklisp是否有对应的视频解析代码库HLS/MPEG之类的, 如果没有那就把这个接口改为node.js, 其它接口还是用Hunchensocket) 然后广播到其它学生(WebSocket), 这是否要占据较大的服务器流量带宽?

有用过WebRTC技术的请赐教…

1 个赞

WebRTC是p2p的?是不是可以不通过服务器在两个浏览器间点对点传输数据? 感觉就要这样才行!否则几十个人同时视频在线,数据都通过服务器,服务器宽带流量费肯定是很大的。

最近在做一个 文件管理库 ,文件存放在本地电脑上并不存储在云服务器上,因为文件太大服务器空间不够用,服务器只存放文件的索引。用于在任何地方都能打开浏览器进行搜索,搜索到后是下载文件,一两个G的大文件通过服务器转发进行中转后在下载……,正在纠结我的服务器宽带流量费该怎么办?都觉得没办法了。

看到楼主说的WebRTC可以用p2p的形式点对点传输数据,突然发现似乎就可以解决我现在遇到的这个问题,感觉又有的折腾了 :joy: :joy:

你这个我怎么觉得像是 IPFS

目前BT下载的结构其实就是Tracker服务器负责给端用户“牵线搭桥”,然后用户端对端传输。

1 个赞

你也跟我一样那么才疏学浅, 也不知道2013年就开始推出的WebRTC啊?
推荐你看下这个:

刚买到手, 看一下(平时很少买国产的呢~)

Lisp 的WebSocket 还是有些缺陷的, 我想是不是可以用 node.js 来弥补?
大家常不常是用多种语言来处理某些请求, 然后在这些不同语言之间的程序通过 socket 来响应请求 (或者直接借用 Redis 的 Pub/Sub 来实现~~?)

虽然这样说可能不合适,但是这就是像 Clojure 这样的 Lisp 存在的意义,下层的生态极其丰富。 :sweat:

WebRTC的目的之一就是低延迟,所以你不应该自己管理缓冲的大小,WebRTC自己有带宽预测算法,可以自动根据你的连接状况选用合适的带宽和Jitter buffer大小。另外如果你真的想做点东西而不是自己倒腾玩,建议老老实实JS和/或C++。WebRTC的资料本来就不太多,经常需要自己读源码,犯不着自己给自己找更多麻烦。

估算下项目时间, webrtc项目投入非常耗时,这个耗时从编译webrtc项目就开始了。

确实一下子三四天就过去了, 但是基本没有收获…
最后放弃…

WebRTC基本是个开源的内部项目,Google根本不在乎外部用户的使用体验,所以文档非常匮乏,API经常改,编译非常麻烦,依赖一大票内部工具,每次版本升级都会break你的代码。 (我在基于WebRTC的视频聊天项目里工作过几年)

搜一下 WebRTC 的视频还是挺多的~~ 我看了几个小时了~

感觉ipfs不能解决我遇到的这个情况,用户端只能使用浏览器,没有node情况下,不能通过浏览器端js加入ipfs网络,只能通过http请求访问ipfs网关节点来下载文件。这时也需要占据服务器宽带流量,没有p2p特性了。

官方网关服务 https://ipfs.io/ipfs 也是墙了的,用不了

在用户端只能使用浏览器情况下目前感觉还是只有webRtc的RTCDataChannel能解决大文件点对点传输下载而不占服务器宽带流量的问题

不搜不知道,一搜才知道,原来基于webRtc的点对点文件传输方案已经那么多了 GitHub - kern/filepizza: Peer-to-peer file transfers in your browser ; GitHub - webtorrent/instant.io: 🚀 Streaming file transfer over WebTorrent (torrents on the web) ; GitHub - fanchangyong/deershare: 小鹿快传,一款在线P2P文件传输工具,使用WebSocket + WebRTC技术

基于webRtc的BT下载客户端(无需浏览器插件扩展)也早就有了 GitHub - webtorrent/webtorrent: ⚡️ Streaming torrent client for the web github是个好地方应该经常逛,否则就真的out了

大多都是基于浏览器的js 实现。 和用native 实现完全两回事。 js 限制较多。

才发现已经有浏览器直接支持ipfs了, javascript之父Brendan Eich的Brave浏览器,(本论坛好像没有任何用Brave的人??),不知道Chrome与Firefox会不会跟进?如果也跟进支持ipsf,我觉得意义重大

我去年就下了一个手机版, 但讽刺的是, 在iPhone里浏览器内核必须是用Safari的啊…

顺便想再请教一下这个问题, 去年研究的WebRTC看来在我这个项目是泡汤用不着的了
我要做的就是(家教系统)教师给学生实时地讲课, 但是不用摄像头+WebSocket, 而是用 canvas+WebScoket

绘制教师的"草稿"(canvas)不需要看老师的人脸, 这样流量少很多会实时得多(暂时是买了一个3K多一年的阿里云服务器), 难题就是语音了, 前端(H5或者小程序)是通过 MediaStream Audio 来录制 但是好像并不能实时的边录制边上传这种流式处理, 我只能要延迟个2秒, 每过2秒老师的语言上传(canvas展示给学生时当然也要同步), 就是怕每次这2秒因为"一关一开"(为了上传服务器)声音会瞬间"卡"一下严重影响体验(在后台应该是分段(2秒)收集语音(暂时想到要转化为MP3,因为Chrome生成的音频格式在iOS不支持!!)

我的思路就是这样, 还没有开始实现(最难的技术应该留在最后面以免耽误了其它地方的进度), 有相关经验的恳求分享