如题,这个文件 先前已经完整的播放过一次了,我想做个实验:
* 先把用Potplayer播放器打开视频,让视频处于正在播放阶段
* 播放的时候把文件删除掉
* windows 7 系统不提示错误
* 文件能正常播放,并且能直接跳转时间继续播放
疑问: 这个好神奇啊!为什么能这样?
1
Septembers 2015-06-04 19:57:22 +08:00 via Android
通常为了流畅播放会预载一段时间的视频到内存
|
2
cfans1993 2015-06-04 20:28:04 +08:00 via Android
系统在播放视频的时候会把视频文件先加载到内存,播放的时候是读取内存的视频数据,如果视频文件足够小的话,那么整个文件都会被加载到内存。
删了磁盘文件,系统没有提示可能是这个视频文件当前没有被内存引用,视频播放器没有报错,那肯定就是因为视频文件比较小,已经全部装载到内存了 最近刚好在看 操作系统概念 ,出来丢一下脸●v● |
3
zhangchioulin OP @cfans1993 感谢回答,播放的视频文件大小是1G的大小,我是打开后很快的速度就删除的,然后迅速跳转的,也能播放。不过我觉得原理就是你说的那样
|
4
aliuwr 2015-06-04 23:25:41 +08:00
@cfans1993 应该是 Memory mapped file。由于程序不是独占模式打开文件,所以可以正常删除,实际上文件的 handle 并没有关闭。
可以尝试下播放大于可用内存的视频文件,就知道是什么情况了。 |
5
sNullp 2015-06-05 06:53:13 +08:00
我不认为这和内存大小、缓存有关。
而是你打开了文件 handle 以后,即便你删除了文件,也只是文件被 unlink 了一次。然而在你关闭文件 handle 之前,文件的 refcount 非0 所以其实那时候文件并没有被真正的删除,而只是从目录里消失了而已。 |
6
ryd994 2015-06-05 08:12:59 +08:00 via Android
如果你停止在重新播放是不是就不行了?
如果是,那就是文件系统实际上还没有删除 |
7
zhangchioulin OP @ryd994 我回去试一试
|
8
zhangchioulin OP @aliuwr 暂时还没有这样的视频。。。
|
9
shakoon 2015-06-05 09:32:08 +08:00
猜测是这个软件对磁盘读取做了优化,在最开始获得了文件在磁盘的第一个存放块后就跳过了操作系统的文件的管理,也就是说没用系统的api,自己实现了文件管理,就像数据恢复软件不理会文件分配表一样,自己直接去读文件剩下的部分去了,所以对于操作系统的删除因为是“标记为删除”所以实际数据还在磁盘上,这个软件能继续读取。楼主可以试试找一个小一点的分区,把真正播放的文件删了后,立刻拷贝大量文件到这个分区来,看看播放是不是会报错
|
10
kruskal 2015-06-05 10:11:12 +08:00 via Android
@zhangchioulin
下个原盘试试 |
11
nogoodren 2015-06-05 10:53:12 +08:00
清空回收站没有
|
12
zhangchioulin OP @nogoodren 回收站 没有清空,今晚我回去试一试
|
13
zhangchioulin OP |
14
kruskal 2015-06-05 10:58:29 +08:00 via Android
|
15
yaoye0o 2015-06-05 11:00:27 +08:00 via Android
网易云音乐安卓客户端播放本地音乐时删掉该音乐也可以继续播放
|
16
imn1 2015-06-05 12:01:11 +08:00
你播的视频文件太小了
较大的话正在播放应该删除时不能操作 系统服务禁用superfetch应该也不能删除操作,反正我这边是这样 |