具体实施方式
本公开内容通常涉及源设备可以与宿设备进行通信的系统。源设备和宿设备可以支持无线通信。作为通信会话的一部分,源设备可以向宿设备发送音频和视频数据,宿设备可以将在宿设备处接收的用户输入发送回无线源设备。用这种方式,宿设备的用户可以控制源设备,以及控制正从源设备向宿设备发送的内容。
根据本公开内容的技术,带着计算设备(诸如蜂窝电话)的用户可以走进诸如办公室的环境,以及在该环境下使用具有连接的外围设备的阵列的宿设备,所述外围设备使用蜂窝电话作为他或者她的主要处理引擎。举一个例子,用户可以具有存储在蜂窝电话上的文件,以及可能希望在经由电子邮件发送这些文件之前,对这些文件进行编辑。但是,用户可以倾向于在具有较大的显示器和全尺寸键盘的台式计算机上执行这样的任务。除了键盘之外,台式计算机可以具有相关联的外围设备的群组,所述外围设备包括用户接口设备、存储设备、打印机和其它这样的外围设备。根据本公开内容的技术,用户可以使用台式计算机来运行蜂窝电话上的应用。用此方式,可以利用在台式计算机上操作的用户体验来向用户呈现,而大部分的处理是在蜂窝电话处发生的。在这样的操作环境中,为了使用户具有真正让人想起的桌面体验的用户体验,同时大部分的处理在电话上发生,电话可能需要能够与台式计算机的外围设备进行交互。
本公开内容的技术通过增加新的输入种类(其被称为“隧穿(tunneling)”种类),来将用户输入返回信道(UIBC)扩展成双向的,以实现在UIBC上的双向通信,所述UIBC还可以被称为用户输入信道(UIC)。因此,在一些实例中,本公开内容的技术可以给予用户能够访问他们的数据、以及多个宿设备的宿外围设备的阵列的便利。如将显而易见的,上面利用电话和台式机给出的特定例子,只是在其中可以使用本公开内容的技术的设备和环境的多个例子中的一个例子。
使用UIC,宿设备可以在源设备和以不可知的方式连接到宿设备的外围设备之间,发送和接收连接到宿设备的外围设备的数据。源设备可以安装有与宿设备相关联的外围设备的驱动程序,以便实现对从外围设备接收的数据的处理。在一些配置中,宿设备也可以安装有外围设备驱动程序,但是具有有限的能力。宿设备可以与外围设备进行交互,以及根据本公开内容中所描述的技术,对针对外围设备的数据进行封装和转发。源设备和宿设备可以使用基于实时流协议(RTSP)的控制过程,以协商和商定使用隧穿来支持特定的外围设备接口技术的外围数据的双向隧穿。源设备和宿设备还可以交换隧穿上下文信息,以识别每一个宿设备和连接到每一个宿设备的外围设备。源设备和宿设备可以对UIC外围设备进行封装,以及在TCP/IP连接上发送数据。当源设备和宿设备发送经封装的外围数据时,可以发送UIC特定的报头,所述UIC特定的报头包括隧穿上下文信息。通用报头可以将数据标识成外围数据,以及报头还可以包括标识特定的外围设备、以及特定的宿设备的信息。
图1A是根据本公开内容的技术,示出可以实现外围数据的双向隧穿的示例性无线显示(WD)源/宿系统100的框图。如图1A所示,系统100包括源设备120,所述源设备120经由通信信道150与宿设备160进行通信。源设备120可以包括存储器121(其存储音频/视频(A/V)数据)、显示器122、扬声器123、音频/视频编码器124(其还被称为编码器124)、音频/视频控制模块125、发射机/接收机(TX/RX)单元126、主机接口控制器127(HIC127)和驱动器128。宿设备160可以包括显示器162、扬声器163、音频/视频解码器164(其还被称为解码器164)、主机接口控制器165(HIC165)、发射机/接收机单元166、用户输入(UI)设备167、用户输入处理模块(UIPM)168和驱动器169。宿设备160还可以连接到一个或多个外围设备170。所示出的组件仅构成源/宿系统100的一种示例性配置。其它配置可以包括与所示出的那些组件相比要少的组件,或者可以包括所示出的那些组件之外的额外的组件。
在图1A的例子中,源设备120可以在显示器122上显示音频/视频数据的视频部分,以及可以在扬声器123上输出音频/视频数据的音频部分。音频/视频数据可以本地存储在存储器121上、从外部存储介质(诸如文件服务器、蓝光光盘或者DVD)存取、或者可以经由诸如互联网的网络连接来流式传输到源设备120。在一些实例中,可以经由源设备120的照相机和麦克风对音频/视频数据进行实时捕捉。音频/视频数据可以包括诸如电影、电视节目或音乐之类的多媒体内容,但还可以包括由源设备120生成的实时内容。例如,这样的实时内容可以是由在源设备120上运行的应用来产生的。如将更详细地描述的,在一些例子中,这样的实时内容可以在一些实例中包括可供用户来选择的用户输入选项的视频帧。在一些实例中,音频/视频数据可以包括视频帧,所述视频帧是不同类型的内容的组合,诸如具有覆盖在视频帧上的用户输入选项的电影或电视节目的视频帧。
除了经由显示器122和扬声器123来本地呈现音频/视频数据之外,源设备120的音频/视频编码器124可以对音频/视频数据进行编码,以及发射机/接收机单元126可以在通信信道150上向宿设备160发送经编码的数据。宿设备160的发射机/接收机单元166接收经编码的数据,以及音频/视频解码器164对经编码的数据进行解码,以及经由显示器162和扬声器163来输出经解码的数据。用此方式,由显示器122和扬声器123呈现的音频和视频数据可以同时地由显示器162和扬声器163进行呈现。可以将音频数据和视频数据排列在帧中,以及当呈现时,音频帧可以与视频帧时间同步。
音频/视频编码器124和音频/视频解码器164可以实现任意数量的音频和视频压缩标准,诸如ITU-T H.264标准(或者被称为MPEG-4,第10部分)、改进的视频编码(AVC)或者新兴的高效率视频编码(HEVC)标准(其有时被称为H.265标准)。总的来说,音频/视频编码器164被配置为执行音频/视频编码器124的互补的编码操作。虽然没有在图1A中示出,但在一些方面,A/V编码器124和A/V解码器164均可以与音频编码器和解码器集成,以及可以包括适当的MUX-DEMUX(复用-解复用)单元或者其它硬件和软件,以处理对在公共数据流或单独数据流中的音频和视频二者的编码。
如在下文中将更详细地描述的,除了实现如上所述的视频压缩标准之外,A/V编码器124还可以执行其它的编码功能。例如,在将A/V数据发送到宿设备160之前,A/V编码器124可以向A/V数据添加各种类型的元数据。在一些实例中,可以以编码的形式将A/V数据存储在源设备120上,或者在源设备120处接收A/V数据,从而不需要由A/V编码器124进一步压缩。
虽然图1A示出了分别地携带音频有效载荷数据和视频有效载荷数据的通信信道150,但应当理解的是,在一些实例中,视频有效载荷数据和音频有效载荷数据可以是公共数据流的一部分。如果可适用的话,MUX-DEMUX单元可以遵循ITU H.223复用器协议或者诸如用户数据报协议(UDP)之类的其它协议。音频/视频编码器124和音频/视频解码器164均可以实现为一个或多个微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、分立逻辑器件、软件、硬件、固件或其任意组合。可以将音频/视频编码器124和音频/视频解码器164中的每一个包括在一个或多个编码器或解码器中,可以将其中任何一个集成为组合的编码器/解码器(CODEC)的一部分。
显示器122和显示器162可以包括各种视频输出设备中的任何一种,诸如阴极射线管(CRT)、液晶显示器(LCD)、等离子体显示器、有机发光二极管(OLED)显示器、或者其它类型的显示设备。扬声器123可以包括各种音频输出设备中的任何一种,诸如头戴式耳机、单扬声器系统、多扬声器系统或者环绕声系统。此外,虽然将显示器122和扬声器123示出为源设备120的一部分,以及将显示器162和扬声器163示出为宿设备160的一部分,但源设备120和宿设备160实际上可以是设备系统。举一个例子,显示器162可以是电视机,扬声器163可以是环绕声系统,以及解码器164可以是有线或无线地连接到显示器162和扬声器163的外箱的一部分。在其它实例中,宿设备160可以是单个设备,诸如平板计算机或智能电话。在再其它情况下,源设备120和宿设备160是类似的设备,例如,二者都是智能电话、平板计算机等等。在这种情况下,一个设备可以作为源设备来进行操作,以及另一个设备可以作为宿设备来进行操作。在后续的通信会话中,这些角色甚至可以颠倒。
扬声器123和扬声器163可以包括各种音频输出设备中的任何一种,诸如头戴式耳机、单扬声器系统、多扬声器系统或者环绕声系统。此外,虽然将显示器122和扬声器163示出为源设备120的一部分,以及将显示器162和扬声器163示出为宿设备160的一部分,但源设备120和宿设备160实际上可以是设备系统。举例而言,显示器162可以是电视机,扬声器163可以是环绕声系统,以及A/V解码器164可以是有线或无线地连接到显示器162和扬声器163的外箱的一部分。
在其它情况下,宿设备160可以是单个设备,诸如平板计算机或智能电话。在再其它情况下,源设备120和宿设备160可以是类似的设备,例如,二者都是智能电话、平板计算机等等。在这种情况下,一个设备可以作为源设备来进行操作,以及另一个设备可以作为宿设备来进行操作。在后续的通信会话中,这些角色甚至可以颠倒。在再其它情况下,源设备120可以包括诸如智能电话、膝上型计算机或平板计算机之类的移动设备,以及宿设备160可以包括更加静态的设备(例如,具有AC电源线),在这样的情况下,源设备120可以经由宿设备160传送音频和视频数据,用于向一个或多个观看者进行呈现。
源设备120和宿设备160可以分别包括主机接口控制器127和164。主机接口控制器127和165可以包括一个或多个接口控制器,所述接口控制器允许源设备120和宿设备160在各种接口(例如,USB、蓝牙、安全数字输入输出(SDIO)、串行AT附件(SATA)、防火墙设备、外部串行ATA(ESATA)设备、或者可以连接到计算设备的任何其它类型的外围设备)上与外围设备170进行通信。在一些更特定的例子中,外围设备170可以包括诸如数码相机、无线底座(wireless dock)、安全数字读卡器、外部硬盘驱动器和/或闪速驱动器之类的设备。
驱动器128和169可以分别地控制主机接口控制器127和165。驱动器128和129均可以包括软件、硬件、固件或者可以用于控制主机接口控制器127和165的任何其它技术。在一些例子中,驱动器128可以是能够支持使用外围设备170的接口中的一些或者全部来连接的设备的驱动器。与驱动器128相比,驱动器169可以包括“重量较轻的”驱动器,其中驱动器169可以只包括驱动器128的功能的子集。举例而言,驱动器169可以包括列举每一个外围设备170的一个或多个接口,以及对UIC数据进行封装和解封装的能力。但是,驱动器169可以缺少对接口特定的分组进行解释、或者选择外围设备170中的一个外围设备的具体接口的能力。用此方式,与驱动器128和主机接口控制器127相比,驱动器169和主机接口控制器165可以执行较少的对外围数据的处理。继而,精简的处理可以使宿设备160能够消耗较少的功率,和/或使用较简单的硬件来与外围设备170进行通信。在一些情况下,宿设备160的较简单的硬件和/或精简的处理,可以减少宿设备160的功耗。
发射机/接收机单元126和发射机/接收机单元166均可以包括各种混频器、滤波器、放大器和被设计用于信号调制的其它组件,以及一付或多付天线和被设计用于发送和接收数据的其它组件。通信信道150通常表示用于从源设备120向宿设备160发送视频数据的任何合适的通信介质或者不同通信介质的集合。通信信道150通常是相对短距离的通信信道,以及可以实现类似于Wi-Fi、蓝牙等等的物理信道结构,诸如实现定义的2.4GHz、3.6GHz、5GHz、60GHz或者超宽带(UWB)频带结构。然而,通信信道150并不必需地限于此方面,以及可以包括任何无线或有线的通信介质(诸如射频(RF)频谱或者一个或多个物理传输线)或者无线介质和有线介质的任意组合。在其它的例子中,通信信道150甚至可以形成基于分组的网络(诸如有线或无线局域网、广域网或者诸如互联网的全球性网络)的一部分。此外,通信信道150可以由源设备120和宿设备160来使用,以创建对等链路。
源设备120和宿设备160可以使用诸如实时流协议(RTSP)控制消息,根据能力协商来建立通信会话。在一个例子中,用于建立通信会话的请求,可以由源设备120发送给宿设备160。一旦建立了介质共享会话,源设备120就使用实时传输协议(RTP),向参与的宿设备160发送媒体数据(例如,音频视频(AV)数据)。宿设备160在其自身的显示器和音频设备(图1A中没有示出)上呈现接收到的媒体数据。
随后,源设备120和宿设备160可以使用诸如来自IEEE802.11标准家族的标准的通信协议,在通信信道150上进行通信。在一个例子中,通信信道150可以是网络通信信道。在该例子中,通信服务提供商可以使用基站作为网络集线器,集中地操作和管理一个或多个网络。例如,源设备120和宿设备160可以根据Wi-Fi直接型或者Wi-Fi显示(WFD)标准进行通信,以使得源设备120和宿设备160在不使用诸如无线接入点或所谓的热点的媒介的情况下直接地彼此相互通信。源设备120和宿设备160还可以建立隧道化直接链路建立(TLDS),以避免或减少网络拥塞。WFD和TDLS旨在建立相对短距离的通信会话。例如,在这一背景下的相对短距离可以指的是小于大约70米,尽管在嘈杂或者有障碍物的环境中,设备之间的距离可能甚至更短,诸如小于大约35米,或者小于大约20米。
有时可以相对于WFD来描述本公开内容的技术,但预期的是,这些技术的方面还可以与其它通信协议兼容。通过举例而非限定的方式,源设备120和宿设备之间的无线通信可以使用正交频分复用技术(OFDM)技术。也可以使用各种各样的其它无线通信技术,包括但不限于时分多址(TDMA)、频分多址(FDMA)、码分多址(CDMA)或者OFDM、FDMA,TDMA和/或CDMA的任意组合。
除了对从源设备120接收的数据进行解码和呈现之外,宿设备160还可以从用户输入设备167接收用户输入。例如,用户输入设备167可以是键盘、鼠标、跟踪球或跟踪板、触摸屏、语音命令识别模块或者任何其它这样的用户输入设备。UIPM 172将由用户输入设备167接收到的用户输入命令格式化成源设备120能够处理的数据分组结构。由发射机/接收机166在通信信道150上将这样的数据分组发送给源设备120。发射机/接收机单元126接收数据分组,以及A/V控制模块130对数据分组进行解析,以解释由用户输入设备167接收的用户输入命令。基于在数据分组中接收的命令,A/V控制模块125可以改变进行编码和发送的内容。用此方式,宿设备160的用户可以远程地对由源设备120正发送的音频有效载荷数据和视频有效载荷数据进行控制,而无需直接地与源设备120进行交互。
此外,宿设备160的用户能够启动和控制源设备120上的应用。例如,宿设备160的用户能够启动存储在源设备120上的照片编辑应用,以及使用应用对本地存储在源设备120上的照片进行编辑。宿设备160可以向用户呈现看起来以及感觉上是在宿设备160上对照片进行本地编辑的用户体验,而实际上照片是在源设备120上被编辑的。使用这样的配置,设备用户能够利用一个设备的能力用于与若干设备一起使用。例如,源设备120可以是具有大量存储器和高端处理能力的智能电话,以及源设备120的用户可以在智能电话通常所使用的所有设置和情况下使用智能电话。当观看电影时,用户可能希望在具有较大显示屏幕的设备上观看电影,在这样的情况下,宿设备160可以是平板计算机。当想要发送或者回复电子邮件时,用户可能希望使用具有物理键盘的设备,在这样的情况下,宿设备160可以是膝上型计算机。在上述两种情况下,即使用户正在与宿设备160进行交互,大多数处理仍然可以由源设备120来执行。源设备120和宿设备160可以通过在任何给定的会话中,在通信信道150上发送控制数据(诸如用于协商和/或对设备的能力进行识别的数据),来促进双向交互。
在一些配置中,A/V控制模块125可以是正由源设备125的操作系统执行的操作系统过程。然而,在其它配置中,A/V控制模块125可以是在源设备120上运行的应用的软件过程。在这样的配置中,用户输入命令可以由软件过程进行解释,以使得宿设备160的用户直接与在源设备120上运行的应用而不是在源设备120上运行的操作系统进行交互。通过直接地与应用而不是操作系统进行交互,宿设备160的用户可以具有到不是源设备120的操作系统本地的命令库的接入。此外,直接地与应用进行交互可以使得命令能够更易于由在不同平台上运行的设备来发送和处理。
源设备120可以对在无线宿设备160处应用的用户输入进行响应。在这样的交互式应用设置中,可以在通信信道150上将在无线宿设备160处应用的用户输入发送回无线显示源。在一个例子中,可以实现反向信道架构(其还被称为UIBC),以使得宿设备160能够向源设备120发送在宿设备160处应用的用户输入。反向信道架构可以包括用于传送用户输入的上层消息和用于对在宿设备160和源设备120处的用户接口能力进行协商的下层帧。UIBC可以位于在宿设备160和源设备120之间的互联网协议(IP)传输层。用此方式,UIBC可以在开放系统互联(OSI)通信模型中的传输层之上。在一个例子中,OSI通信包括七层(1-物理层、2-数据链路层、3-网络层、4-传输层、5-会话层、6-表示层和7-应用层)。在该例子中,在传输层之上指的是层5、6和7。为了提升可靠的传输以及对包含用户输入数据的数据分组的顺序递送,UIBC可以被配置为在其它基于分组的通信协议(诸如TCP/IP或者UDP)的上面运行。UDP和TCP可以在OSI层架构中并行操作。TCP/IP可以使宿设备160和源设备120能够在分组丢失的情况下实现重传技术。
本公开内容的技术通常涉及对UIBC进行扩展,其中在WFD标准中,将UIBC定义成用于发送输入数据和与宿设备(例如,宿设备160)相关联的输入设备的数据的单向通信信道。本公开内容的技术将UIBC扩展到包括支持双向通信信道,用于经由通信信道150从连接到宿设备160的宿外围设备(例如,外围设备170)向源设备120发送外围数据。类似地,源设备120可以经由通信信道150向外围设备170发送外围数据。具体而言,可以将通信信道150扩展成支持“隧穿”。在本公开内容的背景下,隧穿可以指的是将外围数据封装在UIBC的数据连接中。
根据本公开内容的技术,源设备120或者宿设备160可以被配置为:建立到第一设备的双向用户接口返回信道(UIBC);使用UIBC从第一设备接收经封装的外围数据;对外围数据进行解封装。源设备120或者宿设备160还可以包括UIBC模块,所述UIBC模块被配置为:建立到第一设备的双向UIBC;接收外围数据;对外围数据进行封装;以及根据本公开内容的技术,使用UIBC向第一设备发送外围数据。此外,源设备120或者宿设备160还可以包括UIBC模块,所述UIBC模块被配置为:建立到第二计算设备的双向用户接口返回信道(UIBC);接收外围数据;对外围数据进行封装;以及使用UIBC向第二计算设备发送外围数据。
除了被扩展为支持经封装的外围数据的双向传输之外,UIBC可以被设计为传送各种类型的用户输入数据,其包括跨平台用户输入数据。例如,源设备120可以运行操作系统,而宿设备160运行诸如安卓或者视窗之类的另一种操作系统。不管使用怎样的平台,UIPM168可以用对于A/V控制模块125可理解的形式,对接收的用户输入进行封装。UIBC可以支持多种的不同类型的用户输入格式,以便允许多种不同类型的源设备和宿设备使用协议。可以定义通用的输入格式,以及可以支持平台特定的输入格式,因此以在其中UIBC可以在源设备120和宿设备160之间传送用户输入的方式来提供灵活性。
在图1A的例子中,源设备120可以包括智能电话、平板计算机、膝上型计算机、台式计算机、具备WiFi能力的电视机、或者能够发送音频和视频数据的任何其它设备。同样地,宿设备160可以包括智能电话、平板计算机、膝上型计算机、台式计算机、具备WiFi能力的电视机或者能够接收音频和视频数据以及接收用户输入数据的任何其它设备。在一些实例中,宿设备160可以包括设备系统,以使得显示器162、扬声器163、UI设备167和A/V编码器164全部都是分开的部件,但也是可互操作的设备。同样地,源设备120可以是设备系统,而不是单个设备。
对于本公开内容来说,术语源设备通常用于指代在发送音频/视频数据的设备,以及术语宿设备通常用于指代在从源设备接收音频/视频数据的设备。在多种情况下,源设备120和宿设备160可以是类似的或者相同的设备,其中一个设备操作成源设备,以及另一个设备操作成宿设备。此外,在不同的通信会话中,这些角色可以颠倒。因此,一个通信会话中的宿设备可以是后续通信会话中的源设备,或者反之亦然。源设备120和宿设备160均可以是支持在通信信道150上的无线通信的设备。
图1B是根据本公开内容的技术,示出可以实现外围数据的双向隧穿的示例性源/宿系统101的框图。源/宿系统101包括源设备120和宿设备160,它们中的每一个可以以上面针对图1A所描述的方式运行和操作。此外,源/宿系统101还包括宿设备180。以类似于上面所描述的宿设备160的方式,宿设备180可以从源设备120接收音频和视频数据。宿设备160和源设备120可以在建立的UIC上发送和接收经封装的外围数据。
在一些配置中,宿设备160和宿设备180可以彼此之间独立地操作,以及在源设备120处输出的音频和视频数据可以同时地在宿设备160和宿设备180处输出。在替代的配置中,宿设备160可以是主宿设备,以及宿设备180可以是辅助宿设备。在这样的示例性配置中,可以对宿设备160和宿设备180进行耦合,以及宿设备160可以显示视频数据,而宿设备180输出相应的音频数据。
图2是示出用于WD系统的数据通信模型或协议栈的例子的框图。数据通信模型200示出了在数据和用于在实现的WD系统中的源设备和宿设备之间发送数据的控制协议之间的相互作用。在一个例子中,WD系统100可以使用数据通信模型200。数据通信模型200包括物理(PHY)层202、介质访问控制(MAC)层(204)、互联网协议(IP)206、用户数据报协议(UDP)208、实时协议(RTP)210、MPEG2传输流(MPEG2-TS)212、内容保护214、经封包的基本流(packetized elementary stream,PES)封包(packetization)216、视频编解码器218、音频编解码器220、传输控制协议(TCP)222、实时流协议(RTSP)224、双向外围数据隧道228、人机接口设备常量230、通用用户输入232和性能分析234。
物理层202和MAC层204可以定义用于WD系统中的通信的物理信令、寻址和信道接入控制。物理层202和MAC层204可以定义用于通信的频带结构,例如,在2.4GHz、3.6GHz、5GHz、60GHz或者超宽带(UWB)频带结构处定义的联邦通信委员会频段。物理层202和MAC204还可以定义数据调制技术,例如,模拟和数字振幅调制、频率调制、相位调制技术、以及其组合。物理层202和MAC204还可以定义复用技术,例如,时分多址(TDMA)、频分多址(FDMA)、码分多址(CDMA)或者OFDM、FDMA、TDMA和/或CDMA的任意组合。在一个例子中,物理层202和介质访问控制层204可以通过Wi-Fi(例如,IEEE802.11-2007和802.11n-2009x)标准(诸如由WFD提供的)来定义。在其它例子中,物理层202和介质访问控制层204可以通过下面中的任意一种来定义:无线HD、无线家庭数字接口(WHDI)、无线千兆比特(WiGig)和无线USB。
互联网协议(IP)206、用户数据报协议(UDP)208、实时协议(RTP)210、传输控制协议(TCP)222和实时流协议(RTSP)224定义在WD系统中使用的分组结构和封装,以及可以根据由互联网工程任务组(IETF)所维护的标准来定义这些协议。
源设备120和宿设备160可以使用RTSP224来协商能力,建立会话以及会话维持和管理。源设备120和宿设备160可以使用RTSP消息事务协商源设备120和宿设备160的能力来建立双向外围数据隧道228,以支持在UIBC上的隧穿。使用RTSP协商来建立双向外围数据隧道228,可以类似于使用RTSP协商过程来建立媒体共享会话和/或UIBC。
例如,源设备120可以向宿设备160发送能力请求消息(例如,RTSPGET_PARAMETER请求消息),该能力请求消息指定了对于源设备120来说感兴趣的能力的列表。根据本公开内容的技术,能力请求消息可以包括:用于在UIBC上支持经封装的外围数据的双向隧穿的能力。宿设备160可以利用能力响应消息(例如,RTSP GET_PARAMETER响应消息)向源设备120进行响应,该能力响应消息声明了其支持双向外围数据隧道的能力。举例而言,如果宿设备160支持在UIBC上的外围数据的双向隧穿,则能力响应消息可以指示“是”。随后,源设备120可以向宿设备160发送确认请求消息(例如,RTSP SET_PARAMETER请求消息),该确认请求消息指示了隧道将被用于对外围数据进行封装。宿设备160可以利用确认响应消息(例如,RTSP SET_PARAMETER响应消息)向源设备120进行响应,该确认响应消息确认了反馈信道将在媒体共享会话期间被使用。一旦源设备120和宿设备160同意使用UIC,
视频编解码器218可以定义可以由WD系统使用的视频数据编码技术。视频编解码器218可以实现任意数量的视频压缩标准,诸如ITU-T H.261、ISO/IEC MPEG-1图像、ITU-T H.262或者ISO/IEC MPEG-2图像、ITU-TH.263、ISO/IEC MPEG-4图像、ITU-T H.264(其还被称为ISO/IEC MPEG-4AVC)、VP8和高效视频编码(HEVC)。应当注意的是,在一些实例中,WD系统可以对视频数据进行压缩或者解压缩。
音频编解码器220可以定义可以由WD系统使用的音频数据编码技术。可以使用诸如由杜比和数字影院系统所开发的那些之类的多通道格式,对音频数据进行编码。可以使用压缩格式或者未压缩格式对音频数据进行编码。压缩的音频格式的例子包括MPEG-1、2音频层II和III、AC-3、AAC。未压缩的音频格式的例子包括脉冲编码调制(PCM)音频格式。
经封包的基本流(PES)封包216和MPEG2传输流(MPEG2-TS)212可以定义如何对编码的音频和视频数据进行封包(packetized)和发送。可以根据MPEG-2第1部分来定义经封包的基本流(PES)封包216和MPEG2-TS212。在其它例子中,可以根据其它封包和传输流协议,对音频和视频数据进行封包和发送。内容保护214可以提供防止音频或视频数据的未授权的复制的保护。在一个例子中,可以根据高带宽数字内容保护2.0规范来定义内容保护214。双向外围数据隧道228可以定义如何对外围数据进行封装和发送。
图3是根据本公开内容的技术示出支持双向外围数据隧穿的WFD系统的各种组件的概念图。图3的例子包括源设备302和宿设备352。可以经由三种信道来连接源设备302和宿设备352:RTSP控制信道304、视听(AV)信道306和用户交互信道308。用户交互信道可以包括UIBC信道,所述UIBC信道还可以支持外围数据的双向隧穿。源设备302和宿设备352可以在AV信道306上发送和接收音频和视频数据,以及可以在RTSP信道304上参与能力协商。
在图3的例子中,宿设备352可以包括外围设备,所述外围设备包括SD设备354、USB设备356和蓝牙设备358,这些外围设备可以连接到各自的主机控制器,所述主机控制器包括SDIO主机分支点(host breakout)364、USB主机分支点366和蓝牙主机分支点358。宿设备302可以包括多个主机驱动器(诸如SDIO主机驱动器314、USB主机驱动器316和蓝牙主机驱动器318)。SDIO主机驱动器314、USB主机驱动器316和蓝牙主机驱动器318中的每一个还可以传送或者控制针对相应的接口各自的主机接口控制器。
SDIO主机驱动器314、USB主机驱动器316、蓝牙主机驱动器318、SDIO主机分支点364、USB主机分支点366和蓝牙主机分支点358可以在用户交互信道308上,根据本公开内容的技术来发送或接收经封装的外围数据。具体而言,源设备302和/或宿设备352可以使用TCP/IP和/或UDP来发送或者接收经封装的外围数据。在一些例子中,在用户交互信道308上建立UIBC连接之前,驱动器SDIO主机分支点365、USB主机分支点366和蓝牙主机分支点,以及其它主机分支点(在该例子中没有示出)可以列举SD设备354、USB设备356和蓝牙设备358的接口。
在另一个例子中,源设备302可以接收封装的WFD数据,对数据进行解封装,将经解封装的外围数据转发给适当的主机驱动器(诸如SDIO主机驱动器314、USB主机驱动器316和/或蓝牙主机驱动器318(“主机驱动器314、316、318”)。源设备302可以利用来自主机驱动器314、316、318中的一个或多个额外的外围数据或者命令进行答复。此外,源设备302还可以经由用户接口信道308向宿设备352发送数据和/或命令。
图4是示出可以用于在宿设备和源设备之间发送经封装的外围数据的双向隧穿分组400的例子的概念图。在图4中示出了数据分组报头402的例子。数字0-15标识数据分组报头402中的比特位置,以及数字0、16和32标识数据分组报头402中的分开的字段之间的位偏移。数据分组报头402包括版本字段、时间戳标记(“T”)、保留字段、输入种类字段、长度字段和可选的时间戳字段。在图4的例子中,版本字段是3比特字段,其可以指示由宿设备正实现的具体通信协议的版本。版本字段中的值可以通知源设备,如何对数据分组报头402的剩余部分进行解析,以及如何对有效载荷数据404进行解析。时间戳标记是1比特字段,其指示在数据分组报头402中是否存在可选的时间戳字段。例如,时间戳标记可以包括“1”以指示存在时间戳字段,以及可以包括“0”以指示不存在时间戳字段。保留字段是被保留用于由版本字段中所标识的特定协议的未来版本使用的8比特字段。
在图4的例子中,输入种类字段是4比特字段,以标识针对在双向隧穿分组400中包含的有效载荷数据404的输入种类。输入种类字段的值向源设备标识了在有效载荷数据404中包括的数据的类型,以及如何对有效载荷数据404进行格式化。基于这种格式化,源设备确定如何对有效载荷数据404进行解析。下面相对于图5来进一步详细地讨论有效载荷数据404的结构。
举例而言,输入种类字段可以标识通用输入种类,以指示有效载荷数据404是使用由源设备和宿设备二者执行的协议中所定义的通用信息元素来格式化的。再举一个例子,输入种类字段可以标识人机接口设备命令(HIDC)输入种类,以指示有效载荷数据404是基于用户接口的类型来格式化的,其中在宿设备处通过所述用户接口来接收输入数据。再举一个例子,输入种类字段可以标识操作系统(OS)特定的输入种类,以指示有效载荷数据404是基于由源设备或者宿设备使用的OS类型来格式化的。根据本公开内容的技术,输入种类字段还可以标识隧穿输入种类,以指示有效载荷数据404包括例如来自于图1的源设备120或宿设备160的经封装的外围数据。隧穿输入种类对来自于通用用户输入和HIDC用户输入的分组中的有效载荷数据进行区分。在通用或HIDC用户输入的情况下,对于向宿设备发送的后续媒体数据上的用户输入的影响,通常与如何在宿设备处向用户呈现媒体数据(例如,缩放和扫视(pan)操作)有关。
时间戳字段可以包括可选的16比特字段,当存在该字段时,其可以包含与由源设备所生成的并向宿设备发送的媒体数据相关联的时间戳。例如,在源设备120向宿设备160发送媒体数据分组之前,其可能已经向媒体数据分组应用了时间戳。当存在时间戳字段时,数据分组报头402中的时间戳字段可以包括:用于标识在宿设备160向源设备发送双向隧穿分组400之前,在宿设备160处接收的最新的媒体数据分组的时间戳。在其它例子中,时间戳字段可以包括:用于标识在宿设备160处接收的不同的媒体数据分组的时间戳。时间戳值可以使源设备120能够识别哪个媒体数据分组经历了报告的性能下降,以及计算WFD系统中的往返延迟。
长度字段可以包括16比特字段,以指示双向隧穿分组400的长度。基于长度字段的值,源设备120可以识别UIBC分组的结束,以及新的后续分组的开始。图4中所示出的反馈分组400中的字段的数量和大小只是说明性的。在其它例子中,与图4中所示出的双向隧穿分组400相比,UIBC分组可以包括具有更大或者更小大小的字段,和/或与图4中所示出的双向隧穿分组400相比,UIBC分组可以包括更多或者更少的字段。
根据本公开内容的技术,可以经由UIC从宿设备160向源设备120(图1A)或者从源设备120向宿设备160发送双向隧穿分组400。用此方式,双向外围数据隧道可以扩展在宿设备160和源设备120之间实现的UIBC反向信道架构的能力。为了在UIBC上背负,被称为“隧穿”的新的输入种类可以与在WFD中定义的UIBC数据分组报头一起使用,以指示UIBC分组的有效载荷数据包括经封装的外围数据。
驱动器128和驱动器169可以负责对去往和来自双向隧穿分组400的外围数据进行封装和解封装。驱动器128和驱动器169还可以检查双向隧穿分组400的数据分组报头402的有效载荷数据404,以验证双向隧穿分组400的格式,来确定分组的源或者目的地,以及确定双向隧穿分组400关联外围设备中的(例如,外围设备170中的)那个外围设备。
在源设备120或者宿设备160接收经封装的外围数据的例子中,驱动器128或者驱动器169可以对有效载荷数据404进行解封装,以及基于有效载荷数据404来构造接口特定的分组。接口特定的分组可以包括诸如USB分组之类的分组,或者主机接口控制器127和165可以用于在特定的接口上传送的另一个数据单元。主机接口控制器127或165还可以对驱动器128或驱动器169构造的接口特定的分组进行解析或者处理。举例而言,主机接口控制器165可以向外围设备170发送接口特定的分组。
为了根据具有双向隧穿分组400的格式的分组来构造接口特定的分组,驱动器128或者驱动器169可以从双向隧穿分组400中去除数据分组报头402,只留下有效载荷数据400。驱动器128或者驱动器169还可以向有效载荷数据400增加诸如USB分组报头之类的接口特定的报头。在驱动器128或者驱动器169接收具有双向隧穿分组400的格式的经封装的外围数据的例子中,驱动器128或者169可以确定双向隧穿分组400的有效载荷数据404包括接口特定的分组的一部分。驱动器128或者169可以将具有双向隧穿分组400的格式的多个分组的有效载荷进行组合,以形成单一的接口特定的分组。在另一个例子中,驱动器128或者169可以接收外围数据,以及可以基于接口特定的分组,来构造具有双向隧穿分组400的格式的分组。为了构造双向隧穿分组,驱动器128可以从接口特定的分组中去除任何接口特定的分组报头,以及增加具有数据分组报头402的格式的报头。
驱动器128或者169还可以基于单一的接口特定的分组,来构造具有双向隧穿分组400的格式的多个分组。驱动器128或者169可以将接口特定的分组的有效载荷分割成多个较小的块,以及可以使用较小的块作为多个双向隧穿分组中的每一个的有效载荷数据。例如,如果接口特定的分组的有效载荷过大以至于不能适应双向隧穿分组400的有效载荷数据404,则驱动器128或者169可以将接口特定的分组分割成多个双向隧穿分组。在一些例子中,驱动器128或者129还可以在有效载荷数据404中包括针对同一宿设备的多个不同的宿外围设备的数据。
在一些例子中,数据分组数据404可以包括指示具体的外围设备和具体的宿设备的信息。指示宿设备的信息可以被称为“反向隧穿标识符”,以及指示具体的外围设备的信息可以被称为“前向隧道标识符”。当宿设备160接收到经封装的外围数据时,宿设备160可以检查有效载荷数据4040的前向隧穿标识符,以确定将有效载荷数据304转发给外围设备170中的哪个外围设备。在存在一个以上的宿设备的情况下,当源设备120接收到具有双向隧穿分组400的格式的经封装的外围数据时,源设备120可以检查在数据分组报头402中所包括的反向隧穿标识符,以确定哪个具体的宿设备发送了所述分组。
图5是根据本公开内容的技术示出双向隧穿分组的有效载荷数据的概念图。图5示出了双向隧穿分组400,所述双向隧穿分组400包括数据分组报头402和有效载荷数据404。双向隧穿分组的有效载荷数据404可以具有特定于双向隧穿分组的格式,以及可区别于具有不同的输入种类值(例如,具有通用输入种类值的分组)和HIDC输入种类值的UIBC分组。具体而言,双向隧穿分组400的有效载荷数据404可以包括隧道ID字段440、长度字段442和描述字段446。
隧道ID字段440(其大小为一个八位字节)的值可以指示前向隧穿标识符或者反向隧穿标识符的值。至于隧道ID字段的值是指示前向隧穿标识符还是指示反向隧穿标识符,取决于源设备是否向宿设备发送双向隧穿分组400,或者反之亦然。如果源设备向宿设备发送双向隧穿分组400,则隧道ID字段的值包括:用于指示宿设备应当将描述字段446中封装的数据发送给哪个外围设备的反向隧穿标识符。如果宿设备向源设备发送双向隧穿分组400,则隧道ID字段440的值指示前向隧穿标识符,所述前向隧穿标识符指示哪个宿设备以及该宿设备的哪个外围设备发送了在描述字段446中封装的数据。
在源设备向宿设备发送双向隧穿分组400或者反之的任意一种情况下,长度字段442(其大小为两个八位字节)指示描述字段442的(以八位字节为单位)大小,所述描述字段442包括外围数据,并且在长度字段442之后。在一些例子中,如果在有效载荷数据中存在足够的空间来包括隧道ID字段、长度字段和描述字段的多个集合,则源设备或者宿设备可以包括这三种字段的多个集合。举一个例子,源设备可以包括隧道ID字段、长度字段和描述字段的多个集合,以及每一个集合可以与针对同一宿设备的不同外围设备的数据相对应。在有效载荷数据404中包括隧道ID字段、长度字段和描述字段的多个集合,可以避免必须针对宿设备的每一个外围设备来发送额外的UIBC分组的开销。
图6是示出作为能力协商会话的一部分,在源设备520和宿设备560之间的示例性消息传送序列的框图。源设备520通常以上面针对于图1A的源设备120所描述的相同方式进行操作,以及宿设备560通常以上面针对于图1A的源设备160所描述的相同方式进行操作。在源设备520和宿设备560建立连接之后,作为能力协商交换的一部分,源设备520和宿设备560可以确定要用于它们的后续通信会话的参数集。在一些例子中,源设备520和宿设备560可以根据本公开内容的技术,对关于是否使用外围数据的双向隧穿进行协商。
源设备520和宿设备560可以通过使用消息序列来协商能力。例如,消息可以是RTSP消息。每一个RTSP消息可以包括主体,所述主体还可以包括明文字符串。在协商的任何阶段,RTSP请求消息的接收者都可以利用RTSP响应来进行响应,其中该RTSP响应包括不同于RTSP OK的RTSP状态码,在该情况下,可以利用不同的参数集来重试消息交换,或者可以结束能力协商会话。
源设备520可以向宿设备560发送第一消息(RTSP OPTIONS请求消息),以便确定宿设备560支持的RTSP方法的集合。在从源设备520接收到第一消息时,宿设备560可以利用第二消息(RTSP OPTIONS响应消息)进行响应,其中该第二消息列出了由宿设备560支持的RTSP方法。此外,第二消息还可以包括RTSP OK状态码。
在向源设备520发送第二消息之后,宿设备560可以发送第三消息(RTSP OPTIONS请求消息),以便确定源设备520支持的RTSP方法的集合。在从宿设备560接收到第三消息时,源设备520可以利用第四消息(RTSPOPTIONS响应消息)进行响应,其中该第四消息列出了由源设备520支持的RTSP方法。第四消息还可以包括RTSP OK状态码。
在发送了第四消息之后,源设备520可以发送第五消息(RTSPGET_PARAMETER请求消息),以指定对于源设备520来说感兴趣的能力的列表。宿设备560可以利用第六消息(RTSP GET_PARAMETER响应消息)进行响应。第六消息可以包含RTSP状态码。如果RTSP状态码是OK,则第六消息还可以包括对于由宿设备560支持的第五消息中所指定的参数的响应参数。宿设备560可以忽略在宿设备560不支持的第五消息中的参数。
基于第六消息,源设备520可以确定用于通信会话的最佳参数集,以及向宿设备560发送第七消息(RTSP SET_PARAMETER请求消息)。第七消息可以包含:要在源设备520和宿设备560之间的通信会话期间使用的参数集。第七消息可以包括wfd-presentation-url,所述wfd-presentation-url描述了要在RTSP建立请求中使用的通用资源标识符(URI),以便建立通信会话。wfd-presentation-url指定了宿设备560可以用于会话建立交换期间的稍后的消息的URI。在该参数中指定的wfd-url0和wfd-url1值,可以与第七消息中的wfd-client-rtp-ports中的rtp-port0和rtp-port1的值相对应。在接收到第七消息之后,宿设备560可以利用具有RTSP状态码的第八消息进行响应,所述RTSP状态码用于指示是否成功地将参数设置为如第七消息中所指定的。
图7是根据本公开内容的技术示出在源设备520和宿设备560之间用于执行能力协商的示例性实时流协议(RTSP)消息传送序列的概念图。在源设备520和宿设备560之间发送的RTSP消息包括报头和明文主体。主体的格式没有被严格地定义,以及可以根据本公开内容的技术来被修改为包括额外的正文数据。在图7的每一个RTSP消息之中的圆括号中的文本,表示各个消息的示例性主体。
图7的例子示出了如何对RTSP能力协商进行扩展,以便支持在UIBC上的双向通信和隧穿。图7的消息传送序列旨在提供上面针对图6描述的传送序列的更详细的视图。但是,在图7的例子中,消息序列示出了典型的UIBC协商序列。然而,还对图7进行了描述,以使得支持根据本公开内容的技术的双向隧穿能力。
为了开始UIBC能力协商,源设备520发送GET_PARAMETER请求1a。响应于接收GET_PARAMETER请求1a,宿设备560向源设备520发送GET_PARAMETER响应1b。GET_PARAMETER响应1b标识了宿设备560支持的输入种类的列表。此前,UIBC支持两种通用的种类:“通用的”和“HIDC”(人机接口设备等级)。为了支持双向(即,UIC)通信,可以将GET_PARAMETER响应1b扩展为包括额外的“隧穿”种类,相对于图7中的GET_PARAMETER响应1b示出了所述额外的“隧穿”种类。在GET_PARAMETER响应消息中对隧穿种类的包含,可以向源设备520指示出宿设备560支持宿设备560的特定外围设备的外围数据的双向隧穿。对于所支持的每一种输入种类来说,GET_PARAMETER响应1b还可以包括针对所述输入类型的支持的能力的相关列表(例如,用于通用输入类型的“generic_cap_list”、用于HIDC输入类型的“hidc_cap_list”)。GET_PARAMETER响应1b还可以包括端口字段,所述端口字段指示了TCP/IP端口号。宿设备560可以在由端口字段的值指示的TCP/IP端口号处,从源设备520接收经封装的外围数据。
为了支持双向隧穿,还可以将GET_PARAMETER响应消息1b扩展为包括输入接口字段,所述输入接口字段还可以被称为“input_interface”字段。上面相对于GET_PARAMETER响应1b还示出了额外的input_interface字段。输入接口字段可以包括接口值。接口值可以指示与宿设备560的外围设备相关联的具体外围接口。举例而言,输入接口字段的值可以包括SDIO、USB、蓝牙或者其它外围接口中的一种。
为了支持双向隧穿,还可以将GET_PARAMETER响应消息1b扩展为包括前向隧道标识符字段,所述前向隧道标识符字段还可以被称为“forwarding_tunnel_ID”。前向隧道标识符可以包括额外的正文键值对(连同输入种类和输入接口),所述额外的正文键值对包括在UIBC能力协商期间发送的RTSP GET_PARAMETER响应消息的主体的一部分。在图7的例子中,RTSP消息的新的前向隧道标识符的语法可以是“forwarding_tunnel_ID=#”,其中“#”是被分配给宿设备的特定外围设备的前向隧道的值。
前向隧道标识符字段可以标识具体的外围设备,或者连接到宿设备(例如,宿设备560)的外围设备的接口。举例而言,宿设备560的蓝牙外围设备可以具有标识符“1”,而诸如鼠标之类的USB外围设备可以具有标识符“3”。如果宿设备560具有一个以上的连接的外围设备,则前向隧道标识符使得使用UIC从源设备接收经封装的外围数据的宿设备,能够识别应当将接收的UIC外围数据转发给哪个外围设备。
在一些例子中,一个外围设备可以包括多个端点,其中宿设备560和源设备520可以与这些端点进行通信。设备的端点可以表示在宿设备560和连接的外围设备之间的一个或多个不同的逻辑数据连接。例如,USB外围设备可以包括批量端点,以及同步端点。批量端点可以具有某些数据传送特性,而同步端点可以具有不同的数据传送特性的集合。在宿外围设备具有多个端点的例子中,宿设备560可以在GET_PARAMETER响应1b中传送关于外围设备的多个端点的信息。宿设备560可以发送多个端口值的列表,以及每一个端口字段可以对应于宿外围设备的具体的端点。宿设备560还可以发送多个前向隧道标识符的列表。每一个前向隧道标识符可以对应于宿设备560的具体端点。
宿设备560的主机接口控制器165和驱动器169(图1A)可以列举每一个连接的外围设备中的每一个的端点。宿设备560可以列举连接的外围设备的端点,以使得GET_PARAMETER响应1b包括连接到宿设备560的每一个特定的外围设备的每一个端点的列表。GET_PARAMETER响应1b还可以包括:用于标识指定每一个端点的类型(例如,同步、批量等等)的额外的上下文信息。
在图7中,消息2a“SET_PARAMETER REQUEST”是RTSP UIBC能力协商的第二消息的例子。类似于消息1b,消息2a包括支持的输入种类(例如,隧穿)的列表,以及针对宿设备560支持的UIBC设备的相关设备信息。和消息1b一样,为了支持双向外围数据的封装,消息2a可以对input_category_list字段进行扩展,以包括“隧穿”输入种类。支持的输入种类的第二列表中的每一个支持的输入种类,都可以具有支持的能力的相关列表(例如,generic_cap_list和hidc_cap_list)。和消息1b一样,消息2a还包括端口字段。端口字段的值指示具体的端口,在所述具体的端口上源设备520可以接收针对特定的宿外围设备或者端点的经封装的外围数据。在图7所示出的例子中,端口字段的值是1002,其可以指示源设备520支持在TCP/IP端口1002上,接收针对宿设备560的外围设备的经封装的外围数据。
消息2a还标识了由源设备520支持的输入种类和输入类型,但其可能不是由源设备520支持的所有输入种类和输入类型的综合列表。相反,消息2a“SET_PARAMETER REQUEST”可以仅仅标识在消息1b“GET_PARAMETER RESPONSE”中标识的那些输入种类和输入类型,如由宿设备560支持的。用此方式,消息2a“SET_PARAMETER REQUEST”中标识的输入种类和输入类型,可以构成消息1b中标识的输入种类和输入类型的子集。在图7所示出的例子中,消息2a还将隧穿输入种类包括在输入种类列表中。对隧穿输入种类的包含向宿设备560指示了源设备520也支持经封装的外围数据的双向隧穿。
除了在SET_PARAMETER REQUEST 2a中示出的字段之外,源设备可以利用反向隧道标识符(其还可以被称为“reverse_tunnel_id”)对GET_PARAMETER RESPONSE 1b进行响应。反向隧道标识符可以类似于前向隧道标识符。反向隧道标识符可以用于支持双向外围数据封装,以及可以向源设备520标识特定的宿设备(诸如宿设备560)。在图7的例子中,消息设备520包括具有值为“2”的反向隧道标识符。每一个宿设备(例如,宿设备560)可以在发送给源设备520的任何UIC分组中包括反向隧穿标识符,以便将所述特定的宿设备标识成那些UIC分组的发送者。当源设备520与一个以上的宿设备进行通信时,源设备520可以使用反向隧道标识符的值,来识别来自于多个宿设备中的每一个宿设备的UIC分组。
如果宿设备560同意源设备520在消息2a中发送的UIC参数,则宿设备560可以发送SET_PARAMETER RESPONSE消息2b。响应于接收SET_PARAMETER RESPONSE消息2b,源设备520可以发送SET_PARAMETER REQUEST消息3a,所述SET_PARAMETER REQUEST消息3a确认将利用先前在消息1a、1b和2a中协商的参数来启动UIBC。响应于接收SET_PARAMETER REQUEST消息3a,宿设备560可以发送SET_PARAMETER RESPONSE消息3b。SET_PARAMETER RESPONSE3b可以向源设备520确认:宿设备560准备好参与在UIC上的通信。
一旦源设备520和宿设备560同意了UIC参数的集合,源设备520和宿设备560就可以在UIC上发送数据。由于宿设备560和源设备520均同意了UIC隧道,因此这两个设备知道UIC连接将是双向的(与单向相对)。源设备520和560可以在RTSP能力协商期间在同意的端口上发送UIC数据。每一个UIC分组可以包括反向隧道标识符(其可以指示特定的宿设备)或者前向隧道标识符(其可以标识连接到宿设备560的具体的外围设备或者外围设备接口)。
源设备520可以参与一次以上的如图7中所示的RTSP通信和UIC能力协商。举例而言,源设备520可以针对正在与源设备520通信的每一个宿设备的每一个连接的外围设备,参与一次RTSP UIC能力协商。多个的能力协商可以用于向每一个外围设备分配不同的前向隧道标识符,以及向可以与源设备520进行通信的多个宿设备中的每一个宿设备分配反向隧穿标识符。
图8是根据本公开内容的技术示出可以实现经封装的外围数据的双向隧穿的源设备的例子的框图。源设备600可以是并入了在图2中所提供的数据通信模型的WD系统的一部分。源设备600可以被配置为:对用于传送、存储和/或显示的媒体数据进行编码和/或解码。源设备600包括存储器602、显示处理器604、本地显示器606、音频处理器608、扬声器610、视频编码器612、视频封包器(packetizer)614、音频编码器616、音频封包器618、A/V复用器620、传输模块622、调制解调器624、控制模块626、反馈解包器628和反馈模块630。可以将源设备600的组件实现成多种适当的电路中的任何一种,诸如一个或多个微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、分立逻辑器件、软件、硬件、固件或者其任意组合。
存储器602可以以压缩格式或者未压缩格式的媒体数据的形式,来存储A/V可视数据。存储器602可以存储完整的媒体数据文件,或者可以包括较小的缓冲区,该缓冲区仅仅存储媒体数据文件的一部分(例如,从另一个设备或者源流式传输的媒体数据文件)。存储器602可以包括各种各样的易失性或非易失性存储器,其包括但不限于:随机存取存储器(RAM)(诸如同步动态随机存取存储器(SDRAM))、只读存储器(ROM)、非易失性随机存取存储器(NVRAM)、电可擦除可编程只读存储器(EEPROM)、闪存等等。存储器602可以包括用于存储媒体数据以及其它种类的数据的计算机可读存储介质。存储器602可以额外地存储由处理器执行的、作为执行本公开内容中所描述的各种技术的一部分的指令和程序代码。
显示处理器604可以获得捕捉到的视频帧,以及可以对视频数据进行处理,用于在本地显示器606上显示。显示器606包括诸如以下各项的各种显示设备中的一种:液晶显示器(LCD)、等离子体显示器、有机发光二极管(OLED)显示器、或者能够向源设备600的用户呈现视频数据的其它类型的显示设备。
音频处理器608可以获得捕捉到的音频采样,以及可以对音频数据进行处理,用于输出给扬声器610。扬声器610可以包括各种音频输出设备中的任何一种,诸如头戴式耳机、单扬声器系统、多扬声器系统或者环绕声系统。
视频编码器612可以从存储器602获得视频数据,以及将视频数据编码成期望的视频格式。视频编码器612可以是用于实现上面相对于图2所描述的视频编解码器218的方面的硬件和软件的组合。视频编码器612可以根据诸如ITU-T H.261、ISO/IEC MPEG-1图像、ITU-T H.262或者ISO/IECMPEG-2图像、ITU-T H.263、ISO/IEC MPEG-4图像、ITU-T H.264(其还被称为ISO/IEC MPEG-4AVC)、VP8和高效视频编码(HEVC)之类的任意数量的视频压缩标准,对视频进行编码。应当注意的是,在一些情况下,视频编码器612可以对视频进行编码,以使得使用无损或者有损压缩技术,对视频数据进行压缩。
视频封包器614可以对编码后的视频数据进行封包。在一个例子中,视频封包器614可以将编码后的视频数据封包为如根据MPEG-2第1部分所定义的。在其它例子中,可以根据其它封包协议来对视频数据进行封包。视频封包器614可以是用于实现上面相对于图2所描述的经封包的基本流(PES)封包216的方面的硬件和软件的组合。
音频编码器616可以从存储器602获得音频数据,以及将音频数据编码成期望的音频格式。音频编码器616可以是用于实现上面相对于图2所描述的音频编解码器220的方面的硬件和软件的组合。可以使用诸如杜比和数字影院系统所开发的那些之类的多通道格式,对音频数据进行编码。可以使用压缩格式或者未压缩格式对音频数据进行编码。压缩的音频格式的例子包括MPEG-1、2音频层II和III、AC-3、AAC。未压缩的音频格式的例子包括脉冲编码调制(PCM)音频格式。
音频封包器618可以对编码后的音频数据进行封包。在一个例子中,音频封包器618可以将编码后的音频数据封包为如根据MPEG-2第1部分所定义的。在其它例子中,可以根据其它封包协议,对音频数据进行封包。音频封包器618可以是用于实现上面相对于图2所描述的经封包的基本流(PES)封包216的方面的硬件和软件的组合。
A/V复用器620可以应用复用技术,以将视频有效载荷数据和音频有效载荷数据组合成公共数据流的一部分。在一个例子中,A/V复用器620可以将经封包的基本视频和音频流,封装成根据MPEG-2第1部分所定义的MPEG2传输流。A/V复用器620可以提供针对音频和视频分组的同步,以及纠错技术。
传输模块622可以对媒体数据进行处理,用于传送给宿设备。此外,传输模块622可以从宿设备接收的分组进行处理,以使得它们可以被进一步地处理。例如,传输模块622可以被配置为:使用IP、TCP、UDP、RTP和RTSP来传送。例如,传输模块622还可以对MPEG2-TS进行封装,用于向宿设备的传送或者跨越网络的传送。
调制解调器624可以被配置为:根据WD系统中使用的物理层和MAC层来执行物理层和MAC层处理。如参照图2所描述的,物理层和MAC层可以定义用于WD系统中的通信的物理信令、寻址和信道接入控制。在一个例子中,调制解调器624可以被配置为:针对由Wi-Fi(例如,IEEE 802.11x)标准所定义的物理层和MAC层(诸如所述由WFD提供的),执行物理层和MAC层处理。在其它例子中,调制解调器624可以被配置为:针对以下各项中的任何一项来执行物理层和MAC层处理:无线HD、WiMedia、无线家庭数字接口(WHDI)、WiGig和无线USB。
控制模块626可以被配置为执行源设备600通信控制功能。通信控制功能可以涉及与宿设备的协商能力,与宿设备建立会话,以及会话维持和管理。控制模块626可以使用RTSP来与宿设备进行通信。此外,控制模块626可以使用RTSP消息事务来建立UIBC,以协商源设备600和宿设备的能力,从而支持UIBC上的隧穿输入种类。在一些例子中,控制模块626可以根据本公开内容的技术,来建立经封装的外围数据的双向隧道。
用户输入模块628可以解析人机接口设备命令(HIDC)、通用用户输入、OS特定的用户输入、以及来自于UIBC分组(其可以包括隧穿分组)的经封装的信息。在一个例子中,用户输入分组可以使用相对于图4所描述的消息格式。在该例子中,用户输入解包器628可以部分地基于在用户输入分组报头中的用户输入种类字段的值,来确定如何对用户输入分组进行解析。举一个例子,用户输入种类字段可以标识通用输入种类,以指示反馈分组有效载荷数据是使用通用信息元素来格式化的。再举一个例子,用户输入种类字段可以标识人机接口设备命令(HIDC)输入种类。再举一个例子,用户输入种类字段可以标识操作系统(OS)特定的输入种类,以指示有效载荷数据是基于由源设备或者宿设备使用的OS类型来格式化的。
在另一个例子中,用户输入模块628可以基于用户输入分组的报头的用户输入种类字段,来识别经封装的外围数据。如果用户输入模块628识别出经封装的外围数据,则驱动器632可以用上面相对于图4所描述的方式,对外围数据进行解封装。在一些例子中,驱动器632可以对一个或多个接收的用户输入分组的有效载荷进行组合,以及将接口特定的报头增加到组合的有效载荷中。主机接口控制器630可以对接口特定的分组进行处理。在一些例子中,存储器602可以存储分组的数据中的至少一些,以使得显示处理器604可以对数据执行操作。
主机接口控制器630还可以构造接口特定的分组。驱动器632可以将接口特定的分组分割成较小的分组,以及根据本公开内容的技术,使用UIC对较小的分组进行封装。用户输入模块628可以从驱动器632接收经封装的外围数据,以及传输模块632可以在UIC上使用调制解调器624来发送经封装的外围数据。
图9是示出宿设备的例子的框图,其中所述宿设备实现用于支持去往和来自源设备的外围数据的双向隧穿的技术。宿设备700可以是合并在图2中提供的数据通信模型的WD系统的一部分。在一个例子中,宿设备700可以与源设备600形成WD系统。宿设备700包括调制解调器702、传输模块704、A/V解复用器706、视频解包器708、视频解码器710、显示处理器712、显示器714、音频解包器716、音频解码器718、音频处理器720、扬声器722、用户输入模块724、控制模块730、驱动器734和主机接口控制器736。宿设备700的组件均可以被实现成多种适当的电路中的任何一种,诸如一个或多个微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、分立逻辑器件、软件、硬件、固件或者其任意组合。
调制解调器702可以被配置为:根据WD系统中使用的物理层和MAC层来执行物理层和MAC层处理。如参照图2所描述的,物理层和MAC层可以定义用于WD系统中的通信的物理信令、寻址和信道接入控制。在一个例子中,调制解调器702可以被配置为:针对由Wi-Fi(例如,IEEE802.11x)标准定义的物理层和MAC层(诸如所述由WFD提供的),执行物理层和MAC层处理。在其它例子中,调制解调器702可以被配置为:针对以下各项中的任何一项,执行物理层和MAC层处理:无线HD、WiMedia、无线家庭数字接口(WHDI)、WiGig和无线USB。
传输模块704可以对从源设备接收的媒体数据进行处理。此外,传输模块704可以对UIBC分组进行处理,用于传送给源设备。例如,传输模块704可以被配置为:使用IP、TCP、UDP、RTP和RTSP来传送。此外,传输模块704可以在IP、TCP、UDP、RTP和RSTP分组的任意组合中,包括时间戳值。
A/V解复用器706可以应用解复用技术,以将来自数据流的视频有效载荷数据和音频有效载荷数据分开。在一个例子中,A/V复用器706可以将根据MPEG-2第1部分定义的MPEG2传输流的经封包的基本视频和音频流分开。
视频解包器708和视频解码器710可以执行用于实现本文所描述的封包和编码技术的视频封包器和视频编码器的互易的处理,以及向显示处理器712输出视频数据。
显示处理器712可以获得捕捉到的视频帧,以及可以对视频数据进行处理,用于在显示器714上显示。显示器714可以包括诸如下面的各种显示设备中的一种:液晶显示器(LCD)、等离子体显示器、有机发光二极管(OLED)显示器、或者其它类型的显示器。
音频解包器716和音频解码器718可以执行用于实现本文所描述的封包和编码技术的音频封包器和音频编码器的互易的处理,以及向显示处理器720输出音频数据。
音频处理器720可以从音频解码器获得音频数据,以及可以对音频数据进行处理,用于输出给扬声器722。扬声器722可以包括各种音频输出设备中的任何一种,诸如头戴式耳机、单扬声器系统、多扬声器系统或者环绕声系统。
用户输入模块724可以对诸如例如键盘、鼠标、跟踪球或跟踪板、触摸屏、语音命令识别模块之类的用户输入设备,或者任何其它这样的用户输入设备所接收的用户输入命令进行格式化。在一个例子中,用户输入模块724可以依照根据人机接口设备命令(HIDC)230、通用用户输入232、OS特定的用户输入234、以及上面相对于图2所描述的双向外围数据隧道228所定义的格式,对用户输入命令进行格式化。
用户输入模块724还可以基于用户输入分组的报头的用户输入字段,来识别来自传输模块724的外围数据。驱动器734可以将外围数据解封装成一个或多个接口特定的分组,其中主机接口控制器可以处理这些分组,并将它们发送给外围设备736。在另一个例子中,外围设备736可以发送外围数据主机接口控制器736。驱动器734可以控制主机接口控制器736,或者与主机接口控制器736进行交互,以及可以将外围数据封装成双向UIC分组。用户输入模块724可以向传输模块704发送双向UIC分组,以及传输模块704可以使用调制解调器702来发送分组。
控制模块730可以被配置为执行通信控制功能。通信控制功能可以涉及与源设备协商能力,与源设备建立会话,以及会话维持和管理。控制模块730可以使用RTSP来与源设备进行通信。此外,控制模块730可以使用RTSP消息事务来建立UIBC(诸如支持外围数据的封装的双向UIC),以协商宿设备700和源设备的能力,从而支持UIBC和UIBC上的隧穿输入种类。使用RTSP协商来建立双向UIC,可以类似于使用RTSP协商过程来建立媒体共享会话。
图10是根据本公开内容的技术,示出用于支持外围数据的双向隧穿的技术的流程图。在该技术中,源设备可以建立到宿设备的双向用户接口返回信道(UIBC)(801)。源设备可以使用UIBC从宿设备接收经封装的外围数据(802)。随后,源设备可以对外围数据进行解封装(803)。在一些例子中,源设备可以向源设备的主机接口控制器(例如,图1A的主机接口控制器165和127中的一个)发送经解封装的外围数据。源设备还可以接收用于向源设备标识宿设备的外围设备的隧道标识符值。在一些例子中,可以将外围数据封装在UIBC分组中。在一些例子中,源设备还可以接收用于向源设备标识宿设备的外围设备的隧道标识符值。
图11是根据本公开内容的技术示出用于支持外围数据的双向隧穿的技术的流程图。在该技术中,宿设备可以建立到源设备的双向用户接口返回信道(UIBC)(821)。宿设备可以使用UIBC从源设备接收经封装的外围数据(822)。随后,宿设备可以对外围数据进行解封装(823)。在一些例子中,宿设备可以向外围设备(例如,图1A的外围设备170中的一个)发送经解封装的外围数据。在一些例子中,在建立到第一设备的双向UIBC之前,宿设备还可以列举连接到宿设备的外围设备的接口。在一些例子中,宿设备可以从源设备接收用于标识宿设备的外围设备的隧道标识符值。
经封装的外围数据可以根据本文中所描述的任何消息格式来格式化,以及包括本文中所描述的任何类型的信息。例如,可以根据相对于图4所描述的消息格式,对外围数据进行格式化。
图12是示出用于支持外围数据的双向隧穿的技术的流程图。宿设备可以建立到源设备的双向用户接口返回信道(UIBC)(901)。宿设备可以接收外围数据(902),以及对外围数据进行封装(903)。宿设备还可以使用UIBC向源设备发送经封装的外围数据(904)。在一些例子中,宿设备可以从宿设备的外围设备(例如,图1A中的外围设备170中的一个)接收外围数据。在一个例子中,在建立到源设备的双向UIBC之前,宿设备可以列举连接到宿设备的外围设备的接口。在一些例子中,宿设备可以向源设备发送用于标识宿设备的外围设备的隧道标识符值。
图13是示出用于支持外围数据的双向隧穿的技术的流程图。源设备可以建立到宿设备的双向用户接口返回信道(UIBC)(921)。源设备可以接收外围数据(922),以及对外围数据进行封装(923)。源设备还可以使用UIBC向宿设备发送经封装的外围数据(924)。在一些例子中,源设备可以从主机接口控制器(例如,图1A的主机接口控制器165和127中的一个)接收外围数据。在一些例子中,源设备可以向宿设备发送用于标识宿设备的外围设备的隧道标识符值。
经封装的外围数据可以根据本文所描述的任何消息格式来格式化,以及包括本文中所描述的任何类型的信息。例如,可以根据相对于图4所描述的消息格式,对外围数据进行格式化。
在一个或多个例子中,所描述的功能可以在硬件、软件、固件或其任意组合中实现。如果在软件中实现,则所述功能可以作为一个或多个指令或代码存储在计算机可读介质中或者通过其进行传输。计算机可读介质包括计算机存储介质和通信介质二者,所述通信介质包括促进计算机程序从一个地方传送到另一个地方的任何介质。在一些例子中,计算机可读介质可以包括非暂时性计算机可读介质。数据存储介质可以是能够由一个或多个计算机或者一个或多个处理器来存取,以取回用于实现在本公开内容中描述的技术的指令、代码和/或数据结构的任何可用的介质。
通过举例而非限制性的方式,这样的计算机可读存储介质可以包括非暂时性介质,诸如RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁存储设备、闪存、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码单元并能够由计算机进行存取的任何其它介质。此外,任何连接可以适当地被称为计算机可读介质。如本文所使用的,磁盘和光盘包括压缩光盘(CD)、激光光盘、光盘、数字多功能光盘(DVD)、软盘和蓝光光盘,其中磁盘通常磁性地复制数据,而光盘则通常利用激光来光学地复制数据。上述的组合也应当包括在计算机可读介质的范围内。
代码可以由诸如一个或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其它等效的集成电路或者分立逻辑电路之类的一个或多个处理器来执行。因此,如本文中所使用的术语“处理器”可以指的是适合于实现本文中所描述的技术的任何前述结构或者任何其它结构。此外,在一些方面,本文中描述的功能可以在被配置用于编码和解码的专用硬件和/或软件模块中提供,或者合并到组合的编解码器中。此外,可以将这些技术全部地实现在一个或多个电路或者逻辑元件中。
本公开内容的技术可以用多种多样的设备或装置来实现,其包括无线手持装置、集成电路(IC)或者IC集(例如,芯片集)。在本公开内容中描述了各种组件、模块或单元,以强调被配置为执行所公开的技术的设备的功能方面,而并不是必需要求由不同的硬件单元来实现。相反,如上所述,可以将各个单元组合在编解码器硬件单元中,或者结合适当的软件和/或固件,通过包括如上所述的一个或多个处理器的互操作硬件单元的集合来提供。
描述了本发明的各种实施例。这些实施例和其它实施例在所附权利要求的保护范围之内。