2010-08-09 1 views
1

Я было интересно что-то, такие сайты, как YouTube (Пандоре MP4s)флэш загрузки контента

  • играть свою музыку через флэш-плеер
  • в то время как каждый трек играет, они загружены на пользователя компьютер, например,/tmp/FlashXX *****

Это позволяет пользователям перемещать FLV из этой папки для последующего воспроизведения.

Однако, когда пользователь перемещает FLV из папки/tmp, плеер продолжает воспроизводить музыку/видео довольно счастливо. Как проигрыватель Flash обрабатывает удаление своего файла и почему он не бросает ошибки из этого?

Что еще более важно, почему FLVS загружается пользователю в первую очередь, если игрок играет без них без удовольствия?

ответ

2

Это не имеет никакого отношения к кешированию. Скорее, он работает из-за того, как работают файловые системы Unix. Когда файл открывается, его индексный индекс считывается и указывает, где данные находятся на диске. Когда файл перемещается или удаляется («несвязанный»), индексный дескриптор перемещается в новое место или удаляется из каталога. Однако данные, на которые он указывает, не являются недействительными до тех пор, пока не будет указана ссылка на этот индекс. Другими словами, пока файл остается открытым, удаление или перемещение его не влияет на программу, просматривающую этот файл.

Это не то, как работают файловые системы Windows, и это приводит к тому, что при попытке удалить файлы, которые используются. (Отказ от ответственности. Это может быть неверно с NTFS, которая поддерживает жесткие ссылки, но я уверен, что это был случай с FAT.)

Это работает так хорошо, что иногда программы даже используют трюк, чтобы автоматически очищать после себя, создавая файл и «удаляя» его сразу же, сохраняя его открытым. Таким образом, временный файл может продолжать использоваться до тех пор, пока программа не будет выполнена с ним, и в это время он автоматически «исчезнет».

Кстати, программы, которые ожидают возможности закрыть и открыть временный файл , будут запутаться, если вы их переместите. Вы можете избежать этого, сделав «копию», используя жесткую ссылку.

ln /tmp/Fl* . 

Эта команда создаст копии inode, на которые ссылается Flash, для временного файла в текущий каталог. Он фактически не копирует содержимое файла, но только создает вторую ссылку на те же данные на диске. Таким образом, когда Flash закрывается, у вас все еще есть «указатель» на данные, которые он выпустил.

Я не изучал эту тему за какое-то время, и я, возможно, получил некоторые термины неправильно, поэтому я предлагаю, если вы хотите понять далее, читайте на inodes и как работает hard links.

С этой ссылке Википедии:

Процесс удаления ссылок диссоциирует имя из данных по объему, не разрушая связанные с ним данные. Данные все еще доступны, если по крайней мере одна ссылка, которая указывает на нее, все еще существует. Когда последняя ссылка удалена, пространство считается бесплатным.

+0

Это хорошо написанный ответ и довольно информативный, большое спасибо. – EricR

2

Содержимое сохраняется даже после удаления файла из временной папки, потому что Flash читает файл в памяти, чтобы отобразить его. Это принципиально та же причина, почему, если вы перетаскиваете локально сохраненное изображение в браузер, браузер не перестает отображать изображение, если вы удаляете файл.

Что касается того, почему файл хранится, он просто кэшируется, как и любой другой файл, отображаемый вашим браузером, так что если вы перезагрузите страницу, вам не потребуется (обязательно) перезагрузить медиафайл.

Для видео могут быть оговорены все это, хотя, например, если вы ищете вперед или назад в видео, я не могу поклясться, будет ли воспроизводиться видео из памяти, если кешированная версия была удалена. .. и я бы предположил, что бывают ситуации, когда Flash не сохраняет весь фильм в памяти. Но в общем случае ответ должен быть таким, как описано здесь.

+0

Я понял, что они кэшируют, имеет смысл это сделать. Честно говоря, с памятью в наши дни я не понимаю, почему вы намеренно выдавали такую ​​информацию, когда вы могли просто хранить ее в памяти, а не хранить кешированную копию, которую можно изменить. – EricR

+0

Кэширование файлов выполняется браузером - за исключением прямой трансляции, файлы FVL кэшируются, как JPG или что-то еще, и Flash ничего об этом не знает. Когда вы загружаете видео, Flash запрашивает браузер для загрузки FLV и получает ли он кешированную копию с диска или из памяти, все зависит от того, как выполняется браузер. – fenomas

0

Я предполагаю, что вы описываете поведение в системе * nix?

Возможно, они просто смотрят файловую систему, используя что-то вроде this, или inotify, или this .NET event. Я был бы удивлен, если бы современная версия Windows позволяла вам перемещать временный файл .flv, и это было бы гайкой, если бы вспышка не вышла из-за нее.

Но, я полагаю, в вашей операционной системе флеш-плеер не удивляется, когда файл перемещается, потому что он получает дескриптор нового пути, если ему нужно снова прочитать его. Что произойдет, если вы намеренно меняете разрешения или коррумпируете или удаляете .flv, пока идет длинное (скажем, ~ час) видео?

+0

Интересно. Сейчас я пробую видеоролик, чтобы посмотреть, как это с ним связано. – EricR

+0

Неправильное использование. Flash не просматривает файлы в кэше или не имеет способа узнать, перемещены ли они или удалены. Вы, безусловно, можете перемещать файлы в виде кеширования FLV в Windows (после того, как они будут полностью загружены, пока они не будут считать, что они будут использоваться другим приложением). – fenomas

 Смежные вопросы

  • Нет связанных вопросов^_^