0

我希望这不是太离题,但发现了一个有趣的问题。我有一张要备份的旧 CD。如果使用 System Drag 'n' Drop 从新鲜的副本(将 CD 用于第一次驯服),cp或者rsync它只是挂起。

这些文件是视频文件。我可以在 VLC 中播放视频文件。如果我观看整个视频,我可以立即将视频文件复制到我的硬盘上。我假设 VLC 已将数据加载到硬盘驱动器中。

我用 Rust 写了一个简单的cp程序。它打开文件,并通过固定大小的缓冲区,将一个文件读入该缓冲区,然后将缓冲区写入另一个文件(基本上使用std::fs::copy,一个文件到另一个文件)。

我尝试调整缓冲区大小(据我所知,这是我唯一可以更改的)以合理的速度复制数据。到目前为止,我发现的最好的是 1 KiB 和 96 KiB 缓冲区。但是复制速度非常慢。没有什么比实时观看视频更好的了。

我的问题是:

  • 为什么会这样?
  • vlc 做了什么操作系统没有做的事情?
4

1 回答 1

1

大多数视频播放器(我不具体了解 VLC)都有一些“容错”;主要是因为它们旨在应对不可靠的来源(例如,带有无线电干扰的“免费电视”、带有丢包的互联网流媒体等)。大多; 如果部分数据损坏或不可用,它只会导致播放中出现“故障”,例如一帧的一小部分区域对于视频来说是错误的颜色(或整个帧被跳过)和/或短暂的沉默音频,并且这些故障很难被发现。

对于视频播放器(设计为“容错”)来说,通过简单地跳过损坏/不可用的数据并让容错(无论如何都必须存在)来处理从 CD 读取错误,这将是“非常正常的”。

对于复制原始文件数据,没有容错性 - 每个字节的每一位都是(应该是)原始文件的精确副本,并且不能跳过/忽略数据片段。

于 2020-05-31T04:20:29.363 回答