> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 流式安装与智能交付概述

> 流式安装与智能交付概述

在 XBOX One 上,所有游戏都从硬盘运行。内容可以来自任意数量的来源,但主要通过光盘和云进行分发 —— 即蓝光光盘和 XBOX 服务。

为了让消费者尽快开始玩游戏,XBOX One 使用了一种称为 *流式安装(Streaming Installation)* 的功能,允许游戏在完全安装完成之前就能运行。此功能还允许游戏根据用户输入或其他事件更改内容的安装顺序。

<Note>智能交付同时适用于 MSIXVC 和 MSIXVC2 包。你在这两种格式中以相同的方式定义区块。MSIXVC2 的关键区别在于:重排区块或在区块之间移动文件不会影响内容更新体积。有关详细信息,请参见 [MSIXVC2 打包概述](/build/core-features/common/packaging/overviews/packaging-msixvc2-overview)。</Note>

<a id="ID4EPB" />

## 流式安装与智能交付的优势

流式安装和智能交付的以下功能为首次玩游戏的用户提供了更流畅的体验。

### 只需要一部分数据就能启动游戏

每个游戏都可以指定启动所需的数据子集。系统会确保这些内容已复制到硬盘,然后应用才会被注册并可供启动。

### 安装数据仅在合适的时机下载和安装

安装数据可以带有说明符,以便只在合适的时机下载和安装。例如,你可以将仅适用于特定语言的资源标记出来。这些资源仅会被交付到设置了该语言的主机上。此外,只在特定级别硬件上使用的资源也可以打上说明符,以便仅安装在该级别的主机上。

### 游戏的安装在后台继续进行

一旦启动游戏所需的最少数据被复制到硬盘,游戏就会启动。其余数据会在游戏运行时从安装源继续复制到硬盘。

即使用户在应用之间切换,安装仍会在后台继续。例如,如果用户在玩游戏时决定去看电影,系统会在电影播放时于后台继续安装。

<a id="ID4EZC" />

## 使用流式安装

要使用流式安装,你需要定义构成数据 *区块(chunk)* 的文件列表;每个区块支持游戏玩法的某一特定部分。你还要定义区块的默认安装顺序。此顺序在映射区块布局的 .xml 文件中指定。例如,下面的示例展示了一个简单的包文件。

```xml theme={null}
  <Package>
    <Chunk Id="1000" Marker="Launch">
      <FileGroup DestinationPath="\" SourcePath="X:\bin" Include="*.*"/>
    </Chunk>
    <Chunk Id="1001">
      <FileGroup DestinationPath="\Data\Maps" SourcePath="Y:\Maps\Level1" Include="*.map"/>
      <FileGroup DestinationPath="\Data\Maps" SourcePath="Y:\Maps\Level2" Include="*.map"/>
      <FileGroup DestinationPath="\Data\Maps" SourcePath="Y:\Maps\Level3" Include="*.map"/>
      <FileGroup DestinationPath="\Data\Maps" SourcePath="W:\ExtraMaps" Include="*.map"/>
      <FileGroup DestinationPath="\Data\Textures" SourcePath="M:\MapTextures" Include="*.png"/>
      <FileGroup DestinationPath="\Data\Textures" SourcePath="W:\ExtraMapTextures" Include="*.png"/>
    </Chunk>
  </Package>  
```

要将游戏数据打包用于流式安装,请使用映射文件作为参数运行命令行工具 `Make Package (makepkg.exe)`。

创建应用包后,使用 `xbapp` `install` 在主机上测试流式安装。有关此命令的详细信息,请参见 [Application Management (xbapp.exe)(NDA 主题)](/tools/tools-console/commandlinetools/xbapp)。

<a id="ID4EXX" />

## 使用智能交付

要使用智能交付,请在布局文件中适当地标记区块。以下代码示例演示如何标记一个仅在语言设置为法语的 XBOX One X 主机上安装的区块。

```xml theme={null}
  <Package>
    <Chunk Id="2002" Devices="Xbox-Scorpio" Languages="fr">
      ...
    </Chunk>
  </Package>  
```

<a id="ID4EVF" />

## 对齐要求

早期版本的 MakePkg 工具要求使用特殊的对齐区块以避免出现比预期更大的内容更新。现已不再需要这样做。

<a id="ID4E1G" />

## 更新

通常,游戏更新在后台进行,用户不会察觉正在进行更新。然而,在某些情况下,游戏可能正在运行时同时进行更新。即使在这种情况下,更新程序也可以逐个区块地更新。当某个区块正在更新时,对其状态的查询会显示该区块未安装。

启动集中的区块更新完成后,游戏即可启动。此时系统的行为就像重新安装游戏一样。

<a id="ID4EVH" />

## 本节内容

[动态区块重排](/build/core-features/common/packaging/packaging-chunkreordering)
介绍游戏如何根据用户输入更改数据的安装顺序。

[创建、检查和测试内容更新](/build/core-features/common/packaging/packaging-testing-updates)
介绍如何在开发中创建、比较和测试内容更新。

[内容更新最佳实践(NDA 主题)](/build/core-features/common/packaging/packaging-updates)
介绍如何为内容更新编写包。

[流式安装:调试](/build/core-features/common/packaging/packaging-debugging)
介绍如何暂停游戏的流式安装,直到调试器附加到游戏为止。

[流式安装:状态](/build/core-features/common/packaging/packaging-installstatus)
介绍游戏如何监控安装进度。

[多光盘功能](/build/core-features/common/packaging/packaging-multi-disc)
介绍如何创建跨越多张光盘的 XBOX One 游戏。

[开发过程中的应用打包](/build/core-features/common/packaging/packaging-packaging-during-development)
介绍开发过程中应用打包的三个阶段:未加密打包、测试加密打包和生产加密打包。

[智能交付](/build/core-features/common/packaging/overviews/intelligentdelivery)
介绍如何使用智能交付来仅安装部分内容。

[创建测试光盘](/build/core-features/common/packaging/creating-test-compilation-discs)
介绍如何创建测试光盘。

[在 PC 上测试包](/build/core-features/common/packaging/packaging-testing-PC-install)
介绍如何在开发 PC 上测试包。

<a id="ID4EUAAC" />


## Related topics

- [游戏打包、更新与流式安装测试](/zh-CN/build/core-features/common/packaging/title-packaging-streaming-install-testing.md)
- [打包概述](/zh-CN/build/core-features/common/packaging/overviews/packaging.md)
- [XR-129 智能交付内容管理](/zh-CN/publishing/certification/xr/xr-129.md)
- [XR-034 流式安装的初始游玩标记](/zh-CN/publishing/certification/xr/xr-034.md)
- [XPackageIsPackagedProcess](/zh-CN/reference/system/xpackage/functions/xpackageispackagedprocess.md)
