比方服务器放着一个 MP4,我起个 nginx 然后 chrome 打开就能播放了,但这过程实际是 chrome 把视频下载到缓存中,下载就意味着有写硬盘的操作
所以要求就是:
1.播放过程绝对不能有写操作
2.播放能控制进度、倍速播放
3.最好能用浏览器播放
4.不要用 flash 相关的技术,都 2020 了
我一顿搜索后
好像可以用 ffserver 把视频转成 rtmp?rtsp?来实现,这两种协议我该用哪种?
而且 ffserver 在 2 年前被 ffmpeg 删除了啊,现在有啥代替的么?
对视频播放这方面完全不了解,有知道的来讲讲
1
codehz 2020-10-16 14:43:49 +08:00
你把浏览器缓存放 ramdisk 里就好
|
2
chenluo0429 2020-10-16 14:51:45 +08:00
仿照摄像头预览的实现方式,服务端将视频流通过 websocket 按照播放速度逐帧推送给客户端,客户端解码并使用 canvas 渲染
|
4
rikka OP @chenluo0429 #2 这种方式能控制播放进度吗?
|
5
yushiro 2020-10-16 15:01:43 +08:00 via iPhone
把硬盘拆了,用无盘工作站,在 chrome 里面看视频,就绝对不会有写盘操作了
|
6
rikka OP @chenluo0429 #2 以我的理解这种服务端推流方式没法控制播放进度吧?
想要控制播放进度不就得有个协议,客户端给服务端发个信息:“我要看看 x 分 x 秒的片段”,服务端收到后就把对应的视频数据返回给客户端 |
9
chenluo0429 2020-10-16 15:48:29 +08:00
@rikka 就是要客户端向服务端发送播放位置,速度,然后服务端对视频文件进行切分后向客户端推流。
你不想缓存到硬盘,要么实时发送,要么放在内存里面。但是内存也是有限的,你也只能请求一个个视频片段,做好提前加载,视频推流只是分段获取视频的最极端情况 |
10
Ediacaran 2020-10-16 16:11:31 +08:00 via iPhone
Samba nfs....
|
11
rikka OP @chenluo0429 #9 道理都懂,就想找找具体的落地实现方案,客户端服务端之间交互播放位置速度等信息的协议,视频数据传输协议,服务端对视频的解码分片读取处理,客户端对应的播放器怎么搞,这一系列的问题我个人没那个能力搞定 😂
|
12
kop1989 2020-10-16 16:41:32 +08:00
想要问出成熟的方案估计很难。
因为需求相对比较刁钻且矛盾(本地无缓存,甚至内存都最好不要写。还要能倍速和控制进度,还要跑在 web 环境里)。 1 、视频不写硬盘,那么网页本身写不写硬盘?如果能写,那么网页能写视频不能写? 2 、如果都不能写,那只能自己做浏览器了。网页数据写不写硬盘不是 web 应用这个层级决定的。 3 、都自己做浏览器了,还拘泥于 web 应用? 所以我觉得更脚踏实地的需求是:根据既定网络条件,如何最大限度的控制视频缓存大小。 |
13
rikka OP @kop1989 #12 网页可以写,一个网页才几 k,但视频往往上 G
我告诉你真实的需求是,我把视频下到内网的一台机器里,然后就是怎么播放问题,浏览器直接播放会缓存啊,视频老大大的,老写我硬盘,我心疼硬盘啊,就有了此帖 |
14
polaa 2020-10-16 16:52:25 +08:00
硬盘有什么好心疼的 还不如心疼心疼浪费的时间
|
15
natashahollyz 2020-10-16 16:58:25 +08:00 12
@rikka 建议把硬盘拆了供起来,这样就不心疼了
|
16
supermoonie 2020-10-16 17:19:05 +08:00 via iPhone
视频切片制作成 m3u8
|
17
rikka OP |
18
rikka OP @supermoonie #16 用浏览器播放会写缓存啊
|
19
ETiV 2020-10-16 17:24:33 +08:00
冯诺依曼要敲棺材板了……
|
20
rikka OP @Ediacaran #10 这看起来是另外一种思路,用网络文件共享协议来搞,如果协议本实现底层在读过程不会有写操作的话,就看我本地播放器是否缓存了
|
21
loading 2020-10-16 17:38:41 +08:00 via Android
内存不舍得加的话,傲腾可能会便宜些,几十块钱。
|
22
shenjinpeng 2020-10-16 17:50:23 +08:00
flv 格式, m3u8 , 参考直播推流 .
不写硬盘 只能写内存了 . 局域网的话 ,文件共享服务器 Samba , 不知道写不写本地硬盘缓存 . 不如直接远程桌面管理上服务器看去, 省得写代码 . |
23
rikka OP @shenjinpeng #22 不知道我了解的对不对
m3u8 不就是把视频切片,播放过程把切片从服务端读回来,如果用浏览器播放,走的是 http 协议,不还是有在写缓存吗 而直播推流,好像可以用 websokct 来传输,是不写缓存了,但是没法控制播放进度啊 |
24
rikka OP @shenjinpeng #22 我想了想,Samba 、nfs 这些协议假设他不写本地硬盘缓存,好像就完全满足我的需求了
|
25
msg7086 2020-10-16 19:20:40 +08:00 via Android
samba 一把梭可以。samba 本身就相当于是一个硬盘,所以不再需要本地硬盘了。
话说硬盘有啥好心疼的?硬盘转起来就在磨损,你 3 年疯狂读写和 3 年零读写,磨损不会差很多…… |
27
imn1 2020-10-16 19:28:28 +08:00
pass 吧
伪需求 远程播放各大播放器都已经支持,基本不用考虑其中技术细节,你想想那些几十 T 的 NAS,播放视频,难道都要本地下载一次才能播?搞定传输协议就够了。至于播放器的内存缓存,就算本地视频播放也是要的,无法避免 |
28
rikka OP |
30
rikka OP @yeqizhang #26 是固态不金贵,大概就是一种特殊性癖喽,这也导致平常写代码能不写临时文件就不写,尽可能在内存操作完成
|
31
dtgxx 2020-10-16 19:38:16 +08:00
不要考虑硬盘不够用,都 2020 了
|
33
linxiaojialin 2020-10-16 19:39:38 +08:00
我感觉你想了解的是 [解码] ,而不是 [缓存] 问题。
任何视频要播放都得缓存到客户端的,哪怕直播也是切成一个个小的片段文件下载到客户端,然后客户端再解码拼接播放,只不过解码当前片段后,可能就立即删除缓存文件了。 如果直接通过 浏览器 访问 MP4,因为没有解码器,所以实际过程是变成 [下载] 然后再用本机的播放器打开下载后的 MP4 进行解码播放,而本机的播放器可能没有控制进度、倍速等等功能。 如果通过 APP/网页 JS 访问 MP4,再用 Flash/JS/其它解码脚本 等等进行解码,就可以实现实时播放了(边下边播,感觉就像没有缓存一样,实际上还是有临时缓存的,播放完会自动删除缓存文件),然后还可以拓展 进度、倍数等功能。 至于你说到 [内网] 😂大致猜到你的场景了,其实不用那么麻烦,在同一个内网下,Windows 自带有 [共享流媒体] 功能,手机下载个客户端就可以了,市场上有很多,随便搜索一个。 |
34
azh7138m 2020-10-16 20:54:51 +08:00
淦 你们的 xp 好奇怪哦
|
35
rikka OP @linxiaojialin #33 其实不是啊,缓存、解码我大概都知道,我关注点在于:比方我有总计 100G 视频,那我播放完这些视频不就得往硬盘里写入 100G 缓存数据,这很“伤硬盘”,我想解决这个问题
|
36
docx 2020-10-17 00:16:20 +08:00 via iPhone
切片是不是增加服务端的硬盘读写了?
|
37
natashahollyz 2020-10-17 08:18:21 +08:00 via iPhone
@rikka 有些东西根本就没想的必要。你上班摸鱼发这个帖子对硬盘键盘鼠标内存显示器 CPU 显卡电源都挺伤的,还挺费电,对水电站也挺伤的。建议不要水了,保护电脑,从你做起
|
38
Rheinmetal 2020-10-17 08:38:10 +08:00
看到内网那一个回复脑补了一出保密和间谍的大戏
心想直接用液氮冻上内存照样 dump 视频 先解决录屏问题吧 拉倒下面你给我看这个? 怕伤硬盘 关闭虚拟内存 不用 win10 (这玩意疯狂读写硬盘 以为人人 nvme ssd )好了 怕写坏 请上 optane 企业 ssd 硬盘有价数据无价 有这个强迫症不如备份 /raid |
39
GeruzoniAnsasu 2020-10-17 09:49:08 +08:00 via Android
你想想自己有没有心疼过余额宝每天多出来的那几块钱
|
40
carlclone 2020-10-17 09:53:17 +08:00
自己写一个程序不就知道了 , 从 socket 读数据出来还能放哪里? 不是内存就是硬盘啊 , 你还想放在光纤里啊?
|
41
cheng6563 2020-10-17 10:39:39 +08:00
Firefox 好像有选项完全使用内存缓存
|
42
haf007 2020-10-17 11:06:10 +08:00
你需要一台群晖,局域网播放,就只写内存,
|
43
openbsd 2020-10-17 11:52:57 +08:00
Windows RDP 远程
应该不会写本地存储 |
44
tkl 2020-10-17 13:08:58 +08:00
你把电脑都供起来 然后服务器接上显示器吧
有毒有病 |
46
mscststs 2020-10-17 13:34:53 +08:00
要不你从源拉一根视频线裸传视频到显示器算了。
|
47
cmheia 2020-10-17 20:33:44 +08:00
我也是心疼硬盘星人,分了一半内存(16G)做 RAMDISK,除了转移已知的临时目录,平时使用临时文件什么的都在里面搞
|
48
reus 2020-10-20 05:53:54 +08:00 via Android
一天工资能买个硬盘用十年,居然有人心疼。难不成你想用二十年?
|