Загрузка флеш контента - PullRequest
       11

Загрузка флеш контента

1 голос
/ 09 августа 2010

Мне было интересно, такие сайты, как youtube (pandora делает mp4s)

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 01 сентября 2010

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

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

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

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

ln /tmp/Fl* .

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

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

Из этой ссылки в Википедии:

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

2 голосов
/ 09 августа 2010

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

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

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

0 голосов
/ 09 августа 2010

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

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

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

...