V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhangchioulin
V2EX  ›  问与答

为什么 正在播放的文件 即使 删除了也能播放?我用的 Potplayer

  •  
  •   zhangchioulin · 2015-06-04 19:12:49 +08:00 · 3308 次点击
    这是一个创建于 3465 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,这个文件 先前已经完整的播放过一次了,我想做个实验:
    * 先把用Potplayer播放器打开视频,让视频处于正在播放阶段
    * 播放的时候把文件删除掉
    * windows 7 系统不提示错误
    * 文件能正常播放,并且能直接跳转时间继续播放


    • 然后我又重新来了一次
    • 这一次选择了以前没有播放过的文件
    • 按照上面的方法, ​>用Potplayer播放器打开视频,让视频处于正在播放阶段 ​>播放的时候把文件删除掉
    • 这次windows 7 还是不提示错误,文件仍然能继续播放

    疑问: 这个好神奇啊!为什么能这样?

    16 条回复    2015-06-05 12:01:11 +08:00
    Septembers
        1
    Septembers  
       2015-06-04 19:57:22 +08:00 via Android
    通常为了流畅播放会预载一段时间的视频到内存
    cfans1993
        2
    cfans1993  
       2015-06-04 20:28:04 +08:00 via Android
    系统在播放视频的时候会把视频文件先加载到内存,播放的时候是读取内存的视频数据,如果视频文件足够小的话,那么整个文件都会被加载到内存。
    删了磁盘文件,系统没有提示可能是这个视频文件当前没有被内存引用,视频播放器没有报错,那肯定就是因为视频文件比较小,已经全部装载到内存了
    最近刚好在看 操作系统概念 ,出来丢一下脸●v●
    zhangchioulin
        3
    zhangchioulin  
    OP
       2015-06-04 22:59:08 +08:00
    @cfans1993 感谢回答,播放的视频文件大小是1G的大小,我是打开后很快的速度就删除的,然后迅速跳转的,也能播放。不过我觉得原理就是你说的那样
    aliuwr
        4
    aliuwr  
       2015-06-04 23:25:41 +08:00
    @cfans1993 应该是 Memory mapped file。由于程序不是独占模式打开文件,所以可以正常删除,实际上文件的 handle 并没有关闭。

    可以尝试下播放大于可用内存的视频文件,就知道是什么情况了。
    sNullp
        5
    sNullp  
       2015-06-05 06:53:13 +08:00
    我不认为这和内存大小、缓存有关。
    而是你打开了文件 handle 以后,即便你删除了文件,也只是文件被 unlink 了一次。然而在你关闭文件 handle 之前,文件的 refcount 非0 所以其实那时候文件并没有被真正的删除,而只是从目录里消失了而已。
    ryd994
        6
    ryd994  
       2015-06-05 08:12:59 +08:00 via Android
    如果你停止在重新播放是不是就不行了?
    如果是,那就是文件系统实际上还没有删除
    zhangchioulin
        7
    zhangchioulin  
    OP
       2015-06-05 08:30:41 +08:00
    @ryd994 我回去试一试
    zhangchioulin
        8
    zhangchioulin  
    OP
       2015-06-05 08:31:45 +08:00
    @aliuwr 暂时还没有这样的视频。。。
    shakoon
        9
    shakoon  
       2015-06-05 09:32:08 +08:00
    猜测是这个软件对磁盘读取做了优化,在最开始获得了文件在磁盘的第一个存放块后就跳过了操作系统的文件的管理,也就是说没用系统的api,自己实现了文件管理,就像数据恢复软件不理会文件分配表一样,自己直接去读文件剩下的部分去了,所以对于操作系统的删除因为是“标记为删除”所以实际数据还在磁盘上,这个软件能继续读取。楼主可以试试找一个小一点的分区,把真正播放的文件删了后,立刻拷贝大量文件到这个分区来,看看播放是不是会报错
    kruskal
        10
    kruskal  
       2015-06-05 10:11:12 +08:00 via Android
    @zhangchioulin
    下个原盘试试
    nogoodren
        11
    nogoodren  
       2015-06-05 10:53:12 +08:00
    清空回收站没有
    zhangchioulin
        12
    zhangchioulin  
    OP
       2015-06-05 10:54:35 +08:00
    @nogoodren 回收站 没有清空,今晚我回去试一试
    zhangchioulin
        13
    zhangchioulin  
    OP
       2015-06-05 10:54:54 +08:00
    @kruskal @_@下的到吗
    kruskal
        14
    kruskal  
       2015-06-05 10:58:29 +08:00 via Android
    @zhangchioulin
    到处都是好吧←_←
    用心想想
    yaoye0o
        15
    yaoye0o  
       2015-06-05 11:00:27 +08:00 via Android
    网易云音乐安卓客户端播放本地音乐时删掉该音乐也可以继续播放
    imn1
        16
    imn1  
       2015-06-05 12:01:11 +08:00
    你播的视频文件太小了
    较大的话正在播放应该删除时不能操作
    系统服务禁用superfetch应该也不能删除操作,反正我这边是这样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2806 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:28 · PVG 23:28 · LAX 07:28 · JFK 10:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.