[go: up one dir, main page]

CN108136259B - 用于流式传输和用于再现应用的方法和电信网络 - Google Patents

用于流式传输和用于再现应用的方法和电信网络 Download PDF

Info

Publication number
CN108136259B
CN108136259B CN201580081901.0A CN201580081901A CN108136259B CN 108136259 B CN108136259 B CN 108136259B CN 201580081901 A CN201580081901 A CN 201580081901A CN 108136259 B CN108136259 B CN 108136259B
Authority
CN
China
Prior art keywords
telecommunications terminal
streaming
application
audio
streaming server
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201580081901.0A
Other languages
English (en)
Other versions
CN108136259A (zh
Inventor
F·彼得
S·克哈里尔
R·威斯特曼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Gorillabox GmbH
Original Assignee
Gorillabox GmbH
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Gorillabox GmbH filed Critical Gorillabox GmbH
Publication of CN108136259A publication Critical patent/CN108136259A/zh
Application granted granted Critical
Publication of CN108136259B publication Critical patent/CN108136259B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/33Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers using wide area network [WAN] connections
    • A63F13/332Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers using wide area network [WAN] connections using wireless networks, e.g. cellular phone networks
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/33Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers using wide area network [WAN] connections
    • A63F13/335Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers using wide area network [WAN] connections using Internet
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • A63F13/352Details of game servers involving special game server arrangements, e.g. regional servers connected to a national server or a plurality of servers managing partitions of the game world
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • A63F13/355Performing operations on behalf of clients with restricted processing capabilities, e.g. servers transform changing game scene into an encoded video stream for transmitting to a mobile phone or a thin client
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • A63F13/358Adapting the game course according to the network or server load, e.g. for reducing latency due to different connection speeds between clients
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/45Controlling the progress of the video game
    • A63F13/49Saving the game status; Pausing or ending the game
    • A63F13/493Resuming a game, e.g. after pausing, malfunction or power failure
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/1066Session management
    • H04L65/1069Session establishment or de-establishment
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/1066Session management
    • H04L65/1101Session protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/131Protocols for games, networked simulations or virtual reality
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Business, Economics & Management (AREA)
  • General Business, Economics & Management (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明涉及一种用于通过确定的电信系统来流式传输和再现应用程序(APPs)的方法和一种电信网络以及所述电信网络用于流式传输和再现这样的应用程序(APPs)的应用。按照本发明的方法能实现,在对于软件陌生的环境上播放非本地程序化的应用,亦即,不满足陌生平台的硬件特定的例如关于运算能力和图像能力的前提条件,并且不满足陌生平台的软件特定的前提条件,例如仅在确定的操作系统上运行的应用。

Description

用于流式传输和用于再现应用的方法和电信网络
技术领域
类型
本发明涉及一种用于流式传输和用于再现应用(APP)的方法。
此外,本发明涉及一种用于流式传输和用于再现应用(APP)的电信网络。
最后,本发明也涉及电信网络的应用。
背景技术
现有技术
现在,应本地开发用程序越来越重要。然而,本地的开发总是个别地适配于确定的平台。然而,问题是,越来越新且越来越现代的平台面市并且用户不是仅使用一个平台而是使用很多不同的平台。
另一个问题是位于所述平台背后的硬件。专门的应用也是基于专门的硬件。该硬件应满足对于应用的确定的要求,例如图像负载、处理器技术规格、内存、功耗。相反地,应用也可能要求比平台的硬件所能提供的而更高的运算能力或图像能力。这尤其在图像密集的应用(例如游戏)中可能导致,因为系统不兼容而用户不能使用该应用。基本上,存在三种不同的方式将应用传输到陌生平台的环境中。
首先,存在所谓的本地的开发(端口)。在着眼于陌生的平台的情况下,重新开发应用。这是全部三种方法中最复杂且最耗时的方法,然而该方法提供使用新平台的所有功能的可能性。然而该方法的问题是,所述应用受到平台的框架条件约束。因此,例如具有高的图像要求的游戏不能移植到移动的平台上。因为例如不是每个用户都具有相同的移动无线电设备,不同的硬件前提条件在陌生的平台内也构成问题。
此外,已经存在如下软件,所述软件应该为开发者能实现较容易地形成本地的开发。在使用特定的软件的情况下移植这样地发生,即,替换现存的软件的部件,以便因此实现对于陌生系统的兼容性。因为一些平台在架构设计方面彼此区别很大,该步骤不总是可能的。在这样的情况下,通常也缺少平台运行者的支持,出于这个原因通常动用本地的开发。
Web-App是基于Web浏览器开发的应用并且由此可以在几乎全部的平台上使用。为此,也经常使用WCM系统(Webcontent Management)。然而,所述应用可以仅通过平台必须提供的相应的浏览器来实现。在该方法中不利的是,不是全部的应用都可以用这种方法移植。必须使用不总是保证应用的本地的呈现(Darstellung)的浏览器。
流式传输:这表示,应用程序在服务器上运行并且在陌生平台上借助客户端仅播放。该技术是最新的然而限制于确定的非时间关键(在这里关键字是“延迟”)的应用。
由文献WO 2012/037170 A1已知,在流式传输的同时将应用程序代码传输到客户端,以便一旦所述应用程序能在客户端上运行就可以结束流式传输,从而所述应用程序直接在客户端上运行,以便因此能够节省流式传输资源。这可能对于例如控制台是有吸引力的,但是在硬件特定的前提条件(限制)下是不可能的。
在文献WO2009/073830中描述了一种系统,该系统基于“订阅费”向用户提供对服务的访问。在这种情况下,给客户分配针对预订的时间段的确定的流式传输服务器。然而,我们的系统给用户分配在地理上最优的流式传输服务器,而不需要“订阅费”。
补充于此地,文献WO 2010/141522 A1使用了游戏服务器,在客户端与流式传输服务器之间的流式传输通信部分地通过该游戏服务器发生。此外,交互层的功能性通过视频源来映射,该视频源在该开发时通过单独的服务器处理,以便使第三方访问例如广告界面。
发明内容
任务
本发明的任务在于,提供一种用于通过确定的电信系统来流式传输和再现应用(APP)的方法并且在对于软件陌生的环境上播放非本地兼容的应用。
解决方案
所述任务通过本发明来解决。
本发明描述了一种用于通过确定的电信系统来流式传输和再现应用(APP)的方法,其中,一个或多个能够通过电信彼此连接的流式传输服务器执行有关的应用并且所述流式传输服务器地理上接近地与相应的电信终端连接,其中,所述相关的电信终端从地理上接近的服务器调用请求的应用(应用程序),所述服务器提供用于相关的应用的呈现和编码的运算能力。
优点:通过个别地选择地理上接近的流式传输服务器,将在流式传输服务器与客户端之间的延迟减少至最小,从而实现具有尽可能最大的覆盖的尽可能最大的作用范围,而所述方法资源节约地工作并且在需要该流式传输服务器时,该方法于是才供给流式传输服务器使用。
此外本发明描述了一种用于在对于应用陌生的系统环境上再现应用的方法,所述系统环境要么通过不同的硬件部件要么通过不同的软件部件相区别,其中,所述流式传输服务器承担不同的应用的处理以及应用程序及其音频信号和视频信号的呈现/编码,其中,将数据传输到相应的电信终端——移动无线电设备、平板电脑、膝上型电脑、PC、TV——上并且所述传输借助改进的h.254协议进行并且WAN用作通过UDP/TCP用于音频/视频包的传输方式并且完全的运算能力由相关的流式传输服务器承担,其中,仅在电信终端中解码打包的数据。
优点:通过通信的标准化,能够与应用无关地在每一个任意的时间点为在客户端与流式传输服务器之间的通信选择理想的路线。
本发明描述了一种用于提供与平台无关的流式传输技术的方法,所述流式传输技术是一次性地程序化的并且可移植到任意的电信终端上,其中,各个应用(应用程序)、例如视频游戏的流式传输通过WAN这样进行,使得
a)借助电信终端(小应用程序)与会话服务器进行通信;
b)为确定的终端用户针对相关的应用程序、例如游戏的与电信终端地理上最接近的流式传输服务器进行确定的会话;
c)会话信息通过相关的会话服务器传送给电信终端和流式传输服务器;
d)进行在电信终端与相关的应用程序、例如视频游戏的流式传输服务器之间的直接的连接;
e)在建立在电信终端与相关的流式传输服务器之间的直接的连接的情况下采用以下步骤:
i.通过相关的流式传输服务器记录正在运行的应用程序、例如游戏的音频数据/视频数据,在所述流式传输服务器上运行所述游戏;
ii.通过高品质的硬件编码器来压缩音频数据/视频数据;
iii.通过WAN来传输压缩的音频数据/视频数据;
iv.在电信终端侧接收所述音频数据/视频数据;
v.解压所述音频数据/视频数据;
vi.在电信终端(小)上可视化所述音频数据/视频数据;
vii.在电信终端(小)上记录电信终端的用户、例如游戏者的行为(输入);
viii.将输入高效地传输回所述游戏的相关的流式传输服务器,以及
ix.在流式传输服务器上再现所传输的输入。
一些优点
按照本发明的方法按照任务设置能实现,在对于软件陌生的环境中播放非本地程序化的应用,亦即,不满足陌生平台的硬件特定的例如在运算能力和图像能力方面的前提条件,并且不满足陌生平台的软件特定的前提条件,例如仅在确定的操作系统上运行的应用。相比于例如文献US 2014/0073428 A1,本发明使用专门为该应用创建的客户端。该客户端可以在每一个任意的平台上使用,以便确保几乎没有延迟地再现h.254压缩的流。使用h.254代码用于帧的传输。H.264/MPEG-4AVC是用于高效率的视频压缩的H.标准。在2003年通过了该标准。在此,ITU名称为H.264。在ISO/IEC MPEG中,该标准的名称为MPEG-4/AVC(Advanced Video Coding),并且是MPEG-4标准的第十部分(MPEG-4/Part 10,ISO/IEC14496-10)。此外,在按照本发明的方法中使用资源处理,该资源处理将负载分配到各个流式传输服务器上,以便一方面节约资源而且另一方面节约容量/投入。相比于类似的系统、例如在文献WO 2012/37170 A1中的系统,这能为所述系统实现较成本节约地工作。这也提供如下可能性,即,关闭在正在运行的流式传输服务器,以便进行例如维护工作。普遍已知的是,在几乎所有情况下、例如在文献WO 2010/141522 A1中,总是必须将所谓的钩子(Hook)引进到应用程序的代码中,以便能为流式传输服务器实现流式传输所述应用程序。这具有如下结果,即,必须改变所述应用程序代码,这一方面可能导致额外耗费,另一方面然而可能导致给所述应用程序的原始开发者带来巨大的问题。按照本发明的方法使钩子成为多余并且能实现所述方法的自动化。
客户端应用程序基本上包括三部分(解码线程、呈现线程和交互层)并且保存在clientnetwork.so(共享库)中。所述部分划分为各个模块。
客户端会话管理器模块负责管理(发起/结束)所述会话并且用于管理由用户发起的会话。通过该模块也能够进行关于延迟优化的调整。
网络模块承担网络通信并且管理与流式传输服务器的通信。
控制器模块截取该应用的用户输入并且将该输入传输给游戏流式传输服务器。
音频解码呈现模块包括两部分:解码模块承担h.264流的解码。音频播放器播放声音。
评估器模块承担向流式传输服务器发送报告。
恢复模块承担处理用于损坏的帧的策略。
客户端UI模块集成在交互层中并且负责应用程序的UI。
交互层能实现处于其下的呈现线程上要可视化的信息的附加的可视显示,以便显示例如社区特征/帮助或广告。该交互层位于呈现线程之上并且能够由用户个别地调整。
对于交互层,为每个平台提供一个预定的用户界面。然而,用户可以通过所谓的层脚本在确定的框架条件的情况下自己创建相应的用户界面。层脚本为用户提供了专门开发的脚本环境,这能实现将确定的功能性链接到预定义的按钮。因此用户能够个性化地使其UI适配于其需求。
流式传输服务器基本上包括三个模块(网络线程、GPU线程和会话处理器)并且保存在servernetwork.dll(共享库)中。给在流式传输服务器上的每个正在运行的应用程序分别分配一个GPU和一个网络线程。该自动的进程由会话处理器管理。
该网络线程负责传送编码的音频和视频文件。
GPU线程负责应用的音频和视频帧的硬件编码、承担通过UDP/TCP的包缓冲并且承担时间戳和压缩。
会话处理器负责开始/停止并且管理GPU和网络线程。该会话处理器协调在游戏流式传输服务器上的可使用的资源并且与会话管理服务器通信。会话管理服务器的背后的构思是自动地管理资源,以便能够节省成本。
会话管理服务器包括四个模块:认证模块;网络模块;会话管理器模块;评估器模块。
接入服务器承担客户端的认证,以便一方面存储对于流式传输服务器的客户端技术规范,以便检查客户端是否有权调用所请求的应用。该认证也可以利用第三方系统在对面起作用,从而也可以连接陌生系统。
网络模块负责负载均衡、质量保证和管理。负载均衡理解为将负载在网络内均匀地分配。在质量保证领域中,对每个单个的流进行监视和与性能有关地优化(例如通过确定的路由)。该管理应该能为管理员实现了解当前的负载和路由选择,以便进行确定的配置。
会话管理器模块负责负载优化和控制游戏流式传输服务器。该单元将到达的客户请求与游戏流式传输服务器上的空闲空间相关联并且接着建立客户端与流式传输服务器之间的直接的连接。对于关联的关键性的判据是:在流式传输服务器与应用程序客户端之间的延迟和可使用的资源。目标是以该单元建立一个资源节约的方法,以便能够关掉未使用的功能。
评估器模块。该评估器模块承担生成统计数据和管理。
内容服务器承担对于合适的游戏在相应的客户端的交互层上播放广告。广告可以以多个形式示出。要么在应用程序内长期放置,要么预定义如下的确定的时间点,这些时间点设置相应的触发器,一旦触发便播放广告。
UDP(User Datagram Protocol,德语,用户数据包协议)对于实时数据传输是简单的、较少耗费的且较高效率的。然而UDP的问题在于,没有用于处理在网络上丢失的数据包的机制。因此,在云中玩游戏期间会出现屏幕错误、失帧(Ruckler)和闪烁。
我们已经确定了四个智能地纠正包丢失情况的策略。
阻塞:在进行故障排除期间在用户侧示出静止图像的策略。与屏幕错误、失帧和闪烁相比,这能为用户实现更好的用户体验。因此,该方法将确保,图像在包丢失的情况下不是错误的。
非阻塞:在服务器上请求传输丢失的包期间在用户侧不产生静止图像的策略。因为所述重新的传输处于我们自己的控制之中并且在需要所述重新的传输时我们才有效地请求所述重新的传输,所述重新的传输与TCP传输不是类似的。
内部更新:该策略在用户侧实现,该策略在运行时间内与(在服务器侧的)视频编码器通信。在丢包的情况下,它请求所述编码器进行图像更新。因此,一旦图像由于图像包的丢失而中断,则在数毫秒之内把连肉眼也不会注意到的图像更新应用到所述图像上。
图像检查:该策略持续关注在从服务器侧发送的图像上的帧率。在帧率波动的情况下,该策略确保,以恒定的帧率发送所述图像包。在此,这有助于确保均匀的图像体验。
其他发明性的实施方案
在本发明中描述了另一个发明性的实施方案,其中,在将文件传输到电信终端(例如从游戏服务器传输到电信终端)期间包丢失的情况下进行以下步骤:
a)在电信终端(小)上启用恢复策略,以便保持流畅的游戏体验;
b)选择合适的恢复策略,以及
c)将恢复请求发送回应用程序、例如游戏的相关的流式传输服务器。
优点:通过所述恢复过程的自动化可以成倍地减少出现的错误的持续时间并且因此能实现在流式传输服务器与客户端之间的几乎无差错的自身持续地校准的传输。
关于电信网络的任务的解决方案
所述任务通过本发明解决。
在权利要求5中描述了一种用于通过确定的电信系统来流式传输和再现应用(APP)的电信网络,在所述电信系统中一个或多个能够通过电信彼此连接的流式传输服务器执行有关的应用并且所述流式传输服务器地理上接近地与相应的电信终端连接,其中,相关的电信终端从地理上接近的服务器调用请求的应用(应用程序),所述服务器提供用于相关的应用的呈现和编码的运算能力。
本发明描述了一种用于在对于应用陌生的系统环境上再现应用的电信网络,所述系统环境要么通过不同的硬件部件要么通过不同的软件部件相区别,其中,所述流式传输服务器承担不同的应用程序的处理以及应用程序及其音频信号和视频信号的呈现/编码,其中,将数据传输到相应的电信终端(移动无线电设备、平板电脑、膝上型电脑、PC、TV)上并且所述传输借助改进的h.254协议进行并且所述WAN应用为通过UDP/TCP用于音频/视频包的传输方式并且完全的运算能力由相关的流式传输服务器承担,其中,仅在电信终端中解码打包的数据。
按照本发明的解决方案描述了一种用于提供与平台无关的流式传输技术的电信网络,所述流式传输技术是一次性地程序化的并且可移植到任意的电信终端上,其中,各个应用(应用程序)、例如视频游戏的流式传输通过WAN这样进行,使得
a)借助电信终端(小应用程序)与会话服务器进行通信;
b)为确定的终端用户针对相关的应用程序、例如游戏的与电信终端地理上最接近的流式传输服务器进行确定的会话;
c)会话信息通过相关的会话服务器传送给电信终端和流式传输服务器;
d)进行在电信终端与相关的应用程序、例如视频游戏的流式传输服务器之间的直接的连接;
e)在建立在电信终端与相关的流式传输服务器之间的直接的连接的情况下采用以下步骤:
i.记录正在运行的应用程序的音频数据/视频数据,其方式为,通过所述游戏的相关的流式传输服务器;
ii.通过高品质的硬件编码器来压缩音频数据/视频数据;
iii.通过WAN来传输压缩的音频数据/视频数据;
iv.在电信终端侧接收所述音频数据/视频数据;
v.解压所述音频数据/视频数据;
vi.在电信终端(小)上接收并且再现所述音频数据/视频数据;
vii.在电信终端(小)上记录电信终端的用户、例如游戏者的行为(输入);
viii.将输入高效地传输回所述游戏的相关的流式传输服务器,以及
ix.在流式传输服务器上再现所传输的输入。
关于电信网络的应用的任务的解决方案
所述任务通过本发明任一项解决。
本发明描述了一种用于通过确定的电信系统来流式传输和再现应用(APP)的电信网络的应用,其中,一个或多个能够通过电信彼此连接的流式传输服务器执行有关的应用并且所述流式传输服务器地理上接近地与相应的电信终端连接,其中,相关的电信终端从地理上接近的服务器调用请求的应用(应用程序),所述服务器提供用于相关的应用的呈现和编码的运算能力。
在本发明中描述了一种关于电信网络在对于应用陌生的系统环境上的应用,所述系统环境要么通过不同的硬件部件要么通过不同的软件部件相区别,其中,所述流式传输服务器承担不同的应用的处理以及应用及其各个应用(帧)的音频信号和视频信号的呈现/编码,其中,将数据传输到相应的电信终端(移动无线电设备、平板电脑、膝上型电脑、PC、TV)上并且所述传输借助改进的h.254协议进行并且所述WAN用作通过UDP/TCP用于音频/视频包的传输方式并且完全的运算能力由相关的流式传输服务器承担,其中,仅在电信终端中解码打包的数据。
本发明描述了一种用于提供与平台无关的流式传输技术的电信网络的应用,所述流式传输技术是一次性地程序化的并且可移植到任意的电信终端上,其中,各个应用(应用程序)、例如视频游戏的流式传输通过WAN这样进行,使得
a)借助电信终端(小应用程序)与会话服务器进行通信;
b)为确定的终端用户针对相关的应用程序、例如游戏的与电信终端地理上最接近的流式传输服务器进行确定的会话;
c)会话信息通过相关的会话服务器传送给电信终端和流式传输服务器;
d)进行在电信终端与相关的应用程序、例如视频游戏的流式传输服务器之间的直接的连接;
e)在建立在电信终端与相关的流式传输服务器之间的直接的连接时采用以下步骤:
i.通过相关的流式传输服务器记录正在运行的应用程序的音频数据/视频数据,在所述流式传输服务器上正在运行游戏;
ii.通过高品质的硬件编码器来压缩音频数据/视频数据;
iii.通过WAN来传输压缩的音频数据/视频数据;
iv.在电信终端侧接收所述音频数据/视频数据;
v.解压所述音频数据/视频数据;
vi.在电信终端(小)上可视化所述音频数据/视频数据;
vii.在电信终端(小)上记录电信终端的用户、例如游戏者的行为(输入);
viii.将输入高效地传输回所述游戏的相关的流式传输服务器,以及
ix.在流式传输服务器上再现所传输的输入。
其他发明性的实施方案
本发明描述了另一个在应用程序方面的发明性的实施方案。在将数据传输到电信终端(例如从游戏服务器传输到电信终端)期间包丢失的情况下,执行以下步骤:
a)启用恢复策略,以便保持流畅的游戏体验;
b)选择合适的恢复策略,以及
c)将恢复请求发送回应用程序、例如游戏的相关的流式传输服务器。
本发明示出了电信网络用于与客户端(用户、终端)通信的应用,利用如下源代码:
/****************AddPortAsynchronisation.java******************负责为网络设备添加相关的端口来确保流畅的通信,技术的目的在于能够与网络硬件无关地运行的技术。【负责激活在网络设备(例如路由器)中的相关的端口,以便因此确保流畅的通信。该技术能实现与用户的网络硬件无关的通用的使用。】
***********************************************************/
package org.cloundgaming4u.client.portforwarding;
import java.io.IOException;
import net.sbbi.upnp.messages.UPNPResponseException;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
public class AddPortAsync extends AsyncTask<Void,Void,Void>{
private Context context;
private UPnPPortMapper uPnPPortMapper;
private String externalIP;
private String internalIP;
private int externalPort;
private int internalPort;
public AddPortAsync(Context context,UPnPPortMapper uPnPPortMapper,String externalIP,String internalIP,
int externalPort,int internalPort){
this.context=context;
this.uPnPPortMapper=uPnPPortMapper;
this.externalIP=externalIP;
this.internalIP=internalIP;
this.externalPort=externalPort;
this.internalPort=internalPort;
}
@Override
protected void onPreExecute(){
super.onPreExecute();
if(uPnPPortMapper==null)
uPnPPortMapper=new UPnPPortMapper();
}
@Override
protected Void dolnBackground(Void...params){
if(uPnPPortMapper!=null)
{
try
{
Log.d(″cg4u_log″,″Contacting Router for setting networkconfigurations″);
if(uPnPPortMapper.openRouterPort(externalIP,
externalPort,internalIP,internalPort,″CG4UGames″))
{
Log.d(″cg4u_log″,String.format(″Setting network configurationssuccessful IP:%s Port:%d″,externalIP,externalPort));
Log.d(″cg4u_log″,String.format(″Setting network configurationssuccessful IP:%s Port:%d″,internalIP,internalPort));
}
}
catch(IOException e)
{
e.printStackTrace();
}
catch(UPNPResponseException e)
{
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Void result){
super.onPostExecute(result);
//Send broadcast for update in the main activity
//Intent i=new Intent(ApplicationConstants.APPLICATION_ENCODING_TEXT);
//context.sendBroadcast(i);
}
}
/******************UniversalPortMapper.java******************负责确保由服务器生成的随机端口在客户端动态地映射。【负责服务器的通用的端口分配。】
************************************************************
package org.cloundgaming4u.client.portforwarding;
import net.sbbi.upnp.impls.InternetGatewayDevice;
import net.sbbi.upnp.messages.UPNPResponseException;
import java.io.IOException;
public class UPnPPortMapper{
private InternetGatewayDevice[]internetGatewayDevices;
private InternetGatewayDevice foundGatewayDevice;
/**
*Search for IGD External Address
*@return String
*/
public String findExternallPAddress()throws IOException,UPNPResponseException
{
/**Upnp devices router
search*/
if(internetGatewayDevices==null)
{
internetGatewayDevices=
InternetGatewayDevice.getDevices(ApplicationConstants.SCAN_TIMEOUT);
}
if(internetGatewayDevices!=null)
{
for(InternetGatewayDevica IGD:internetGatewayDevices)
{
foundGatewayDevice=IGD;
return IGD.getExternallPAddress().toString();
}
}
return null;
}
/**
*Search Found Internet Gateway Device Friendly Name
*@return
*/
public String findRouterName(){
if(foundGatewayDevice!=null){
return foundGatewayDevice.getlGDRootDevice().getFriendlyName().toString();
}
return″null″;
}
/**
*Open Router Port
*IGD==lnternet Gateway Device
*@param internalIP
*@param internalPort
*@param externalRouterIP
*@param externalRouterPort
*@param description
*@retum
*@throws IOException
*@throws UPNPResponseException
*/
public boolean openRouterPort(String externalRouterIP,intexternalRouterPort,
String internalIP,int internalPort,
String description)
throws IOException,UPNPResponseException{
/**Upnp devices router
search*/
if(internetGatewayDevices==null){
internetGatewayDevices=
InternetGatewayDevice.getDevices(ApplicationConstants.SCAN_TIMEOUT);
}
if(internetGatewayDevices!=null){
for(InternetGatewayDevice addlGD:internetGatewayDevices){
/**Open port for TCP protocol and also for UDP protocol
*Both protocols must be open this
is a MUST*/
//addlGD.addPortMapping(description,externalRouterIP,internalPort,externalRouterPort,internalIP,0,ApplicationConstants.TCP_PROTOCOL);
addlGD.addPortMapping(description,externalRouterIP,internalPort,externalRouterPort,internalIP,0,ApplicationConstants.UDP_PROTOCOL);
}
return true;
}else{
return false;
}
}
public boolean removePort(String externalIP,int port)throwsIOException,
UPNPResponseException{
/**Upnp devices router
search*/
if(internetGatewayDevices==null){
internetGatewayDevices=InternetGatewayDevice.getDevices(5000);
}
/**Remote port mapping for all routers*/
if(internetGatewayDevices!=null){
for(InternetGatewayDevice removelGD:internetGatewayDevices){
//removelGD.deletePortMapping(externalIP,port,
ApplicationConstants.TCP_PROTOCOL);
removelGD.deletePortMapping(externalIP,port,″UDP″);
}
return true;
}else{
return false;
}
}
}
************************************************************
客户网络通信结束
************************************************************
本发明描述了结合按照本发明的电信网络的用于解码视频应用并且用于解码终端的应用,利用如下源代码:
/***********************************************************
*这里是负责在Andriod端上硬件解码的代码的部分
*硬件解码能实现在Andriod客户端上流畅地呈现
【这部分代码负责Andriod终端的硬件解码。】
***********************************************************/
gbx_builtin_hw_decode_h264(RTSPThreadParam*streamConfigs,unsignedchar
*buffer,
int bufsize,struct timeval pts,bool marker){
struct mini_h264_context ctx;
int more=0;
//look for sps/pps
again:
if((more=gbx_h264buffer_parser(&ctx,buffer,bufsize))<0){
gbx_stream_error(″%lu.%06lu bad h.264 unit.\n″,pts.tv_sec,pts.tv_usec);
return 1;
}
unsigned char*s1;
int len;
if(gbx_contexttype==7){
//sps
if(streamConfigs>
videostate==RTSP_VIDEOSTATE_NULL){
gbx_stream_error(″rtspclient:initial SPS received.\n″);
if(initVideo(streamConfigs>
jnienv,″video/avc″,gbx_contextwidth,
gbx_contextheight)==NULL){
gbx_stream_error(″rtspclient:initVideo failed.\n″);
streamConfigs>
exitTransport=1;
return 1;
}else{
gbx_stream_error(″rtspclient:initVideo success
[video/avc@%ux%d]\n″,
gbx_contextwidth,gbx_contextheight);
}
if(gbx_contextrawsps!=NULL&&gbx_contextspslen>0){
videoSetByteBuffer(streamConfigs>
jnienv,″csd0″,
gbx_contextrawsps,gbx_contextspslen);
free(gbx_contextrawsps);
}
streamConfigs>
videostate=RTSP_VIDEOSTATE_SPS_RCVD;
//has more nals?
if(more>0){
buffer+=more;
bufsize=
more;
goto again;
}
return 1;
}
}else if(gbx_contexttype==8){
if(streamConfigs>
videostate==RTSP_VIDEOSTATE_SPS_RCVD){
gbx_stream_error(″rtspclient:initial PPS received.\n″);
if(gbx_contextrawpps!=NULL&&gbx_contextppslen>0){
videoSetByteBuffer(streamConfigs>
jnienv,″csd1″,
gbx_contextrawpps,gbx_contextppslen);
free(gbx_contextrawpps);
}
if(startVideoDecoder(streamConfigs>
jnienv)==NULL){
gbx_stream_error(″rtspclient:cannot start video decoder.\n″);
streamConfigs>
exitTransport=1;
return 1;
}else{
gbx_stream_error(″rtspclient:video decoder started.\n″);
}
streamConfigs>
videostate=RTSP_VIDEOSTATE_PPS_RCVD;
//has more nals?
if(more>0){
buffer+=more;
bufsize=
more;
goto again;
}
return 1;
}
}
//
if(streamConfigs>
videostate!=RTSP_VIDEOSTATE_PPS_RCVD){
if(android_start_h264(streamConfigs)<0){
//drop the frame
gbx_stream_error(″rtspclient:drop video frame,state=%d type=%d\n″,
streamConfigs>
videostate,gbx_contexttype);
}
return 1;
}
if(gbx_contextis_config){
//gbx_stream_error(″rtspclient:got a config packet,type=%d\n″,
gbx_contexttype);
decodeVideo(streamConfigs>
jnienv,buffer,bufsize,pts,marker,
BUFFER_FLAG_CODEC_CONFIG);
return 1;
}
//
if(gbx_contexttype==1||gbx_contexttype==5||gbx_contexttype==19){
if(gbx_contextframetype==TYPE_I_FRAME||gbx_contextframetype==
TYPE_SI_FRAME){
//XXX:enable intrarefresh
at the server will disable IDR/Iframes
//need to do something?
//gbx_stream_error(″got an I/SI frame,type=%d/%d(%d)\n″,
gbx_contexttype,gbx_contextframetype,gbx_contextslicetype);
}
}
decodeVideo(streamConfigs>
jnienv,buffer,bufsize,pts,marker,0/*marker?
BUFFER_FLAG_SYNC_FRAME:0*/);
return 0;
}
************************************************************
视频解码结束
************************************************************
按照本发明,按照本发明将如下源代码的应用于动态错误处理策略:
#ifndef_UPSTREAM_REQUEST_H_
#define_UPSTREAM_REQUEST_H_
#define PACKET_LOSS_TOLERANCE 0
#define RE_REQUEST_TIMEOUT 30
#define USER_EVENT_MSGTYPE_NULL 0
#define USER_EVENT_MSGTYPE_IFRAME_REQUEST 101
#define USER_EVENT_MSGTYPE_INTRA_REFRESH_REQUEST 102
#define USER_EVENT_MSGTYPE_INVALIDATE_REQUEST 103
#define RECOVER_STRATEGY_NONE 0
#define RECOVER_STRATEGY_REQ_IFRAME_BLOCKING 1
#define RECOVER_STRATEGY_REQ_IFRAME_NON_BLOCKING 2
#define RECOVER_STRATEGY_REQ_INTRA_REFRESH 3
#define RECOVER_STRATEGY_REQ_INVALIDATE 4
//#define SERVER_HW_ENCODER_FIX
//upstream event
#ifdef WIN32
#pragma pack(push,1)
#endif
struct sdlmsg_upstream_s{
unsigned short msgsize;
unsigned char msgtype;//USER_EVENT_MSGTYPE_*
unsigned char which;
unsigned int pkt;//packet number to be invalidated
struct timeval pst;//timestamp of packet
}
#ifdef WIN32
#pragma pack(pop)
#else
_attribute_((_Packed_))
#endif
typedef struct sdImsg_upstream_s sdImsg_upstream_t;
#endif
************************************************************
动态错误处理策略结束
************************************************************
本发明涉及将如下源代码应用于视频包压缩:
/**********************************************************
代码段负责产生高效压缩技术,该技术与硬件结合地工作以在服务器端提供最小延迟,所述最小延迟最终造成在客户端实时游戏体验。其也包括错误处理策略的服务器端、如在服务器端上帧内刷新游戏窗口。【这部分代码负责延时减少。这部分代码也包含用于相应的“错误处理策略”、例如应用窗口的“帧内刷新”的服务器代码。】
***********************************************************/
//upstream enable parameter
static int upstream_enable=1;
#ifdef NO_FIXED_FPS
//Gorillabox Hw encoding data
#define NUMFRAMESINFLIGHT 1
int InitHWGBX(IDirect3DDevice9*);
unsigned char*gbx_pMainBuffer[NUMFRAMESINFLIGHT];
HANDLE gbx_hCaptureCompleteEvent[NUMFRAMESINFLIGHT];
HANDLE gbx_hFileWriterThreadHandle=NULL;
HANDLE gbx_hThreadQuitEvent=NULL;
DWORD gbx_dwMaxFrames=30;
HANDLE gbx_aCanRenderEvents[NUMFRAMESINFLIGHT];
IFRSharedSurfaceHandle gbx_hIFRSharedSurface=NULL;
static IDirect3DDevice9*encodeDevice=NULL;
static pthread_mutex_t surfaceMutex=PTHREAD_MUTEX_INITIALIZER;
unsigned char*pBitStreamBuffer=NULL;
HANDLE EncodeCompleteEvent=NULL;
#endif
static IDirect3DDevice9*captureDevice=NULL;
HWGBXToH264HWEncoder*gbx_pIFR=NULL;
DWORD gbx_dwFrameNumber=0;
int HWGBX_initialized=0;
static int hw_vencoder_initialized=0;
static int hw_vencoder_started=0;
static pthread_t hw_vencoder_tid;
static pthread_mutex_t d3deviceMutex=PTHREAD_MUTEX_INITIALIZER;
//TODO:read from configuration file
static int video_fps=30;
//specific data for h.264/h.265
static char*_sps[VIDEO_SOURCE_CHANNEL_MAX];
static int_spslen[VIDEO_SOURCE_CHANNEL_MAX];
static char*_pps[VIDEO_SOURCE_CHANNEL_MAX];
static int_ppslen[VIDEO_SOURCE_CHANNEL_MAX];
static char*_vps[VIDEO_SOURCE_CHANNEL_MAX];
static int_vpslen[VIDEO_SOURCE_CHANNEL_MAX];
#ifdef NO_FIXED_FPS
static int fetchAndSendFrametoHWEncoder(void*arg){
static struct timeval*timer=NULL;
struct timeval pretv;
if(!timer)
{
timer=new timeval();
gettimeofday(timer,NULL);
}
//arg is the IDirect3DDevice9 pointer
if(arg==NULL){
gbx_error(″arg arguement to encodernvencvideo
module is NULL\r\n″);
return 1;
}
if(captureDevice==NULL)
{
pthread_mutex_Iock(&d3deviceMutex);
captureDevice=(IDirect3DDevice9*)arg;
pthread_mutex_unlock(&d3deviceMutex);
}
//!This is a hack of gbxMIGO to limit the frame rate of HW
if(HWGBX_initialized&&hw_vencoder_started&&encoder_running()){
gettimeofday(&pretv,NULL);
long millis=((pretv.tv_sec*1000)+(pretv.tv_usec/1000))((
timer>
tv_sec*
1000)+(timer>
tv_usec/1000));
if(millis<30)
return 0;
memcpy(timer,&pretv,sizeof(struct timeval));
unsigned int bufferIndex=gbx_dwFrameNumber%NUMFRAMESINFLIGHT;
//!Wait for this buffer to finish saving before initiating a newcapture WaitForSingleObject(gbx_aCanRenderEvents[bufferIndex],INFINITE);ResetEvent(gbx_aCanRenderEvents[bufferIndex]);
//!Transfer the render target to the H.264 encoder asynchronouslyHWGBX_TRANSFER_RT_TO_H264_PARAMS params={0};params.dwVersion=HWGBX_TRANSFER_RT_TO_H264_PARAMS_VER;
params.dwBufferIndex=bufferIndex;
//cater upstream requests from client
if(upstream_enable){
HWGBX_H264HWEncoder_EncodeParams encParam={0};
params.pHWGBX_H264HWEncoder_EncodeParams=NULL;
struct timeval lastValidPst;
//TODO:we can test dynamic bitrate control
//HWGBX_H264_ENC_PARAM_FLAgbx_DYN_BITRATE_CHANGE
//single strategy only
if(isIFrameRequested()){
//force next frame as IDR
encParam.dwVersion=
HWGBX_H264HWENCODER_PARAM_VER;
encParam.dwEncodeParamFlags=
HWGBX_H264_ENC_PARAM_FLAgbx_FORCEIDR;
params.pHWGBX_H264HWEncodef_EncodeParams=
&encParam;
setlFrameRequest(false);
gbx_error(″[IFRAME REQUESTED]\n″);
}
if(isIntraRefreshRequested()){
//force an intrarefresh
wave from next frame
encParam.dwVersion=
HWGBX_H264HWENCODER_PARAM_VER;
encParam.bStartlntraRefresh=1;
encParam.dwlntraRefreshCnt=15;//number of frames per
intrarefresh
wave
params.pHWGBX_H264HWEncoder_EncodeParams=
&encParam;
setlntraRefreshRequest(false);
gbx_error(″[INTRAREFRESH
REQUESTED]\n″);
}
if(isInvalidateRequested()){
//invalidate all previous frames before lastValidPst
encParam.dwVersion=
HWGBX_H264HWENCODER_PARAM_VER;
getLastValidPst(lastValidPst);
encParam.blnvalidateRefrenceFrames=1;
//TODO:compute following parameters from lastValidPst
//encParam.dwNumRefFramesTolnvalidate=0;//number of reference framesto be invalidated
//encParam.ullnvalidFrameTimeStamp=;//array of timestamps ofreferences to be invalidated
//this techinque to work,the encoder must use following property
//encParam.ulCaptureTimeStamp=ASSIGNED_TIMESTAMP
//later the decoder must be able to get extract this time stamp fromrecieved frame
params.pHWGBX_H264HWEncoder_EncodeParams=
&encParam;
setInvalidateRequest(false);
gbx_error(″[INVALIDATION REQUESTED%
d.%d]\n″,
lastValidPst.tv_sec,lastValidPst.tv_usec);
}
}
else{
params.pHWGBX_H264HWEncoder_EncodeParams=NULL;
}
HWGBXRESULT res=
gbx_plFR>
HWGBXTransferRenderTargetToH264HWEncoder(&params);
gbx_dwFrameNumber++;
//
return 0;
}
return 0;
}
static void*fetchAndSendEncodeDataThread(void*data)
{
DWORD bufferIndex=0;
HANDLE hEvents[2];
hEvents[0]=gbx_hThreadQuitEvent;
DWORD dwEventID=0;
DWORD dwPendingFrames=0;
DWORD dwCapturedFrames=0;
while(!captureDevice)
{
pthread_mutex_lock(&d3deviceMutex);
if(captureDevice==NULL)
{
pthread_mutex_unlock(&d3deviceMutex);
usleep(100);
continue;
}
else
{
pthread_mutex_unlock(&d3deviceMutex);
break;
}
}
if(!HWGBX_initialized&&captureDevice){
if(InitHWGBX(captureDevice)<0){
gbx_error(″Unable to load the HWGBX library\r\n″);
return NULL;
}
}
//!While the render loop is still running
gbx′_error(″Hardware encoder thread started[%d][%d]\n″,hw_vencoder_started,encoder_running());
while(HWGBX_initialized&&hw_vencoder_started&&encoder_running())
{
hEvents[1]=gbx_hCaptureCompleteEvent[bufferIndex];
//!Wait for the capture completion event for this buffer
dwEventID=WaitForMultipleObjects(2,hEvents,FALSE,INFINITE);
if(dwEventID WAIT_
OBJECT_0==0)
{
//!The main thread has not signaled us to quit yet.It seems gettingthe SPS information signaled us
if(hw_vencoder_started)
{
WaitForSingleObject(gbx_hCaptureCompleteEvent[bufferIndex],INFINITE);
ResetEvent(gbx_hCaptureCompleteEvent[bufferIndex]);//optional
ResetEvent(gbx_hThreadQuitEvent);//optional
hEvents[0]=gbx_hThreadQuitEvent;
//!Fetch bitstream from HWGBX and dump to disk
GetBitStream(bufferIndex);
dwCapturedFrames++;
//!Continue rendering on this index
SetEvent(gbx_aCanRenderEvents[bufferIndex]);
//!Wait on next index for new data
bufferIndex=(bufferIndex+1)%NUMFRAMESINFLIGHT;
continue;
}
//!The main thread has signalled us to quit.
//!Check if there is any pending work and finish it before quitting.
dwPendingFrames=(gbx_dwMaxFrames>dwCapturedFrames)?
gbx_dwMaxFrames dwCapturedFrames
:0;
gbx_error(″Pending frames are%d\n″,dwPendingFrames);
for(DWORD i=0;i<dwPendingFrames;i++)
{
WaitForSingleObject(gbx_hCaptureCompleteEvent[bufferIndex],INFINITE);
ResetEvent(gbx_hCaptureCompleteEvent[bufferIndex]);//optional
//!Fetch bitstream from HWGBX and dump to disk
GetBitStream(bufferIndex);
dwCapturedFrames++;
//!Wait on next index for new data
bufferIndex=(bufferIndex+1)%NUMFRAMESINFLIGHT;
}
break;
}
ResetEvent(gbx_hCaptureCompleteEvent[bufferIndex]);//optional
//!Fetch bitstream from HWGBX and dump to disk
GetBitStream(bufferIndex);
dwCapturedFrames++;
//!Continue rendering on this index
SetEvent(gbx_aCanRenderEvents[bufferIndex]);
//!Wait on next index for new data
bufferIndex=(bufferIndex+1)%NUMFRAMESINFLIGHT;
}
gbx_error(″video hwencoder:thread terminated\n″);
return NULL;
}
int InitHWGBX(IDirect3DDevice9*gbx_pD3DDevice)
{
HINSTANCE gbx_hHWGBXDII=NULL;
HWGBXLibrary HWGBXLib;
//!Load the HWGBX.dll library
if(NULL==(gbx_hHWGBXDII=HWGBXLib.load()))
return 1;
//!Create the HWGBXToH264HWEmcoder object
gbx_pIFR=(HWGBXToH264HWEncoder*)HWGBXLib.create(gbx_pD3DDevice,HWGBX_TOH264HWENCODER);
if(NULL==gbx_pIFR)
{
gbx_error(″Failed to create the HWGBXToH264HWEncoder\r\n″);
return 1;
}
for(DWORD i=0;i<NUMFRAMESINFLIGHT;i++)
{
//!Create the events for allowing rendering to continue after acapture is complete gbx_aCanRenderEvents[i]=CreateEvent(NULL,TRUE,TRUE,NULL);
}
gbx_hThreadQuitEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
//!Set up the H.264 encoder and target buffers
DWORD dwBitRate720p=3000000;
double dBitRate=double(dwBitRate720p);
HWGBX_H264HWEncoder_Config encodeConfig=[0};
encodeConfig.dwVersion=HWGBX_H264HWENCODER_CONFIgbx_VER;
encodeConfig.dwAvgBitRate=(DWORD)dBitRate;
encodeConfig.dwFrameRateDen=1;
encodeConfig.dwFrameRateNum=30;
encodeConfig.dwPeakBitRate=(encodeConfig.dwAvgBitRate*12/10);//+20%
encodeConfig.dwGOPLength=0xffffffff;
//encodeConfig.bRepeatSPSPPSHeader=true;
encodeConfig.bEnableIntraRefresh=1;
encodeConfig.dwMaxNumRefFrames=16;
encodeConfig.dwProfile=100;
encodeConfig.eRateControl=
HWGBX_H264_ENC_PARAMS_RC_2_PASS_QUALITY;
encodeConfig.ePresetConfig=HWGBX_H264_PRESET_LOW_LATENCY_HQ;
encodeConfig.dwQP=26;
encodeConfig.bEnableAQ=1;
/*
encodeConfig.dwProfile=100;
encodeConfig.eRateControl=
HWGBX_H264_ENC_PARAMS_RC_2_PASS_QUALITY;//|
HWGBX_H264_ENC_PARAM_FLAgbx_FORCEIDR;
encodeConfig.ePresetConfig=HWGBX_H264_PRESET_LOW_LATENCY_HQ;
encodeConfig.dwQP=26;
*/
/*encodeConfig.dwProfile=244;
encodeConfig.eRateControl=HWGBX_H264_ENC_PARAMS_RC_CONSTQP;//|
HWGBX_H264_ENC_PARAM_FLAgbx_FORCEIDR;
encodeConfig.ePresetConfig=HWGBX_H264_PRESET_LOSSLESS_HP;
encodeConfig.dwQP=0;
*/
HWGBX_SETUP_H264_PARAMS params={0};
params.dwVersion=HWGBX_SETUP_H264_PARAMS_VER;
params.pEncodeConfig=&encodeConfig;
params.eStreamStereoFormat=HWGBX_H264_STEREO_NONE;
params.dwNBuffers=NUMFRAMESINFLIGHT;
params.dwBSMaxSize=256*1024;
params.ppPageLockedBitStreamBuffers=gbx_pMainBuffer;
params.ppEncodeCompletionEvents=gbx_hCaptureCompleteEvent;
//TODO:find a way to fill give proper channel id
params.dwTargetHeight=video_source_out_height(0);
params.dwTargetWidth=video_source_out_width(0);
HWGBXRESULT res=gbx_pIFR>
HWGBXSetUpH264HWEncoder(&params);
if(res!=HWGBX_SUCCESS)
{
if(res==HWGBX_ERROR_INVALID_PARAM||res!=
HWGBX_ERROR_INVALID_PTR)
gbx_error(″HWGBX Buffer creation failed due to invalid params.\n″);
else
gbx_error(″Something is wrong with the driver,cannot initialize IFRbuffers\n″);
return 1;
}
gbx_error(″Gorillabox device configured\n″);
HWGBX_initialized=1;
return HWGBX_initialized;
}
#else
int
create_encode_device()
{
if(encodeDevice!=NULL){
return 0;
}
static void*
encode_and_send_thread_proc(void*data)
{
HWGBXRESULT res=HWGBX_SUCCESS;
struct timeval start_tv,end_tv;
long long sleep_delta;
long long frame_interval=1000000/video_fps;
//wait fbr encoder to be initialized
while(!HWGBX_initialized)
{
usleep(100);
}
gbx_error(″Hardware encoder thread started[%d][%d]\n″,hw_vencoder_started,encoder_running());
//main loop for encoding and sending frames
while(HWGBX_initialized&&hw_vencoder_started&&encoder_running())
{
//read shared surface
IDirect3DSurface9*pRenderTarget;
encodeDevice>
GetRenderTarget(0,&pRenderTarget);
pthread_mutex_lock(&surfaceMutex);
BOOL bRet=HWGBX_CopyFromSharedSurface_fn(encodeDevice,gbx_hIFRSharedSurface,pRenderTarget);
pthread_mutex_unlock(&surfaceMutex);
pRenderTarget>
Release();
//send shared buffer to encoder
HWGBX_TRANSFER_RT_TO_H264_PARAMS params={0};
params.dwVersion=HWGBX_TRANSFER_RT_TO_H264_PARAMS_VER;
params.dwBufferIndex=0;
//cater upstream requests from client
if(upstream_enable){
HWGBX_H264HWEncoder_EncodeParams encParam={0};
params.pHWGBX_H264HWEricoder_EncodeParams=NULL;
struct timeval lastValidPst;
//TODO:we can test dynamic bitrate control
//HWGBX_H264_ENC_PARAM_FLAgbx_DYN_BITRATE_CHANGE
//single strategy only
if(isIFrameRequested()){
//force next frame as IDR
encParam.dwVersion=
HWGBX_H264HWENCODER_PARAM_VER;
encParam.dwEncodeParamFlags=
HWGBX_H264_ENC_PARAM_FLAgbx_FORCEIDR;
params.pHWGBX_H264HWEncoder_EncodeParams=
&encParam;
setIFrameRequest(false);
gbx_error(″[IFRAME REQUESTED]\n″);
}
if(isIntraRefreshRequested()){
//force an intrarefresh
wave from next frame
encParam.dwVersion=
HWGBX_H264HWENCODER_PARAM_VER;
encParam.bStartIntraRefresh=1;
encParam.dwIntraRefreshCnt=5;//number of frames per intrarefresh
wave
params.pHWGBX_H264HWEncoder_EncodeParams=
&encParam;
setIntraRefreshRequest(false);
gbx_error(″[INTRAREFRESH
REQUESTED]\n″);
}
if(isInvalidateRequested()){
//invalidate all previous frames before lastValidPst
encParam.dwVersion=
HWGBX_H264HWENCODER_PARAM_VER;
getLastValidPst(lastValidPst);
encParam.blnvalidateRefrenceFrames=1;
//TODO:compute following parameters from lastValidPst
//encParam.dwNumRefFramesTolnvalidate=0;//number of
reference frames to be invalidated
//encParam.ullnvalidFrameTimeStamp=;//array of
timestamps of references to be invalidated
//this techinque to work,the encoder must use following property
//encParam.uICaptureTimeStamp=ASSIGNED_TIMESTAMP
//later the decoder must be able to get extract this time stamp fromrecieved frame
params.pHWGBX_H264HWEncoder_EncodeParams=
&encParam;
setInvalidateRequest(false);
gbx_error(″[INVALIDATION REQUESTED%
d.%d]\n″,
lastValidPst.tv_sec,lastValidPst.tv_usec);
}
}
else{
params.pHWGBX_H264HWEncoder_EncodeParams=NULL;
}
gettimeofday(&start_tv,NULL);
res=
gbx_pIFR>
HWGBXTransferRenderTargetToH264HWEncoder(&params);
if(res==HWGBX_SUCCESS)
{
//wait for encoder to set complete event
WaitForSingleObject(EncodeCompleteEvent,INFINITE);
ResetEvent(EncodeCompleteEvent);
//get frame stats
HWGBX_H264HWEncoder_FrameStats dFrameStats;
dFrameStats.dwVersion=
HWGBX_H264HWENCODER_FRAMESTATS_VER;
HWGBX_GET_H264_STATS_PARAMS params={0};
params.dwVersion=HWGBX_GET_H264_STATS_PARAMS_VER;
params.dwBufferIndex=0;
params.pHWGBX_H264HWEncoder_FrameStats=&dFrameStats;
res=gbx_pIFR>
HWGBXGetStatsFromH264HWEncoder(&params);
if(res==HWGBX_SUCCESS){
//send encoded frame
AVPacket pkt;
av_init_packet(&pkt);
pkt.size=dFrameStats.dwByteSize;
pkt.data=pBitStreamBuffer;
pkt.pts=(int64_t)gbx_dwFrameNumber++;
pkt.stream_index=0;
if(encoder_send_packet(″hwvideoencoder″,
0/*rtspconf>
video_id*/,&pkt,
pkt.pts,NULL)<0){
gbx_error(″encoder_send_packet:Error sending
packet\n″);
}
}
//wait for specific time before encoding another frame gettimeofday(&end_tv,NULL);
sleep_delta=frame_interval tvdiff_
us(&end_tv,&start_tv);
if(sleep_delta>0){
usleep(sleep_delta);
}
}
}
gbx_error(″video hwencoder:thread terminated\n″);
return NULL;
}
#endif
static int
hw_vencoder_deinit(void*arg){
static void
getSPS_PPSFromH264HWEncoder()
{
unsigned char buffer[255];
unsigned long dwSize=0;
while(true)
{
if(!HWGBX_initialized)
usleep(100);
else
break;
}
if(HWGBX_initialized)
{
bzero(buffer,sizeof(buffer));
HWGBX_GET_H264_HEADER_PARAMS h264HeaderParams={0};
h264HeaderParams.dwVersiom=
HWGBX_GET_H264_HEADER_PARAMS_VER;
h264HeaderParams.pBuffer=buffer;
h264HeaderParams.pSize=(NvU32*)&dwSize;
HWGBXRESULT result=HWGBX_SUCCESS;
result=
gbx_pIFR>
HWGBXGetHeaderFromH264HWEncoder(&h264HeaderParams);
h264_get_hwvparam(0,buffer,dwSize);
}
}
static int
hw_vencoder_ioctl(int command,int argsize,void*arg){
int ret=0;
gbx_ioctl_buffer_t*buf=(gbx_ioctl_buffer_t*)arg;
if(argsize!=sizeof(gbx_ioctl_buffer_t))
return gbx_IOCTL_ERR_INVALID_ARGUMENT;
switch(command){
case gbx_IOCTL_GETSPS:
getSPS_PPSFromH264HWEncoder();
if(buf>
size<_spslen[buf>
id])
return gbx_IOCTL_ERR_BUFFERSIZE;
buf>
size=_spslen[buf>
id];
bcopy(_sps[buf>
id],buf>
ptr,buf>
size);
break;
case gbx_IOCTL_GETPPS:
//getSPS_PPSFromH264HWEncoder();
if(buf>
size<_ppslen[buf>
id])
return gbx_IOCTL_ERR_BUFFERSIZE;
buf>
size=_ppslen[buf>
id];
bcopy(_pps[buf>
id],buf>
ptr,buf>
size);
break;
case gbx_IOCTL_GETVPS:
if(command==gbx_IOCTL_GETVPS)
return gbx_IOCTL_ERR_NOTSUPPORTED;
break;
default:
ret=gbx_IOCTL_ERR_NOTSUPPORTED;
break;
}
return ret;
}
************************************************************
视频压缩结束
************************************************************
附图说明
在附图中(部分示意性地)示例性地阐明本发明。在图中:
图1示出各个区域与流式传输服务器之间的关系的示意性表示的方框图;
图2示出游戏包模块的方框图;
图3示出会话管理服务器的方框图;
图4示出用于客户端的移动交互层的方框图;
图5示出具有客户端的恢复模块的流程图的方框图;
图6示出移动交互层一一移动终端的界面的示范性的可视化。
图7示出在数据包丢失的情况下的恢复策略流程。
具体实施方式
图1示出在通信中需要的各个元件。流式传输服务器120如此承担应用程序的初始化并且使该应用程序在虚拟的环境中启动。为了该目的,流式传输服务器120具有游戏隔离模块140。在该游戏隔离模块中启动应用程序友好的环境,所述环境一方面确保应用程序的运行能力,而且负责再现客户端110A的控制信号。所述流式传输服务器能够随意地启动任意多个相同的或不同的应用程序的实例。在这方面,限制因素是在图形应用中的GPU的运算能力。给每个启动的应用程序分配一个游戏DB 180。所述游戏DB 180负责为应用程序存储相关的数据。然而为了启动应用程序,所述游戏DB180必须首先作为游戏包170供游戏包管理器180使用。接着,流式传输服务器120的网络模块150承担帧的编码和封装。网络模块150的另一个任务是处理客户端的110A恢复请求。为了进行管理的干涉和评估,开发了评估器模块190。该模块负责生成统计数据。
所述客户端用作为传输音频/视频信号的瘦客户端(Thin-Client)并且可以典型地在每个任意的平台上使用。一个流式传输服务器120能够达到1:n的比例,然而一个客户端仅能够与一个确定的流式传输服务器120进行通信。典型地,每个流式传输服务器的客户端的数量不是通过软件而是通过流式传输服务器120的GPU的相应的硬件容量来限制。
流式传输服务器120与客户端110A之间的通信最初总是通过会话管理服务器130来建立。该会话管理服务器接收客户端110A用于连接到流式传输服务器的初始请求,并为客户端110A搜索最优的流式传输服务器120。在一个系统中,多个流式传输服务器可以并行运行。所述多个流式传输服务器也无须总是位于同一个计算中心或地区。在通过会话管理服务器130为客户端110A分配流式传输服务器120之后,流式传输服务器120承担与客户端110A的直接的通信。
另一个元件是内容服务器195。该内容服务器负责在客户端110A的交互层中传送确定的部分。此外,该内容服务器根据在瘦客户端上播放的应用程序来控制广告的播放。通过会话管理服务器130将必要的信息提供给内容服务器195。
通信主要通过WAN(Wide Area Network)115进行。所述WAN包括不同的传输类型并且不限制于确定的区域。
图2示出游戏包模块160,该游戏包模块是流式传输服务器120的部分。游戏包模块160为每个新的应用程序初始启动并且承担用于应用的六个子区域。将捕获编码音频210划分为捕获210A区域和编码210B区域,所述区域负责截取音频信号。视频捕获编码区域220与音频模块210一样地划分为相同的区域中。端口认证模块230承担端口认证并且与提供游戏流式传输服务器120与客户端110A之间的连接相应。控制中继240负责XXX。网络中继250的任务在于,发送相应的包并且管理到达的包。恢复模块260负责响应客户端110A的相应的恢复请求。
图3关于会话管理服务器130。该会话管理服务器具有借助下属的DB模块315来实现认证310的任务,所述DB模块的任务是保存或存储利用的用于认证的数据。然而,该DB模块315仅仅是可选的。对此,外部认证的可能性不受此影响。网络区域320负责WAN 115、流式传输服务器120、内容服务器195与相应的客户端之间的通信。会话管理器330于是主要负责管理各个会话并且承担客户端到相应的流式传输服务器的分配。评估器模块直接连接到单独的客户端并且收集相关的数据用于以后的中央的分析。
图4示出客户端的各个元件。完整的客户端110专门为应用开发并且不需要单独的软件。该客户端包括如下要描述的八个区域:
客户端会话管理器410,与流式传输服务器120以及会话管理服务器通信并且最初负责认证以及客户端的管理。
网络模块420负责连接的建立并维持。该模块也承担发送和接收不同的包。
控制器430承担将交付的帧和音频包作为在客户端中的可视画面来传送。
视频解码呈现模块440和音频解码呈现模块450获得先前由网络模块420接收并且由控制器430转发的包。
评估器模块460负责收集统计数据并且将所述数据传输给会话管理服务器。相应地,所述会话管理服务器也可以优化所述连接。因此,出现使这个模块非常重要的反馈。
恢复模块470评估到达的数据包。如果数据包是有错误的,则所述模块因此选择恢复策略,并且必要时从流式传输服务器要求新的数据包,或采取其他措施以便补偿所述损失,而达到在延迟或质量方面无损失。
客户端UI包含交互层和内容服务器195的内容。在那里截取用户的输入并且将所述输入发送到流式传输服务器120上。
图5示出了内容服务器的结构。该内容服务器负责内容管理510和内容流式传输520。
所述内容管理用于预先调整例如在客户端110中的交互层内的要显示的广告。通过内容管理510不仅应该确定频率而且应该确定内容。
内容流式传输模块520承担内容的播放并且用作对于全部客户端的中央接口。
图6示出交互层,所述交互层是客户端UI 480的部分。基本上,在三个不同的区域之间相区分。
应用程序层610再现接收到的帧并且负责应用程序的可视化的显示。
UI层620位于所述应用程序层610上层。该UI层可以单独地配置,但是主要负责用户在客户端的输入。
除了上面提到的两个层之外,还有播放内容服务器195的内容的可能性。于是,这发生在内容层630的区域中。
图7示出在模块470中的客户端110的恢复策略的流程。一旦在客户端侧确定“包丢失”710,则恢复模块将借助固定定义的判据来选择相应的解决方案720。
如果涉及到是选择阻塞730、不阻塞740、帧内刷新750还是选择帧验证760的决定,则将恢复请求770发送至流式传输服务器120。该流式传输服务器相应地发送新的包并且完成恢复模块470的任务。
在本发明中描述的以及从示图中看出的技术特征,不仅可以单独地而且可以以随意的组合的方式对于本发明的实现是重要的。
术语解释
ApplicationLayer 应用程序层
Applications-Code 应用程序代码
buffering 缓冲
Client 客户端(德语“顾客”,也称客户端
侧的应用或客户端应用)是指在网
络的终端上执行并与中央的服务器
通信的计算机程序。
Client UI Module 客户端用户界面模块
Client-Application 客户端应用
Client-Session 客户端会话
Cloud 云—互联网中多个服务器的联合
codec 编码器—解码器
Content Layers 内容层
Content Servers 内容服务器
Content Streaming 内容流式传输
Controller 控制器
Controller Module 控制器模块
decode thread 解码应用
Decoder-Render 解码执行器
Evaluator 评估单元
Evaluator Modul 评估器模块
Frame Validation 帧验证器
interactive layer 交互层
Intrarefresh 内部更新
Loadbalancing 负载均衡
Network Module 网络模块
Not Blocking 不阻塞
Overlay 覆盖
packaging 封装
Recovery Module 恢复模块
Recovery Strategies 恢复策略
Render Thread 可视化执行器;负责呈现[可视化]
应用。
Scripting 脚本语言
Session handler 会话管理器
shared library 共享库
Streaming 流式传输
Streaming-Server 流式传输服务器
Streaming-Technology 流式传输技术
Timestamping 描述为数据包分配时间戳
UDP 用户数据报协议
UI Layer 用户界面层
WAN 广域网
Web-Apps 网页应用程序
Webcontent Management 网页内容管理
参考文献
WO 2009/073830 A1
WO 2010/141522 A1
WO 2012/037170 A1
US 2014/0073428 A1

Claims (37)

1.用于通过确定的电信系统来流式传输和再现应用的方法,其中,一个或多个能够通过电信彼此连接的流式传输服务器执行有关的应用并且所述流式传输服务器地理上接近地与相应的电信终端连接,其中,所述相关的电信终端从地理上接近的流式传输服务器调用请求的应用,所述服务器提供用于对相关应用建立视频流和编码的运算能力;
其中,为了在对于应用陌生的系统环境上再现应用,所述系统环境要么通过不同的硬件部件要么通过不同的软件部件相区别,其中,所述流式传输服务器承担不同的应用的处理以及应用程序及其音频信号和视频信号的呈现/编码,其中,将数据传输到相应的电信终端上并且所述传输借助改进的h.254协议进行并且WAN用作通过UDP/TCP用于音频/视频包的传输方式并且完全的运算能力由相关的流式传输服务器承担,其中,仅在电信终端中解码打包的数据;
其中,为了提供与平台无关的流式传输技术,所述流式传输技术是一次性地程序化的并且可移植到任意的电信终端上,其中,各个应用的流式传输通过WAN这样进行,使得
a)借助电信终端与会话服务器进行通信;
b)为确定的终端用户针对相关的应用程序的与电信终端地理上最接近的流式传输服务器进行确定的会话;
c)会话信息通过相关的会话服务器传送给电信终端和流式传输服务器;
d)进行在电信终端与相关的应用程序的流式传输服务器之间的直接的连接;
e)在建立在电信终端与相关的流式传输服务器之间的直接的连接的情况下采用以下步骤:
i.通过相关的流式传输服务器记录正在运行的应用程序的音频数据/视频数据,在所述流式传输服务器上运行游戏;
ii.通过高品质的硬件编码器来压缩音频数据/视频数据;
iii.通过WAN来传输压缩的音频数据/视频数据;
iv.在电信终端侧接收所述音频数据/视频数据;
v.解压所述音频数据/视频数据;
vi.在电信终端上可视化所述音频数据/视频数据;
vii.在电信终端上记录电信终端的用户的行为——输入;
viii.将所述输入高效地传输回所述游戏的相关的流式传输服务器以及
ix.在流式传输服务器上再现所传输的输入;
并且在将文件传输到电信终端期间包丢失的情况下进行以下步骤:
a)在电信终端上启用恢复策略,以便保持流畅的游戏体验;
b)选择合适的恢复策略,以及
c)将恢复请求发送回应用程序的相关的流式传输服务器。
2.按照权利要求1所述的方法,其特征在于,所述电信终端是小应用程序。
3.按照权利要求1所述的方法,其特征在于,所述应用是视频游戏。
4.按照权利要求1所述的方法,其特征在于,所述应用程序是游戏。
5.按照权利要求1所述的方法,其特征在于,所述电信终端的用户是游戏者。
6.按照权利要求1所述的方法,其特征在于,将文件从游戏服务器传输到电信终端。
7.按照权利要求1所述的方法,其特征在于,所述电信终端是移动无线电设备、平板电脑、膝上型电脑、PC、TV。
8.用于通过确定的电信系统来流式传输和再现应用的电信网络,其中,一个或多个能够通过电信彼此连接的流式传输服务器执行有关的应用并且所述流式传输服务器地理上接近地与相应的电信终端连接,其中,所述相关的电信终端从地理上接近的流式传输服务器调用请求的应用,所述服务器提供用于相关的应用的呈现和编码的运算能力;
并且为了在对于应用陌生的系统环境上再现应用,所述系统环境要么通过不同的硬件部件要么通过不同的软件部件相区别,其中,所述流式传输服务器承担不同的应用程序的处理以及应用程序及其音频信号和视频信号的呈现/编码,其中,将数据传输到相应的电信终端上并且所述传输借助改进的h.254协议进行并且WAN用作通过UDP/TCP用于音频/视频包的传输方式并且完全的运算能力由相关的流式传输服务器承担,其中,仅在电信终端中解码打包的数据;
并且为了提供与平台无关的流式传输技术,所述流式传输技术是一次性地程序化的并且可移植到任意的电信终端上,其中,各个应用的流式传输通过WAN这样进行,使得
a)借助电信终端与会话服务器进行通信;
b)为确定的终端用户针对相关的应用程序的与电信终端地理上最接近的流式传输服务器进行确定的会话;
c)会话信息通过相关的会话服务器传送给电信终端和流式传输服务器;
d)进行在电信终端与相关的应用程序的流式传输服务器之间的直接的连接;
e)在建立在电信终端与相关的流式传输服务器之间的直接的连接的情况下采用以下步骤:
i.通过所述游戏的相关的流式传输服务器记录正在运行的应用程序的音频数据/视频数据;
ii.通过高品质的硬件编码器来压缩音频数据/视频数据;
iii.通过WAN来传输压缩的音频数据/视频数据;
iv.在电信终端侧接收所述音频数据/视频数据;
v.解压所述音频数据/视频数据;
vi.在电信终端上接收并且再现所述音频数据/视频数据;
vii.在电信终端上记录电信终端的用户行为——输入;
viii.将所述输入高效地传输回所述游戏的相关的流式传输服务器,以及
ix.在流式传输服务器上再现所传输的输入;
并且在将文件传输到电信终端期间包丢失的情况下进行以下步骤:
a)在电信终端上启用恢复策略,以便保持流畅的游戏体验;
b)选择合适的恢复策略,以及
c)将恢复请求发送回应用程序的相关的流式传输服务器。
9.按照权利要求8所述的电信网络,其特征在于,所述电信终端是小应用程序。
10.按照权利要求8所述的电信网络,其特征在于,所述电信终端的用户是游戏者。
11.按照权利要求8所述的电信网络,其特征在于,所述应用是视频游戏。
12.按照权利要求8所述的电信网络,其特征在于,所述应用程序是游戏。
13.按照权利要求8所述的电信网络,其特征在于,所述电信终端是移动无线电设备、平板电脑、膝上型电脑、PC、TV。
14.用于通过确定的电信系统来流式传输和再现应用的电信网络的应用,其中,一个或多个能够通过电信彼此连接的流式传输服务器执行有关的应用并且所述流式传输服务器地理上接近地与相应的电信终端连接,其中,所述相关的电信终端从地理上接近的流式传输服务器调用请求的应用,所述服务器提供用于相关的应用的呈现和编码的运算能力;为了在对于应用陌生的系统环境上再现应用,所述系统环境要么通过不同的硬件部件要么通过不同的软件部件相区别,其中,所述流式传输服务器承担不同的应用的处理以及应用及其各个画面的音频信号和视频信号的呈现/编码,其中,将数据传输到相应的电信终端上并且所述传输借助改进的h.254协议进行并且WAN用作通过UDP/TCP用于音频/视频包的传输方式并且完全的运算能力由相关的流式传输服务器承担,其中,仅在电信终端中解码打包的数据;
为了提供与平台无关的流式传输技术,所述流式传输技术是一次性地程序化的并且可移植到任意的电信终端上,其中,各个应用的流式传输通过WAN这样进行,使得
a)借助电信终端与会话服务器进行通信;
b)为确定的终端用户针对相关的应用程序的与电信终端地理上最接近的流式传输服务器进行确定的会话;
c)会话信息通过相关的会话服务器传送给电信终端和流式传输服务器;
d)进行在电信终端与相关的应用程序的流式传输服务器之间的直接的连接;
e)在建立在电信终端与相关的流式传输服务器之间的直接的连接时采用以下步骤:
i.通过相关的流式传输服务器记录正在运行的应用程序的音频数据/视频数据,在所述流式传输服务器上正在运行游戏;
ii.通过高品质的硬件编码器来压缩音频数据/视频数据;
iii.通过WAN来传输压缩的音频数据/视频数据;
iv.在电信终端侧接收所述音频数据/视频数据;
v.解压所述音频数据/视频数据;
vi.在电信终端上可视化所述音频数据/视频数据;
vii.在电信终端上记录电信终端的用户的行为——输入;
viii.将输入高效地传输回所述游戏的相关的流式传输服务器,以及
ix.在流式传输服务器上再现对于所述应用所传输的输入;
在将数据传输到电信终端期间包丢失的情况下,进行以下步骤:
a)启用恢复策略,以便保持流畅的游戏体验;
b)选择合适的恢复策略,以及
c)将恢复请求发送回应用程序相关的流式传输服务器。
15.按照权利要求14所述的应用,其特征在于,所述画面是帧。
16.按照权利要求14所述的应用,其特征在于,所述电信终端是小应用程序。
17.按照权利要求14所述的应用,其特征在于,所述电信终端的用户是游戏者。
18.按照权利要求14所述的应用,其特征在于,所述应用是视频游戏。
19.按照权利要求14所述的应用,其特征在于,所述应用程序是游戏。
20.按照权利要求14所述的应用,其特征在于,所述数据从游戏服务器传输到电信终端。
21.按照权利要求14所述的应用,其特征在于,所述电信终端是移动无线电设备、平板电脑、膝上型电脑、PC、TV。
22.用于提供与平台无关的流式传输技术的方法,所述流式传输技术是一次性地程序化的并且可移植到任意的电信终端上,其中,各个应用的流式传输通过WAN这样进行,使得
a)借助电信终端与会话服务器进行通信;
b)为确定的终端用户针对相关的应用程序的与电信终端地理上最接近的流式传输服务器进行确定的会话;
c)会话信息通过相关的会话服务器传送给电信终端和流式传输服务器;
d)进行在电信终端与相关的应用程序的流式传输服务器之间的直接的连接;
e)在建立在电信终端与相关的流式传输服务器之间的直接的连接的情况下采用以下步骤:
i.通过相关的流式传输服务器记录正在运行的应用程序的音频数据/视频数据,在所述流式传输服务器上运行游戏;
ii.通过高品质的硬件编码器来压缩音频数据/视频数据;
iii.通过WAN来传输压缩的音频数据/视频数据;
iv.在电信终端侧接收所述音频数据/视频数据;
v.解压所述音频数据/视频数据;
vi.在电信终端上可视化所述音频数据/视频数据;
vii.在电信终端上记录电信终端的用户的行为——输入;
viii.将所述输入高效地传输回所述游戏的相关的流式传输服务器以及
ix.在流式传输服务器上再现所传输的输入;
并且在将文件传输到电信终端期间包丢失的情况下进行以下步骤:
a)在电信终端上启用恢复策略,以便保持流畅的游戏体验;
b)选择合适的恢复策略,以及
c)将恢复请求发送回应用程序的相关的流式传输服务器。
23.按照权利要求22所述的方法,其特征在于,所述电信终端是小应用程序。
24.按照权利要求22所述的方法,其特征在于,所述应用是视频游戏。
25.按照权利要求22所述的方法,其特征在于,所述应用程序是游戏。
26.按照权利要求22所述的方法,其特征在于,所述电信终端的用户是游戏者。
27.按照权利要求22所述的方法,其特征在于,将文件从游戏服务器传输到电信终端。
28.用于提供与平台无关的流式传输技术的电信网络,所述流式传输技术是一次性地程序化的并且可移植到任意的电信终端上,其中,各个应用的流式传输通过WAN这样进行,使得
a)借助电信终端与会话服务器进行通信;
b)为确定的终端用户针对相关的应用程序的与电信终端地理上最接近的流式传输服务器进行确定的会话;
c)会话信息通过相关的会话服务器传送给电信终端和流式传输服务器;
d)进行在电信终端与相关的应用程序的流式传输服务器之间的直接的连接;
e)在建立在电信终端与相关的流式传输服务器之间的直接的连接的情况下采用以下步骤:
i.通过所述游戏的相关的流式传输服务器记录正在运行的应用程序的音频数据/视频数据;
ii.通过高品质的硬件编码器来压缩音频数据/视频数据;
iii.通过WAN来传输压缩的音频数据/视频数据;
iv.在电信终端侧接收所述音频数据/视频数据;
v.解压所述音频数据/视频数据;
vi.在电信终端上接收并且再现所述音频数据/视频数据;
vii.在电信终端上记录电信终端的用户行为——输入;
viii.将所述输入高效地传输回所述游戏的相关的流式传输服务器,以及
ix.在流式传输服务器上再现所传输的输入。
29.按照权利要求28所述的电信网络,其特征在于,所述电信终端是小应用程序。
30.按照权利要求28所述的电信网络,其特征在于,所述电信终端的用户是游戏者。
31.按照权利要求28所述的电信网络,其特征在于,所述应用是视频游戏。
32.按照权利要求28所述的电信网络,其特征在于,所述应用程序是游戏。
33.用于提供与平台无关的流式传输技术的电信网络的应用,所述流式传输技术是一次性地程序化的并且可移植到任意的电信终端上,其中,各个应用的流式传输通过WAN这样进行,使得
a)借助电信终端与会话服务器进行通信;
b)为确定的终端用户针对相关的应用程序的与电信终端地理上最接近的流式传输服务器进行确定的会话;
c)会话信息通过相关的会话服务器传送给电信终端和流式传输服务器;
d)进行在电信终端与相关的应用程序的流式传输服务器之间的直接的连接;
e)在建立在电信终端与相关的流式传输服务器之间的直接的连接时采用以下步骤:
i.通过相关的流式传输服务器记录正在运行的应用程序的音频数据/视频数据,在所述流式传输服务器上正在运行游戏;
ii.通过高品质的硬件编码器来压缩音频数据/视频数据;
iii.通过WAN来传输压缩的音频数据/视频数据;
iv.在电信终端侧接收所述音频数据/视频数据;
v.解压所述音频数据/视频数据;
vi.在电信终端上可视化所述音频数据/视频数据;
vii.在电信终端上记录电信终端的用户的行为——输入;
viii.将输入高效地传输回所述游戏的相关的流式传输服务器,以及
ix.在流式传输服务器上再现对于所述应用所传输的输入;
在将数据传输到电信终端期间包丢失的情况下,进行以下步骤:
a)启用恢复策略,以便保持流畅的游戏体验;
b)选择合适的恢复策略,以及
c)将恢复请求发送回应用程序相关的流式传输服务器。
34.按照权利要求33所述的应用,其特征在于,所述电信终端是小应用程序。
35.按照权利要求33所述的应用,其特征在于,所述电信终端的用户是游戏者。
36.按照权利要求33所述的应用,其特征在于,所述应用是视频游戏。
37.按照权利要求33所述的应用,其特征在于,所述应用程序是游戏。
CN201580081901.0A 2015-07-24 2015-07-24 用于流式传输和用于再现应用的方法和电信网络 Active CN108136259B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/EP2015/001535 WO2017016568A1 (de) 2015-07-24 2015-07-24 Verfahren und telekommunikationsnetz zum streamen und zur wiedergabe von anwendungen

Publications (2)

Publication Number Publication Date
CN108136259A CN108136259A (zh) 2018-06-08
CN108136259B true CN108136259B (zh) 2021-08-20

Family

ID=53887061

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201580081901.0A Active CN108136259B (zh) 2015-07-24 2015-07-24 用于流式传输和用于再现应用的方法和电信网络

Country Status (5)

Country Link
US (1) US20180243651A1 (zh)
EP (1) EP3325116A1 (zh)
KR (1) KR102203381B1 (zh)
CN (1) CN108136259B (zh)
WO (1) WO2017016568A1 (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017108067A1 (de) * 2015-12-21 2017-06-29 Gorillabox Gmbh I. G. Verfahren zum abspielen von applikationen aus einer cloud sowie telekommunikationsnetz zum streamen und zur wiedergabe von anwendungen (apps) über ein bestimmtes telekommunikationssystem sowie verwendung eines telekommunikationsnetzes zum streamen und zur wiedergabe von anwendungen (apps)
EP3206358B1 (en) * 2016-02-09 2019-04-24 Awingu Nv A broker for providing visibility on content of storage services to an application server session
WO2018041324A1 (de) * 2016-09-03 2018-03-08 Gorillabox Gmbh Verfahren zum streamen und zur wiedergabe von anwendungen über ein bestimmtes telekommunikationssystem, telekommunikationsnetz zum durchführen dieses verfahrens und verwendung eines derartigen telekommunikationsnetzes
TWI768972B (zh) * 2021-06-17 2022-06-21 宏碁股份有限公司 遊戲系統及其遊戲伺服器操作方法
EP4463549A2 (en) 2022-01-14 2024-11-20 Tune Therapeutics, Inc. Compositions, systems, and methods for programming t cell phenotypes through targeted gene repression
EP4463548A1 (en) 2022-01-14 2024-11-20 Tune Therapeutics, Inc. Compositions, systems, and methods for programming t cell phenotypes through targeted gene activation
WO2024064642A2 (en) 2022-09-19 2024-03-28 Tune Therapeutics, Inc. Compositions, systems, and methods for modulating t cell function
WO2025029835A1 (en) 2023-07-31 2025-02-06 Tune Therapeutics, Inc. Compositions and methods for modulating il-2 gene expression
WO2025029840A1 (en) 2023-07-31 2025-02-06 Tune Therapeutics, Inc. Compositions and methods for multiplexed activation and repression of t cell gene expression

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6697869B1 (en) * 1998-08-24 2004-02-24 Koninklijke Philips Electronics N.V. Emulation of streaming over the internet in a broadcast application
US8261315B2 (en) * 2000-03-02 2012-09-04 Tivo Inc. Multicasting multimedia content distribution system
TW200942305A (en) * 2007-12-05 2009-10-16 Onlive Inc Apparatus for streaming databases serving real-time applications used through streaming interactive video
US8613673B2 (en) 2008-12-15 2013-12-24 Sony Computer Entertainment America Llc Intelligent game loading
WO2010141522A1 (en) 2009-06-01 2010-12-09 Gaikai, Inc. Qualified video delivery
US9723319B1 (en) * 2009-06-01 2017-08-01 Sony Interactive Entertainment America Llc Differentiation for achieving buffered decoding and bufferless decoding
KR20170129967A (ko) 2010-09-13 2017-11-27 소니 인터랙티브 엔터테인먼트 아메리카 엘엘씨 게임 서버를 포함하는 컴퓨터 게임 시스템에서 통신 네트워크를 통해 클라이언트들 간에 게임 세션을 이송하는 방법
US8369834B2 (en) * 2010-09-24 2013-02-05 Verizon Patent And Licensing Inc. User device identification using a pseudo device identifier
EP3000232A4 (en) * 2013-05-23 2017-01-25 Kabushiki Kaisha Square Enix Holdings (also trading as Square Enix Holdings Co., Ltd) Dynamic allocation of rendering resources in a cloud gaming system
JP6244127B2 (ja) * 2013-07-10 2017-12-06 株式会社ソニー・インタラクティブエンタテインメント コンテンツ提供方法、コンテンツ提供サーバ、およびコンテンツ提供システム

Also Published As

Publication number Publication date
KR102203381B1 (ko) 2021-01-15
KR20180044899A (ko) 2018-05-03
CN108136259A (zh) 2018-06-08
US20180243651A1 (en) 2018-08-30
EP3325116A1 (de) 2018-05-30
WO2017016568A1 (de) 2017-02-02

Similar Documents

Publication Publication Date Title
CN108136259B (zh) 用于流式传输和用于再现应用的方法和电信网络
US11012338B2 (en) Network adaptive latency reduction through frame rate control
US11659216B2 (en) Synchronizing and dynamic chaining of a transport layer network service for live content broadcasting
Huang et al. GamingAnywhere: The first open source cloud gaming system
US20230149807A1 (en) Edge compute proxy for cloud gaming and 5g
EP1866788B1 (en) Stream control failover
RU2392753C2 (ru) Способ подачи устройству команды не выполнять синхронизацию или ввести задержку синхронизации для мультимедийных потоков
US20150172161A1 (en) Real-time processing capability based quality adaptation
US11108840B2 (en) Transport layer network service for live content broadcasting
US11089076B1 (en) Automated detection of capacity for video streaming origin server
CN111478930B (zh) Stb云化方法、系统、瘦stb、虚拟stb及平台、存储介质
WO2011143867A1 (zh) 一种实现机顶盒与家庭网关交互的方法及系统
WO2013116975A1 (zh) 流媒体播放方法、设备及系统
CN108924603B (zh) 基于软件定义WiFi的多终端流媒体播放系统和方法
CA3041692C (en) Multichannel video programming distributor stream controller
Wang et al. A study of live video streaming system for mobile devices
US20210069590A1 (en) Method for playing back applications from a cloud, telecommunication network for streaming and for replaying applications (apps) via a specific telecommunication system, and use of a telecommunication network for streaming and replaying applications (apps)
WO2016202203A1 (zh) 设备连接方法、装置和智能电视系统
CN118337764A (zh) 视频流处理方法及装置、非易失性存储介质、电子设备
KR20140088799A (ko) 멀티 인젝션 서버 및 그 방법
Huang et al. On the performance comparisons of native and clientless real-time screen-sharing technologies
US20220132177A1 (en) Multichannel video programming distributor stream controller
CN118301376A (zh) 一种基于m3u8切片的实时视频播放解决方法
US11533532B2 (en) Method for streaming and reproducing applications via a particular telecommunications system, telecommunications network for carrying out the method, and use of a telecommunications network of this type
CN119211599A (zh) 远程桌面的控制方法、系统和电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant