当前位置: 首页 > 编程日记 > 正文

Microsoft PlayReady DRM

支持在 Web 浏览器中使用加密媒体扩展和 Microsoft PlayReady DRM

万维网联合会 (W3C) HTML5 加密媒体扩展 (EME) 为网站引入了一项功能,可在不使用插件的情况下播放受数字版权管理 (DRM) 保护的内容。Windows 8.1 上的 Internet Explorer 11 支持结合使用 EME 和 Microsoft PlayReady DRM。 本指南介绍了其他浏览器如何在 Windows 8.1 上采用类似方式启用 Microsoft PlayReady DRM 播放。

该信息适用于以下操作系统:

  • Windows 8.1

简介

浏览器中的 DRM

有一段时间浏览器可以播放受 DRM 保护的内容,最常见的方式是支持启用 DRM 的 Adobe Flash 或 Microsoft Silverlight 版本。 这些组件过去作为浏览器插件提供。 它们(及其基础媒体平台)过去用于标准化媒体管道并为最终用户免费提供插件播放。

插件可以限制与 Web 内容兼容的设备,这样可支持 HTML 扩展,这些扩展允许浏览器直接支持丰富的功能,并减少对插件组件的需求。 上一个示例中添加了渐进式播放 HTML5 中添加的媒体内容。 这样允许浏览器直接播放媒体文件,不需要使用任何媒体播放器插件。 现在,新的规范已定义 HTML 功能,这些功能允许自适应流式播放受 DRM 保护的媒体。

随着 Windows 8.1 的发布,IE11 支持高级 HTML 流式传送扩展。 使用这些新扩展,Internet Explorer 可以在受到大范围的网络和系统约束下播放多种来源的高级视频内容,无须使用浏览器插件。 Windows 8.1 设计使用 Microsoft PlayReady DRM,并适用于传统桌面和新体验桌面浏览器版本。

两个 W3C Web 规范支持在 Windows 8.1 上的 IE11 中使用以下新功能:

  • 媒体源扩展:此规范定义支持自适应流式传送的 HTMLMediaElement 扩展。 它允许 JavaScript 为音频和视频元素动态构造流,方法是将分段附加到媒体 sourceBuffer。 JavaScript 可以实现自适应流式处理,方法是调整这些附加分段的质量级别以响应一系列的网络或媒体渲染瓶颈。
  • 加密媒体扩展:此规范定义支持内容保护系统的 HTMLMediaElement 扩展。 它允许标识浏览器支持的保护技术,并且为密钥交换定义支持播放受 DRM 保护媒体的方法。

如果在 Web 浏览器中组合使用自适应流式处理和 DRM 播放功能,则允许使用高级媒体消耗体验,该体验得到 Web 服务器发布的 JavaScript 的完全支持,并且可能由适用于所有设备种类的可互操作浏览器解决方案进行托管。

IE11 支持 Microsoft PlayReady DRM 的媒体源扩展和加密媒体扩展。 本指南的作用是提供其他浏览器实现 Windows 8.1 上运行的浏览器中类似功能所需的信息。

Microsoft PlayReady DRM

Microsoft PlayReady 是一个数字版权管理 (DRM) 系统,它提供了对多种设备和计算机的支持。 它采用以下几种方式支持:

  • Microsoft PlayReady 移植工具包:提供了可轻松部署的实现方法和源代码,允许在任一设备(不论操作系统如何)上都支持 Microsoft PlayReady 客户端。
  • Microsoft PlayReady 许可证服务器:用于托管颁发受 DRM 保护内容播放许可证所需的许可证服务。

还有一个 Microsoft PlayReady PC 软件开发工具包 (SDK),用于为具有 DRM 功能的传统 Windows 应用程序提供 Windows 桌面运行时。 此 SDK 仍然处于活动状态,但不是 IE11 用于实现 Microsoft PlayReady 支持的方法。

新的应用模型首次在 Windows 8 中发布时,还发布了 Microsoft PlayReady AppX 框架。 它支持从 Windows 应用商店下载应用,并且与其他预安装的应用一起暂存,以便成为 Windows 8 和之后强大系统上首次运行体验的一部分。

Windows 8.1 中的 IE11 会利用暂存 Microsoft PlayReady 框架的优势。 它虽然不是 Windows 组件(它在单独的进程中开发和编译),但是可用于所有启用媒体的 Windows SKU,因此可供 Windows 8.1 上运行的新体验浏览器使用。

加密媒体扩展 CDM

加密媒体扩展 (EME) 规范定义了内容解密模型 (CDM),该模型将通用 EME API 转换为特定 DRM 解决方案可能需要的特定数据交换。 该操作允许一般化 EME,从而将系统特定方面留给 CDM 处理。

Windows 8.1 应用使用的 Microsoft PlayReady 框架包含 CDM 功能。 并且设备的 Microsoft PlayReady 移植工具包中还包含了 CDM 接口支持。 如果使用 Windows 8.1 系统框架和其他设备的启用 CDM 的移植工具包,则允许 Microsoft PlayReady 支持大量系统和设备上运行的浏览器。

此指南的目标是仅详细介绍此 CDM 支持的 Windows 8.1 方面。

实现方法

概述

过去,在 Microsoft PlayReady SDK 上为 Windows 构建的应用负责授权该技术、符合严格的媒体管道要求,以确保以解密的形式一次性保护媒体,并且这些应用还具备与其 Microsoft PlayReady 许可证关联的金融义务。 为 Windows 8 开发的 Microsoft PlayReady 框架(现在已针对 Windows 8.1 使用 EME/CDM 支持扩展)为选择使用它的应用提供了强劲优势:

  • 已授予技术:如此这样,就不需要使用单独的许可证。 应用将构建在公开记录的 API 上并提供启用 Microsoft PlayReady 且无其他授权的系统。
  • 已保护媒体管道的安全:Microsoft PlayReady 框架使用 Microsoft 媒体基础实现的媒体服务,并且此管道已构建并认证符合 DRM 要求。 应用免费使用此管道,不需要任何其他认证(或根据设计变化重新认证)。

IE11 中的 EME 实现方法使用特别为 EME 支持构建的更新媒体基础 API。 这是为 Windows 8.1(和以后版本)上运行的其他浏览器(桌面和新体验)推荐的实现方法。

技术说明
使用 MF 实现浏览器 MSE/EME API新的媒体基础 API 直接映射到 W3C MSE 和 EME 标准中介绍的 API。
附加 IMFMediaSourceExtension 对象将 MSE API 映射到其 MF 等效后,浏览器必须将 IMFMediaSourceExtension 对象附加到元素中。
PlayReady AppX 框架AppX 框架通常会基于应用清单中声明的依存关系进行注册。 对于新体验桌面浏览器,在用户第一次登录时会自动执行此操作。
支持 In PrivateInternet Explorer 分离 Microsoft PlayReady 许可证存储用于 In Private 并在 In Private 会话结束时删除该存储。 这样会删除可能已在 In Private 会话过程中存储的许可证。
支持选项卡挂起选项卡挂起将新体验浏览器上的选项卡分成单独的进程,并允许 Microsoft WindowsWindows 中的电源管理功能管理哪些选项卡在后台保持活动状态和挂起哪些选项卡可改进浏览器电源配置文件。 选项卡挂起具有特定的实现方法要求,浏览器必须符合这些要求才能保证媒体体验正常运行。

媒体基础 API

若要支持 Microsoft PlayReady EME,浏览器必须将 MSE 和 EME API 实现到其媒体基础等效。 媒体基础 API 已直接映射到 EME,如下图所示:

显示了 IE UA 和 MF 媒体引擎为主要系统 CDM 提供 API 和管理对象

使用 API 映射,可以直接在 MSE/EME 功能上构建 Microsoft Win32 桌面应用程序,并且还允许第三方浏览器实现这些功能。 下表列出了与 EME 接口对应的特定媒体基础 MediaEngine API:

下表显示了从 MSE(采用 JavaScript)映射到媒体基础 MediaEngine(采用 C++)的 API。

JavaScript (MSE)MFMediaEngine C++

[构造函数]

IMFMediaEngineClassFactoryEx::CreateMediaSourceExtension

MediaSource

IMFMediaSourceExtension

MediaSource.sourceBuffers

IMFMediaSourceExtension::GetSourceBuffers

MediaSource.activeSourceBuffers

IMFMediaSourceExtension::GetActiveSourceBuffers

MediaSource.readyState

IMFMediaSourceExtension::GetReadyState

MediaSource.duration

IMFMediaSourceExtension::GetDuration

IMFMediaSourceExtension::SetDuration

MediaSource.addSourceBuffer

IMFMediaSourceExtension::AddSourceBuffer

MediaSource.removeSourceBuffer

IMFMediaSourceExtension::RemoveSourceBuffer

MediaSource.endOfStream

IMFMediaSourceExtension::SetEndOfStream

MediaSource.isTypeSupported

IMFMediaSourceExtension::IsTypeSupported

SourceBuffer

IMFSourceBuffer

SourceBuffer.updating

IMFSourceBuffer::GetUpdating

SourceBuffer.buffered

IMFSourceBuffer::GetBuffered

SourceBuffer.timestampOffset

IMFSourceBuffer::GetTimeStampOffset

IMFSourceBuffer::SetTimeStampOffset

SourceBuffer.audioTracks

媒体基础中无等效

SourceBuffer.appendWindowStart

IMFSourceBuffer::GetAppendWindowStart

IMFSourceBuffer::SetAppendWindowStart

SourceBuffer.appendWindowEnd

IMFSourceBuffer::GetAppendWindowEnd

IMFSourceBuffer::SetAppendWindowEnd

SourceBuffer.appendBuffer(ArrayBuffer data)

IMFSourceBuffer::Append

SourceBuffer.appendBufferArrayBufferView data)

IMFSourceBuffer::Append

SourceBuffer.appendStream

IMFSourceBuffer::AppendByteStream

SourceBuffer.abort

IMFSourceBuffer::Abort

SourceBuffer.remove

IMFSourceBuffer::Remove

SourceBufferList

IMFSourceBufferList

SourceBufferList.length

IMFSourceBufferList::GetLength

getter SourceBuffer

IMFSourceBufferList::GetSourceBuffer

VideoPlaybackQuality

IMFMEdiaEngineEx::GetStatistics

VideoPlaybackQuality.creationTime

无媒体基础等效

VideoPlaybackQuality.totalVideoFrames

MF_MEDIA_ENGINE_STATISTIC_FRAMES_RENDERED + MF_MEDIA_ENGINE_STATISTIC_FRAMES_DROPPED

这些标记在 MF_MEDIA_ENGINE_STATISTIC 中定义

VideoPlaybackQuality.droppedVideoFrames

MF_MEDIA_ENGINE_STATISTIC_FRAMES_DROPPED

此标记在 MF_MEDIA_ENGINE_STATISTIC 中定义。

VideoPlaybackQuality.totalFrameDelay

MF_MEDIA_ENGINE_STATISTIC_TOTAL_FRAME_DELAY

此标记在 MF_MEDIA_ENGINE_STATISTIC 中定义。

DOMString URL.createObjectURL(MediaSource mediaSource)

媒体基础中无等效

HTMLVideoElement .getVideoPlaybackQuality

请参阅以上的 VideoPlaybackQuality 说明

AudioTrack.kind

无媒体基础等效

AudioTrack.language

IMFMediaEngineEx::GetStreamAttribute

注意,将 MF_SD_LANGUAGE 作为 guidMFAttribute 参数的值传递。

AudioTrack.sourceBuffer

IMFMediaSourceExtension::GetSourceBuffer

Events by target

MediaSource.sourceopen

IMFMediaSourceExtensionNotify

MediaSource.sourceended

IMFMediaSourceExtensionNotify::OnSourceEnded

MediaSource.sourceclose

IMFMediaSourceExtensionNotify::OnSourceClose

SourceBuffer.updatestart

IMFSourceBufferNotify::OnUpdateStart

SourceBuffer.update

IMFSourceBufferNotify::OnUpdate

SourceBuffer.updateend

IMFSourceBufferNotif::OnUpdateEnd

SourceBuffer.error

IMFSourceBufferNotify::OnError

SourceBuffer.abort

IMFSourceBufferNotify::OnAbort

SourceBufferList.addsourcebuffer

IMFBufferListNotify::OnAddSourceBuffer

SourceBufferList.removesourcebuffer

IMFBufferListNotify::OnRemoveSourceBuffer

下表显示了从 EME(采用 JavaScript)映射到媒体基础 MediaEngine(采用 C++)的 API。

JavaScript (MSE)MFMediaEngine C++

HTMLMediaElement.msKeys

IMFMediaEngineEME::get_Keys

HTMLMediaElement.msSetMediaKeys

IMFMediaEngineEME::SetMediaKeys

onmsneedkey

[构造函数]

IMFMediaEngineClassFactory2::CreateMediaKeys2

MSMediaKeys

IMFMediaKeys

MSMediaKeys.keySystem

IMFMediaKeys::get_KeySystem

MSMediaKeys.createSession

IMFMediaKeys::CreateSession

MSMediaKeys.isTypeSupported

IMFMediaEngineClassFactoryEx::IsTypeSupported

IMFMediaKeys::GetSuspendNotify

IMFMediaKeys::Shutdown

MediaKeySession

IMFMediaKeySession

MediaKeySession.error

IMFMediaKeySession::GetError

MediaKeySession.keySystem

IMFMediaKeySession::get_KeySystem

MediaKeySession.sessionId

IMFMediaKeySession::get_SessionId

MediaKeySession.update

IMFMediaKeySession::Update

MediaKeySession.close

IMFMediaKeySession::Close

HTMLSourceElement.keySystem

IMFMediaEngineSrcElementsEx::GetKeySystem

事件接口增项

MediaKeyMessageEvent

等效于 IMFMediaKeySessionNotify

MediaKeyMessageEvent.message

MediaKeyMessageEvent.destinationURL

MediaKeyNeededEvent

等效于 IMFMediaEngineNeedKeyNotify

MediaKeyNeededEvent.initData

事件

keyadded

IMFMediaKeySessionNotify::KeyAdded

keyerror

IMFMediaKeySessionNotify::KeyError

keymessage

IMFMediaKeySessionNotify::KeyMessage

msneedkey

IMFMediaEngineNeedKeyNotify::NeedKey

IMFMediaSourceExtension 对象

将 MSE API 映射到其媒体基础等效后,浏览器必须将 IMFMediaSourceExtension 对象附加到元素中。 执行此操作的一个方法如下:

  1. 根据 W3C MSE 标准实现 URL.createObjectURL (MediaSource mediaSource)。

  2. 将 MediaSource 对象 URL 设置为媒体元素的源后,通过 IMFMediaEngine::SetSource 方法将 URL 传递到媒体基础。

  3. 创建媒体引擎的实例时,通过在传递到 IMFMediaEngineClassFactory::CreateInstanceIMFAttributes 存储上设置 MF_MEDIA_ENGINE_EXTENSION 属性来传递实现 IMFMediaEngineExtension 的对象。

  4. 实现 IMFMediaEngineExtension 以致使用 type=MF_OBJECT_MEDIASOURCE 和 MediaSource URL 调用 BeginCreateObject 时会导致通过提供的回调异步返回关联的 IMFMediaSourceExtension 实例。

PlayReady AppX 框架

四个框架会暂存在 Windows 8.1 中。 x86 和 amd64 变体成对出现。 另外,如果要与 Windows 8 Windows 应用商店应用兼容,则需要使用为其保持的特定版本(在系列名称 Microsoft.Media.PlayReadyClient 下)以及使用所添加 EME 功能提供的新版本。

AppX PackageManager 跟踪 AppX 框架上的应用依存关系。 这些框架通常在应用清单中声明,但新体验浏览器会作为桌面应用构建且没有清单选项。 它们必须明确引用框架以通知程序包管理器框架具有需要安装该框架的桌面应用。 这样可确保程序包管理器会保持框架的活动状态,即便需要使用该框架的所有 Windows 8 Windows 应用程序应用都已被删除。

AppX 框架通常会限制为仅供 Windows 应用商店应用使用。 在 Windows 8.1 中,Microsoft PlayReady 应用包可供桌面或新体验桌面浏览器使用。 如果浏览器使用媒体基础 API 实现 EME,则会自动出现此情形。

InPrivate 浏览

IE11 删除了在 In Private 浏览会话过程中获取的 Microsoft PlayReady 许可证。 建议实现 EME 的其他浏览器执行此尝试。

使用新的 Microsoft PlayReady 框架,应用可以为任何会话指定许可证存储位置(也称为确立数据存储或 HDS)。 此默认 HDS 还特定于使用框架的应用,以便其中存储的许可证可由应用隔离。 默认 HDS 还包含 Indiv 数据和可以获取的所有永久性许可证。 鉴于此原因,Microsoft 建议不要删除该 HDS。

IE11 将默认 HDS 用于常规 EME 会话,并且使用 Microsoft PlayReady HDS 路径功能为 In Private 浏览指定单独的 HDS。 这样允许删除 In Private HDS,并且不会对 Indiv 数据或永久性许可证造成任何影响。

浏览器可以使用 cdmStorePath 的可选 IMFMediaEngineClassFactory2::CreateMediaKeys2 参数执行相同的操作来指定 Microsoft PlayReady CDM 的目录路径。

HRESULT CreateMediaKeys2(  [annotation("_In_")] BSTR keySystem,  [annotation("_In_")] BSTR defaultCdmStorePath,  [annotation("_In_opt_")] BSTR inprivateCdmStorePath,  [annotation("_COM_Outptr_")] IMFMediaKeys **ppKeys  );

当 In Private 会话结束时,Windows Internet Explorer 会删除整个 cdmStorePath 目录。这表示 In Private 过程中存储的所有永久性许可证都会被删除。

选项卡挂起

IE11 实现选项卡挂起以在用户使用浏览器时帮助最小化电源消耗。

使用选项卡挂起,可针对后台操作单独管理浏览器选项卡。 使用选项卡挂起,Windows 可在浏览器打开多个选项卡时管理 CPU 需求。

某些主要系统要求先通知,然后挂起,包括 Microsoft PlayReady。 挂起选项卡之前,浏览器应为选项卡中运行的每个唯一主要系统执行以下步骤:

  1. 为框架进程中的主要系统创建新的媒体密钥实例。

  2. 调用 IMFMediaKeys::GetSuspendNotify 可检索主要系统的挂起处理程序。 主要系统可以在不许要使用挂起处理程序时返回 HRESULT E_NOTIMPL

  3. 在挂起选项卡之前,请调用 IMFCdmSuspendNotify::Begin。 如果挂起处理程序返回除 S_OK 之外的任何内容,则中止选项卡挂起,然后在几分钟后重试。

  4. 挂起选项卡之后,请调用 IMFCdmSuspendNotify::End

  5. 发布由框架进程创建的挂起处理程序和媒体密钥。

转载于:https://www.cnblogs.com/roland1982/p/3489367.html

相关文章:

Android Binder概述

背景知识为了更好的理解binder,我们要先澄清一下概念,因为Android 基于Linux内核,我们有必要了解相关知识。进程隔离进程隔离是为了保护操作系统进程之间互不干扰而设计的,这个技术是为了避免进程A写入进程B准备的,进程…

如何用Asp判断你的网站的虚拟物理路径

appath方法 < p align"center" > < font size"4" face"Arial" > < b > The Physical path to this virtual website is: < /b > < /font > < font color"#FF0000" size"6" face"Aria…

总结:SQL的优缺点及与NoSQL对比

SQL在这里指的是关系型数据库&#xff0c;NoSQL指元组存储&#xff1f;

关于成功的因素-----谨记

引导语&#xff1a;一个人生活的环境&#xff0c;对他树立理想和取得成就有着重要的影响。坚忍&#xff0c;是成大事者的共同特征。没有足够的知识储备&#xff0c;一个人难以在工作和事业中取得突破性进展&#xff0c;难以向更高地位发展。 【意志力】 意志力是一种…

最常用的Linux命令

基础命令&#xff1a; &#xff08;一&#xff09;cd&#xff1a;进入文件目录 cd / #进入Linux根目录 cd ~ #进入当前用户Home目录&#xff0c;例如root用户 cd .. #进入上一层目录(根目录下没有上一层)&#xff0c;…

Delphi数据库开发之TTable篇1

既然是说Delphi中的SQL使用&#xff0c;肯定离不开TDataSet派生出来的DataSet控件&#xff08;应该说类比较确切些&#xff09;&#xff0c;这里我说的DataSet只是一个大类的称呼&#xff0c;并不是特指实际的TDataSet。在众多控件中其实可以根据如何操作数据分为两类。 其中一…

大型数据库入门

本文介绍大型数据库的概念及其性能决定因素&#xff0c;以及如何优化性能。 什么是大型数据库 -没有一个标准定义 -包含非常多元组(数据库行)的数据库&#xff0c;或者占用非常大的物理文件系统存储空间的数据库。 -占据TB量级的磁盘存储&#xff0c;包含数十亿表行。为什么需…

php安装pear和phpunit

php安装pear和phpunit http://hi.baidu.com/zjutxujie/item/7b08761f922df7476926bb2c 安装pear 下载go-pear.phar&#xff0c;放到phproot/pear目录下&#xff0c;地址http://pear.php.net/go-pear.phar。 管理员身份运行cmd&#xff0c;打开phproot&#xff0c;运行php -d p…

ResNets和Inception的理解

ResNets和Inception的理解 ResNet解析

软件体系结构风格(第5-8课时)

摘要&#xff1a;本文给出软件体系结构风格的定义&#xff0c;并介绍几种常用风格&#xff1a;管道过滤器、数据抽象和面向对象组织&#xff0c;基于事件的隐式调用&#xff0c;分层系统&#xff0c;仓库系统&#xff0c;过程控制环路 软件体系结构风格是什么 描述特定系统组织…

C#中调用Windows API时的数据类型对应关系

C#中调用Windows API时的数据类型对应关系 原文 C#中调用Windows API时的数据类型对应关系 BOOLSystem.Int32 BOOLEANSystem.Int32 BYTESystem.UInt16 CHARSystem.Int16 COLORREFSystem.UInt32 DWORDSystem.UInt32 DWORD32System.UInt32 DWORD64System.UInt64 …

linux下安装db2

最近研究了一下在 ubuntu下安装db2的过程&#xff0c;很快就完成安装&#xff0c;特贴出来供大家讨论&#xff0c;如有错误请多多指教。 注意&#xff1a;安装过程请使用root用户&#xff0c;否则会出现安装失败的情况&#xff1b; 安装过程&#xff1a; 准备工作&#xff1a; …

使用 SAX 解析器简化文档处理程序的编写

http://www-900.ibm.com/developerWorks/cn/xml/x-dochan.shtml有时候 SAX 文档处理程序的代码可能变得非常麻烦、结构性差而且难以维护&#xff0c;尤其是对于那些包含多种不同元素的复杂 XML 结构。本文介绍了应对这种问题的设计策略&#xff0c;从而有助于改进代码的质量和可…

软件体系结构风格之C/S,三层C/S,与BS

C/S的物理结构&#xff0c;其发展历程为(1)->(3)->(2)&#xff0c;本文接下来要介绍的C/S为(3),即胖客户端瘦服务器,服务器只管数据库&#xff0c;接下来要介绍的三层C/S为(2)&#xff0c;即客户端不胖不瘦。 C/S软件体系结构 背景&#xff1a;基于资源不对等&#xff0…

HDU-2020

绝对值排序 Problem Description输入n(n<100)个整数&#xff0c;按照绝对值从大到小排序后输出。题目保证对于每一个测试实例&#xff0c;所有的数的绝对值都不相等。 Input输入数据有多组&#xff0c;每组占一行&#xff0c;每行的第一个数字为n,接着是n个整数&#xff0c;…

Java归去来第2集:利用Eclipse创建Maven Web项目

一、前言 如果还不了解剧情&#xff0c;请返回第一集的剧情 Java归去来第1集&#xff1a;手动给Eclipse配置Maven环境 二、利用Eclipse创建Maven Web项目 选择File-New-Project 然后选择Maven-Maven Project 选择项目所在的工作空间目录&#xff0c;然后下一步 选择模…

vs2005什么时候能出正式版

2005试用版本出了很久了&#xff0c;不知道什么时候能出正式版&#xff0c;不会真得要推迟到2005年吧。企盼中…… 转载于:https://www.cnblogs.com/playboy2005/archive/2004/09/22/45563.html

人工神经网络是如何实现存算一体的

摘要 本文内容如题。 下图是一个神经元模型 可以将其抽象为一个数学函数yf(w1x1w2x2…wn*xnb)。也就是这个模型同时涵盖输入输出和进行计算。

编码能力的提升?_20131228

我在编程过程中发现&#xff0c;编码也是一很重要的能力&#xff0c;故花一点时间对其进行思考。 现将思考的成果与各位同行分享&#xff1b;我希望大家在看到以后&#xff0c;能提供宝贵的意见&#xff0c;先谢之&#xff01; 转载于:https://www.cnblogs.com/uestc999/p/3495…

Microsoft PowerToys for Windows XP

它们又卷土重来了&#xff01;PowerToys是由开发人员在软件产品正式发布并投放生产后相继编制的附加程序。它们的出现不仅使Windows体验更加兴味盎然&#xff0c;而且&#xff0c;还为Windows系统平添了许多功能特性。 说明&#xff1a;我们已为确保PowerToys的正常运行而付出了…

mysql主从配置读写分离笔记

第二次回头看了&#xff0c;第一次学完后感觉都会了&#xff0c;回头再看才发现什么都想不起来了。还得查资料再学习&#xff0c;虽然很简单。还是做个笔记吧&#xff01;笔记有点糙 就是自己看的因为主要是测试主从和读写分离 所以直接 yum install -y mariadb mariadb-server…

通用软件测试的6个角度

之后的课程都会围绕此展开 以QQ邮箱为例 外观界面测试 页面外观背景颜色、字体、字体格式、页面图案、动画、窗体布局功能测试 输入正确的用户名和密码可以登录&#xff0c;其他都不可性能测试 输入完邮箱的用户名和密码并单击登录按钮后&#xff0c;用户等待多长时间可以登录…

easyui源码翻译1.32--Messager(消息窗口)

前言 使用$.messager.defaults重写默认值对象。下载该插件翻译源码 消息窗口提供了不同的消息框风格&#xff0c;包含alert(警告框), confirm(确认框), prompt(提示框), progress(进度框)等。所有的消息框都是异步的。用户可以在交互消息之后使用回调函数去处理结果或做一些自己…

新闻网站个人中心(查询用户的关注信息)流程分析

1.获取当前用户登录状态 2.获取参数 用户的id user_id 3.获取新闻作者的id 4.如果新闻作者id和用户id 5.返回内容给前端转载于:https://www.cnblogs.com/zxt-cn/p/9158860.html

物联网技术与应用(第1-2课时)(cont.)

物联网的定义&#xff1a; 通过射频识别&#xff08;RFID&#xff09;、红外感应器、全球定位系统、激光扫描器等信息传感设备&#xff0c;按约定的协议&#xff0c;将任何物品通过有线与无线方式与互联网连接&#xff0c;进行通信和信息交换&#xff0c;以实现智能化识别、定位…

db2 基础语法

一、db2 基础 基本语法 注释&#xff1a;“--”&#xff08;两个减号&#xff09; 字符串连接&#xff1a;“||” 如set msg’aaaa’||’bbbb’&#xff0c;则msg为’aaaabbbb’ 字符串的引用&#xff1a;‘’&#xff08;一定用单引号&#xff09;&#xff0c;如果需要输入单引…

Repeater分页代码

//ASP.NET中的DataList和Repeater提供了简单快速的方法來显示,其间&#xff0c;我们可以使用<ItemTemplate>更是使我们能随心所欲的控制数据的排放样式&#xff01; //.可惜的是它们不像Datagrid那样&#xff0c;有内置的分页功能。 // //如何解决呢&#xff1f; // //其…

消失,只为一个人存在……

好像很久很久没有24小时挂在网上了…… 每天收到的短消息来源越来越单一…… 在朋友中消失&#xff0c;所有的来电和消息&#xff0c;都不愿意理会…… 朋友虽然很重要&#xff0c;可是现在只想为一个人存在。 请各位好朋友原谅&#xff0c; 我就是那种重色轻友的人嘛…… 转载…

统一建模语言——UML(第9-20课时)(cont.)

文章目录UML概述UML是什么UML能做什么为什么要学UMLUML构造需求模型用例建模技术绘制用例图识别执行者识别用例检查形式关联关系编写用例文档用例文档的组成部分详细说明检查用例模型状态图定义组成元素复杂一点活动图定义作用组成元素绘制技巧例顺序图定义作用组成元素UML构造…

xunsearch 迅搜初探

2014年1月2日 19:34:12 1 [rootlocalhost bin]# ./php /usr/local/lamp/xunsearch/sdk/php/util/Quest.php demo "俗话说 OR pid:1"2 在 3 条数据中&#xff0c;大约有 2 条包含 俗话说 OR pid:1 &#xff0c;第 1-2 条&#xff0c;用时&#xff1a;0.0036 秒。3 4 1…