本申请要求于2017年2月10日提交的第62/457,203号美国临时申请的优先权,要求于2017年1月20日提交到韩国知识产权局的第10-2017-0009963号韩国专利申请的优先权以及于2017年7月11日提交到韩国知识产权局的第10-2017-0087651号韩国专利申请的优先权,所述专利申请的公开通过引用全部合并于此。
具体实施方式
下面参照附图更加详细地描述示例性实施例。
在下面的描述中,即使在不同的附图中,相同的附图参考标号用于相同的元件。提供在描述中定义的事物(诸如,详细的构造和元件)以帮助全面理解示例性实施例。然而,应清楚:可在没有那些具体定义的事物的情况下实践示例性实施例。此外,由于公知的功能或构造会以不必要的细节使描述变得模糊,因此不详细描述它们。
在此使用的术语仅为了描述特定实施例的目的,并不意图限制本公开。如在此使用的,除非上下文清楚地另有指示,否则单数形式也意图包括复数形式。还将理解,当在本说明书中使用术语“包括”时指定存在阐述的特征、整体、步骤、操作、元件和/或组件,但不排除存在或添加一个或多个其他特征、整体、步骤、操作、元件、组件和/或它们的组。
当诸如“…中的至少一个”的表述在一列元素之后时,修饰整列元素而不修饰列表的单个元素。
图1示出用于重放和寻找多媒体文件的系统。图1中示出的系统包括媒体服务设备110、媒体重放设备120以及连接两个设备110和120的网络430。
媒体服务设备110包括适于向一个或多个视频重放设备提供计算服务的计算或处理装置。例如,媒体服务设备110包括能够生成或存储视频流并将视频流发送到用户装置的装置(诸如,网络相机、网络视频录像机(NVR)和数字视频录像机(DVR))。媒体服务设备110也可被称为媒体服务系统,其中,媒体服务系统包括服务器和网络相机。
媒体重放设备120包括适于经由网络430与媒体服务设备110或其他计算用户装置进行交互的计算或处理装置。例如,媒体重放设备120可包括台式计算机、移动电话或智能电话、个人数字助理(PDA)、膝上型计算机和平板计算机。
在媒体重放设备120的请求下通过网络430传输由媒体服务设备110实时捕捉或存储的媒体数据(例如,视频)。用户可重放或寻找通过在媒体重放设备120的web浏览器210上实现的用户界面传输的媒体数据。具体地讲,web浏览器210可包括安装在台式计算机或移动电话上的公知的浏览器(诸如,Google Chrome、Microsoft Explorer、Mozilla Firefox和Apple Safari),并且还可包括使用web浏览器的应用编程接口(API)或资源单独创建的软件应用。
在下文中,将参照图2至图5来描述通过WebSocket协议传输的实时流传输协议(RTSP)和/或实时传输协议(RTP)流。WebSocket可用作媒体服务设备110与媒体重放设备120之间的网络通信方案。
图2是示出针对装置之间的通信而分层定义的传输控制协议/互联网协议(TCP/IP)4层模型的示图。四个层包括:网络接口层21、互联网层22、传输层23和应用层24。由于WebSocket能够在传输层23之上传输消息,因此为了使用WebSocket连接,可必须首先在媒体服务设备110与媒体重放设备120之间建立TCP传输连接。一旦例如经由三路握手处理在媒体服务设备110与媒体重放设备120之间建立WebSocket连接,则通过传输WebSocket包来执行WebSocket通信。下面将参照图3至图5详细描述WebSocket连接和WebSocket包。
图3示出在媒体服务设备110与媒体重放设备120之间执行WebSocket连接的处理。媒体重放设备120请求媒体服务设备110使用WebSocket统一资源标识符(URI)发起WebSocket连接。可使用GetServiceCapabilities命令获得WebSocket URI。例如,WebSocket URI被表示为“ws://192.168.0.5/webSocketServer”(操作S1000)。
媒体重放设备120可向媒体服务设备110发送WebSocket升级请求。媒体服务设备110可利用代码101进行响应(操作S1100),其中,代码101为用于批准协议改变请求的状态码。
在媒体服务设备110与媒体重放设备120之间建立WebSocket连接之后,通过经由WebSocket发送的RTSP/RTP协议替代超文本传输协议(HTTP)/1.1协议来交换数据。图3中的DESCRIBE、SETUP、PLAY、PAUSE和TEARDOWN为RTSP命令。DESCRIBE请求包括统一资源定位符(URL)。对DESCRIBE的响应消息还包括请求的描述。SETUP请求指定是否应该发送单个媒体流。PLAY请求是用于播放一个或全部媒体流的请求,并且多个请求是可以的。PAUSE请求是用于暂停一个或全部媒体流的重放的命令。可响应于PLAY请求而重新开始重放。TEARDOWN请求是用于终止会话的命令。可通过TEARDOWN请求停止所有媒体流的重放,并且还释放与数据相关的所有会话(操作S1200)。
如下面表1提供图3中示出的在WebSocket连接处理中从媒体重放设备120发送的请求消息和媒体服务设备110的响应消息的示例。
【表1】
该WebSocket连接是根据遵循HTML5标准的WebSocket协议进行的。具体地讲,由于WebSocket连接持续地支持双向通信,因此可在WebSocket连接不断开的情况下,在媒体服务设备110与媒体重放设备120之间持续地发送和接收数据。
图4示出通过WebSocket连接发送和接收数据的处理的示例。参照图4,首先,媒体重放设备120将TCP/IP连接请求消息发送到媒体服务设备110,媒体服务设备110接收该消息,并将TCP响应消息(SYN-ACK)发送到媒体重放设备120,从而建立TCP/IP连接。TCP传输连接可由一对本地TCP套接字和远程TCP套接字形成。每个TCP套接字至少由标识符(诸如,端口号和IP地址)定义。可在媒体重放设备120与媒体服务设备110之间建立基于用户数据报协议(UDP)/IP的连接,替代基于TCP/IP的连接。
然后,当通过媒体重放设备120与媒体服务设备110之间的握手处理建立WebSocket连接时,之后可执行它们之间的持续的数据发送/接收。也就是说,媒体重放设备120以传输WebSocket包(socket.send)的形式将媒体流传输请求发送到媒体服务设备110,媒体服务设备110以响应WebSocket包(socket.onMessage)的形式将媒体流发送到媒体重放设备120。可在媒体重放设备120与媒体服务设备110之间持续执行这个处理,直到媒体流传输停止或者完成为止。
图5是示出通过网络接口21发送的通信包的结构的示图。当RTP头44添加到与数据45对应的RTP有效载荷时,RTP有效载荷变为RTP包。RTP包相当于WebSocket有效载荷,并且WebSocket头43可添加到RTP包以变为WebSocket包。WebSocket包可相当于TCP有效载荷,并且TCP头42可添加到WebSocket包以变为TCP包。最后,TCP包可相当于IP有效载荷,并且IP头41添加到TCP包,从而完成通信包,即,IP包。在媒体服务设备110和媒体重放设备120二者中执行完成IP包的处理和移除每个头的处理。
由于通过基于HTML5的WebSocket协议来执行媒体服务设备110与媒体重放设备120之间的通信,因此可由能够以HTML5解析的脚本代码来实现解码器和执行RTSP/RTP发送/接收控制的模块。因此,可在没有如常规情况那样单独安装插件的情况下,在HTML5环境的web浏览器中实现使用RTSP/RTP协议的媒体重放。
至此已经描述了媒体服务设备110与媒体重放设备120之间的网络通信方案。在下文中,将参照图6至图16描述媒体服务设备110与媒体重放设备120的配置和操作方法。
在描述之前,用于重放和寻找媒体的术语被定义。重放命令包括作为由用户输入的命令的播放、停止、暂停、倒退和快进,其中,播放、停止、暂停、倒退和快进为在web浏览器上显示的媒体的操作方法。与重放命令类似,寻找命令包括作为由用户输入的命令的用于寻找在web浏览器上显示的帧的跳过寻找、向前寻找和向后寻找。跳过寻找表示移动到任意帧来寻找,向前寻找表示沿当前显示的帧的向前方向寻找,向后寻找表示沿当前显示的帧的向后方向寻找。
图6示出根据示例性实施例的媒体服务设备110的配置。在一个示例性实施例中,媒体服务设备110包括实时视频相机111、编码器112、打包单元113、web服务器114、模块存储单元115、模块传输单元116和控制单元117。编码器112、打包单元113和控制单元117可被包括在一个或多个处理器中。
实时视频相机111是可实时捕捉图像的装置,并且捕捉包括执行视频捕捉和音频记录二者的情况以及仅执行视频捕捉的情况。
编码器112被配置为对由实时视频相机111捕捉的媒体进行压缩和编码。编码器112的编码不一定使用由嵌入在web浏览器中的解码器支持的特定编解码器来执行,而是可以以任意编解码器格式执行。
打包单元113对编码的媒体数据进行打包以生成传输包。可通过将媒体数据划分成具有适当长度的块以促进经由网络430的传输或者如果媒体数据短,则通过将控制信息(诸如,接收地址)共同分配给适当长度的每个数据,来执行打包。在这种情况下,控制信息位于包的头中。传输包为上述WebSocket包的形式。
打包单元113可根据由媒体重放设备120请求的方法来执行媒体数据的打包。当媒体重放设备120根据输入的寻找命令请求媒体时,打包单元113基于媒体数据的逐帧(诸如,按媒体数据的逐帧的单位)生成传输包。当媒体重放设备120根据输入的重放命令请求媒体时,打包单元113以容器格式生成传输包,其中,容器为包括多个帧的组块数据。这允许媒体重放设备120根据寻找命令基于逐帧执行解码来基于逐帧执行媒体寻找。此外,这使得可在重放命令的情况下配置由嵌入在媒体重放设备120的web浏览器中的解码器支持的容器格式。例如,这是以由视频标签支持的MPEG-DASH容器格式配置媒体数据以便将视频标签用作嵌入在web浏览器中的解码器的情况。
web服务器114建立与媒体重放设备120的通信会话。例如,可通过媒体服务设备110的web服务器114与媒体重放设备120之间的握手处理来在它们之间建立WebSocket连接。之后,根据媒体重放设备120的请求,通过web服务器114传输由打包单元113生成的传输包。
模块存储单元115可存储在媒体重放设备120中重放和寻找媒体所需的脚本模块。脚本模块作为以可由web浏览器解析的脚本编写的代码的模块,其允许媒体重放设备120在没有安装插件或单独的应用程序的情况下在HTML5环境的web浏览器中重放和寻找媒体。在一个实施例中,脚本模块可以是以JavaScript编写的代码。稍后将参照图8和图9来描述脚本模块。
模块传输单元116可将存储在模块存储单元115中的脚本模块传输到媒体重放设备120。模块传输单元116响应于经由网络430在媒体重放设备120与媒体服务设备110之间建立连接而传输脚本模块。
控制单元117可控制媒体服务设备110中的其他配置模块。例如,当媒体重放设备120通过网络430连接到web服务器114时,通过模块传输单元116将存储在模块存储单元115中的脚本模块传输到媒体重放设备120。在这种情况下,控制单元117将信号发送到各个模块或从各个模块接收信号,以控制操作被平稳地执行。
图7示出根据另一示例性实施例的媒体服务设备110的配置。图6的媒体服务设备110表示使用实时视频相机111发送实时实况媒体的实施例,图7的媒体服务设备110表示发送存储在媒体存储单元118中的媒体的实施例。
媒体存储单元118包括网络视频录像机(NVR)或个人视频录像机(PVR)。然而,将结合网络视频录像机来描述图7。媒体存储单元118从相机或服务器接收媒体数据,并压缩和存储接收的媒体数据。当存在来自媒体重放设备120的用于传输存储的媒体数据的请求时,媒体服务设备110在打包单元113中对存储在媒体存储单元118中的媒体数据进行打包,并通过web服务器114传输打包的数据。已经参照图6描述了媒体服务设备110的配置模块之中的打包单元113、web服务器114、模块存储单元115、模块传输单元116和控制单元117,因此,将省略对它们多余的描述。
图8示出根据示例性实施例的模块存储单元115的脚本模块。图8是用于寻找媒体的脚本模块的示例,其中,脚本模块包括RTSP/RTP客户端模块121、解包模块122、帧缓冲器123、解码器模块124以及渲染器模块125。在图8的实施例中,以JavaScript实现脚本模块,其中,JavaScript为可由web浏览器解析的脚本。
RTSP/RTP客户端模块121被配置为支持与媒体服务设备110的RTSP/RTP通信。在现有技术中,可能无法在没有插件的情况下在web浏览器上根据RTSP/RTP协议来处理媒体数据。根据本示例性实施例,即使web浏览器使用HTTP方案,RTSP/RTP客户端模块121也可允许可靠地接收通过RTSP/RTP协议发送的数据。
解包模块122可对从RTSP/RTP客户端模块121发送的包进行解包。解包是打包的相反操作。如果通过将媒体数据划分成具有适当长度的块来形成包而执行打包,则可通过经由将所述块(即,包)再次放在一起而将媒体数据恢复到打包之前的状态来执行解包。
帧缓冲器123可临时存储解包的帧。帧缓冲器123可临时存储在相对于当前显示的帧的向前位置和向后位置处的邻近的帧,并且稍后将参照图12给出它们的详细描述。
解码器模块124可对编码的媒体数据进行解压缩(即,执行解码)。与脚本模块的其他模块类似地以JavaScript实现解码器模块124。由于以JavaScript实现解码器模块124,因此与嵌入在web浏览器中的解码器不同,可以在不限制编解码器格式的情况下以任意编解码器格式执行解码。还可以基于逐帧执行解码。
如果根据图8的实施例以JavaScript实现解码器模块124,则可由例如下面的表2中示出的代码来表示解码器模块124。
【表2】
渲染器模块125用于渲染解码的媒体数据并将它显示在输出装置(诸如,监视器等)上。渲染器模块125使用WebGL将YUV格式的视频数据转换成RGB格式的视频数据。WebGL是通过JavaScript可用的并允许创建三维(3D)图形界面的基于web的图形库。
图9示出模块存储单元115的脚本模块的另一个实施例。图9是用于重放媒体的脚本模块的示例。脚本模块包括RTSP/RTP客户端模块121、解包模块122、帧缓冲器123和容器创建模块127。此外,在图9的实施例中,以JavaScript实现脚本模块。RTSP/RTP客户端模块121、解包模块122和帧缓冲器123是参照图8描述的模块。
更详细地参照图9,可以看出,与图8的情况不同,图9的脚本模块包括以JavaScript实现的容器创建模块127。容器创建模块127被配置为:当媒体数据未基于容器(诸如,未按容器的单位)打包时,通过收集帧来形成组块数据(chunk data)。
组块数据表示由视频标签支持的容器(诸如,MPEG-DASH容器)。由于容器创建模块127以与视频标签兼容的容器格式形成媒体数据,因此即使媒体捕捉装置不以容器格式发送媒体数据,也可以使用视频标签而没有兼容性问题。也就是说,它提供了可在不修改之前安装的图像捕捉装置的情况下使用视频标签的环境。
参照图8和图9描述的脚本模块在媒体重放设备120连接到媒体服务设备110时从媒体服务设备110发送到媒体重放设备120,并提供可在没有插件的情况下在媒体重放设备120的web浏览器210中执行重放和寻找媒体的操作的环境。也就是说,脚本模块被安装在媒体重放设备120中以配置用于重放和寻找媒体的系统。将参照图10和图11描述具有脚本模块的媒体重放设备120的实施例。
图10示出媒体重放设备120的实施例。图10的实施例表示用于当以逐帧格式接收媒体数据时重放和寻找媒体的媒体重放设备120。
媒体重放设备120包括构成接收单元的WebSocket客户端131和RTSP/RTP客户端模块121、解包模块122、帧缓冲器123、第一媒体恢复单元141、第二媒体恢复单元142、缓冲器控制器模块126、解码控制器模块128和用户接口132。在这种情况下,RTSP/RTP客户端模块121、解包模块122、帧缓冲器123、第一媒体恢复单元141的容器创建模块127、第二媒体恢复单元142的解码器模块124、渲染器模块125、缓冲器控制器模块126和解码控制器模块128是通过响应于媒体重放设备120经由网络430连接到媒体服务设备110的情况接收脚本模块而被配置的模块。在图10的实施例中,媒体重放设备120包括两个视频解码器,即,分别包括在第一媒体恢复单元141和第二媒体恢复单元142中的第一视频解码器和第二视频解码器。
WebSocket客户端131和RTSP/RTP客户端模块121构成接收单元。WebSocket客户端131是用于与媒体服务设备110的web服务器114建立WebSocket连接的模块。媒体重放设备120和媒体服务设备110通过WebSocket客户端131与web服务器114之间的握手而分别发送和接收传输包。
RTSP/RTP客户端模块121执行如图8的实施例中描述的在用户的web浏览器210中支持RTSP/RTP通信的功能。因此,用户可在不安装单独的插件的情况下使用RTSP/RTP协议通过HTML5环境的web浏览器210来重放媒体。
已经经过WebSocket客户端131和RTSP/RTP客户端模块121的传输包在解包模块122中被解包,然后被传送到帧缓冲器123。
将参照图12描述帧缓冲器123和缓冲器控制器模块126。图12示出帧缓冲器123和缓冲器列表151的实施例。帧缓冲器123是用于临时存储解包的帧的模块,缓冲器列表151是包括临时存储在帧缓冲器123中的帧的标识符的模块。在一个实施例中,标识符是存储帧的帧缓冲器123的存储器地址。
参照图12,帧n-1、帧n和帧n+1顺序地构成多个帧,并且各个帧的存储器地址是0x031F、0x03AD和0x0514。帧n是与停止重放的点或通过寻找命令而移动的点对应的帧,帧n+1是沿向前方向的最近的帧,帧n-1是沿向后方向的最近的帧。
帧缓冲器123缓冲帧n以及沿相对于帧n的向前方向和向后方向的邻近的帧。在这种情况下,沿向前方向的将被缓冲的邻近的帧的数量可等于沿向后方向的将被缓冲的邻近的帧的数量。
缓冲器列表151以列表的形式临时存储在帧缓冲器123中临时存储的所有的帧的标识符。图12示出将帧n-1、帧n和帧n+1的标识符0x031F、0x03AD和0x0514以列表形式存储在缓冲器列表151中。
缓冲器控制器模块126包括缓冲器列表151作为用于根据重放命令或寻找命令来控制帧缓冲器123的操作的模块。当用户发送沿相对于当前显示的帧n向前的方向的寻找152的命令时,缓冲器控制器模块126参照缓冲器列表151中的帧n的标识符的下一个标识符0x0514通过指针寻找到帧n+1,其中,帧n+1为沿帧n的向前方向的最近的帧。类似地,当沿相对于帧n的向后方向的寻找153的命令被输入时,缓冲器控制器模块126参照在缓冲器列表151中的帧n的标识符的之前标识符0x031F通过指针寻找到帧n-1。
当媒体数据的寻找一直执行到包括在缓冲器列表151中的最终标识符或者跳过寻找执行到针对未包括在帧缓冲器123中的任意帧时,可重新开始缓冲帧缓冲器123中的相对于与最终标识符对应的帧或任意帧的邻近的帧的处理,以执行平滑寻找。
如果帧缓冲器123被设置为选择性地对I帧(帧内帧)进行缓冲,则用户可在多个帧之中针对I帧执行向前寻找和向后寻找。
为了临时存储在当前重放时间之后沿向前方向的一定数量的邻近的帧,用于媒体重放的传统缓冲器使用如果寻找方向改变为向后方向则再次执行缓冲的方法。然而,由于本公开的帧缓冲器123临时存储在当前重放时间的沿向前方向和向后方向的邻近的帧,因此当用户沿与重放方向相反的方向执行寻找时,不需要另外的缓冲。
当根据重放命令播放媒体时,帧缓冲器123可用作抖动缓冲器(jitter buffer)。因此,通过消除由于音频业务的传输延迟而引起的抖动可以使音频重放流畅。
再次参照图10,将将被重放或寻找的媒体从帧缓冲器123发送到第一媒体恢复单元141或第二媒体恢复单元142。
作为用于重放媒体的模块,第一媒体恢复单元141包括容器创建模块127、均方误差(MSE)模块134和视频标签模块135。作为第一视频解码器的视频标签模块135对数据进行解码。视频标签模块135还可被称为视频标签播放器。
如参照图9所述,当媒体数据不是以容器格式传输时,容器创建模块127收集帧以生成容器格式的组块数据。已经经过容器创建模块127的媒体数据在不存在因容器格式引起的兼容性问题的情况下传送到MSE模块134和视频标签模块135。
MSE模块134为为了视频流传输重放而使用HTTP下载创建的用于HTML5的JavaScript API。这种由万维网联盟(W3C)标准化的技术能够在游戏机(诸如,Xbox和PlayStation 4(PS4))或Chromecast浏览器上进行流传输重放。
视频标签模块135执行解码和渲染,使得媒体被显示在web浏览器上。使用视频标签模块135的解码器能够以比由于JavaScript的动态语言特性而具有限制的解码器模块124更好的性能进行解码。换句话说,可实现高分辨率图像和高每秒帧数(FPS)的解码。
作为用于寻找媒体的模块,第二媒体恢复单元142包括解码器模块124、渲染器模块125和画布(canvas)标签133,并且媒体数据通过以JavaScript实现的解码器模块124被解码,其中,解码器模块124为第二视频解码器。
基于逐帧执行解码器模块124中的解码。由于解码器模块124的逐帧处理方法,所以用户可基于逐帧寻找媒体。
经由渲染器模块125和画布标签133将解码的媒体数据显示在web浏览器上。画布标签133是允许2D形状和位图图像被动态渲染的HTML5的元素。也就是说,它可被视为web浏览器上的绘图程序。由于它是大多数最新版本的web浏览器支持的功能,因此可通过以JavaScript实现的解码器基于逐帧处理媒体数据,并通过使用画布标签133将媒体数据显示在web浏览器上。
解码控制器模块128可根据用户的输入来控制媒体数据将通过第一媒体恢复单元或第二媒体恢复单元解码。如果用户的输入为重放命令,则帧缓冲器123通过缓冲器控制器模块126将媒体数据发送到第一媒体恢复单元141,并且媒体数据在第一媒体恢复单元141中被解码并被显示在web浏览器210上。如果用户的输入为寻找命令,则帧缓冲器123通过缓冲器控制器模块126将媒体数据发送到第二媒体恢复单元142,并且媒体数据在第二媒体恢复单元142中基于逐帧解码并显示在web浏览器210上。
解码控制器模块128可被配置为硬件(诸如,CPU)的执行指令,但是也可被实现为软件(诸如,C语言、C++或JavaScript)中的子例程。
当在执行重放命令的同时输入寻找命令时,解码控制器模块128停止第一媒体恢复单元141的解码,并将媒体数据发送到第二媒体恢复单元142,使得通过以JavaScript实现的解码器模块124对媒体数据进行解码。当在执行寻找命令的同时输入重放命令时,解码控制器模块128停止第二媒体恢复单元142的解码,并将媒体数据发送到第一媒体恢复单元141,使得通过视频标签模块135执行解码。
参照图13来描述作为在图10的实施例中的媒体重放设备120的最终配置模块的用户接口132。
图13示出根据示例性实施例的包括在用户接口132中的GUI 211。用户接口132包括GUI 211和输入装置。图13中示出在web浏览器210上实现的GUI 211。
如果用户接口132的输入装置为触摸屏,则用户可通过触摸显示有GUI211的屏幕来操作系统。如果输入装置为鼠标,则用户可通过点击或拖动GUI211的每个按钮来操作系统。
GUI 211包括重放命令输入单元212和寻找命令输入单元213。用户可通过重放命令输入单元212输入重放命令(诸如,重放、暂停和停止)。用户可通过使用寻找命令输入单元213输入寻找命令(诸如,寻找模式的开/关、向前寻找和向后寻找)。
当用户将切换按钮214设置为开时,开始寻找模式。在指示当前重放位置的指示器217的两侧的阴影条指示临时存储在帧缓冲器123中的当前显示的视频帧以及沿向前方向和向后方向的邻近的帧。当用户点击向前寻找按钮215时,执行向前寻找以寻找沿当前显示的帧的向前方向的邻近的帧。当用户点击向后寻找按钮216时,执行向后寻找以寻找沿当前显示的帧的向后方向的邻近的帧。此外,用户可通过将指示器217拖动到特定的帧来跳过一个或多个帧。在图13的以上描述中,已经解释了当用户将寻找模式设置为开时,模式被切换到寻找模式。然而,本示例性实施例不限于此,并且可被配置为使得在发生特定事件(诸如,指定对象的出现、超过一定水平的音频的生成、场景改变等)时,模式被自动切换到寻找模式。
将参照图14描述根据用户的输入的媒体重放设备120的操作处理。
当通过用户界面132输入重放命令之中的播放时,解码控制器模块128指示WebSocket客户端131请求媒体数据。
解码控制器模块128不一定必须指示WebSocket客户端131请求媒体数据。相反,解码控制器模块128可直接形成单独的通信信道来请求媒体数据。也就是说,可根据系统配置不同地设置它。在图14的实施例中,解码控制器模块128直接请求媒体服务设备110将媒体数据发送到媒体重放设备120。
从媒体服务设备110接收的媒体数据被临时存储在帧缓冲器123中,然后被传送到第一媒体恢复单元141。媒体数据在第一媒体恢复单元141的视频标签模块135中被解码,并被显示在web浏览器210的用户接口132上(操作S2000)。
当诸如暂停或停止的命令被输入到用户接口132时,解码控制器模块128将停止媒体重放的命令发送到第一媒体恢复单元141,并且第一媒体恢复单元141停止正被重放的媒体(操作S2100)。
当寻找命令被输入到用户接口132时,WebSocket客户端131通过解码控制器模块128的命令向媒体服务设备110请求媒体数据。在这种情况下,请求的媒体数据可作为以逐帧格式生成的传输包被发送。接收的媒体数据被临时存储在帧缓冲器123中,并且寻找的目标帧被发送到第二媒体恢复单元142。由在第二媒体恢复单元142中的以JavaScript实现的解码器模块124基于逐帧对媒体数据进行解码,并将媒体数据显示在用户接口132上(操作S2200)。
接下来,将参照图11描述媒体重放设备120的另一个实施例。如果图10的实施例涉及用于重放和寻找以逐帧格式接收的媒体数据的媒体重放设备120,则图11的实施例表示用于重放和寻找以包括多个帧的组块数据的形式接收的媒体数据的媒体重放设备120。
与图10的实施例不同,图11的实施例不包括容器创建模块127。取而代之,容器缓冲器129用于在以容器格式(即,基于组块数据(诸如,按组块数据的单位))接收到媒体数据时缓冲当前被解码并输出的组块数据。当已经在媒体服务设备110中以容器格式对接收到的媒体数据进行打包并发送该媒体数据时,组块数据被直接输入到MSE模块134,而不通过如图10所示的容器创建模块127。
缓冲在容器缓冲器129中的组块数据可被输入到第一媒体恢复单元141以用于重放,并可在被划分成帧之后被缓冲在帧缓冲器123中以用于寻找。与图10的实施例类似,缓冲在帧缓冲器123中的帧在第二媒体恢复单元142中被解码并被渲染。此外,存储在帧缓冲器123中的帧可在被输入到第二媒体恢复单元142的步骤中被双向地缓冲,使得用户容易地执行双向(向后/向前)寻找。
在下文中,将描述重放和寻找由图11的媒体重放设备120以容器格式接收的组块数据的方法。
通过构成接收单元的WebSocket客户端131和RTSP/RTP客户端模块121接收到的媒体数据在解包模块122中被解包并被发送到容器缓冲器129。
当用户输入媒体的重放命令时,容器缓冲器129将媒体数据传送到第一媒体恢复单元141,使得通过MSE模块134和视频标签模块135恢复媒体数据并输出该媒体数据。
当用户输入媒体的寻找命令时,容器缓冲器129将组块数据发送到帧缓冲器123。从容器缓冲器129连接到帧缓冲器123的箭头指示发送的组块数据。
帧缓冲器123将组块数据格式的媒体数据转换成逐帧格式的媒体数据,并将寻找的目标帧提供给第二媒体恢复单元142。
第二媒体恢复单元142通过解码器模块124和渲染器模块125解码并渲染作为用户的寻找命令的目标的帧,并输出该帧。
由解码控制器模块128和缓冲器控制器模块126以与图10的实施例中的方式相同的方式来执行根据用户的重放和寻找命令的对缓冲和媒体恢复的控制。响应于重放命令,解码控制器模块128控制第一媒体恢复单元141恢复并输出媒体数据,并且缓冲器控制器模块126控制容器缓冲器129缓冲组块数据。响应于寻找命令,解码控制器模块128控制第二媒体恢复单元142恢复并输出媒体数据,并且缓冲器控制器模块126控制组块数据从容器缓冲器129传送到帧缓冲器123。
如上所述的图10的媒体重放设备120和图11的媒体重放设备120分别是重放和寻找逐帧格式和组块数据格式的媒体数据的实施例。将清楚,可通过两个实施例的组合来配置能够重放和寻找逐帧格式的媒体数据和组块数据格式的媒体数据二者的媒体重放设备120。
图15示出根据示例性实施例的生成以JavaScript实现的脚本模块的处理。参照图15,可通过使用转换器(诸如,Emscripten)转换以传统的C和C++本地代码编写的源以获得可在浏览器中使用的JavaScript代码来实现以JavaScript实现的脚本模块。
当使用诸如Emscripten的转换器时,可以从传统的本地代码获得以JavaScript实现的解码器或容器。因此,具有可降低编解码器依赖性的优点。
由于使用JavaScript代码代替插件,因此不必担心浏览器的支持中断。此外,不需要担心是否根据浏览器使用ActiveX接口或使用NPAPI接口。也就是说,具有可降低对浏览器的依赖性的优点。
例如,图1中示出的媒体重放设备120可被实现为图16中示出的计算装置400。计算装置400可以是但不限于移动手持装置(例如,智能电话、平板计算机等)、膝上型或笔记本计算机、分布式计算机系统、计算网格或服务器。计算装置400可包括经由总线440彼此或与其他元件通信的处理器401、内存403和存储器408。总线440可连接到显示器432、至少一个输入装置433和至少一个输出装置434。
所有这些元件可直接或经由一个或多个接口或适配器连接到总线440。总线440连接到各种各样的子系统。总线440可包括存储器总线、存储器控制器、外围总线、本地总线以及它们的组合。
处理器(例如,中央处理器(CPU))401可选地包括作为用于临时存储指令、数据或计算机地址的本地存储器的高速缓存存储器402。处理器401执行存储在计算机可读存储介质(诸如,内存403或存储器408)中的指令(或软件模块)。计算机可读存储介质可存储实现特定实施例的软件模块,并且处理器401可执行存储的软件模块。
内存403可包括:随机存取存储器(RAM)404、只读存储器(ROM)405以及它们的组合。此外,具有启动计算装置400所需的基本例程的基本输入/输出系统(BIOS)(例如,固件)可被包括在内存403中。
存储器408用于存储操作系统409、可执行文件(EXEC)410、数据411、API 412等。存储器408可以是硬盘驱动器、光盘驱动器、固态驱动器(SSD)等。
计算装置400可包括输入装置433。用户可经由输入装置433将命令和/或信息输入到计算装置400。输入装置433的示例可包括:键盘、鼠标、触摸板、游戏杆、游戏控制器、麦克风、光学扫描仪和相机。输入装置433可经由包括串行端口、并行端口、游戏端口、通用串行总线(USB)等的输入接口423连接到总线440。
在一些实施例中,计算装置400连接到网络430。计算装置400经由网络430连接到其他装置。在这种情况下,网络接口420从网络430接收一个或多个包的形式的通信数据,并且计算装置400存储接收到的通信数据以用于处理器401的处理。类似地,计算装置400将发送的一个或多个包的形式的通信数据存储在内存403中,并且网络接口420将通信数据发送到网络430。
网络接口420可包括:网络接口卡、调制解调器等。网络430的示例可包括因特网、广域网(WAN)、局域网(LAN)、电话网络、直接连接通信等,并且有线和/或无线通信方案可被采用。
可通过显示器432显示处理器401对软件模块的执行结果。显示器432的示例可包括液晶显示器(LCD)、有机发光显示器(OLED)、阴极射线管(CRT)和等离子显示面板(PDP)。显示器432经由视频接口422连接到总线440,并且显示器432与总线440之间的数据传输可由图形控制器421控制。
除了显示器432之外,计算装置400可包括至少一个输出装置434(诸如,音频扬声器和打印机)。输出装置434经由输出接口424连接到总线440。输出接口424可以是:例如,串行端口、并行端口、游戏端口、USB等。
虽然不限于此,但是示例性实施例可被实施为计算机可读记录介质上的计算机可读代码。计算机可读记录介质是可存储之后可由计算机系统读取的数据的任何数据存储装置。计算机可读记录介质的示例包括:只读存储器(ROM)、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光学数据存储装置。计算机可读记录介质还可被分布在联网的计算机系统,使得以分布式的方式存储并执行计算机可读代码。此外,示例性实施例可被编写为通过计算机可读传输介质(诸如,载波)传输的计算机程序,并且在执行程序的通用或专用数字计算机中被接收并实现。此外,应理解,在示例性实施例中,上述设备和装置的一个或多个单元可包括电路、处理器、微处理器等,并可执行存储在计算机可读介质中的计算机程序。
前述示例性实施例仅仅是示例性的,不将被解释为限制性的。本教导可被容易地应用于其他类型的设备。此外,示例性实施例的描述意图是说明性的,而不限制权利要求的范围,并且很多替代物、修改和改变对于本领域技术人员来说将是清楚的。