如何在完全不写硬盘的情况下播放一个远程视频?

2020-10-16 14:12:45 +08:00
 rikka

比方服务器放着一个 MP4,我起个 nginx 然后 chrome 打开就能播放了,但这过程实际是 chrome 把视频下载到缓存中,下载就意味着有写硬盘的操作

所以要求就是:

1.播放过程绝对不能有写操作

2.播放能控制进度、倍速播放

3.最好能用浏览器播放

4.不要用 flash 相关的技术,都 2020 了

我一顿搜索后

好像可以用 ffserver 把视频转成 rtmp?rtsp?来实现,这两种协议我该用哪种?

而且 ffserver 在 2 年前被 ffmpeg 删除了啊,现在有啥代替的么?

对视频播放这方面完全不了解,有知道的来讲讲

3785 次点击
所在节点    问与答
48 条回复
codehz
2020-10-16 14:43:49 +08:00
你把浏览器缓存放 ramdisk 里就好
chenluo0429
2020-10-16 14:51:45 +08:00
仿照摄像头预览的实现方式,服务端将视频流通过 websocket 按照播放速度逐帧推送给客户端,客户端解码并使用 canvas 渲染
rikka
2020-10-16 14:54:59 +08:00
@codehz #1 内存容量有限,视频往往很大,寸土寸金,万一物理内存不够系统自动去写虚拟内存这不还是在写硬盘
rikka
2020-10-16 14:55:25 +08:00
@chenluo0429 #2 这种方式能控制播放进度吗?
yushiro
2020-10-16 15:01:43 +08:00
把硬盘拆了,用无盘工作站,在 chrome 里面看视频,就绝对不会有写盘操作了
rikka
2020-10-16 15:02:17 +08:00
@chenluo0429 #2 以我的理解这种服务端推流方式没法控制播放进度吧?
想要控制播放进度不就得有个协议,客户端给服务端发个信息:“我要看看 x 分 x 秒的片段”,服务端收到后就把对应的视频数据返回给客户端
wowboy
2020-10-16 15:04:19 +08:00
@rikka 内存有限,还不允许用硬盘,那就要求网络传输速度和播放速度强一致。然后还要求倍速播放?网络速度可以随便调吗?
rikka
2020-10-16 15:06:45 +08:00
@wowboy #7 实际情况是服务端和客户端在一个内网中,无需担心网络问题
chenluo0429
2020-10-16 15:48:29 +08:00
@rikka 就是要客户端向服务端发送播放位置,速度,然后服务端对视频文件进行切分后向客户端推流。
你不想缓存到硬盘,要么实时发送,要么放在内存里面。但是内存也是有限的,你也只能请求一个个视频片段,做好提前加载,视频推流只是分段获取视频的最极端情况
Ediacaran
2020-10-16 16:11:31 +08:00
Samba nfs....
rikka
2020-10-16 16:24:19 +08:00
@chenluo0429 #9 道理都懂,就想找找具体的落地实现方案,客户端服务端之间交互播放位置速度等信息的协议,视频数据传输协议,服务端对视频的解码分片读取处理,客户端对应的播放器怎么搞,这一系列的问题我个人没那个能力搞定 😂
kop1989
2020-10-16 16:41:32 +08:00
想要问出成熟的方案估计很难。
因为需求相对比较刁钻且矛盾(本地无缓存,甚至内存都最好不要写。还要能倍速和控制进度,还要跑在 web 环境里)。
1 、视频不写硬盘,那么网页本身写不写硬盘?如果能写,那么网页能写视频不能写?
2 、如果都不能写,那只能自己做浏览器了。网页数据写不写硬盘不是 web 应用这个层级决定的。
3 、都自己做浏览器了,还拘泥于 web 应用?

所以我觉得更脚踏实地的需求是:根据既定网络条件,如何最大限度的控制视频缓存大小。
rikka
2020-10-16 16:48:38 +08:00
@kop1989 #12 网页可以写,一个网页才几 k,但视频往往上 G
我告诉你真实的需求是,我把视频下到内网的一台机器里,然后就是怎么播放问题,浏览器直接播放会缓存啊,视频老大大的,老写我硬盘,我心疼硬盘啊,就有了此帖
polaa
2020-10-16 16:52:25 +08:00
硬盘有什么好心疼的 还不如心疼心疼浪费的时间
natashahollyz
2020-10-16 16:58:25 +08:00
@rikka 建议把硬盘拆了供起来,这样就不心疼了
supermoonie
2020-10-16 17:19:05 +08:00
视频切片制作成 m3u8
rikka
2020-10-16 17:24:05 +08:00
@polaa #14
@natashahollyz #15
一顿折腾下来既解决了需求,又多少学到点东西,岂不美哉😁
rikka
2020-10-16 17:24:24 +08:00
@supermoonie #16 用浏览器播放会写缓存啊
ETiV
2020-10-16 17:24:33 +08:00
冯诺依曼要敲棺材板了……
rikka
2020-10-16 17:27:17 +08:00
@Ediacaran #10 这看起来是另外一种思路,用网络文件共享协议来搞,如果协议本实现底层在读过程不会有写操作的话,就看我本地播放器是否缓存了

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

https://www.v2ex.com/t/715612

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

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

© 2021 V2EX