首页> 中国专利> 虚拟形象开播方法及装置

虚拟形象开播方法及装置

摘要

本申请公开了一种虚拟形象开播方法。该方法包括:直播进程在接收到用户触发的虚拟形象添加指令后,启动所述渲染进程;所述直播进程在接收到所述渲染进程发送的准备就绪消息时,发送所述虚拟形象的加载指令给所述渲染进程,以使所述渲染进程根据所述加载指令加载所述虚拟形象;所述直播进程获取用户的面部数据,并将所述面部数据同步给所述渲染进程,以使所述渲染进程根据所述面部数据对加载后的虚拟形象进行渲染;所述直播进程通过所述渲染进程创建的共享纹理获取渲染结果,并将所述渲染结果作为视频流推送至直播服务器中,其中,所述渲染结果为所述渲染进程根据所述面部数据对加载后的虚拟形象进行渲染后得到的。本申请可提高用户体验。

著录项

  • 公开/公告号CN114827652A

    专利类型发明专利

  • 公开/公告日2022-07-29

    原文格式PDF

  • 申请/专利权人 上海哔哩哔哩科技有限公司;

    申请/专利号CN202210548103.6

  • 发明设计人 朱嘉灵;胡江涛;

    申请日2022-05-18

  • 分类号H04N21/2187;H04N21/234;H04N21/44;

  • 代理机构北京英特普罗知识产权代理有限公司;

  • 代理人饶文彬

  • 地址 200433 上海市杨浦区政立路485号国正中心3号楼

  • 入库时间 2023-06-19 16:09:34

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-07-29

    公开

    发明专利申请公布

说明书

技术领域

本申请涉及视频技术领域,尤其涉及一种一种虚拟形象开播方法及装置。

背景技术

随着直播技术的发展,直播软件可以采用虚拟形象进行直播。现有技术中,直播软件在采用虚拟形象进行直播时,为了低成本地实现复杂的物理效果和粒子效果,一般会采用游戏引擎Unity来进行直播软件中的虚拟形象相关功能的开发。在上述功能的开发过程中,发明人发现,PC版的Unity只能作为独立进程运行,无法嵌入Win32窗体中作为子窗体运行,导致直播软件在采用虚拟形象进行直播时,需要先将虚拟形象给Unity进行渲染,Unity在显存中完成虚拟形象的渲染后,会将渲染结果从显存中拷贝至内存中,以便直播软件可以从内存中获取到渲染结果,并将渲染结果传输至直播服务器,从而实现直播。

然而,上述将渲染结果从显存中拷贝至内存的过程中,需要非常大的系统开销,经常会出现页面卡顿的情况,导致用户体验较差。

发明内容

本申请实施例的目的是提供一种虚拟形象开播方法及系统,可以解决现有技术中Unity在显存中完成虚拟形象的渲染后,会将渲染结果从显存中拷贝至内存中,导致系统开销较大,进而造成页面卡顿的问题。

本申请实施例的一个方面提供了一种虚拟形象开播方法,应用于包括直播进程和渲染进程的直播应用程序中,包括:

所述直播进程发送所述虚拟形象的加载指令给所述渲染进程,以使所述渲染进程根据所述加载指令加载所述虚拟形象;

所述直播进程获取用户的面部数据,并将所述面部数据同步给所述渲染进程,以使所述渲染进程根据所述面部数据对加载后的虚拟形象进行渲染;

所述直播进程通过所述渲染进程创建的共享纹理获取渲染结果,并将所述渲染结果作为视频流推送至直播服务器中,其中,所述渲染结果为所述渲染进程根据所述面部数据对加载后的虚拟形象进行渲染后得到的。

可选地,所述直播进程与所述渲染进程通过共享内存实现进程间数据交互。

可选地,所述直播进程与所述渲染进程通过共享内存实现进程间数据交互的数据为虚拟形象开播中除所述渲染结果数据之外的所有数据。

可选地,所述方法还包括:

直播进程在接收到用户触发的虚拟形象添加指令后,启动所述渲染进程,其中,所述渲染进程在启动后会创建共享纹理;

所述直播进程接收所述渲染进程发送的准备就绪消息,其中,所述直播进程在接收到所述渲染进程发送的准备就绪消息时,会发送所述虚拟形象的加载指令给所述渲染进程。

可选地,所述方法还包括:

所述渲染进程在启动后,将所述共享纹理的句柄与所述准备就绪消息写入至所述共享内存中。

可选地,所述渲染进程根据所述加载指令加载所述虚拟形象包括:

所述渲染进程根据所述加载指令中携带的虚拟形象的存储路径信息获取虚拟形象;

所述渲染进程对获取到的虚拟形象进行加载操作。

可选地,所述渲染进程对获取到的虚拟形象进行加载操作后,还包括:

所述渲染进程将加载结果写入至所述共享内存中,以使所述直播进程在直播界面中展示所述加载结果。

可选地,所述直播进程通过所述渲染进程创建的共享纹理获取渲染结果包括:

所述直播进程通过所述共享纹理的句柄打开所述共享纹理;

所述直播进程将所述共享纹理中存储的渲染结果拷贝至所述直播进程预先在显存中创建的纹理块中。

可选地,所述渲染进程根据所述面部数据对加载后的虚拟形象进行渲染包括:

所述渲染进程根据所述面部数据对加载后的虚拟形象进行驱动,得到驱动后的虚拟形象;

所述渲染进程采用渲染至纹理技术对驱动后的虚拟形象进行渲染。

可选地,所述方法还包括:

所述直播进程在接收到用户触发的虚拟形象删除指令时,关闭所述渲染进程。

本申请实施例的一个方面还提供了一种虚拟形象开播装置,应用于包括直播进程和渲染进程的直播应用程序中,所述虚拟形象开播包括:

发送模块,用于所述直播进程发送所述虚拟形象的加载指令给所述渲染进程,以使所述渲染进程根据所述加载指令加载所述虚拟形象;

同步模块,用于所述直播进程获取用户的面部数据,并将所述面部数据同步给所述渲染进程,以使所述渲染进程根据所述面部数据对加载后的虚拟形象进行渲染;

推送模块,用于所述直播进程通过所述渲染进程创建的共享纹理获取渲染结果,并将所述渲染结果作为视频流推送至直播服务器中,其中,所述渲染结果为所述渲染进程根据所述面部数据对加载后的虚拟形象进行渲染后得到的。

本申请还提供了一种计算机设备,所述计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。

本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。

本申请实施例提供的虚拟形象开播方法,通过直播进程在接收到用户触发的虚拟形象添加指令后,启动渲染进程;并在接收到所述渲染进程发送的准备就绪消息时,发送所述虚拟形象的加载指令给所述渲染进程,以使所述渲染进程根据所述加载指令加载所述虚拟形象;同时,直播进程实时获取用户的面部数据,并将所述面部数据同步给所述渲染进程,以使所述渲染进程可以根据所述面部数据对加载后的虚拟形象进行渲染。在渲染进程完成渲染操作后,直播进程通过所述渲染进程创建的共享纹理获取渲染结果,并将所述渲染结果作为视频流推送至直播服务器中。本申请的虚拟形象开播方法,由于直播进程获取渲染进程的渲染结果是通过共享纹理来获取的,而采用共享纹理获取渲染结果是在GPU中执行的,对CPU不会产生额外的系统开销,从而可以避免采用虚拟形象开播时会出现页面卡顿的问题,提高用户体验。

附图说明

图1为本申请实施例的虚拟形象开播方法的环境示意图;

图2为本申请所述的虚拟形象开播方法的一种实施例的流程图;

图3为本申请一实施方式中渲染进程根据所述加载指令加载所述虚拟形象的步骤细化流程示意图;

图4为本申请一实施方式中渲染进程根据所述面部数据对加载后的虚拟形象进行渲染的步骤细化流程示意图;

图5为本申请一实施方式中直播进程通过所述渲染进程创建的共享纹理获取渲染结果的步骤细化流程示意图;

图6为本申请一实施方式中虚拟形象开播方法的时序图;

图7为本申请所述的虚拟形象开播装置的一种实施例的程序模块图;

图8为本申请实施例提供的执行虚拟形象开播方法的计算机设备的硬件结构示意图。

具体实施方式

以下结合附图与具体实施例进一步阐述本申请的优点。

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

在本申请的描述中,需要理解的是,步骤前的数字标号并不标识执行步骤的前后顺序,仅用于方便描述本申请及区别每一步骤,因此不能理解为对本申请的限制。

图1示出了本申请实施例提供的应用场景的一种示意图,该应用场景包括:用户10、直播应用程序20及直播服务器30,其中:

用户10用于启动所述直播应用程序20,并在所述直播应用程序20中选择虚拟形象作为主播。

直播应用程序20,用于采用用户选定的虚拟形象作为直播进行视频直播,并将视频直播产生的视频流上传至直播服务器30中。

直播服务器30,用于存储直播应用程序20上传的视频流,以便观众终端可以从直播服务器30获取到直播视频流,并对获取到的直播视频流进行解码播放,从而使得直播观众可以观看到直播视频。

直播应用程序20优选为安装在笔记本电脑、台式电脑等桌面终端上的具有直播功能的应用程序。

其中,直播服务器30可以是单独的服务器,也可以是服务器集群,可以是本地服务器,也可以是云端服务器,具体的服务器类型在本申请实施例中可以不作为限定。

参阅图2,其为本申请一实施例的虚拟形象开播方法的流程示意图。本申请中的虚拟形象开播方法应用于包括直播进程和渲染进程的直播应用程序中,其中,所述直播应用程序指的是具有直播功能的应用程序(APP可以理解,本方法实施例中的流程图不用于对执行步骤的顺序进行限定。从图中可以看出,本实施例中所提供的虚拟形象开播方法包括:

步骤S20、直播进程在接收到用户触发的虚拟形象添加指令后,启动所述渲染进程。

具体地,当用户启动直播应用程序后,用户可以在该直播应用程序中选择采用虚拟形象作为主播进行直播。其中,虚拟形象是一种利用VR、AR、光学动作捕捉和实时运动同步等新科技打造的虚拟智能人物形象,往往拥有自己独特的声音、外形。

其中,所述虚拟形象添加指令用于添加用户选定的虚拟形象作为主播。

所述渲染进程为基于Unity引擎开发的Win32程序,其中,Unity引擎可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。

作为示例,当用户想采用虚拟形象作为主播进行直播时,用户可以在该直播应用程序中选择用户想要使用的虚拟形象,比如,在该直播应用程序中存在虚拟形象A、虚拟形象B及虚拟形象C可供用户选择,则当用户选定虚拟形象A作为主播进行直播时,会触发生成一个虚拟形象添加指令。直播进程可以实时或定时对用户触发的虚拟形象添加指令进行监听,并在监听到该虚拟形象添加指令后,可以启动所述渲染进程,以便渲染进程可以对用户添加的虚拟形象进行渲染操作。

在一实施例中,Unity引擎还可以在渲染场景中对真实的物品进行渲染,比如,Unity引擎在对渲染场景初始化后,可以对用户通过计算机设备的摄像头采集到的水杯的图像进行渲染,从而在渲染场景中展示该水杯。

在一示例性的实施方式中,直播进程在接收到用户触发的虚拟形象指令后,为了后续直播进程可以和渲染进程进行通信,直播进程会创建一个共享内存,以便该直播进程和渲染进程可以采用共享内存通信技术实现直播进程和渲染进程之间的数据交互。

在本实施例中,直播进程与所述渲染进程可以通过共享内存传输虚拟形象开播中除所述渲染结果数据之外的所有数据,比如,传输加载或卸载虚拟形象数据、播放动作数据、面部数据、虚拟连麦和虚拟PK数据、礼物掉落数据、渲染进程通知直播进程渲染结果发生更新的通知数据等。

其中,共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。

在一实施方式中,在直播进程创建好共享内存后,为了渲染进程可以知道创建的共享内存的地址,直播进程在创建好共享内存后,可以将共享内存的共享内存名在启动渲染进程时以启动参数的方式告知渲染进程,这样,当渲染进程启动后,即可以根据该共享内存名找到共享内存的位置,并访问该共享内存。在一实施方式中,该启动参数还可以包括用户id信息。

在本实施例中,渲染进程在启动后,会创建共享纹理,以便后续渲染进程可以通过该创建的共享纹理将渲染结果同步至直播进程。

在一示例性的实施方式中,渲染进程在启动后,还会将共享纹理的句柄与准备就绪消息写入至共享内存中。

其中,准备就绪消息用于表明渲染进程已处于准备完成状态,可以对虚拟形象进行渲染操作。

本实施例中,通过将共享纹理的句柄写入至共享内存中,以便直播进程可以从该内存中获取共享纹理的句柄,并通过该共享纹理的句柄打开共享纹理。同时,本申请实施例中,通过将准备就绪消息写入至共享内存中,以便该直播进程可以从共享内存中获取到该准备就绪消息。

在一示例性的实施方式中,渲染进程在创建好共享纹理后,可以在共享纹理中初始化渲染场景,以便渲染进程后续可以在该渲染场景中对待渲染的对象进行渲染操作。

可以理解的是,当渲染进程在渲染场景中初始化渲染场景后,直播进程为了可以及时对渲染进程中的渲染数据进行同步,直播进程可以在获取到准备就绪消息后,直播进程通过共享纹理的句柄打开共享纹理,并从共享纹理中将其中的数据进行拷贝。

在一示例性的实施方式中,为了使得直播进程或渲染进程可以及时从共享内存中读取数据,直播进程可以和渲染进程预先约定一个共享事件用于及时通知共享内存中存储的内容有更新。

步骤S21、所述直播进程接收所述渲染进程发送的准备就绪消息,并在接收到所述渲染进程发送的准备就绪消息时,发送所述虚拟形象的加载指令给所述渲染进程,以使所述渲染进程根据所述加载指令加载所述虚拟形象。

具体地,当渲染进程准备就绪后,渲染进程可以通过共享内存将准备就绪消息发送给直播进程,这样,直播进程在接收到该准备就绪消息时,即可以发送虚拟形象的加载指令给所述渲染进程,以便渲染进程可以根据该加载指令对虚拟形象进行加载。

在一示例性的实施方式中,参阅图3,所述渲染进程根据所述加载指令加载所述虚拟形象包括:步骤S30,所述渲染进程根据所述加载指令中携带的虚拟形象的存储路径信息获取虚拟形象;步骤S31,所述渲染进程对获取到的虚拟形象进行加载操作。

具体地,所述存储路径信息为所述虚拟形象对应的存储文件的存储位置,该存储位置为位于计算机设备本地的存储位置。在本实施例中,渲染进程在对虚拟形象进行加载时,会先根据该存储路径信息获取到该虚拟形象,并将获取到的虚拟形象读取显存中,然后在显存中对该虚拟形象进行加载操作。其中,所述加载操作指的是在显存中对虚拟形象进行纹理渲染。

在一实施方式中,渲染进程在获取到虚拟形象后,为了避免虚拟形象在获取的过程中,可能被篡改,在本实施例中,渲染进行在获取到虚拟形象后,可以对该虚拟形象进行文件校验操作,以确定当前获取到的虚拟形象是否为用户添加的虚拟形象。

可以理解的是,渲染进程在对虚拟形象进行加载之前,需要先对虚拟形象进行初始化处理。

在一示例性的实施方式中,渲染进程对获取到的虚拟形象进行加载操作后,还包括:所述渲染进程将加载结果写入至所述共享内存中,以使所述直播进程在直播界面中展示所述加载结果。

具体地,所述加载结果用于反馈用户是否在直播应用程序中成功添加虚拟形象。

在本实施例中,渲染进程在完成虚拟形象的加载操作后,为了使得用户可以了解到用户添加的虚拟形象是否成功,渲染进程会将加载结果写入至所述共享内存中,这样,直播进程可以从该共享内存中获取加载结果,然后将获取到的加载结果展示在当前的直播界面中,这样,用户可以在直播界面中直观地观看到用户添加虚拟形象是否成功。

作为示例,当用户成功添加该虚拟形象时,所述加载结果可以为“添加成功”;当用户添加该虚拟形象失败时,所述加载结果可以为“添加失败”。

步骤S22,所述直播进程获取用户的面部数据,并将所述面部数据同步给所述渲染进程,以使所述渲染进程根据所述面部数据对加载后的虚拟形象进行渲染。

具体地,直播进程可以通过安装直播应用程序的终端设备的内置摄像装置或者外接的摄像装置实时采集用户的面部数据,并将采集到的面部数据同步给渲染进程,以便渲染进程可以根据该面部数据对虚拟形象进行渲染。

在一示例性的实施方式中,参阅图4,所述渲染进程根据所述面部数据对加载后的虚拟形象进行渲染包括:

步骤S40,所述渲染进程根据所述面部数据对加载后的虚拟形象进行驱动,得到驱动后的虚拟形象。

具体地,所述渲染进程根据所述面部数据对加载后的虚拟形象进行驱动指的是,所述渲染进程根据面部数据对虚拟形象进行眨眼操作,张嘴操作、摇头操作等渲染操作。

步骤S41,所述渲染进程采用渲染至纹理技术对驱动后的虚拟形象进行渲染。

具体地,渲染至纹理(Render to Texture,RTT)技术是一种将渲染结果绘制到纹理贴图,而不是绘制到屏幕(窗口)的技术。

本实施例中,通过渲染进程采用渲染至纹理技术对驱动后的虚拟形象进行渲染,从而可以方便得到的渲染结果同步在至直播进程。

步骤S23,所述直播进程通过所述渲染进程创建的共享纹理获取渲染结果,并将所述渲染结果作为视频流推送至直播服务器中,其中,所述渲染结果为所述渲染进程根据所述面部数据对加载后的虚拟形象进行渲染后得到的。

具体地,渲染进程在根据所述面部数据对加载后的虚拟形象进行渲染后得到渲染结果后,会将该渲染结果存储至共享纹理中,以便直播进程可以从该渲染进程中获取渲染结果,并在获取到渲染结果后,将该渲染结果作为视频流推送至直播服务器中,从而实现视频直播。在本实施例中,渲染进程在完成渲染操作后,为了使得直播进程可以及时通过共享纹理获取到渲染结果,渲染进程在完成渲染操作后,会在共享内存中写入一条渲染成功消息,以便直播进程可以根据共享内存中的消息来及时去共享纹理中获取渲染结果。

在一示例性的实施方式中,参阅图5,所述直播进程通过所述渲染进程创建的共享纹理获取渲染结果包括:步骤S50,所述直播进程通过所述共享纹理的句柄打开所述共享纹理;步骤S51,所述直播进程将所述共享纹理中存储的渲染结果拷贝至所述直播进程预先在显存中创建的纹理块中。

具体地,直播进程在获取渲染结果之前,会预先在显存中创建一个纹理块,以便后续可以通过该纹理块来存储渲染进程根据所述面部数据对加载后的虚拟形象进行渲染后得到的渲染结果。

在本实施例中,直播进程在获取渲染结果时,会首先通过共享纹理的句柄来打开渲染进程预先创建的共享纹理,之后,可以通过GPU将该共享纹理中存储的渲染结果拷贝至直播进程预先创建的纹理块中,从而实现渲染结果的同步获取。

需要说明的是,由于在将视频流推送至直播服务器时,一般是逐帧进行推送的,因此,在本实施例中,为了可以持续地获取到推送至直播服务器的视频流,在本实施例中,需要循环执行步骤S22-S23,直至用户删除虚拟形象,即用户结束采用虚拟形象作为主播进行直播为止。

本申请实施例提供的虚拟形象开播方法,通过直播进程在接收到用户触发的虚拟形象添加指令后,启动渲染进程;并在接收到所述渲染进程发送的准备就绪消息时,发送所述虚拟形象的加载指令给所述渲染进程,以使所述渲染进程根据所述加载指令加载所述虚拟形象;同时,直播进程实时获取用户的面部数据,并将所述面部数据同步给所述渲染进程,以使所述渲染进程可以根据所述面部数据对加载后的虚拟形象进行渲染。在渲染进程完成渲染操作后,直播进程通过所述渲染进程创建的共享纹理获取渲染结果,并将所述渲染结果作为视频流推送至直播服务器中。本申请的虚拟形象开播方法,由于直播进程获取渲染进程的渲染结果是通过共享纹理来获取的,而采用共享纹理获取渲染结果是在GPU中执行的,对CPU不会产生额外的系统开销,从而可以避免采用虚拟形象开播时会出现页面卡顿的问题,提高用户体验。

在一示例性的实施方式中,所述方法还包括:

所述直播进程在接收到用户触发的虚拟形象删除指令时,关闭所述渲染进程。

具体地,当用户想结束虚拟形象作为主播进行直播时,用户可以触发虚拟形象删除指令。直播进程会可以实时对虚拟形象删除指令进行监听,当监听到虚拟形象删除指令时,将渲染进程进行关闭,从而节省系统开销。

为了便于理解本申请,以下将结合具体实施例详细介绍本申请的实现流程。

参阅图6,用户在启动直播应用程序后,首先会在直播应用程序中添加作为开播主播的虚拟形象,在用户添加好虚拟形象后,会触发虚拟形象添加指令,直播应用程序中的直播进程可以实时或者定时对虚拟形象添加指令进行监听,并在接收到虚拟形象添加指令后,直播进程会启动Unity作为直播应用程序中的渲染进程。渲染进程在启动后会进行一序列化的初始化操作,并在完成初始化操作后,会发送Unity准备就绪的消息给直播进程。直播进程在接收到该消息后,会发送加载虚拟形象的指令给渲染进程。渲染进程会根据该加载指令加载虚拟形象,并在完成加载后会发送加载完成的消息给直播进程。直播进程在接收到该消息后会一帧一帧同步获取到的面部数据给渲染进程。渲染进程在获取到面部数据后,会通过该面部数据驱动虚拟形象,并同步渲染结果给直播进程。当直播进程接收到用户触发的虚拟形象删除指令时,直播进程会发送关闭渲染进程的消息给渲染进程,以便渲染进程可以根据该消息将渲染进程关闭。

参阅图7所示,是本申请虚拟形象开播装置60一实施例的程序模块图。其中,虚拟形象开播装置60可以应用于包括直播进程和渲染进程的直播应用程序中。

本实施例中,所述虚拟形象开播装置60包括一系列的存储于存储器上的计算机程序指令,当该计算机程序指令被处理器执行时,可以实现本申请各实施例的虚拟形象开播功能。在一些实施例中,基于该计算机程序指令各部分所实现的特定的操作,虚拟形象开播装置60可以被划分为一个或模块,具体可以划分的模块如下:

启动模块61,用于直播进程在接收到用户触发的虚拟形象添加指令后,启动所述渲染进程;

发送模块62,用于所述直播进程在接收到所述渲染进程发送的准备就绪消息时,发送所述虚拟形象的加载指令给所述渲染进程,以使所述渲染进程根据所述加载指令加载所述虚拟形象;

同步模块63,用于所述直播进程获取用户的面部数据,并将所述面部数据同步给所述渲染进程,以使所述渲染进程根据所述面部数据对加载后的虚拟形象进行渲染;

推送模块64,用于所述直播进程通过所述渲染进程创建的共享纹理获取渲染结果,并将所述渲染结果作为视频流推送至直播服务器中,其中,所述渲染结果为所述渲染进程根据所述面部数据对加载后的虚拟形象进行渲染后得到的。

在一示例性的实施方式中,所述直播进程与所述渲染进程通过共享内存实现进程间数据交互。

在一示例性的实施方式中,所述渲染进程在启动后,会将所述共享纹理的句柄与所述准备就绪消息写入至所述共享内存中。

在一示例性的实施方式中,所述渲染进程根据所述加载指令加载所述虚拟形象包括:所述渲染进程根据所述加载指令中携带的虚拟形象的存储路径信息获取虚拟形象;所述渲染进程对获取到的虚拟形象进行加载操作。

在一示例性的实施方式中,所述渲染进程对获取到的虚拟形象进行加载操作后,还包括:所述渲染进程将加载结果写入至所述共享内存中,以使所述直播进程在直播界面中展示所述加载结果。

在一示例性的实施方式中,所述直播进程通过所述渲染进程创建的共享纹理获取渲染结果包括:所述直播进程通过所述共享纹理的句柄打开所述共享纹理;所述直播进程将所述共享纹理中存储的渲染结果拷贝至所述直播进程预先在显存中创建的纹理块中。

在一示例性的实施方式中,所述渲染进程根据所述面部数据对加载后的虚拟形象进行渲染包括:所述渲染进程根据所述面部数据对加载后的虚拟形象进行驱动,得到驱动后的虚拟形象;所述渲染进程采用渲染至纹理技术对驱动后的虚拟形象进行渲染。

在一示例性的实施方式中,所述直播进程在接收到用户触发的虚拟形象删除指令时,会关闭所述渲染进程。

本申请实施例提供的虚拟形象开播方法,通过直播进程在接收到用户触发的虚拟形象添加指令后,启动渲染进程;并在接收到所述渲染进程发送的准备就绪消息时,发送所述虚拟形象的加载指令给所述渲染进程,以使所述渲染进程根据所述加载指令加载所述虚拟形象;同时,直播进程实时获取用户的面部数据,并将所述面部数据同步给所述渲染进程,以使所述渲染进程可以根据所述面部数据对加载后的虚拟形象进行渲染。在渲染进程完成渲染操作后,直播进程通过所述渲染进程创建的共享纹理获取渲染结果,并将所述渲染结果作为视频流推送至直播服务器中。本申请的虚拟形象开播方法,由于直播进程获取渲染进程的渲染结果是通过共享纹理来获取的,而采用共享纹理获取渲染结果是在GPU中执行的,对CPU不会产生额外的系统开销,从而可以避免采用虚拟形象开播时会出现页面卡顿的问题,提高用户体验。

图8示意性示出了根据本申请实施例的适于实现虚拟形象开播方法的计算机设备7的硬件架构示意图。本实施例中,计算机设备7是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。例如,可以是平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者服务器所组成的服务器集群)等。如图8所示,计算机设备7至少包括但不限于:可通过系统总线相互通信链接存储器120、处理器121、网络接口122。其中:

存储器120至少包括一种类型的计算机可读存储介质,该可读存储介质可以是易失性的,也可以是非易失性的,具体而言,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器120可以是计算机设备7的内部存储模块,例如该计算机设备7的硬盘或内存。在另一些实施例中,存储器120也可以是计算机设备7的外部存储设备,例如该计算机设备7上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,存储器120还可以既包括计算机设备7的内部存储模块也包括其外部存储设备。本实施例中,存储器120通常用于存储安装于计算机设备7的操作系统和各类应用软件,例如虚拟形象开播方法的程序代码等。此外,存储器120还可以用于暂时地存储已经输出或者将要输出的各类数据。

处理器121在一些实施例中可以是中央处理器(Central Processing Unit,简称为CPU)、控制器、微控制器、微处理器、或其它虚拟形象开播芯片。该处理器121通常用于控制计算机设备7的总体操作,例如执行与计算机设备7进行数据交互或者通信相关的控制和处理等。本实施例中,处理器121用于运行存储器120中存储的程序代码或者处理数据。

网络接口122可包括无线网络接口或有线网络接口,该网络接口122通常用于在计算机设备7与其它计算机设备之间建立通信链接。例如,网络接口122用于通过网络将计算机设备7与外部终端相连,在计算机设备7与外部终端之间的建立数据传输通道和通信链接等。网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(GlobalSystem of Mobile communication,简称为GSM)、宽带码分多址(Wideband Code DivisionMultiple Access,简称为WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi等无线或有线网络。

需要指出的是,图8仅示出了具有部件120~122的计算机设备,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。

在本实施例中,存储于存储器120中的虚拟形象开播方法可以被分割为一个或者程序模块,并由一个或处理器(本实施例为处理器121)所执行,以完成本申请。

本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,计算机程序被处理器执行时实现实施例中的虚拟形象开播方法的步骤。

本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作系统和各类应用软件,例如实施例中的虚拟形象开播方法的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。

以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到至少两个网络单元上。可以根据实际的需要筛选出其中的部分或者全部模块来实现本申请实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域普通技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。

最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号