UPnP 媒 体 播 放 器 的 研 究 与 实 现 张 齐 胡 佳 华 南 理 工 大 学 计 算 机 科 学 与 工 程 学 院 广 州 510006 摘 要 UPnP 是 数 字 家 庭 网 络 中 的 一 个 主 流 协 议, 它 实 现 了 零 配 置, 不 用 再 进 行 繁 琐 的 网 络 配 置, 并 为 数 字 设 备 的 接 入 发 现 服 务 描 述 等 制 订 了 一 系 列 的 规 范 本 文 先 介 绍 了 UPnP 架 构 ; 描 述 了 UPnP 媒 体 播 放 器 设 计 的 基 本 思 想 ; 并 利 用 Intel 公 司 提 供 的 Device Builder 生 成 的 UPnP 框 架 作 为 基 础, 通 过 在 其 上 添 加 相 应 的 控 制 功 能 与 解 码 功 能, 实 现 了 一 个 UPnP 网 络 媒 体 播 放 器 ; 介 绍 了 各 部 分 实 现 的 具 体 细 节, 并 对 该 播 放 器 进 行 了 测 试 与 分 析 最 后, 与 其 它 方 案 进 行 比 较, 指 出 各 方 案 存 在 的 问 题 以 及 本 方 案 对 该 问 题 的 解 决 方 法 关 键 词 UPnP; 网 络 设 备 ; 媒 体 播 放 器 ; 数 字 家 庭 引 言 UPnP 的 全 称 是 Universal Plug and Play, 是 PnP(Device Plug and Play) 的 扩 展, 可 以 发 现 和 控 制 各 种 网 络 设 备, 并 能 提 供 相 应 的 服 务, 如 网 络 打 印 机,Internet 网 关 等 但 UPnP 不 仅 仅 是 即 插 即 用 的 简 单 扩 展, 它 支 持 0 配 置 和 无 线 网 络, 可 以 自 动 发 现 其 它 供 应 商 提 供 的 设 备 在 UPnP 协 议 下, 一 个 设 备 可 以 动 态 的 加 入 网 络 获 得 IP 地 址 广 播 它 的 功 能 并 了 解 其 他 设 备 的 功 能 很 多 种 类 的 设 备 都 可 以 使 用 UPnP 协 议, 包 括 智 能 设 备, 无 线 设 备 UPnP 使 用 标 准 的 TCP/IP 和 Internet 协 议, 使 其 能 够 很 好 的 在 现 存 网 络 中 使 用, 使 用 这 些 标 准 协 议 使 得 UPnP 可 以 从 已 有 的 各 种 经 验 和 知 识 中 获 利, 打 破 了 各 种 信 息 孤 岛, 越 过 各 种 物 理 层, 可 以 是 有 线 的, 也 可 以 是 无 线 的, 使 得 设 备 间 的 相 互 协 作 成 为 一 个 基 本 的 特 点 目 前,DLNA( 现 代 数 字 家 庭 ) 是 一 个 非 常 活 跃 的 领 域,UPnP 是 其 中 的 主 流 协 议 之 一 DLNA/UPnP 的 远 景 是 构 建 一 个 有 线 与 无 线 的 互 操 作 网 络, 由 个 人 电 脑 家 用 电 器 和 移 动 设 备 组 成, 在 家 庭 内 部 实 现 设 备 互 联 和 网 络 控 制, 从 而 可 以 影 音 娱 乐 内 容 共 享 [1] UPnP 组 成 包 括 设 备 节 点, 服 务 节 点 和 控 制 点 在 UPnP 网 络 中, 最 小 的 可 控 制 单 位 是 服 务, 采 用 一 系 列 的 状 态 变 量 来 描 述 服 务 的 行 为 和 状 态 UPnP 使 用 各 种 现 存 的 标 准 协 议 [2], 包 括 TCP/IP HTTP HTTPU SSDP GENA 使 用 这 些 标 准 化 的 协 议 保 证 了 各 种 设 备 间 的 互 操 作 性 总 之,UPnP 是 建 立 在 各 种 协 议 之 上, 而 不 是 API 上, 这 使 其 能 够 应 用 在 各 种 不 同 的 平 台 上 同 时, 它 也 是 建 立 在 各 种 现 存 的 标 准 之 上, 具 备 很 大 的 灵 活 性, 可 以 很 好 地 适 应 现 在 和 将 来 各 种 网 络 设 备 的 需 求 1 UPnP 媒 体 播 放 器 设 计 的 基 本 思 想 1.1 功 能 描 述 UPnP 网 络 媒 体 播 放 器 可 以 提 供 从 网 络 中 获 取 的 各 种 娱 乐 信 息, 它 允 许 控 制 点 对 其 进 行 控 制 此 外, 根 据 所 支 持 协 议 的 不 同, 播 放 器 也 可 以 提 供 对 数 据 流 进 行 控 制 的 功 能 一 个 标 准 的 UPnP 网 络 媒 体 播 放 器 可 以 包 含 3 项 服 务 : 播 放 控 制 服 务, 连 接 管 理 服 务 和 媒 体 传 输 服 务 任 何 媒 体 播 放 器 都 至 少 要 提 供 两 种 服 务 [3] : 播 放 控 制 服 务 和 连 接 管 理 服 务, 至 于 媒 体 传 输 服 务 则 是 可 选 的, 它 取 决 于 设 备 所 支 持 的 传 输 协 议 本 设 计 使 用 的 协 议 是 HTTP GET, 就 能 提 供 媒 体 传 输 这 一 服 务, 因 而 2009 05 31
系 统 与 方 案 可 以 在 数 据 传 输 过 程 中 对 数 据 流 进 行 控 制 1.2 过 程 描 述 媒 体 播 放 器 可 以 经 由 控 制 点, 在 局 域 网 内 对 媒 体 服 务 器 所 提 供 的 媒 体 进 行 播 放 控 制 程 如 下 : 媒 体 服 务 器 媒 体 播 放 器 控 制 节 点 三 者 的 互 动 过 控 制 节 点 使 用 SSDP 协 议 在 局 域 网 内 发 现 一 个 或 多 个 媒 体 服 务 器 和 媒 体 播 放 器, 首 先 对 在 媒 体 服 务 器 上 的 资 源 进 行 定 位, 并 且 需 要 明 确 在 服 务 器 和 播 放 器 之 间 传 输 数 据 所 需 要 的 协 议 和 它 们 都 支 持 的 数 据 格 式, 在 这 些 传 输 参 数 都 被 确 定 后, 控 制 点 就 可 以 对 传 输 的 内 容 进 行 控 制, 如 播 放, 暂 停, 停 止 等 真 正 的 数 据 传 输 是 在 服 务 器 和 媒 体 播 放 器 之 间 直 接 进 行 的, 并 且 独 立 于 控 制 点, 因 此 不 包 含 在 UPnP 内 也 就 是 说, 内 容 的 传 输 是 使 用 UPnP 以 外 的 协 议 之 后, 控 制 点 使 用 媒 体 服 务 器 所 提 供 的 内 容 目 录 服 务 来 获 取 该 服 务 器 所 支 持 的 协 议 和 数 据 类 型, 使 用 媒 体 播 放 器 的 连 接 管 理 服 务 来 获 取 相 应 的 信 息, 比 较 后 选 定 双 方 都 支 持 的 传 输 协 议 和 数 据 类 型 在 本 设 计 中, 使 用 的 传 输 协 议 是 HTTP GET, 所 支 持 的 数 据 格 式 为 MP3 最 后, 控 制 节 点 使 用 媒 体 播 放 器 提 供 的 媒 体 传 输 服 务 来 对 数 据 流 进 行 控 制 2 UPnP 媒 体 播 放 器 的 实 现 方 法 本 设 计 使 用 Intel 公 司 的 开 源 UPnP 开 发 工 具 Device Builder [5], 在 Microsoft.NET Framework 下 开 发 Device Builder 生 成 的 UPnP 协 议 栈 由 MiniServer 模 块 HTTP 模 块 线 程 库 模 块 XML 解 析 模 块 以 及 协 议 栈 编 程 接 口 等 模 块 组 成 [6], 负 责 提 供 基 本 的 UPnP 功 能 [7], 具 体 的 实 现 流 程 如 下 2.1 生 成 UPnP 框 架 使 用 Device Builder 生 成 相 应 平 台 上 的 代 码, 由 于 我 们 是 在 Microsoft.NET Framework 下 开 发, 所 以 选 择 的 Target Platform 应 为 :Windows 98,NT,XP 具 体 功 能 有 [7] : 寻 址 功 能 发 现 功 能 描 述 功 能 控 制 功 能 发 布 事 件 以 上 各 功 能 组 合 在 一 起, 为 媒 体 播 放 器 提 供 了 UPnP 能 力, 但 Intel 的 开 发 包 生 成 的 仅 仅 是 一 个 框 架, 还 要 为 其 添 加 解 码 功 能 控 制 功 能 对 播 放 列 表 的 识 别 功 能 等 2.2 添 加 媒 体 解 码 库 下 载 一 个 开 源 的 播 放 器, 将 其 改 造 成 媒 体 解 码 库 即 将 播 放 器 的 功 能 抽 象 成 函 数 以 供 外 界 调 用, 主 要 函 数 如 下 : int decodestart(char *pbuffer): 调 用 该 函 数 开 始 播 放, 相 当 于 原 来 播 放 器 的 play 功 能 pbuffer 是 一 个 公 共 缓 冲 区, 存 放 已 下 载 的 媒 体 数 据 extern void Read(int *position): 负 责 向 公 共 缓 冲 区 中 装 入 已 下 载 的 媒 体 数 据,position 指 针 则 对 应 于 公 共 缓 冲 区 中 应 该 装 入 的 位 置 由 于 一 般 而 言 下 载 的 速 度 远 大 于 解 码 的 速 度, 所 以 应 注 意 装 入 新 数 据 时 不 要 将 尚 未 解 码 的 数 据 覆 盖 掉 extern void Decode(int *DPosition): 当 外 界 调 用 该 函 数 时 开 始 解 码,Dposition 则 指 示 了 对 应 于 公 共 缓 冲 区 的 解 码 的 位 置 此 外 还 有 pause resume stop 等 函 数, 均 对 应 于 原 播 放 器 的 相 应 功 能 将 已 实 现 的 媒 体 解 码 库 添 加 入 生 成 的 UPnP 框 架, 再 在 UPnP 框 架 中 相 应 的 位 置 对 库 文 件 中 的 函 数 进 行 调 用 以 实 现 解 码 播 放 控 制 2.3 播 放 控 制 功 能 实 现 在 将 媒 体 解 码 库 添 加 进 来 后, 还 需 添 加 的 有 : 数 据 流 实 时 控 制 能 力 根 据 播 放 器 的 状 态 发 布 消 息 详 细 过 程 如 下 : 2.3.1 设 置 传 输 地 址 当 控 制 节 点 从 媒 体 服 务 器 选 定 了 一 首 歌 时, 则 触 发 了 设 置 传 输 地 址 ( 由 媒 体 传 输 服 务 提 供 ) 这 一 动 作 这 时, 如 果 播 放 器 正 在 播 放, 我 们 首 先 要 停 止 播 放 器 的 解 码 动 作, 为 新 歌 曲 的 播 放 作 准 备 接 下 来, 在 播 放 器 获 得 了 所 选 定 歌 曲 的 地 址 后 ( 由 控 制 节 点 提 供 ), 就 直 接 从 媒 体 服 务 器 中 下 载 这 首 歌 曲, 在 此 项 目 中, 播 放 器 采 用 HTTP GET 下 载 在 下 载 前, 我 们 还 需 要 对 该 URL 进 行 判 断, 看 看 下 载 的 是 32 信 息 通 信 技 术
不 是 播 放 列 表, 如 果 是 播 放 列 表 的 话, 就 不 能 将 其 直 接 传 给 播 放 器, 而 是 要 继 续 从 播 放 列 表 提 供 的 地 址 中 得 到 第 一 首 歌 的 URL, 再 从 媒 体 服 务 器 中 下 载, 最 后, 调 用 函 数 SetLastChange 来 发 布 自 己 的 状 态 信 息 2.3.2 数 据 流 实 时 控 制 在 下 载 的 大 小 达 到 一 定 长 度 时, 触 发 传 输 控 制 服 务 中 的 Play 这 一 动 作, 这 时, 主 线 程 创 建 了 一 个 解 码 线 程, 该 线 程 调 用 媒 体 解 码 库 中 的 decodestart(char *pbuffer) 函 数 对 存 放 在 公 用 缓 冲 区 中 的 数 据 进 行 解 码 并 播 放 并 且 要 进 行 同 步 控 制, 以 免 当 网 络 出 现 拥 塞 或 系 统 中 内 存 不 够 时, 缓 冲 区 中 的 播 放 指 针 超 过 下 载 指 针 而 导 致 意 外 如 果 选 定 的 是 含 有 多 首 歌 曲 的 播 放 列 表, 则 过 程 类 似, 只 不 过 在 一 首 歌 曲 播 放 完 毕 时 会 自 动 从 媒 体 服 务 器 端 下 载 另 一 首 歌 曲, 一 边 下 载, 一 边 播 放 当 用 户 点 击 next previous 时, 我 们 首 先 检 查 之 前 保 存 的 URL 是 不 是 播 放 列 表, 如 果 不 是, 则 输 出 错 误 信 息 ; 如 果 是 的, 则 停 止 播 放 器 的 解 码 动 作, 撤 销 当 前 解 码 线 程, 为 新 歌 的 播 放 作 准 备 由 播 放 列 表 得 到 下 一 首 歌 的 地 址 和 端 口 号, 开 始 下 载 数 据, 并 创 建 新 的 解 码 线 程, 最 后, 发 布 状 态 信 息 所 有 的 实 际 操 作, 如 play stop pause 均 与 UPnP 无 关, 它 只 是 起 到 一 个 消 息 传 递 者 的 作 用 控 制 节 点 负 责 接 收 命 令, 传 递 给 播 放 器, 再 由 播 放 器 中 的 媒 体 解 码 库 完 成 解 码 播 放 暂 停 停 止 等 功 能 媒 体 服 务 器 控 制 节 点 媒 体 播 放 器 的 互 动 如 图 1 [8] 所 示 : 3 测 试 与 分 析 系 统 开 发 完 成 后, 在 两 台 同 处 于 一 个 局 域 网 的 台 式 机 上 进 行 了 测 试, 测 试 流 程 如 下 : 首 先 在 一 台 机 上 启 动 IntelUPnP 工 具 集 中 的 AVWizard[3] 程 序, 这 个 程 序 其 实 就 是 媒 体 服 务 器 和 控 制 节 点 的 合 体, 它 既 能 提 供 媒 体 服 务 器 的 各 种 功 能, 也 可 以 提 供 控 制 点 的 功 能 在 另 一 台 机 上 启 动 媒 体 播 放 器,AV Wizard 首 先 会 扫 描 网 络 中 有 没 有 它 所 支 持 的 设 备, 发 现 媒 体 播 放 器 后, 获 得 该 播 放 器 的 设 备 描 述 文 档, 并 显 示 播 放 器 的 名 称 用 AVWizard 选 定 一 首 MP3, 并 将 地 址 发 送 给 指 定 的 媒 体 播 放 器 (UPnP MediaRender) 播 放 器 开 始 从 媒 体 服 务 器 指 定 的 地 址 下 载 MP3, 下 载 到 一 定 长 度 时 开 始 播 放, 详 细 过 程 描 述 如 下 图 1 工 作 流 程 图 由 图 2 可 知, 当 AVWizard 选 定 一 首 歌 曲 时, 播 放 器 输 出 为 : Invoke: UPnPAVTransport_ SetAVTransportURI..., 触 发 了 播 放 器 中 媒 体 传 输 服 务 中 的 设 置 传 输 地 址 这 一 动 作, 告 诉 播 放 器 所 需 下 载 的 媒 体 所 在 的 URL 和 端 口 号, 接 着 在 AV Wizard 中 点 击 play 时, 可 以 看 到 图 3 中 播 放 器 输 出 为 : Invoke: UPnPAVTransport_Play(0,1), 触 发 了 播 放 器 媒 体 传 输 服 务 中 的 play 动 作, 开 始 对 要 播 放 的 内 容 下 载, 同 时, 播 放 器 开 始 创 建 解 码 线 程, 输 出 :Create thread success!! 则 表 示 解 码 线 程 创 建 成 功, 在 该 解 码 线 程 中 调 用 媒 体 解 码 库 中 的 函 数 媒 体 解 码 库 出 : The main 2009 05 33
process start player init, 初 始 化 媒 体 解 码 库, 解 码 并 开 始 播 放 音 乐 所 需 添 加 的 服 务 上, 不 用 再 关 注 繁 琐 的 协 议 通 信 细 节, 简 化 了 UPnP 应 用 的 设 计 开 发 ; 但 缺 点 是, 由 于 目 前 业 系 统 与 方 案 图 2 播 放 器 截 图 1 图 3 播 放 器 截 图 2 4 结 束 语 由 此 可 见, 该 媒 体 播 放 器 实 现 成 功, 但 不 足 之 处 在 于 : 由 于 直 接 在 Intel 公 司 开 源 UPnP 开 发 工 具 Device Builder 生 成 的 代 码 上 进 行 开 发, 所 以 界 面 不 够 友 好 但 其 创 新 点 有 : 1) 直 接 在 Intel 生 成 的 UPnP 框 架 上 进 行 开 发, 与 现 有 的 许 多 使 用 开 源 UPnP SDK 来 开 发 相 比, 无 需 进 行 设 备 初 始 化 和 注 册 工 作, 亦 无 需 对 UPnP 的 工 作 过 程 进 行 手 动 操 作, 使 得 开 发 者 的 注 意 力 可 以 完 全 集 中 在 界 还 有 许 多 SDK 开 发 包 具 有 类 似 的 功 能, 直 接 使 用 生 成 的 UPnP 框 架 不 利 于 按 需 更 换 协 议 库 2) 可 在 不 同 的 操 作 系 统 上 生 成 相 应 的 协 议 框 架, 这 就 屏 蔽 了 开 发 平 台 的 差 异, 方 便 开 发 人 员 在 合 适 的 平 台 上 实 现 所 需 的 服 务 3) 服 务 本 身 也 可 以 作 为 模 块 添 加 入 应 用 程 序 中, 如 本 文 中 的 媒 体 解 码 库 就 是 作 为 一 个 独 立 的 模 块 添 加, 实 现 了 松 散 耦 合 的 应 用 程 序 和 组 件, 使 得 可 以 根 据 不 断 变 化 的 情 况 和 需 求 来 实 现 服 务, 为 媒 体 播 放 器 的 功 能 扩 展 提 供 了 很 好 的 基 础 34 信 息 通 信 技 术
参 考 文 献 [5] 导 刊,2008,5:63-64 MediaRenderer V 1.0[EB/OL].[2009-03-05]. [1] 张 群 哲, 吴 庆 波. 基 于 UPnP 的 数 字 家 庭 研 究 [J]. 计 ahttp://www.upnp.org/standardizeddcps/ 算 机 工 程 与 科 学,2007,5:130-134 mediaserver.asp, June 25,2002 [2] [3] Understanding UPnP:A White Paper[EB/ OL].[2009-03-05].http://www.upnp.org/ resources/whitepapers.asp,(june 2000) Intel Tools for UPnP Technologies [EB/OL]. [2009-03-05].http://www.intel.com/cd/ids/ developer/asmo-na/eng/downloads/upnp/ [6] [7] [8] 严 华, 蔡 蕴 文. 基 于 Linux 的 UPnP 协 议 栈 结 构 分 析 及 其 在 嵌 入 式 通 信 系 统 中 的 应 用 研 究 [J]. 四 川 大 学 学 报 ( 自 然 科 学 版 ),2007,44:321-323 李 平 均, 申 健. 基 于 UPnP 的 AV 体 系 结 构 的 设 计 与 实 现 [J]. 计 算 机 工 程 与 设 计,2007,14:3521-3525 UPnP Device Architecture version 1.1[EB/ overview/index.htm, August 13, 2007 OL].[2009-03-05]http://www.upnp.org/ 童 德. 基 于 UPnP 协 议 的 媒 体 服 务 器 的 实 现 [J]. 软 件 resources/documents.asp, October 15, 2008 作 者 简 历 张 齐 华 南 理 工 大 学 计 算 机 科 学 与 工 程 学 院 副 教 授, 主 要 从 事 智 能 控 制 信 息 处 理 监 控 软 件 方 面 研 究 胡 佳 硕 士 研 究 生, 主 要 从 事 智 能 信 息 处 理 及 网 络 安 全 方 面 研 究 Research on the Implementation of Media Player Based on UPnP Zhang Qi Hu Jia School of Computer Science and Engineering, South China University of Technology, Guangdong 510006, China Abstract UPnP is a main protocol in the modern digital family. It implements zero-configuration, which saves the cost to setup the network, and establishes a series of criterion for the connection, discovery and service description of digital devices. This paper introduces the architecture of UPnP protocol, describes the methodology of designing an UPnP media player, presents further details of the UPnP media player, tests and analyses the media player system. Finally, the limits of other projects are pointed out and solutions of our scheme are given. Keywords UPnP; Network Device; Media Render; Digital Family 2009 05 35