СИСТЕМА И СПОСОБ ДЛЯ ОПТИМИЗАЦИИ ПЕРЕДАЧ ЗАГРУЖАЕМОГО КОНТЕНТА
SYSTEM AND METHOD FOR DOWNLOADABLE CONTENT TRANSMISSION OPTIMIZING

Область техники
[0001] Настоящее раскрытие относится, в целом, к доставке загружаемого контента, а более конкретно - к системам и способам для оптимизации передач загружаемого контента.
Уровень техники
[0002] В последние годы вычислительные устройства нашли универсальное применение в качестве основного источника информации, развлечений и связи. Продукты для конечного потребителя, объединяющие эти устройства, такие как телевизоры, DVD-проигрыватели, игровые консоли, компьютеры и т. п., создаются, изменяются и совершенствуются, чтобы облегчать доступ потребителя к цифровому контенту всех размеров и типов. Такой цифровой контент зачастую распространяется на физических носителях, таких как CD, DVD и диски Blu-ray (BD), но ограничен размером хранения физических носителей, на которых он содержится. Дополнительно физические носители требуют, чтобы потребители либо посещали местоположение физического магазина, либо иным способом имели носители, физически доставленные им. В любом случае, требуется фактическое, физическое владение носителями, откладывающее доступ и пользование цифровым контентом. Кроме того, физические носители являются уязвимыми к повреждению, такому как царапанье, ломание и общий физический износ, а также к отклонениям и дефектам в процессе производства. Такие проблемы могут вызывать задержки загрузки, ошибки или могут даже делать цифровой контент недоступным.
[0003] Таким образом, разработчики контента и производители начали распространять цифровой контент через Интернет, который решает многие из вышеописанных проблем, ассоциированных с физическими носителями. Например, потребителям не требуется получать во владение физический носитель из магазина или другого источника, и они могут вместо этого загружать контент в комфорте своего собственного дома. Это предоставляет возможность потребителям получать разнообразие цифрового контента, такого как изображения, музыка, игры, телевизионные шоу, фильмы, приложения, обновления, дополнительные возможности и т. д., с помощью одного щелчка кнопки. Однако размер загружаемого контента может быть ограничен доступной полосой пропускания, скоростью Интернета у потребителя и размером хранилища продукта конечного пользователя, выполняющего контент. Дополнительно выполнение многих типов контента требует, чтобы он был загружен полностью перед выполнением, опять же задерживая доступ потребителя и пользование желаемым контентом.
Сущность изобретения
[0004] Таким образом, существует непрерывная и продолжающаяся потребность в новых и улучшенных системах и способах для передачи цифрового контента через Интернет, которые уменьшают использование полосы частот, являются менее чувствительными к скорости Интернета у потребителя, не ограничены размером хранилища продукта конечного пользователя и обеспечивают более быстрый доступ к контенту. Варианты осуществления изобретения удовлетворяют эти и другие нужды, предоставляя систему и способ для оптимизации передач загружаемого контента, что предоставляет возможность начинать выполнение контента прежде, чем он полностью загрузится. Варианты осуществления, описанные в данном документе, являются динамическими, таким образом распространяя свое применение как к статическому, так и к интерактивному контенту. Дополнительно один или более из раскрытых вариантов осуществления могут быть реализованы с помощью исправления (патча) или драйвера в операционной системе пользовательского устройства, делая ненужной значительную модификацию исходного кода контента. Раскрытые варианты осуществления могут также работать независимо от и/или невидимо по отношению к исполняющемуся контенту. Это минимизирует количество ошибок, наблюдаемых пользователями, когда контент отображается.
[0005] Согласно варианту осуществления изобретения описывается способ оптимизации передач загружаемого контента. Способ содержит прием первого локального запроса первого фрагмента из множества фрагментов загружаемого контента, преобразование первого локального запроса в первый удаленный запрос первого фрагмента загружаемого контента, передачу первого удаленного запроса, прием первого фрагмента загружаемого контента, сохранение первого фрагмента загружаемого контента и выполнение первого фрагмента загружаемого контента. Согласно другому варианту осуществления описывается машиночитаемый носитель, имеющий исполняемые компьютером инструкции, заключенные на нем, для выполнения этапов этого способа.
[0006] Системы для осуществления этого способа также описываются в данном документе согласно варианту осуществления изобретения. Например, описывается система для оптимизации передач загружаемого контента. Система содержит процессор и память. Процессор функционирует, чтобы принимать первый локальный запрос первого фрагмента из множества фрагментов загружаемого контента, преобразовывать первый локальный запрос в первый удаленный запрос первого фрагмента загружаемого контента, передавать первый удаленный контент через сеть, принимать первый фрагмент загружаемого контента через сеть и выполнять первый фрагмент загружаемого контента. Память функционирует, чтобы хранить, по меньшей мере, один фрагмент из множества фрагментов загружаемого контента.
[0007] Система для оптимизации передач загружаемого контента с помощью модулей также описывается в варианте осуществления. Система содержит модуль преобразования, выполненный с возможностью преобразовывать первый локальный запрос первого фрагмента из множества фрагментов загружаемого контента в первый удаленный запрос первого фрагмента загружаемого контента; модуль связи, выполненный с возможностью принимать первый локальный запрос, передавать первый удаленный запрос и принимать первый фрагмент загружаемого контента; модуль выполнения, выполненный с возможностью выполнять первый фрагмент загружаемого контента; и модуль хранения, выполненный с возможностью хранить, по меньшей мере, один фрагмент из множества фрагментов загружаемого контента.
Краткое описание чертежей
[0008] Фиг. 1 - блок-схема последовательности операций, иллюстрирующая способ оптимизации передач загружаемого контента согласно варианту осуществления изобретения.
[0009] Фиг. 2 - блок-схема последовательности операций, иллюстрирующая способ оптимизации передач загружаемого контента согласно другому варианту осуществления изобретения.
[0010] Фиг. 3 - блок-схема последовательности операций, иллюстрирующая способ выполнения загружаемого контента согласно варианту осуществления изобретения.
[0011] Фиг. 4 - блок-схема последовательности операций, иллюстрирующая способ построения метаданных запросов загружаемого контента согласно варианту осуществления изобретения.
[0012] Фиг. 5 - блок-схема последовательности операций, иллюстрирующая способ оптимизации передач загружаемого контента согласно дополнительному варианту осуществления изобретения.
[0013] Фиг. 6 - схематичный чертеж, иллюстрирующий систему согласно варианту осуществления выполнения способов, описанных в данном документе.
[0014] Фиг. 7 - схематическое изображение машины, имеющей набор инструкций для инструктирования машине выполнять любой из одного или более способов, описанных в данном документе.
Подробное описание изобретения
[0015] Описываются система и способ для оптимизации передач загружаемого контента. В последующем описании, для целей пояснения, многие конкретные детали объясняются для того, чтобы обеспечивать полное понимание примерных вариантов осуществления. Специалисту в области техники понятно, однако, что варианты осуществления настоящего изобретения могут быть применены на практике без этих конкретных деталей или с эквивалентной компоновкой. В некоторых случаях хорошо известные структуры и устройства показаны в форме блок-схемы для того, чтобы избегать ненужного усложнения вариантов осуществления.
[0016] Обращаясь теперь к чертежам, при этом одинаковые ссылочные номера обозначают идентичные или соответствующие части повсеместно на нескольких видах, фиг. 1 - это блок-схема последовательности операций, иллюстрирующая способ для оптимизации передач загружаемого контента согласно варианту осуществления изобретения. В этом варианте осуществления контент начинает выполнение прежде, чем его загрузка завершится, и последующие фрагменты контента запрашиваются "по требованию", когда они необходимы. Таким образом, пользователь не должен ожидать, чтобы полный, потенциально большой контент загружался перед началом выполнения, и может начинать пользование контентом, как только возможно. Дополнительно хранение потенциально неуместных данных исключается.
[0017] На этапе 110 обработки принимается локальный запрос фрагмента загружаемого контента. Локальный запрос может поступать в форме стандартной файловой операции относительно набора данных, ассоциированных с желаемым фрагментом загружаемого контента, и может быть передан от приложения операционной системе, например, как обсуждается далее в данном документе. Загружаемый контент может быть, например, видеоконтентом, звуковым контентом, игровым контентом и/или статическим визуальным контентом, включающим в себя игры, фильмы, программное обеспечение, ТВ-шоу, новости, музыкальные видеоклипы, разговорные шоу, анонсы, рекламные объявления, музыку, книги, аудиокниги, журналы, газеты, каталоги, обои, темы, "дополнительный" контент или любой другой тип контента, разделяемого на меньшие фрагменты исполняемого контента. Предполагается, что такой контент может быть создан пользователем или разработчиком, бесплатным или платным, полным или пробным и/или для продажи или для аренды. Кроме того, термин "фрагмент", используемый в данном документе, может соответствовать любой части загружаемого контента, которая имеет возможность деления на любые связанные или произвольные группы из одного или множества битов или байтов данных. Например, "фрагменты" контента могут соответствовать уровням, главам, сценам, актам, символам, фонам, текстурам, действиям, песням, темам, периодам, размерам, файлам, их частям и их комбинациям. В другом варианте осуществления, однако, "фрагменты" контента могут соответствовать данным, сгруппированным вместе с целью эффективности передачи, которые не имеют других легко очевидных общностей.
[0018] На этапе 115 принятия решения определяется, хранится ли запрошенный фрагмент загружаемого контента локально. Например, процессор может опрашивать локальную память на предмет запрошенного фрагмента загружаемого контента. Если запрошенный фрагмент загружаемого контента действительно хранится локально, он выполняется на этапе 140 обработки. Если запрошенный фрагмент загружаемого контента не хранится локально, локальный запрос преобразовывается, например, посредством процессора, в удаленный запрос на этапе 120 обработки. На этапе 125 обработки удаленный запрос передается. Например, удаленный запрос может быть передан от процессора локального устройства серверу. Сервер может затем выполнять обработку, описанную далее в данном документе, относительно фиг. 5, например.
[0019] Обращаясь снова к фиг. 1, запрошенный фрагмент загружаемого контента принимается на этапе 130 обработки. На этапе 130 обработки запрошенный фрагмент загружаемого контента сохраняется локально. Локальное хранение запрошенных фрагментов загружаемого контента гарантирует, что эти фрагменты загружаемого контента не должны повторно загружаться в случае, когда они запрашиваются снова. Фрагмент контента может быть запрошен множество раз, например, если один и тот же фон или образ в игре используется на множестве уровней.
[0020] На этапе 140 обработки запрошенный фрагмент загружаемого контента выполняется. Между тем, способ может повторяться на этапе 110 обработки для другого принятого локального запроса фрагмента загружаемого контента, в то время как предыдущий запрошенный фрагмент загружаемого контента выполняется. Другими словами, действия способа могут выполняться асинхронно, т. е. предоставляя возможность другой обработке продолжаться прежде, чем завершится предыдущая обработка.
[0021] Как проиллюстрировано на фиг. 1, другой локальный запрос фрагмента загружаемого контента может быть принят после сохранения первого фрагмента загружаемого контента на этапе 135 обработки. Хотя проиллюстрирован как возникающий в этом положении, однако последующие локальные запросы фрагментов загружаемого контента могут возникать в любой момент в процессе после приема первоначального локального запроса. Если, однако, впоследствии запрошенный фрагмент недоступен для выполнения после завершившегося выполнения непосредственно предшествующего запрошенного фрагмента, формируется сообщение об ошибке, и задержка реализуется, чтобы предоставлять возможность впоследствии запрошенному фрагменту закончить загрузку, как описано более подробно в данном документе со ссылкой на фиг. 3. Когда используется в данном документе, термин "последующий" ссылается только на порядок, в котором запросы принимаются, передаются и/или прогнозируются, и необязательно отражает то, что конкретный фрагмент контента находится "после" предыдущего запрошенного фрагмента контента относительно времени, порядка выполнения, местоположения в коде и т. д. Дополнительно предполагается, что один и тот же фрагмент контента может быть запрошен множество раз и, таким образом, составляет более чем один из запрашиваемого ранее, в настоящее время и/или впоследствии фрагмента контента.
[0022] Способ может продолжаться до тех пор, пока соединение между запрашивающим устройством и хостом загружаемого контента не будет прервано, пока загружаемый контент не будет выполнен полностью, или пока все фрагменты загружаемого контента не будут сохранены. Например, фрагменты игры могут продолжать запрашиваться и выполняться до тех пор, пока пользователь не выйдет из игры, не выключит игровую консоль или не закончит все уровни игры, или пока игра не будет загружена полностью. Таким образом, в случае, когда пользователь играет в игру в течение лишь короткого интервала времени и решает, что ему или ей не нравится игра, только небольшой объем игры загружается в игровую консоль. Это минимизирует потерю времени пользователем в ожидании загрузки непонравившейся игры, снижает потери пропускной способности и/или потери на получение/хранение данных по непонравившейся игре и сокращает объем памяти, занятый непонравившейся игрой на игровой консоли.
[0023] Аналогично, когда все уровни игры завершены, и пользователь больше не хочет играть в игру, только фрагменты игры, необходимые пользователю в процессе игры, загружены в игровую консоль. Это минимизирует потерю времени пользователем в ожидании загрузки ненужных файлов или характерных признаков, величину потери пропускной способности и/или разрешенных объемов данных по загрузке ненужных файлов или характерных признаков и объем памяти, занятой ненужными файлами или характерными признаками.
[0024] Фиг. 2 - это блок-схема последовательности операций, иллюстрирующая способ оптимизации передач загружаемого контента согласно другому варианту осуществления изобретения. Согласно этому варианту осуществления фрагменты загружаемого контента запрашиваются "по требованию", когда они необходимы для выполнения, на основе прогнозирования того, какие фрагменты будут необходимы для выполнения, или в обоих случаях. Запросы фрагментов загружаемого контента прогнозируются локально, и спрогнозированные фрагменты загружаемого контента получаются до (или полностью без) приема локального запроса этих фрагментов.
[0025] На этапе 210 обработки принимается первоначальный локальный запрос первоначального фрагмента загружаемого контента. На этапе 215 принятия решения определяется, хранится ли первоначальный фрагмент загружаемого контента локально. Если первоначальный фрагмент загружаемого контента действительно хранится локально, первоначальный локальный запрос сохраняется на этапе 237 обработки, и первоначальный фрагмент загружаемого контента выполняется на этапе 240 обработки. Если первоначальный фрагмент загружаемого контента не сохранен локально, однако, первоначальный локальный запрос преобразовывается в удаленный запрос для первоначального фрагмента загружаемого контента на этапе 220 обработки. На этапе 225 обработки удаленный запрос передается, а на этапе 230 обработки принимается первоначальный фрагмент загружаемого контента. На этапе 235 обработки сохраняется первоначальный фрагмент загружаемого контента, а на этапе 237 обработки сохраняется первоначальный локальный запрос. Первоначальный фрагмент загружаемого контента выполняется на этапе 240 обработки.
[0026] Слово "первоначальный", когда используется, указывает фрагмент контента, соответствующий первому запросу при конкретном выполнении контента, и необязательно указывает, что фрагмент является первым фрагментом контента относительно времени, порядка выполнения, местоположения в коде и т. д. Таким образом, например, "первоначальным" фрагментом игры может быть уровень 7, "первоначальным" фрагментом видео может быть середина видео, "первоначальным" фрагментом книги может быть глава 8 и т. д. В другом варианте осуществления, однако, "первоначальный" фрагмент контента может соответствовать минимальному рабочему набору данных для загружаемого контента или может фактически соответствовать фрагменту загружаемого контента, который, как предполагается, выполняется первым относительно всего контента. Что касается последнего, первоначальным фрагментом мог бы быть, например, уровень 1 игры, первые 10 секунд видео, глава 1 книги и т. д. В любом случае, по меньшей мере, первоначальный фрагмент загружаемого контента может требоваться, чтобы быть локально сохраненным перед началом выполнения загружаемого контента согласно варианту осуществления. Требуя, чтобы первоначальный фрагмент контента был загружен перед началом выполнения, пользовательское восприятие может быть улучшено, минимизируя задержки или перерывы в выполнении. Таким образом, например, пользователю, начинающему игру в первый раз, может потребоваться загрузить уровень 1 игры перед участием в игре, или пользователю, возвращающемуся к игре после остановки на уровне 4, может потребоваться загрузить уровень 5 игры перед участием в игре.
[0027] Как показано на фиг. 2, последующий запрос фрагмента загружаемого контента может быть спрогнозирован на этапе 250 обработки. В этом варианте осуществления последующий запрос прогнозируется локально, например, устройством, выполняющим загружаемый контент. Такие прогнозы могут быть выполнены с помощью, например, предыдущих запрошенных фрагментов загружаемого контента (например, первоначального фрагмента загружаемого контента), предыдущих локальных запросов (например, сохраненного первоначального локального запроса), метаданных загружаемого контента (например, заголовка, размера, типа, издателя), метаданных запрашивающего устройства (например, типа, операционной системы, пространства хранения, типа соединения), пользовательских метаданных как для текущего пользователя, так и других пользователей (например, демографической информации, истории доступа к контенту) и метаданных запросов загружаемого контента (например, последовательного журнала сделанных локальных запросов). Необязательно спрогнозированный запрос может быть сохранен как метаданные спрогнозированного запроса.
[0028] Метаданные запросов загружаемого контента не ограничиваются журналом запросов, выполненных в конкретном исполняемом контенте, и могут включать в себя журналы запросов, выполненных также в другом, ранее выполненном контенте. Например, последующий запрос конкретной активной игрой может быть спрогнозирован с помощью метаданных запроса другой активной игры на основе предположения, что активные игры выполняют аналогичные функции в аналогичном порядке. Такие предположения могут быть сделаны не только на основе жанра запрошенного контента, но также его платформы, издателя, автора, даты выпуска или любых других доступных метаданных контента.
[0029] На этапе 215 принятия решения определяется, хранится ли спрогнозированный фрагмент загружаемого контента локально. Если спрогнозированный фрагмент загружаемого контента действительно хранится локально, способ продолжается на этапе 265 обработки, как описано далее в данном документе. Если спрогнозированный фрагмент загружаемого контента не хранится локально, однако, удаленный запрос для спрогнозированного фрагмента загружаемого контента формируется на этапе 255 обработки. На этапе 257 обработки удаленный запрос передается, а на этапе 260 обработки принимается спрогнозированный фрагмент загружаемого контента. На этапе 263 обработки спрогнозированный фрагмент загружаемого контента сохраняется, и способ продолжается на этапе 265 обработки. Локальное хранение спрогнозированных фрагментов загружаемого контента гарантирует, что эти фрагменты не должны будут повторно загружаться в случае, когда они потребуются (например, если прогноз является правильным) или опять спрогнозируются. Этапы 250-263 могут быть выполнены независимо от приложения или модуля, формулирующего локальные запросы.
[0030] На этапе 265 обработки принимается последующий локальный запрос фрагмента загружаемого контента. На этапе 270 принятия решения определяется, совпадает ли последующий локальный запрос со спрогнозированным запросом, т. е. являются ли запросы запросами в отношении одного и того же фрагмента загружаемого контента, например, посредством осуществления доступа к метаданным спрогнозированного запроса. Метаданные спрогнозированного запроса могут обновляться, чтобы отражать то, был или нет прогноз точным, и могут использоваться, чтобы уточнять последующие прогнозы.
[0031] Если последующий локальный запрос совпадает с спрогнозированным запросом, тогда последующий локальный запрос сохраняется на этапе 273 обработки, и спрогнозированный фрагмент загружаемого контента выполняется на этапе 275 обработки. Если последующий локальный запрос не совпадает со спрогнозированным запросом, тогда определяется, хранится ли запрошенный фрагмент загружаемого контента локально, на этапе 280 принятия решения. Если запрошенный фрагмент загружаемого контента действительно хранится локально, тогда последующий локальный запрос сохраняется на этапе 293 обработки, и запрошенный фрагмент загружаемого контента выполняется на этапе 295 обработки. Если запрошенный фрагмент загружаемого контента не хранится локально, тогда последующий локальный запрос преобразовывается в удаленный запрос на этапе 283 обработки, и удаленный запрос передается на этапе 285 обработки. На этапе 287 обработки запрошенный фрагмент загружаемого контента принимается, а на этапе 290 обработки он сохраняется. Последующий локальный запрос сохраняется на этапе 293 обработки, и запрошенный фрагмент загружаемого контента выполняется на этапе 295 обработки.
[0032] Этапы 250-295 могут повторяться для любого числа фрагментов загружаемого контента. Локальные запросы, сохраненные на этапах 237, 273 и 293, например, могут использоваться, чтобы создавать и расширять метаданные запросов загружаемого контента для того, чтобы делать последующие прогнозы (как для запрошенного контента, так и для будущего запрошенного контента) более точными. Способ может продолжаться до тех пор, пока соединение между запрашивающим устройством и хостом загружаемого контента не будет прервано, пока загружаемый контент не будет выполнен полностью, или пока все фрагменты загружаемого контента не будут сохранены.
[0033] Хотя проиллюстрированы как случающиеся повторно только после приема последующего локального запроса и выполнения запрошенного фрагмента контента, предполагается, что последующие запросы могут быть спрогнозированы, и спрогнозированные фрагменты контента загружаются прежде, чем принимается локальный запрос, ассоциированный с предыдущим прогнозом. Например, после приема первого локального запроса на этапе 210 и выполнения первого фрагмента контента на этапе 240 может быть сделан первый прогноз о том, для чего будет второй локальный запрос, на этапе 250, и спрогнозированный запрос контента может быть загружен и сохранен на этапах 260 и 263 соответственно. В то время как первый фрагмент контента выполняется на этапе 240 и до того как второй локальный запрос принимается на этапе 265, может быть сделан второй прогноз о том, для чего будет третий локальный запрос, и спрогнозированный фрагмент контента может быть загружен и сохранен.
[0034] Прогнозы и ассоциированные загрузки (скачивания) могут продолжаться постоянно, пока выполняется способ, или могут приостанавливаться или прекращаться в любой момент в способе. Например, прогнозы могут приостанавливаться, когда принимается следующий локальный запрос, причем в этот момент прошлые или будущие прогнозы могут быть уточнены. Кроме того, прогнозы могут приостанавливаться, когда было сделано некоторое число спрогнозированных запросов (или некоторое количество спрогнозированных фрагментов контента было загружено) после выполняющегося в настоящее время запроса или фрагмента контента. Например, если уровень 1 игры выполняется в настоящий момент в соответствии с первым локальным запросом, а последующие локальные запросы еще не приняты, прогнозы могут быть ограничены следующими двумя запросами. Таким образом, второй и третий запросы для уровня 2 и 3, соответственно, могут быть спрогнозированы, и их соответственные фрагменты игры загружены. Однако четвертый запрос не может быть спрогнозирован до тех пор, пока не будет принят реальный второй локальный запрос. Поскольку метаданные запросов загружаемого контента могут обновляться при приеме второго локального запроса, такой вариант осуществления предоставляет возможность уточнения будущих запросов, чтобы они были более точными, и только ограниченное количество спрогнозированных фрагментов контента будет загружено тем временем. Дополнительно объем памяти, выделенный для спрогнозированных фрагментов контента (которые могут быть или могут не быть фактически необходимы для выполнения), ограничивается. Таким образом, если пользователь выключает игру прежде, чем принимается второй локальный запрос, и никогда не играет снова в игру, только ограниченный объем памяти занят ненужными данными.
[0035] При приеме второго локального запроса на этапе 265 обработки способ может переходить к этапу 270 принятия решения относительно первого прогноза. Другими словами, второй локальный запрос может быть сравнен с первым прогнозом на этапе 270, и способ может продолжаться, как проиллюстрировано. Далее, после сохранения второго локального запроса на этапе 273 или 293 обработки, метаданные запросов загружаемого контента могут быть обновлены, и последующие прогнозы могут быть уточнены. Например, второй прогноз (и любые другие прогнозы, сделанные перед приемом второго локального запроса) может быть уточнен на основе контента второго локального запроса и обновленных метаданных запроса, и новые прогнозы могут продолжать создаваться.
[0036] Фиг. 3 - это блок-схема последовательности операций, иллюстрирующая способ выполнения загружаемого контента, принятого, как описано посредством фиг. 1 или 2, например. Выполнение контента может включать в себя, например, вывод контента, например, посредством отображения контента, на который могут влиять одни или более пользовательских входных данных. Согласно варианту осуществления, показанному на фиг. 3, выполняется первый фрагмент загружаемого контента, и, после завершения выполнения первого фрагмента, выполняется второй фрагмент, и т. д. и т. п. Если, однако, впоследствии запрошенный фрагмент недоступен для выполнения после завершения выполнения непосредственно предшествующего запрошенного фрагмента, формируется сообщение об ошибке, и реализуется задержка, чтобы предоставлять возможность последовательно загруженному фрагменту закончить загрузку. На этапе 310 обработки на фиг. 3 выполняется первоначальный фрагмент загружаемого контента. Только в целях иллюстрации этому фрагменту загружаемого контента назначено значение n=1. После начала выполнения первоначального фрагмента загружаемого контента n устанавливается как n=n+1 или n=2. Когда используются в данном документе, различные значения n относятся только к порядку, в котором конкретные фрагменты контента запрашиваются, передаются и/или прогнозируются и не обязательно отражают то, что конкретный фрагмент контента находится "после" предыдущего запрошенного фрагмента контента относительно времени, порядка выполнения, местоположения в коде и т.д. Дополнительно предполагается, что более чем одно значение n может относиться к одному и тому же фрагменту загружаемого контента, например, в случае фрагмента загружаемого контента, который запрашивается более чем один раз.
[0037] На этапе 320 принятия решения определяется, доступен ли n-ый фрагмент загружаемого контента для выполнения. Определение может быть сделано в любой момент после выполнения предыдущего фрагмента (т. е. n-1 фрагмента) контента. Например, доступность второго фрагмента может быть запрошена непосредственно после выполнения первоначального фрагмента контента; с конкретными интервалами во время выполнения первоначального фрагмента; в случайные моменты времени в течение выполнения первоначального фрагмента или прямо перед завершением выполнения первоначального фрагмента. Фрагмент загружаемого контента доступен для выполнения, когда, по меньшей мере, минимальный объем его данных сохранен, чтобы поддерживать выполнение. Например, фрагмент может быть доступен для выполнения, если он полностью загружен и сохранен, или если существует, по меньшей мере, минимальный рабочий объем данных фрагмента, чтобы начинать его выполнение.
[0038] Если n-ый фрагмент загружаемого контента доступен для выполнения, тогда он выполняется на этапе 330 обработки, и n устанавливается как n=n+1, и способ возвращается к этапу 320 принятия решения. Например, если второй фрагмент загружаемого контента доступен для выполнения, тогда он выполняется на этапе 330 обработки, и n устанавливается как n=n+1 или n=3. Затем будет определено, доступен ли третий фрагмент загружаемого контента для выполнения, на этапе 320 принятия решения и так далее для каждого n-го фрагмента загружаемого контента.
[0039] Если n-ый фрагмент загружаемого контента недоступен для выполнения, тогда выполнение загружаемого контента приостанавливается на этапе 340 обработки, и сообщение о задержке формируется на этапе 350 обработки. Это предотвращает возникновение ненормальных тайм-аутов и других ненормальных ситуаций. Дополнительно значение n остается неизменным. Таким образом, способ продолжает определять, доступен ли n-ый фрагмент загружаемого контента для выполнения, на этапе 320 принятия решения. Когда n-ый блок загружаемого контента доступен для выполнения, он выполняется на этапе 330 обработки, и n устанавливается как n=n+1. Способ возвращается к этапу 320 принятия решения и может повторяться для каждого n-го фрагмента загружаемого контента до тех пор, пока соединение между запрашивающим устройством и хостом загружаемого контента не прервется, или пока загружаемый контент не будет выполнен полностью.
[0040] Выполнение любого фрагмента загружаемого контента может приостанавливаться в любое время, чтобы предоставлять возможность продвижения или завершения загрузки n-го фрагмента. В этом варианте осуществления, однако, выполнение загружаемого контента приостанавливается, если n-ый фрагмент загружаемого контента недоступен для выполнения после завершившегося выполнения предыдущего фрагмента (т.е. n-1 фрагмента) контента. Например, если второй фрагмент загружаемого контента недоступен для выполнения, тогда общее выполнение загружаемого контента приостанавливается на этапе 340 обработки (т.е. задержка реализуется между завершившимся выполнением первоначального фрагмента и начавшимся выполнением второго фрагмента), и сообщение о задержке формируется на этапе 350 обработки. Значение n остается как n=2. Таким образом, способ продолжает возвращаться к этапу 320 принятия решения, чтобы определять, доступен ли второй фрагмент загружаемого контента для выполнения. Когда второй фрагмент загружаемого контента становится доступным для выполнения, он выполняется на этапе 330 обработки, и n устанавливается как n=n+1, или n=3 в этом примере. Затем определяется, доступен ли третий фрагмент загружаемого контента для выполнения на этапе 320 принятия решения, и т.д. и т.п. Способ повторяется для каждого локально запрошенного фрагмента загружаемого контента или до тех пор, пока соединение между запрашивающим устройством и хостом загружаемого контента не прервется.
[0041] Фиг. 4 - это блок-схема последовательности операций, иллюстрирующая способ создания и расширения метаданных запросов загружаемого контента согласно варианту осуществления изобретения. В этом варианте осуществления метаданные запросов загружаемого контента строятся удаленно, например, посредством сервера или третьей стороны, размещающей загружаемый контент. На этапе 410 обработки принимается удаленный запрос фрагмента загружаемого контента. На этапе 420 обработки запрошенный фрагмент загружаемого контента передается. На этапе 430 удаленный запрос сохраняется в файле метаданных запросов загружаемого контента. Способ повторяется для каждого принятого удаленного запроса фрагмента загружаемого контента, при этом удаленные запросы сохраняются последовательно согласно порядку их приема. Метаданные запросов загружаемого контента могут быть сохранены в привязке к многообразию другой информации, такой как метаданные загружаемого контента (например, заголовок, размер, тип, издатель), метаданные запрашивающего устройства (например, тип, операционная система, пространство хранения, тип соединения) и пользовательские метаданные как для текущего пользователя, так и для других пользователей (например, демографическая информация, история доступа к контенту).
[0042] Если уже не сохранены, метаданные загружаемого контента, метаданные запрашивающего устройства, пользовательские метаданные и/или метаданные запросов загружаемого контента могут быть запрошены, получены и расширены с помощью информации из множества источников, включающих в себя запрашивающее устройство; издателя, производителя и/или базы данных распространителей; веб-сайты третьих сторон и/или пользовательские устройства третьих сторон. Способ может продолжаться до тех пор, пока соединение между запрашивающим устройством и хостом загружаемого контента не прервется, или пока все фрагменты загружаемого контента не будут запрошены и/или переданы.
[0043] Фиг. 5 - это блок-схема последовательности операций, иллюстрирующая способ оптимизации передач загружаемого контента с помощью прогнозов согласно варианту осуществления изобретения. В этом варианте осуществления способ иллюстрируется относительно сервера, размещающего загружаемый контент. Предполагается, однако, что удаленные прогнозы, описанные относительно фиг. 5, могут быть объединены, чередоваться или выполняться одновременно или параллельно с локальными прогнозами, описанными относительно фиг. 2, синхронным или асинхронным образом. Дополнительно предполагается, что вариант осуществления на фиг. 5 может быть объединен, чередоваться или выполняться одновременно или параллельно с вариантом осуществления, описанным относительно фиг. 4, синхронным или асинхронным образом. Когда выполняются асинхронно, способы, проиллюстрированные на фиг. 4 и 5, могут принимать и исполнять запросы, а также создавать метаданные запросов загружаемого контента, в то же время прогнозируя будущие запросы.
[0044] На этапе 510 обработки на фиг. 5 принимается первоначальный удаленный запрос первоначального фрагмента загружаемого контента. В целях объяснения этому фрагменту загружаемого контента назначается значение n=1. На этапе 520 обработки передается первоначальный фрагмент загружаемого контента в ответ на первоначальный удаленный запрос. После начала передачи первоначального фрагмента загружаемого контента n устанавливается как n=n+1 или n=2. На этапе 530 обработки прогнозируется n-ый удаленный запрос фрагмента загружаемого контента. Такие прогнозы могут выполняться, например, с помощью ранее запрошенных фрагментов загружаемого контента (например, первоначального фрагмента загружаемого контента), предыдущих удаленных запросов (например, удаленных запросов, сохраненных на этапе 430 на фиг. 4), метаданных загружаемого контента (например, заголовка, размера, типа, издателя), метаданных запрашивающего устройства (например, типа, операционной системы, пространства хранения, типа соединения), пользовательских метаданных как для текущего пользователя, так и для других пользователей (например, демографической информации, истории доступа к контенту), метаданных запросов загружаемого контента (например, которые созданы и построены, как показано на фиг. 4) и метаданных спрогнозированного запроса.
[0045] Чтобы формулировать прогнозы, эти данные могут быть проанализированы относительно запрашивающего пользователя, запрашивающего устройства и/или конкретного запрошенного загружаемого контента. Альтернативно или Дополнительно эти данные могут быть собраны и проанализированы по множеству запрашивающих пользователей, запрашивающих устройств и/или запрошенному загружаемому контенту. В последнем варианте осуществления метаданные запросов загружаемого контента от множества запусков одного и того же загружаемого контента могут быть проанализированы, чтобы идентифицировать необязательные ответвления в выполнении загружаемого контента, и различные анализы могут быть объединены в файл метаданных разветвляющихся запросов загружаемого контента.
[0046] Например, файл метаданных запросов загружаемого контента может иметь ответвления, которые прогнозируют, что, если запрашиваются данные геометрической модели, ассоциированные текстуры также будут запрошены. Таким образом, если локальный запрос принимается для данных геометрической модели уровня 1, может быть спрогнозировано, что будут запрошены текстуры уровня 1. Аналогично, если локальный запрос принимается для данных геометрической модели уровня 2, может быть спрогнозировано, что будут запрошены текстуры уровня 2, и т. д. и т. п.
[0047] В другом варианте осуществления последующий запрос пользовательским устройством A в игре X может быть спрогнозирован посредством анализа установившихся моделей доступа к файлу во множественных файлах метаданных запросов, ассоциированных с множественными пользовательскими устройствами в игре X. Такой прогноз основывается на предположении, что множественные пользовательские устройства, выполняющие игру X, запрашивают данные игры X в аналогичном порядке (т. е. что пользователи одной и той же игры выполняют аналогичные действия в аналогичном порядке). В другом примере последующий запрос пользовательским устройством B в игре-головоломке Y может быть спрогнозирован посредством анализа установившейся модели доступа к файлу пользовательского устройства C в игре-головоломке Y, когда наблюдается, что пользовательское устройство B и пользовательское устройство C имеют аналогичный характер процесса игры (т. е. аналогичные модели доступа к файлам) в аналогичной игре-головоломке Z. Этот прогноз основывается на предположении, что, поскольку пользовательское устройство B и пользовательское устройство C запрашивают данные игры Z в аналогичном порядке, они будут также запрашивать аналогичные данные игры Y в аналогичном порядке (т. е. что два пользователя, имеющие аналогичный характер процесса игры в одной игре-головоломке, также будут иметь аналогичный характер процесса игры в аналогичной игре-головоломке).
[0048] Поскольку запросы, метаданные и прогнозы могут быть динамическими, способы, описанные в данном документе, подходят для использования с загружаемым контентом, который не выполняет одни и те же или аналогичные операции в одинаковом или аналогичном порядке при каждом запуске, таким как интерактивный контент, который выполняется в соответствии с пользовательскими входными данными. Таким образом, например, системы и способы, описанные в данном документе, могут быть реализованы совместно с высокоуровневыми, продвинутыми видеоиграми и средами виртуальной реальности.
[0049] На необязательном этапе 540 принятия решения определяется, сохранен ли уже спрогнозированный фрагмент загружаемого контента на запрашивающем устройстве. Это определение может быть сделано посредством анализа метаданных запросов загружаемого контента, ассоциированных с конкретным запрошенным загружаемым контентом и конкретным запрашивающим устройством, чтобы определять, был ли спрогнозированный фрагмент ранее запрошен и передан. Альтернативно, запрос может передаваться запрашивающему устройству, чтобы проверять локальную память на предмет спрогнозированного фрагмента, и может приниматься ответ. Если спрогнозированный фрагмент загружаемого контента уже сохранен на запрашивающем устройстве, тогда n устанавливается как n=n+1, и другой прогноз выполняется на этапе 530 обработки. Если спрогнозированный фрагмент загружаемого контента еще не сохранен на запрашивающем устройстве, тогда он передается на этапе 550 обработки; n устанавливается как n=n+1; и другой прогноз выполняется на этапе 530 обработки. Способ может продолжаться, например, до тех пор, пока либо запрашивающее устройство, либо сервер не прервет соединение, или пока все фрагменты загружаемого контента не будут переданы.
[0050] В варианте осуществления, в котором необязательный этап 540 принятия решения опущен, способ продолжается непосредственно от этапа 530 обработки, где прогнозируется n-ый удаленный запрос фрагмента загружаемого контента, до этапа 550 обработки, где спрогнозированный фрагмент загружаемого контента передается, или широковещательно рассылается без запроса (push-рассылка), запрашивающему устройству. Запрашивающее устройство может затем предпринимать любое желаемое действие в отношении спрогнозированного фрагмента контента. Например, если спрогнозированный фрагмент уже сохранен на запрашивающем устройстве, тогда запрашивающее устройство может запрашивать, чтобы его передача была прервана, или альтернативно перезаписывать ранее сохраненный фрагмент. Если спрогнозированный фрагмент еще не сохранен на запрашивающем устройстве, тогда запрашивающее устройство может просто сохранять спрогнозированный фрагмент и ожидать локальный запрос для этого фрагмента контента.
[0051] Фиг. 6 иллюстрирует систему для выполнения действий одной или более технологий, описанных в данном документе. Сервер 610 соединен по сети 640 с пользовательским устройством 650. Сервер 610 включает в себя процессор 620 и память 630, которые находятся на связи друг с другом. Сервер 610 типично является компьютерной системой и может быть сервером HTTP (протокол передачи гипертекста), таким как сервер Apache. Предполагается, однако, что сервер 610 может быть одним или множеством модулей или устройств, размещающих загружаемый контент или его фрагменты. Дополнительно сервер 610 может быть выделенным сервером, совместно используемым сервером или их комбинациями. Например, сервер 610 может быть сервером, ассоциированным с разработчиком, издателем или распространителем загружаемого контента или его фрагментов или третьесторонним сервером, таким как одноранговое устройство в одноранговой (P2P) сети. Кроме того, сервер 610 может содержать виртуальный магазин или службу на основе онлайн-торговли, предлагающую загружаемый контент. В этом варианте осуществления сервер 610 (один или в комбинации с другими устройствами) может обрабатывать и выполнять различные коммерческие транзакции, такие как выставление счетов, в дополнение к тем действиям, которые описаны в данном документе.
[0052] Пользовательское устройство 650 включает в себя приложение 660, операционную систему 670, процессор 680 и память 690, которые находятся на связи друг с другом. Пользовательское устройство 650 может быть универсальным компьютером, миникомпьютером, персональным компьютером, переносным компьютером, персональным цифровым помощником (PDA), сотовым телефоном, телевизором, CD-проигрывателем, DVD-проигрывателем, BD-проигрывателем, игровой консолью, планшетом, электронной книгой и т. п. Сервер 610 и пользовательское устройство 650 характеризуются тем, что они способны соединяться с сетью 640. Сеть 640 может быть проводной или беспроводной и может включать в себя локальную сеть (LAN), глобальную сеть (WAN), телефонную сеть (такую как коммутируемая телефонная сеть общего пользования (PSTN)), радиосеть, сотовую или мобильную телефонную сеть (такая как GSM, GPRS, CDMA, EV-CO, EDGE, 3GSM, DECT, IS-136/TDA, iDEN и т.п.), интранет, Интернет или их комбинации. Память 630 и память 690 могут быть любым типом носителей информации, которые могут быть энергозависимой или энергонезависимой памятью, которая включает в себя, например, постоянное запоминающее устройство (ROM), оперативное запоминающее устройство (RAM), накопители на магнитных дисках, оптические носители информации, устройства флэш-памяти, zip-устройства и их комбинации. Память 630 и память 690 могут быть способны к постоянному или временному хранению или и к тому, и к другому; и могут быть внутренними, внешними или и теми, и другими.
[0053] В варианте осуществления, в котором используется одноранговая сеть, сервер 610 может быть пользовательским устройством третьей стороны, с которого пользовательское устройство 650 выбирает запрошенные или спрогнозированные фрагменты загружаемого контента. Когда используется такая одноранговая сеть, использование полосы частот и ассоциированные затраты уменьшаются от других серверов, размещающих контент, таких как серверы издателей. Например, все запрошенные или спрогнозированные фрагменты контента могут быть получены пользовательским устройством 650 от пользовательских устройств третьей стороны, совершенно исключая использование полосы пропускания пользовательским устройством 650 от других серверов. В другом примере пользовательское устройство третьей стороны может быть использовано вместе с сервером издателя приложения, чтобы предоставлять контент, уменьшая использование полосы пропускания пользовательским устройством 650 от других серверов. Дополнительно пользовательское устройство 650 может работать совместно с любым числом пользовательских устройств третьей стороны, чтобы каждое запрашивало различные фрагменты загружаемого контента с сервера 610, затем совместно использовать их между собой при необходимости. В этом варианте осуществления, пользовательское устройство 650 и пользовательские устройства третьей стороны, оба действуют в качестве хостов, запускающих как серверные - так и клиентские программы, чтобы предоставлять запрошенные фрагменты контента друг другу.
[0054] В использовании приложение 660 выполняет вызовы операционной системе 670, чтобы загружать и осуществлять доступ к данным, сохраненным в памяти 690, с помощью стандартных файловых операций. Приложение 660 может быть любым программным обеспечением и/или аппаратными средствами, которые обеспечивают интерфейс между пользователем пользовательского устройства 650 и загружаемым контентом. Стандартные файловые операции включают в себя, например, "открытие" (т.е. указание того, к какому файлу должен осуществляться доступ), "поиск" (т.е. указание того, в какую позицию в файле перейти, чтобы считывать данные), "чтение" (т.е. запрос, чтобы данные были считаны из файла и скопированы в приложение 660) и "закрытие" (т.е. запрос, чтобы файл был теперь закрыт). Посредством исправления существующего кода или замены драйверов операционная система 670 преобразовывает стандартные файловые операции в новые версии, которые выполняют дополнительные операции, описанные в данном документе, для того, чтобы оптимально загружать данные "по требованию". Таким образом, приложение 660 может начинать выполнение загружаемого контента прежде, чем он полностью загрузится. Дополнительно заменяя стандартные файловые операции новыми операциями, технологии, описанные в данном документе, могут быть реализованы с широким разнообразием новых и существующих приложений. Например, раскрытые варианты осуществления могут быть реализованы с более старыми или эмулируемыми играми, поскольку код игры не нужно сильно изменять (или изменять вовсе), чтобы предоставлять возможность потоковой передачи игрового контента.
[0055] В одном варианте осуществления каждый файл в приложении 660 сопоставляется с уникальным местоположением в созданном адресном пространстве. Например, если приложение 660 имеет два файла: (1) FILE1.DAT размером 10 кБ и (2) FILE2.DAT размером 20 кБ, их данные могут быть повторно сопоставлены с уникальными местоположениями, такими как, например, 0-9999 и 10000-29999 соответственно. В этом примере приложение 660 сообщает следующий локальный запрос операционной системе 670: (A) запрос "открытия" для FILE2.DAT, (B) запрос "поиска", чтобы переходить в местоположение 20, и (C) запрос "чтения" 40 байтов.
[0056] В одном варианте осуществления операционная система 670 выдает инструкцию процессору 680, чтобы определять, хранится ли запрошенный фрагмент контента в памяти 690, с помощью локального запроса, который принят от приложения 660. Если запрошенный фрагмент контента хранится в памяти 690, он считывается и копируется в приложение 660. Если запрошенный фрагмент контента не хранится в памяти 690, операционная система 670 преобразовывает локальный запрос от приложения 660 в удаленный запрос для желаемого фрагмента контента в формате, считываемом сервером 610. В этом примере операционная система 670 преобразовывает локальный запрос данных из файла FILE2.DAT в местоположении 20 для 40 байтов в удаленный запрос фрагмента загружаемого контента, соответствующего местоположениям 10020-10039, и пользовательское устройство 650 передает удаленный запрос серверу 610. Процессор 620 сервера 610 извлекает запрошенный фрагмент загружаемого контента из памяти 630 и возвращает его пользовательскому устройству 650. Пользовательское устройство 650 сохраняет запрошенный фрагмент загружаемого контента в памяти 690 и копирует его в приложение 660 в качестве ответа на его локальный запрос. Запрошенный фрагмент загружаемого контента затем доступен для выполнения приложением 660.
[0057] В другом варианте осуществления, в котором формат локального запроса не согласуется с форматом, используемым процессором 680 и/или памятью 690, операционная система 670 непосредственно преобразовывает локальный запрос от приложения 660 в формат для желаемого фрагмента контента в формате, считываемом процессором 680 и/или памятью 690. Таким образом, в вышеописанном варианте осуществления операционная система 670 преобразовывает локальный запрос данных из файла FILE2.DAT в местоположении 20 объемом 40 байт в локальный запрос фрагмента контента, соответствующего местоположениям 10020-10039, затем выдает инструкцию процессору 680, чтобы определять, хранится ли запрошенный фрагмент контента в памяти 690, с помощью локального запроса, который принят от приложения 660. Если запрошенный фрагмент контента хранится в памяти 690, он считывается и копируется в приложение 660. Если запрошенный фрагмент контента не хранится в памяти 690, операционная система 670 преобразовывает локальный запрос фрагмента контента, соответствующего местоположениям 10020-10039, в удаленный запрос фрагмента контента, соответствующего местоположениям 10020-10039, и пользовательское устройство 650 передает удаленный запрос серверу 610. Процессор 620 сервера 610 извлекает запрошенный фрагмент загружаемого контента из памяти 630 и возвращает его пользовательскому устройству 650. Пользовательское устройство 650 сохраняет запрошенный фрагмент загружаемого контента в памяти 690 и копирует его в приложение 660 в качестве ответа на его локальный запрос. Запрошенный фрагмент загружаемого контента затем доступен для выполнения приложением 660.
[0058] Обращаясь теперь к реализации конкретных технологий, описанных в данном документе, и, в частности, относительно фиг. 1, пользователь пользовательского устройства 650 выбирает загружаемый контент, доступный на сервере 610, с помощью приложения 660. В одном варианте осуществления исходный код приложения 660 был модифицирован, чтобы запрашивать только первоначальный фрагмент загружаемого контента (например, его минимальные рабочие файлы) в ответ на пользовательский запрос всего загружаемого контента. В этом варианте осуществления приложение 660 передает локальный запрос, соответствующий первоначальному фрагменту выбранного контента, операционной системе 670. Операционная система 670 передает запрос процессору 680, который опрашивает память 690 на предмет первоначального фрагмента контента.
[0059] В другом варианте осуществления, в котором исходный код приложения 660 не был модифицирован таким образом, приложение 660 запрашивает весь загружаемый контент в ответ на пользовательский запрос всего загружаемого контента (т. е. всех фрагментов загружаемого контента). В этом варианте осуществления приложение 660 передает локальный запрос, соответствующий всему загружаемому контенту, операционной системе 670. Операционная система 670 преобразовывает запрос для всего загружаемого контента в запрос только первоначального фрагмента загружаемого контента (например, его минимальных рабочих файлов) и передает этот запрос процессору 680.
[0060] В любом из этих вариантов осуществления, если первоначальный фрагмент выбранного контента находится в памяти 690, тогда он выполняется приложением 660 вместе с операционной системой 670 и процессором 680. Если первоначальный фрагмент выбранного контента не находится в памяти 690, операционная система 670 преобразовывает локальный запрос в удаленный запрос первоначального фрагмента контента и передает его серверу 610 по сети 640. Например, сигнал передается от пользовательского устройства 650, сигнал имеет адрес получателя (например, адрес, представляющий сервер 610), запрос (например, запрос для первоначального фрагмента контента) и адрес возврата (например, адрес, представляющий пользовательское устройство 650, которое инициировало удаленный запрос). Процессор 620 опрашивает память 630 на предмет первоначального фрагмента контента и передает его пользовательскому устройству 650. Пользовательское устройство 650 сохраняет первоначальный фрагмент контента в памяти 690, и он выполняется приложением 660 во взаимодействии с операционной системой 670 и процессором 680. Последующие локальные запросы фрагментов загружаемого контента, сформированные приложением 660, обрабатываются аналогично.
[0061] В еще одном варианте осуществления, где ни исходный код приложения 660, ни операционная система 670 не модифицируются, чтобы запрашивать только первоначальный фрагмент загружаемого контента в ответ на пользовательский запрос для всего загружаемого контента, приложение 660 и операционная система 670 запрашивают весь загружаемый контент локально и удаленно соответственно, а сервер 610 преобразовывает запрос. В частности, приложение 660 передает локальный запрос, соответствующий полному загружаемому контенту, операционной системе 670. Операционная система 670 сообщает запрос процессору 680, который опрашивает память 690 на предмет полного загружаемого контента. Если весь загружаемый контент находится в памяти 690, тогда он выполняется приложением 660 во взаимодействии с операционной системой 670 и процессором 680. Если весь контент не находится в памяти 690, тогда операционная система 670 преобразовывает локальный запрос в удаленный запрос всего контента и передает его серверу 610 по сети 640. Сервер 610 преобразовывает запрос для всего контента в запрос для первоначального фрагмента контента (например, его минимальных рабочих файлов) и передает первоначальный фрагмент контента пользовательскому устройству 650. Пользовательское устройство 650 сохраняет первоначальный фрагмент контента в памяти 690, и он выполняется приложением 660 во взаимодействии с операционной системой 670 и процессором 680. Последующие локальные запросы фрагментов загружаемого контента, сформированные приложением 660, преобразовываются локально посредством операционной системы 670 согласно ранее описанным вариантам осуществления.
[0062] При реализации способа на фиг. 1 могут приниматься последующие запросы, и ассоциированные с ними фрагменты загружаемого контента доставляются, в то время как ранее запрошенный фрагмент загружаемого контента выполняется. Другими словами, действия способов, описанных в данном документе, могут выполняться асинхронно, т. е. предоставляя возможность другой обработке продолжаться прежде, чем завершится предыдущая обработка. Это предоставляет возможность пользователю начинать играть в игру, например, прежде чем завершится загрузка всей игры.
[0063] В реализации способа, показанной на фиг. 2, например, сервер 610, сеть 640 и пользовательское устройство 650 выполняют аналогичные функции, что и описанные выше относительно реализации на фиг. 1. Кроме того, локальные запросы, принятые от приложения 660, сохраняются последовательно в порядке, в котором они принимаются, в качестве метаданных запросов загружаемого контента в памяти 690. Процессор 680 осуществляет доступ к этим метаданным запросов загружаемого контента и прогнозирует запросы фрагментов загружаемого контента, анализируя примеры файлового доступа в метаданных запросов. Процессор 680 может дополнительно делать прогнозы с помощью, например, ранее запрошенных фрагментов загружаемого контента (например, первоначального фрагмента загружаемого контента), предыдущих локальных запросов (например, сохраненного первоначального локального запроса), метаданных загружаемого контента (например, заголовка, размера, типа, издателя), метаданных запрашивающего устройства (например, типа, операционной системы, пространства хранения, типа соединения) и пользовательских метаданных как для текущего пользователя, так и для других пользователей (например, демографической информации, истории доступа к контенту).
[0064] Процессор 680 опрашивает память 690, чтобы определять, хранится ли спрогнозированный фрагмент контента локально. Если спрогнозированный фрагмент контента хранится в памяти 690, и процессор 680 прогнозирует другой последующий запрос для другого фрагмента загружаемого контента, и т.д. и т.п. Если спрогнозированный фрагмент загружаемого контента не хранится в памяти 690, тогда операционная система 670 формирует удаленный запрос спрогнозированного фрагмента контента и передает его серверу 610 по сети 640. Сервер 610 исполняет удаленный запрос, как описано выше относительно реализации на фиг. 1, и он сохраняется локально в памяти 690.
[0065] В одном варианте осуществления спрогнозированный запрос сохраняется в памяти 690 в качестве метаданных спрогнозированного запроса. Таким образом, когда последующий локальный запрос фактически принимается в операционной системе 670 от приложения 660, процессор 680 запрашивает последовательно соответствующий спрогнозированный запрос из памяти 690 и сравнивает прогноз с последующим локальным запросом. Если последующий локальный запрос - это запрос того же фрагмента загружаемого контента, что и прогноз, спрогнозированный фрагмент контента, сохраненный в памяти 690, выполняется приложением 660 во взаимодействии с операционной системой 670 и процессором 680. Если последующий локальный запрос - это запрос фрагмента загружаемого контента, отличного от прогноза, тогда процессор 680 опрашивает память 690, чтобы определять, хранится ли запрошенный фрагмент контента локально. В любом случае, метаданные спрогнозированного запроса могут обновляться, чтобы отражать то, был или нет прогноз точным, и могут использоваться, чтобы уточнять будущие прогнозы. Реализация на фиг. 2 затем продолжается, как описано выше относительно реализации на фиг. 1.
[0066] В другом варианте осуществления спрогнозированный запрос не нужно сохранять в памяти 690. Таким образом, когда последующий локальный запрос фактически принимается в операционной системе 670 от приложения 660, процессор 680 просто опрашивает память 690, чтобы определять, хранится ли запрошенный фрагмент контента локально. Другими словами, процессору 680 безразлично то, как запрошенный фрагмент контента стал доступным в памяти 690. Реализация на фиг. 2 затем продолжается, как описано выше относительно реализации на фиг. 1.
[0067] В реализации способа, показанной на фиг. 3, приложение 660 выполняет первоначальный фрагмент загружаемого контента во взаимодействии с операционной системой 670 и процессором 680. Процессор 680 опрашивает память 690, чтобы определять, доступен ли следующий фрагмент загружаемого контента для выполнения (т. е. хранится ли, по меньшей мере, минимальный рабочий объем данных относительно следующего фрагмента в памяти 690). Если следующий фрагмент контента доступен для выполнения, тогда он предоставляется и выполняется приложением 660 по завершении выполнения первоначального фрагмента.
[0068] Если следующий фрагмент контента недоступен для выполнения по завершении выполнения первоначального фрагмента, операционная система 670 приостанавливает выполнение загружаемого контента приложением 660. Другими словами, вводится задержка между выполнением первоначального и последующего фрагмента контента. Процессор 680 извлекает сохраненное сообщение о задержке из памяти 690, которое выполняется до тех пор, пока следующий фрагмент контента не будет доступен для выполнения и возвращен приложению 660. Поскольку загрузка фрагментов контента выполняется в отдельном процессе от выполнения загружаемого контента (и поскольку выполнение загружаемого контента приложением 660 приостанавливается до тех пор, пока следующий фрагмент контента, отвечающий на его локальный запрос, не будет доступен), предотвращается возникновение ненормальных тайм-аутов и других ненормальных ситуаций. Другими словами, приложение 660 остается неосведомленным и о том, что следующий фрагмент контента недоступен, и что его процессы были приостановлены до тех пор, пока фрагмент контента не станет доступным. Для того чтобы минимизировать интервал времени, в котором приложение 660 приостанавливает работу, формулируются прогнозы, чтобы запрашивать фрагменты контента, которые вероятно должны быть запрошены приложением 660, в том же порядке, в котором они будут запрошены, как описано дополнительно относительно фиг. 2 и 5.
[0069] В реализации способа, проиллюстрированной на фиг. 4, таким образом создающего и поддерживающего метаданные запросов загружаемого контента, сервер 610 принимает запрос фрагмента загружаемого контента от пользовательского устройства 650 по сети 640. Процессор 620 извлекает запрошенный фрагмент контента из памяти 630 и передает его пользовательскому устройству 650 по сети 640. Процессор 620 последовательно сохраняет запросы фрагментов загружаемого контента в порядке, в котором они принимаются, в памяти 630. Этот последовательный список файловых запросов составляет метаданные запросов загружаемого контента, используемые сервером 610, чтобы прогнозировать последующие запросы фрагментов контента, как описано дополнительно в данном документе относительно реализации способа, показанной на фиг. 5.
[0070] Предполагается, что различные типы данных, используемых для прогнозирования в данном документе (например, метаданные загружаемого контента, метаданные запросов загружаемого контента, метаданные запрашивающего устройства, пользовательские метаданные), могут совместно использоваться между сервером 610 и пользовательским устройством 650 для того, чтобы уточнять прогнозы как сервера 610, так и пользовательского устройства 650. Например, пользовательское устройство 650 может создавать, поддерживать и совместно использовать метаданные запросов загружаемого контента отдельно с сервером 610 для того, чтобы обеспечивать более точное последовательное перечисление запросов, сделанных при конкретном исполнении контента. Таким образом, метаданные запросов загружаемого контента, доступные серверу 610, не ограничиваются теми запросами, которые выполнены удаленно, и могут дополнительно включать в себя запросы, выполненные локально для фрагментов контента, доступного локально.
[0071] В реализации способа, проиллюстрированной на фиг. 5, сервер 610 принимает первоначальный запрос фрагмента контента и передает фрагмент контента пользовательскому устройству 650, как описано выше. В этом варианте осуществления процессор 620 осуществляет доступ к метаданным запросов загружаемого контента в памяти 630 и прогнозирует последующие запросы фрагментов загружаемого контента, как описано дополнительно выше относительно фиг. 5. Необязательно процессор 620 определяет, сохранен ли спрогнозированный фрагмент контента в пользовательском устройстве 650. В одном варианте осуществления процессор 620 выполняет это определение посредством поиска по записям файловых запросов в памяти 630 на предмет информации, указывающей, что спрогнозированный фрагмент контента был ранее запрошен и/или передан пользовательскому устройству 650. Если спрогнозированный фрагмент контента не был ранее запрошен и/или передан пользовательскому устройству 650, выполняется передача или push-рассылка спрогнозированного фрагмента контента с сервера 610 в память 690. Если спрогнозированный фрагмент контента был действительно ранее запрошен и/или передан пользовательскому устройству 650, процессор 620 прогнозирует последующий запрос фрагмента загружаемого контента.
[0072] В другом варианте осуществления процессор 620 передает запрос пользовательскому устройству 650 по сети 640 относительно того, сохранен ли спрогнозированный фрагмент контента в памяти 690. Процессор 680 опрашивает память 690, чтобы определять, хранится ли спрогнозированный фрагмент контента локально. Процессор 680 затем передает положительный или отрицательный ответ серверу 610 по сети 640. Если спрогнозированный фрагмент контента не хранится в пользовательском устройстве 650, выполняется передача или push-рассылка спрогнозированного фрагмента контента с сервера 610 в память 690. Если спрогнозированный фрагмент контента в действительности хранится в пользовательском устройстве 650, процессор 620 прогнозирует последующий запрос фрагмента загружаемого контента.
[0073] В варианте осуществления, в котором процессор 620 не определяет, хранится ли спрогнозированный фрагмент контента в пользовательском устройстве 650, сервер 610 переходит к передаче или push-рассылка, спрогнозированного фрагмента контента в память 690 пользовательского устройства 650. Процессор 680 пользовательского устройства 650 может определять, сохранен ли уже вытолкнутый фрагмент контента в памяти 690, в таком случае он предоставляет серверу 610 запрос, чтобы прекращать передачу фрагмента. Альтернативно, процессор 680 может просто предоставлять возможность push-разосланному фрагменту контента перезаписывать ранее сохраненный фрагмент в памяти 690. Если push-разосланный фрагмент контента еще не сохранен в памяти 690, он может быть сохранен в ней, чтобы выдаваться в ответ на локальный запрос этого фрагмента контента.
[0074] В любом из вышеописанных вариантов осуществления сервер 610 и/или пользовательское устройство 650 могут инициировать удаление фрагментов загружаемого контента в памяти 690. Таким образом, если память 690 заполнена, и дополнительные фрагменты загружаемого контента требуются, чтобы продолжать его выполнение, могут применяться алгоритмы кэширования, чтобы решать, какие фрагменты отбрасывать для того, чтобы освобождать место для новых фрагментов. Например, если пользователь находится на уровне 15 из всего 30 уровней в игре объемом 24 ГБ, а игровая консоль имеет только 12 ГБ для хранения, фрагменты игры, к которым недавно осуществлялся доступ (например, фрагменты, соответствующие уровню 1), могут быть очищены, чтобы освобождать пространство хранения для запрошенных или спрогнозированных фрагментов контента, необходимых, чтобы продолжать выполнение игры (например, фрагментов с предстоящим уровнем 16).
[0075] Таким образом, инициируя алгоритмы кэширования во взаимодействии с описанными вариантами осуществления, загружаемый контент, имеющий размер, превышающий пространство хранения пользовательского устройства 650, может не только выполняться, но может выполняться с минимальной задержкой для пользователя. Например, контент, ранее ограниченный распространением посредством физических носителей вследствие ограничений локальных запоминающих устройств, чрезмерных времен загрузки и использования большой ширины полосы частоты (например, контент, традиционно распространяемый на дисках Blu-ray), может передаваться сервером 610 и выполняться пользовательским устройством 650 в соответствии с раскрытыми системами и способами.
[0076] Вышеописанные системы и способы также полезны в варианте осуществления, в котором пользовательское устройство 650 является мобильным устройством, которое запрашивает загружаемый контент с сервера 610 по сотовой сети 640. Традиционно, такие мобильные устройства имели ограниченный доступ к загружаемому контенту вследствие медленных скоростей передачи сотовых сетей, высоких стоимостей передачи данных, ассоциированных с сотовыми сетями, и очень ограниченного пространства хранения, доступного на мобильных устройствах вследствие их желательно небольшого размера. Реализуя раскрытые системы и способы в таких обстоятельствах, однако, задержки вследствие медленных скоростей передачи уменьшаются, поскольку контент может начинать выполнение без всех своих данных, и только некоторые фрагменты контента необходимы в конкретные моменты времени, чтобы продолжать выполнение. Понесенные затраты на передачу данных также ограничиваются, поскольку только необходимые фрагменты контента загружаются, устраняя затраты на передачу, ассоциированные с ненужными фрагментами. Дополнительно, когда реализуется во взаимодействии с вышеописанными кэш-алгоритмами, загружаемый контент не ограничивается размером хранилища мобильного устройства.
[0077] Системы и способы, описанные в данном документе, могут дополнительно быть реализованы, чтобы оптимизировать "пробный" или "демонстрационный" контент. Эти "демонстрационные версии" предоставляют возможность пользователю попробовать, по меньшей мере, фрагменты контента бесплатно в течение фиксированного или неограниченного периода времени перед покупкой или загрузкой полного контента. Традиционно, такие демонстрационные версии предоставляются, позволяя пользователю загружать полный контент, но ограничивая выполнение некоторыми фрагментами контента. Полный контент может быть доступен и выполняться после покупки ключа активации, например, который разблокирует ранее заблокированные фрагменты контента. Эта система преодолевает различные недостатки, такие как требование того, чтобы пользователь загружал полный контент прежде, чем ему будет предоставлена возможность осуществлять доступ только к ограниченным его фрагментам. Таким образом, больше данных, чем будут использованы в пробной версии, загружаются и сохраняются, задерживая пользование пользователем пробной версии больше, чем необходимо. Дополнительно пользователю, который пробует демонстрационную версию и решает, что он не заинтересован в полном контенте, нет необходимости использовать дополнительно загруженный контент. Кроме того, фрагменты заблокированного контента могут потенциально быть взломаны, после того как они загружены, без покупки ключа активации.
[0078] Другие демонстрационные версии являются усеченными версиями загружаемого контента, которые содержат только данные, ассоциированные с пробной версией. Хотя эти усеченные версии устраняют потенциал для осуществления доступа хакерами к полному контенту, они требуют, чтобы разработчики создавали усеченный контент отдельно от полного контента. Дополнительно эти типы демонстрационных версий все еще требуют полной загрузки всех файлов, ассоциированных с пробной версией, вместо только тех конкретных демонстрационных файлов, которые будут необходимы при этом конкретном выполнении. Если пользователь решает приобрести полный контент, ему может требоваться повторно загружать фрагменты пробного контента, несмотря на предыдущую загрузку, и может теряться любой сохраненный прогресс или данные, ассоциированные с пробным контентом. Дополнительно пользователю все еще требуется загружать полный контент после покупки перед выполнением.
[0079] Применяя варианты осуществления, описанные в данном документе, однако, отдельная, усеченная версия контента не требуется для того, чтобы обеспечивать демонстрацию контента пользователю. Например, сервер 610 может иметь единственную версию контента, сохраненную в памяти 630, и к этой же самой версии может осуществляться доступ, чтобы предоставлять как пробные, так и полные фрагменты контента запрашивающим устройствам. Дополнительно демонстрационная версия может начинать выполнение без ожидания, пока демонстрационный или полный контент загрузится во всей своей полноте.
[0080] В одном варианте осуществления сервер 610 ограничивает фрагменты контента (удаленно запрошенные или спрогнозированные), которые передаются пользовательскому устройству 650, только теми фрагментами контента, которые идентифицированы как пробный контент. Дополнительно к примеру, описанному выше, если файл FILE1.DAT является единым файлом, ассоциированным как с пробным, так и с полным контентом, тогда сервер 610 может отвечать на удаленные запросы только для фрагментов контента, соответствующих местоположениям 0-9999. Если запрашиваются фрагменты контента за пределами местоположений 0-9999, сервер 610 может дополнительно передавать сообщение об ошибке (например, указывающее, что запрошенный контент находится за пределами пробной версии, или что пробная версия закончилась), пользовательскому устройству 650. Сервер 610 может определять, должен ли быть предоставлен пользовательскому устройству 650 пробный или полный доступ, с помощью метаданных загружаемого контента и/или метаданных запросов загружаемого контента, содержащихся в памяти 630.
[0081] В другом варианте осуществления пользовательское устройство 650 само ограничивает фрагменты контента (локально запрошенные или спрогнозированные), которые удаленно запрашиваются с сервера 610. Если файл FILE1.DAT является единым файлом, ассоциированным как с пробным, так и с полным контентом, тогда процессор 680 может отвечать на локальные запросы от приложения 660 только для фрагментов контента, соответствующих местоположениям 0-9999. Если запрашиваются фрагменты контента за пределами местоположений 0-9999, процессор 680 может формировать сообщение об ошибке (например, указывающее, что запрошенный контент находится за пределами пробной версии, или что пробная версия закончилась) и предоставлять его приложению 660. Процессор 680 может определять, должен ли быть предоставлен приложению 660 пробный или полный доступ, с помощью метаданных загружаемого контента и/или метаданных запросов загружаемого контента, содержащихся в памяти 690. Такие метаданные могут быть снабжены защитой управления цифровыми правами (DRM) или т.п., чтобы предотвращать фальсификацию пользователем идентификации контента как пробного или полного. Предполагается, что этот вариант осуществления может быть объединен с вышеописанным вариантом осуществления, чтобы обеспечивать двустороннюю защиту против взлома и кражи неавторизованного контента.
[0082] В комбинации с любым из вышеописанных вариантов осуществления (или в отдельном варианте осуществления) сервер 610 и/или пользовательское устройство 650 может использоваться, чтобы ограничивать по времени выполнение демонстрационной версии. Например, сервер 610 и/или пользовательское устройство 650 может определять, прошел ли более чем установленный интервал времени после того, как был принят первоначальный запрос для контента. Если сервер 610 и/или пользовательское устройство 650 принимает запрос вне этого интервала времени, может быть сформировано сообщение об ошибке, указывающее, что пробная версия закончилась. Таким образом, согласно этим вариантам осуществления, только данные, необходимые пользовательскому устройству 650, чтобы выполнять пробную версию (или фрагмент ее), загружаются в память 690.
[0083] Хотя описано относительно способов, проиллюстрированных на фиг. 1-5, понятно, что любые из способов, описанных в данном документе, могут быть аналогично выполнены. Дополнительно хотя описано с конкретными устройствами, понятно, что множество аналогичных устройств или модулей может быть применено, чтобы выполнять процессы, описанные в данном документе. Функции этих и других вариантов осуществления могут быть описаны как модули исполняемых компьютером инструкций, записанных на материальных носителях. Модули могут быть разделены различными способами по различным устройствам.
[0084] Фиг. 7 показывает схематичное представление машины в примерной форме компьютерной системы 700, в которой может выполняться набор инструкций, чтобы инструктировать машине выполнять любую одну или более из технологий, обсуждаемых в данном документе. В альтернативных вариантах осуществления машина работает как автономное устройство или может быть соединено (например, объединено в сеть) с другими машинами. В сетевом применении машина может работать в качестве сервера или клиентской машины в клиент-серверном сетевом окружении, в качестве хост-машины или в качестве одноранговой машины в одноранговом (или распределенном) сетевом окружении. Машина может быть персональным компьютером (PC), планшетом, телевизионной приставкой (STB), персональным цифровым помощником (PDA), сотовым телефоном, веб-устройством, сетевым маршрутизатором, коммутатором или мостом, игровой консолью, телевизором, CD-проигрывателем, DVD-проигрывателем, BD-проигрывателем, электронной книгой или любой машиной, способной выполнять набор инструкций (последовательно или иначе), которые указывают действия, которые должны быть предприняты этой машиной. Дополнительно в то время как иллюстрируется только одна машина, термин "машина" должен также включать в себя любую совокупность машин, которые индивидуально или совместно исполняют набор (или множество наборов) инструкций, чтобы выполнять любую одну или более из технологий, обсуждаемых в данном документе.
[0085] Согласно некоторым вариантам осуществления компьютерная система 700 содержит процессор 750 (например, центральный процессор (CPU), графический процессор (GPU) или оба), основную память 760 (например, постоянное запоминающее устройство (ROM), флэш-память, динамическое оперативное запоминающее устройство (DRAM), такое как синхронное DRAM (SDRAM) или Rambus DRAM (RDRAM) и т.д.) и/или статическую память 770 (например, флэш-память, статическое оперативное запоминающее устройство (SRAM) и т.д.), которые связываются друг с другом через шину 795.
[0086] Согласно некоторым вариантам осуществления компьютерная система 700 может дополнительно содержать устройство 710 видеоотображения (например, жидкокристаллический дисплей (LCD), дисплей на светоизлучающих диодах (LED), электролюминесцентный дисплей (ELD), плазменные панели отображения (PDP), дисплей на органических светоизлучающих диодах (OLED), дисплей с люминофором на основе эффекта эмиссии электронов с поверхностной проводимостью (SED), нанокристаллический дисплей, 3D-дисплей или электроннолучевую трубку (CRT)). Согласно некоторым вариантам осуществления компьютерная система 700 также может содержать устройство 715 буквенно-цифрового ввода (например, клавиатуру), устройство 720 управления курсором (например, мышь или контроллер), устройство 730 дискового накопителя, устройство 740 формирования сигналов (например, динамик) и/или сетевое интерфейсное устройство 780.
[0087] Устройство 730 дискового накопителя включает в себя машиночитаемый носитель 734, на котором хранится один или более наборов инструкций (например, программное обеспечение 736), осуществляющих любую одну или более из технологий или функций, описанных в данном документе. Программное обеспечение 736 может также постоянно храниться, полностью или, по меньшей мере, частично, в основной памяти 760 и/или в процессоре 750 во время его исполнения компьютерной системой 700, основной памятью 760 и процессором 750. Процессор 750 и основная память 760 могут также составлять машиночитаемые носители, имеющие инструкции 754 и 764, соответственно. Программное обеспечение 736 может дополнительно передаваться или приниматься по сети 790 через сетевое интерфейсное устройство 780.
[0088] В то время как машиночитаемый носитель 734 показан в примерном варианте осуществления как единственный носитель, выражение "машиночитаемый носитель" должно использоваться, как включающее в себя одиночный носитель или множество носителей (например, централизованная или распределенная база данных и/или ассоциированные кэши и серверы), которые хранят один или более наборов инструкций. Выражение "машиночитаемый носитель" также должно использоваться как включающее в себя любой носитель, который способен хранить, кодировать или переносить набор инструкций для выполнения машиной и который инструктирует машине выполнять любую одну или более из технологий раскрытых вариантов осуществления. Выражение "машиночитаемый носитель" должно соответственно использоваться как включающее в себя, но не только, твердотельные запоминающие устройства и оптические и магнитные носители.
[0089] Следует понимать, что процессы и технические приемы, описанные в данном документе, не относятся, по своему существу, к любому конкретному устройству, и могут быть реализованы посредством любой подходящей комбинации компонентов. Дополнительно различные типы устройств общего назначения могут использоваться в соответствии с концепциями, описанными в данном документе. Также может оказаться полезным сконструировать специализированное устройство, чтобы выполнять способы, описанные в данном документе. Специалисты в области техники поймут, что множество различных комбинаций аппаратных средств, программного обеспечения и микропрограммного обеспечения будут подходящими для применения на практике раскрытых вариантов осуществления.
[0090] Варианты осуществления настоящего изобретения были описаны относительно конкретных вариантов осуществления, которые предназначены во всех аспектах быть скорее иллюстративными, чем ограничивающими. Дополнительно в то время как варианты осуществления были описаны в связи с рядом примеров и реализаций, понятно, что различные модификации и эквивалентные конфигурации могут быть выполнены в примерах, в то же время оставаясь в рамках изобретенных вариантов осуществления.
[0091] Другие варианты осуществления изобретения будут очевидны специалистам в области техники из рассмотрения спецификации и практического применения вариантов осуществления, раскрытых в данном документе. Различные аспекты и/или компоненты описанных вариантов осуществления могут быть использованы отдельно или в любой комбинации. Предполагается, что спецификация и примеры рассматриваются только как примерные, при этом истинные сущность и объем изобретения определяется нижеследующей формулой изобретения.