CN112929740B - 一种渲染视频流的方法、装置、存储介质及设备 - Google Patents
一种渲染视频流的方法、装置、存储介质及设备 Download PDFInfo
- Publication number
- CN112929740B CN112929740B CN202110076063.5A CN202110076063A CN112929740B CN 112929740 B CN112929740 B CN 112929740B CN 202110076063 A CN202110076063 A CN 202110076063A CN 112929740 B CN112929740 B CN 112929740B
- Authority
- CN
- China
- Prior art keywords
- rendering
- unity
- activity
- video stream
- video
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/44—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs
- H04N21/44012—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving rendering scenes according to scene graphs, e.g. MPEG-4 scene graphs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/21—Server components or server architectures
- H04N21/218—Source of audio or video content, e.g. local disk arrays
- H04N21/2187—Live feed
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/44—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/443—OS processes, e.g. booting an STB, implementing a Java virtual machine in an STB or power management in an STB
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/60—Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client
- H04N21/63—Control signaling related to video distribution between client, server and network components; Network processes for video distribution between server and clients or between remote clients, e.g. transmitting basic layer and enhancement layers over different transmission paths, setting up a peer-to-peer communication via Internet between remote STB's; Communication protocols; Addressing
- H04N21/632—Control signaling related to video distribution between client, server and network components; Network processes for video distribution between server and clients or between remote clients, e.g. transmitting basic layer and enhancement layers over different transmission paths, setting up a peer-to-peer communication via Internet between remote STB's; Communication protocols; Addressing using a connection between clients on a wide area network, e.g. setting up a peer-to-peer communication via Internet for retrieving video segments from the hard-disk of other client devices
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本说明书提供一种渲染视频流的方法、装置、存储介质及设备,该方法中,将Unity内嵌至应用程序中,第一进程拉流并获取视频流中的视频帧,第二进程运行Unity Activity并利用Unity对视频帧进行渲染,这样,减轻了第一进程的内存压力,如果Unity出现异常,第一进程基于原生的Android渲染机制进行渲染,保证了渲染工作的正常运行,有利于提升用户的观看体验。
Description
技术领域
本说明书涉及计算机技术领域,尤其涉及一种渲染视频流的方法、装置、存储介质及设备。
背景技术
随着互联网技术的发展,各种互联网产品给人们的工作和生活带来了很多的便利与娱乐,尤其是视频直播,作为目前最热门的领域之一,其给人们带来了更实时的社交体验。
传统的直播应用程序,直播视频流的渲染一般是基于原生的Android渲染机制来实现的,在处理视频流的渲染事件时,直播应用程序的性能消耗是比较大的,容易造成直播视频的卡顿,影响用户观看直播的体验。
发明内容
为克服相关技术中存在的问题,本说明书提供了一种渲染视频流的方法、装置、存储介质及设备。
根据本说明书实施例的第一方面,提供一种渲染视频流的方法,所述方法应用于基于Android的应用程序,所述应用程序包括Unity Activity,所述Unity Activity是基于将Unity作为库集成到所述应用程序的Android项目中而得到的;所述方法包括:
第一进程拉取待渲染的视频流,获取所述视频流中的视频帧,并提供给第二进程;
第二进程运行所述Unity Activity,利用所述Unity Activity对所述视频帧进行渲染;
所述第一进程在所述Unity Activity出现异常的情况下,基于原生的Android渲染进程对所述视频帧进行渲染。
在某些例子中,上述第二进程是在所述应用程序检测到指定渲染事件时启动的;其中,在第二进程启动前,所述视频流的视频帧由第一进程基于原生的Android渲染机制进行渲染。
在某些例子中,上述第二进程启动时创建的窗口是透明的窗口。
在某些例子中,上述第一进程中运行有设置为透明状态的透明Activity;第一进程在所述Unity Activity启动过程中的被创建阶段启动所述透明Activity,并将第一进程渲染的视频帧提供给所述透明Activity进行展示,直至所述Unity Activity开始渲染视频帧时停止提供。
在某些例子中,上述第二进程在启动所述Unity Activity时通知第一进程拉取待渲染的视频流。
在某些例子中,上述第一进程将视频帧提供给第二进程,包括:
第一进程将视频帧输出到Surface对象上,所述Surface对象由第二进程创建并传递给第一进程;
所述第二进程监听并获取所述Surface对象上更新的视频帧。
在某些例子中,上述第一进程拉取待渲染的视频流,包括:
第一进程从与本端已建立P2P连接的邻居节点拉取待渲染的视频流。
根据本说明书实施例的第二方面,提供一种渲染视频流的装置,所述装置应用于基于Android的应用程序,所述应用程序包括Unity Activity,所述Unity Activity是基于将Unity作为库集成到所述应用程序的Android项目中而得到的;所述装置包括:
第一进程模块,用于:拉取待渲染的视频流,获取所述视频流中的视频帧,并提供给第二进程模块;
第二进程模块,用于:运行所述Unity Activity,利用所述Unity Activity对所述视频帧进行渲染;
所述第一进程模块还用于:在所述Unity Activity出现异常的情况下,基于原生的Android渲染进程对所述视频帧进行渲染。
根据本说明书实施例的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现说明书实施例中任一项方法。
根据本说明书实施例的第四方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现说明书实施例中任一项方法。
本说明书的实施例提供的技术方案可以包括以下有益效果:
本说明书实施例中,公开了一种渲染视频流的方法、装置、存储介质及设备,该方法中,将Unity内嵌至应用程序中,第一进程拉流并获取视频流中的视频帧,第二进程运行Unity Activity并利用Unity对视频帧进行渲染,这样,减轻了第一进程的内存压力,如果Unity出现异常,第一进程基于原生的Android渲染机制进行渲染,保证了渲染工作的正常运行,有利于提升用户的观看体验。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
图1是本说明书根据一示例性实施例示出的一种渲染视频流的方法的流程图;
图2是本说明书根据一示例性实施例示出的一种渲染视频流的方法的示意图;
图3A、3B、3C是本说明书根据一示例性实施例示出的直播应用程序显示的各窗口的示意图;
图4是本说明书实施例渲染视频流的装置所在计算机设备的一种硬件结构图;
图5是本说明书根据一示例性实施例示出的一种渲染视频流的装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
视频直播,是目前最热门的领域之一,近年来,各类用于视频直播的直播平台层出不穷,给人们带来了更实时的社交体验。在直播场景中,视频渲染是非常普遍的一种视频处理方法,其作用主要包括节省用户的设备资源。传统的直播应用程序,直播视频的渲染是基于原生的Android的渲染机制来实现的,其是通过OpenGL(Open Graphics Library,开放图形库)接口调用GPU(Graphics Processing Unit,图形处理器)来处理。在处理视频流的渲染事件时,直播应用程序的性能消耗是比较大的,容易造成直播视频的卡顿,影响用户观看直播的体验。
接下来对本说明书实施例进行详细说明。
如图1所示,图1是本说明书根据一示例性实施例示出的一种渲染视频流的方法的流程图,所述方法应用于基于Android的应用程序,所述应用程序包括Unity Activity,所述Unity Activity是基于将Unity作为库集成到所述应用程序的Android项目中而得到的;所述方法包括:
在步骤101、第一进程拉取待渲染的视频流,获取所述视频流中的视频帧,并提供给第二进程;
本说明书实施例中的应用程序是基于Android平台开发的应用程序,其运行环境可以是安卓设备,也可以是支持安卓的模拟器。这一应用程序包括Unity Activity,该Unity Activity是基于将Unity作为库集成到所述应用程序的Android项目中而得到的。也就是说,本说明书实施例是将Unity嵌入到应用程序中,将其作为整个应用程序的一个Activity而存在。这一应用程序可以应用于直播场景中,以对直播视频流进行渲染处理。
关于Unity,Unity是一个跨平台的专业游戏引擎,也叫Unity3D、U3D,是一个具有包括2D/3D绘图、声音播放、用户界面管理、数据管理、创建工具等功能的的游戏开发平台,能够让用户轻松地完成三维视频游戏、建筑可视化、实时三维动画等类型的创建。
关于Activity,Android应用程序可以是由一些零散的有联系的组件组成,Activity(活动)就是其中一种。Activity提供一个窗口(Window),用户可以通过该窗口实现和应用程序的交互,在基于Android的应用程序中,一个Activity通常就是一个单独的窗口,它上面可以显示一些控件,也可以监听并处理用户的事件,以及做出响应。
前面提到的将Unity作为库集成到所述应用程序的Android项目的过程可以包括以下步骤:
S1011、在Unity中编写脚本,通过aplus构建平台运行脚本导出UnityLibrary.arr,其中,其中,UnityLibrary包含Unity运行时组件和内容,是一个可以集成到其他Gradle项目中的库,arr文件是一个Android库项目的二进制归档文件,其包含所有资源文件,包括class资源文件以及res资源文件;
S1012、将导出的UnityLibrary.arr上传到maven仓库,其中,maven仓库是Android项目中依赖的第三方库所在的位置,即放置所有jar文件和arr文件的地方;
S1013、在应用程序的Android项目的buid.gradle中添加maven仓库依赖,并下载UnityLibrary.arr,这样,通过gradlb脚本添加依赖关系,从而将Unity作为第三方库引入到Android项目中;
S1014、在第二进程中继承UnityLibrary.arr中的UnityPlayerActivity,可以理解的,继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等,这样,得到的Unity Activity可以具有UnityPlayerActivity原先的属性和方法。
当然,除了上述过程以外,也可以参见相关技术中在Android Studio项目中引入第三方资源库的其他方式来实现。
本步骤中,第一进程的待渲染的视频流,可以是从CDN(Content DeliveryNetwork,内容分发网络)服务器拉取的,而在直播架构是P2P(Peer-to-peer,对等网络)网络架构时,也可以是从与本端已建立P2P连接的邻居节点拉取的。可以理解的,在直播场景中,由于视频数据是经由网络进行传输,通常来说,视频数据的体积较大,不压缩处理的话对网络会造成负担,因此,第一进程拉取到的待渲染的视频流是经过视频编码处理的,要观看时需要通过解码器将其解码出来。在某些例子中,视频流中的视频帧的获取方式可以是通过对视频流硬解码得到,所谓的硬解码是指使用非CPU的硬件,如GPU来进行解码工作。拉流和解码的具体步骤与相关技术一致,在此不再赘述。
在某些例子中,第一进程将视频帧提供给第二进程可以包括:第一进程将解码得到的视频帧输出到Surface对象上,所述Surface对象由第二进程创建并传递给第一进程。在Android应用程序中,Surface对象可以认为是UI的画布,即Android应用程序是在Surface对象上作画的。Surface对象中包含Canvas成员,是各种画图接口的包装类,专门用于记载画图动作,Surface对象对应了一块屏幕缓冲区,每个窗口(Window)对应一个Surface对象,任何视图(View)都要画在Surface对象的Canvas上。也就是说,由第二进程创建一个Surface对象,该Surface对象可以传递给第一进程,用来承载第一进程输出的视频帧,第二进程可以监听并获取该Surface对象上所更新的视频帧。其中,第二进程将Surface对象传递给第一进程的过程可以通过AIDL(Android Interface Definition Language,Android接口定义语言)接口实现,这里的AIDL是Android系统提供的可以跨进程访问的服务,不同进程之间可以通过AIDL接口进行数据通信。
在步骤102、第二进程运行Unity Activity,利用所述Unity Activity对所述视频帧进行渲染;
本步骤中提到的Unity Activity是运行于第二进程中的,其可以认为是第二进程的零件。第二进程可以监听其创建的Surface上是否有视频帧更新,若监听到有视频帧更新,则将该视频帧传递给Unity Activity进行渲染。可以理解的,Unity中的渲染通常采用网格、材质、着色器和纹理,其中,网格是Unity的主要图形基元,定义了对象的形状;材质通过包含对所用纹理的引用、平铺信息、颜色色调等来定义表面应使用的渲染方式;着色器根据光照输入和材质配置来计算每个像素渲染的颜色,可实现光照和着色效果;纹理是应用于网格表面上的标准位图图像。在一些例子中,Unity可以将视频帧识别为纹理,由于前面解码得到的视频帧的纹理格式通常是OES(开放嵌入式表面)纹理,而目前的Unity并不支持OES纹理,因此,第二进程在利用Unity Activity对视频帧进行渲染之前,还包括:将接收到的视频帧转换成Unity支持的格式。这里提到的Unity支持的纹理格式可以包括Texture2D纹理,两种纹理格式的转换可以基于帧缓冲对象(Frame Buffer Object,FBO)实现。在转换成Texture2D纹理后,第二进程可以将Texture2D纹理的纹理ID传递给Unity Activity,纹理ID是一个无符号整型,是纹理的唯一标识,用以存放每一幅纹理的各个纹理参数,比如像素数据、纹理大小等信息,这样,Unity Activity可以通过纹理ID获得相应的Texture2D纹理,并将该Texture2D纹理赋予给相应的材质,材质使用着色器在网格表面上渲染纹理,从而实现视频帧的渲染。这样,通过将Unity内嵌至直播应用程序中,可以借助Unity的功能来完成各种渲染事件,包括美颜、镜像、旋转等等,从而实现更丰富的直播特效。
在步骤103、所述第一进程在所述Unity Activity出现异常的情况下,基于原生的Android渲染机制对所述视频帧进行渲染。
本说明书实施例的方法中,包括了两种渲染方式,一种是通过运行于第二进程中的Unity进行渲染,另一种是第一进程基于原生的Android渲染机制进行渲染。UnityActivity出现异常时,应用程序可以切换至基于原生的Android渲染机制进行渲染,从而保证渲染的正常进行。这里所提到的异常可以是包括崩溃、报错、警告等等。由于本实施例的应用程序是多进程交互,第一进程和第二进程是相互独立的,而且Unity Activity是运行于第二进程中,因此,若Unity发生崩溃,应用程序捕获到这一异常时,可以结束或重启第二进程,不影响第一进程的稳定性,而在结束或重启第二进程的期间,第一进程基于原生的Android渲染机制进行渲染,从而维持了视频流的正常渲染,保证了观众的观看体验。
本说明书实施例的方法,将Unity内嵌至应用程序,并且涉及多进程交互,第一进程实现拉流和解码,而第二进程运行Unity Activity并利用Unity实现渲染,从而减轻了第一进程的内存压力,而如果Unity出现异常,第一进程仍可以基于原生的Android渲染机制进行渲染,即第一进程仍可正常运行,保证用户的观看体验。
除了上述内容以外,本说明书还提供其他方面的改进,以进一步提升用户体验:
在某些例子中,第二进程可以是在应用程序检测到指定渲染事件时启动的;其中,在第二进程启动前,视频流中的视频帧由第一进程基于原生的Android渲染机制进行渲染。这里的指定渲染事件可以对应直播应用程序所提供的一些显示功能,比如美颜、旋转、镜像等等,在用户触发这些显示功能时,直播应用程序可以启动第二进程,从而触发切换至由Unity来对视频流进行渲染的过程。这样,可以将各种渲染事件按照更为适宜的渲染方式进行区分,以通过对应的渲染方式来进行处理,从而提升直播画面的显示效果。
可以理解的,进程在启动时会先创建窗口(Window),而在未渲染视频帧时,窗口的默认设置是黑屏,这对于用户的观感会造成一定的影响。因此,在某些例子中,第二进程启动时创建的窗口是透明的窗口。通过将第二进程启动时的窗口设置成透明,而第一进程所对应的窗口中处于第二进程创建的窗口的下层,由于第一进程仍在渲染视频,因此用户看到的仍然是直播间的显示画面,不会感知到第二进程的启动过程,因此不会影响到观看体验。
同样的,Activity组件在启动时也会先创建窗口,这样Unity Activity启动时也会出现黑屏。基于此,在某些例子中,第一进程中运行有透明Activity,第一进程在所述Unity Activity启动过程中的被创建阶段启动所述透明Activity,并将直播间的视频画面展示在所述透明Activity的窗口中,直至所述Unity Activity渲染时移除所述视频画面。可以理解的,Activity具有生命周期,即其从生成到销毁的过程,一般来说,Activity的生命周期可以依次分为:被创建、被开始、被可视、被暂停、被停止、被销毁几个阶段。透明Activity在Unity Activity启动过程中的被创建阶段启动,可以保证显示的层级关系,使得透明Activity的窗口所在层在Unity Activity所在层上面。第一进程将直播间的视频画面移到透明Activity中进行展示,可以遮挡Unity Activity启动时的黑屏,直至UnityActivity渲染出来了,再移除掉该窗口中展示的视频画面,由于透明Activity的窗口是透明的,这样就可以看到Unity Activity渲染出来的视频画面了。
应用程序基于原生的Android渲染机制对视频帧进行渲染时,拉流、解码和渲染通常是耦合在一个SDK(Software Development Kit,软件开发工具包)上的,因此,在两种渲染方式进行切换时,应用程序需要重新拉流,然而,重新拉流的过程如果出现延误会导致显示画面出现中断,影响用户观感。因此,在某些例子中,第二进程在启动Unity Activity时通知第一进程拉取待渲染的视频流。也就是说,在Unity Activity启动时,第二进程通知第一进程拉流,第一进程接收到通知后开始拉流,此时,两条视频流同时存在,一条仍由原生的Android渲染机制进行渲染,另一条则传递给Unity,以通过Unity进行渲染,这样等到Unity渲染出来了,第二进程再通知第一进程停止拉取由原生的Android渲染机制进行渲染的视频流,整个过程中显示画面不会出现中断,从而实现了两种渲染方式的无缝切换。可以理解的,第二进程通知第一进程拉流的消息也可以是在将Surface对象传递给第一进程时一并发送,在其他实施例中,Unity Activity可以包括一全局组件,Unity Activity加载Unity场景之前加载所述全局组件,所述全局组件加载时向第二进程发送拉流请求,以使第二进程接收到拉流请求时,创建Surface对象。也就是说,Unity Activity在加载Unity场景前向第二进程发送拉流请求,使得第二进程开始创建Surface对象,创建后将Surface对象传递给第一进程并通知第一进程拉取待渲染的视频流,这样,可以保证整个流程的所有步骤的有序执行,减少延误。
为了方便对本说明书的方法做更为详细的说明,接下来介绍一具体的实施例:
如图2所示,图2是本说明书实施例示出的一种渲染视频流的方法的示意图,该方法应用于直播应用程序,该直播应用程序在运行时包括主进程21和子进程22,其中,主进程21中运行有透明Activity(图中序号为23),子进程中运行有Unity Activity(图中序号为24),在本实施里中,主进程21向CDN(图中序号为25)拉取视频流,需要说明的是,本实施例的方法支持P2P流媒体协议,因此主进程21也可以向其他P2P节点拉取视频流(图中未示出)。
本实施例中,在开始时,主进程21一直基于原生的Android渲染机制对拉取的视频流进行渲染,当触发切换渲染方式时,直播间渲染视频流的过程包括:
S201、子进程22启动,子进程启动时的窗口是透明的;
S202、子进程22启动完成后,启动Unity Activity;
S203、主进程21在Unity Activity启动过程中的被创建阶段启动透明Activity;
此时直播应用程序显示的各窗口的示意图如图3A所示,其中,最底层的窗口是直播间的窗口,记为直播层31,中间层的窗口为Unity Activity的窗口,记为Unity层32,最顶层的窗口是透明Activity的窗口,记为透明层33;图3A中Unity层32和透明层33是透明的,可感知的画面是直播层31的画面;
S204、主进程22启动透明Activity后,将直播间的视频画面展示在透明Activity的窗口中;
此时直播应用程序显示的各窗口的示意图如图3B所示,各窗口的序号和含义与图3A中的一致,不同的是,图3B中可感知的画面是透明层33的画面,而透明层33显示的是直播间的视频画面,是主进程21基于原生的Android渲染机制对拉取的视频流渲染出来的;
S205、Unity Activity在加载Unity场景前加载一全局组件,该全局组件加载时向子进程22发送拉流请求;
S206、子进程22接收到拉流请求后,通过OpenGL创建OES纹理,并创建与纹理关联的Surface对象;
S207、子进程22将Surface对象通过AIDL接口传递给主进程21,并通知主进程21拉流;
S208、主进程21向CDN拉取视频流,需要说明的是,此时拉取的视频流与原先拉流的视频流是同时存在的;
S209、主进程21拉取到视频流后,对视频流进行硬解码,并将解码得到的视频帧输出到Surface对象中,其中,解码得到的视频帧的纹理格式是OES纹理;
S210、子进程22监听Surface对象上是否有视频帧更新,当有视频帧更新时,通过FBO将Surface接收到的视频帧转换为Texture2D纹理的纹理格式;
S211、子进程22将Texture2D纹理的纹理ID传递给Unity Activity;
S212、Unity Activity基于纹理ID进行纹理的显示,实现对视频帧的渲染;
S213、子进程22检测到Unity Activity渲染出来时,通知主进程21停掉原先的视频流;
S214、主进程21停掉原先的视频流,并移除透明Activity的窗口中展示的直播间的视频画面;
此时直播应用程序显示的各窗口的示意图如图3C所示,各窗口的序号和含义与图3A中的一致,不同的是,图3C中透明层33是透明的,可感知的画面是Unity层32的画面,Unity层32的画面是通过Unity渲染得到的。
需要说明的是,本实施例中还包括:如果Unity Activity出现异常,主进程21基于原生的Android渲染机制对解码得到的视频帧进行渲染。
本说明书实施例,基于Unity来对拉取到的视频流进行渲染,能够实现更丰富的直播特效,而且结合多进程交互,减轻了主进程的内存压力,能够保证主进程的稳定性;同时,在切换渲染方式时,可以实现无缝切换,达到用户无感知,有利于提升用户的观看体验。
与前述方法的实施例相对应,本说明书还提供了渲染视频流的装置及其所应用的终端的实施例。
本说明书渲染视频流的装置的实施例可以应用在计算机设备上,例如服务器或终端设备。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在文件处理的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本说明书实施例渲染视频流的装置所在计算机设备的一种硬件结构图,除了图4所示的处理器410、内存430、网络接口420、以及非易失性存储器440之外,实施例中装置431所在的服务器或电子设备,通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。
相应地,本说明书实施例还提供一种计算机存储介质,所述存储介质中存储有程序,所述程序被处理器执行时实现上述任一实施例中的方法。
本说明书实施例可采用在一个或多个其中包含有程序代码的存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。计算机可用存储介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括但不限于:相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
如图5所示,图5是本说明书根据一示例性实施例示出的一种渲染视频流的装置的框图,所述装置应用于基于Android的应用程序,所述应用程序包括Unity Activity,所述Unity Activity是基于将Unity作为库集成到所述应用程序的Android项目中而得到的;所述装置包括:
第一进程模块51,用于:拉取待渲染的视频流,获取所述视频流中的视频帧,并提供给第二进程模块;
第二进程模块52,用于:运行所述Unity Activity,利用所述Unity Activity对所述视频帧进行渲染;
所述第一进程模块51还用于:在所述Unity Activity出现异常的情况下,基于原生的Android渲染进程对所述视频帧进行渲染。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
Claims (8)
1.一种渲染视频流的方法,其特征在于,所述方法应用于基于Android的应用程序,所述应用程序包括Unity Activity,所述Unity Activity是基于将Unity作为库集成到所述应用程序的Android项目中而得到的;所述方法包括:
第一进程首次拉取待渲染的视频流,基于原生的Android渲染进程对拉取的视频流进行渲染;
在所述应用程序检测到指定渲染事件时,第二进程启动,并在启动完成后启动UnityActivity,同时通知第一进程拉流;
第一进程在收到通知后再次拉取待渲染的视频流,获取所述视频流中的视频帧,并提供给第二进程;并且在此期间,第一进程继续基于原生的Android渲染进程对首次拉取的视频流进行渲染;
第二进程运行所述Unity Activity,利用所述Unity Activity对所述视频帧进行渲染;在渲染完成之后,通知第一进程停止拉取由原生的Android渲染机制进行渲染的视频流;
所述第一进程在所述Unity Activity出现异常的情况下,基于原生的Android渲染进程对所述视频帧进行渲染。
2.根据权利要求1所述的方法,其特征在于,所述第二进程启动时创建的窗口是透明的窗口。
3.根据权利要求1所述的方法,其特征在于,所述第一进程中运行有设置为透明状态的透明Activity;第一进程在所述Unity Activity启动过程中的被创建阶段启动所述透明Activity,并将第一进程渲染的视频帧提供给所述透明Activity进行展示,直至所述UnityActivity开始渲染视频帧时停止提供。
4.根据权利要求1所述的方法,其特征在于,第一进程将视频帧提供给第二进程,包括:
第一进程将视频帧输出到Surface对象上,所述Surface对象由第二进程创建并传递给第一进程;
所述第二进程监听并获取所述Surface对象上更新的视频帧。
5.根据权利要求4所述的方法,其特征在于,所述第一进程拉取待渲染的视频流,包括:
第一进程从与本端已建立P2P连接的邻居节点拉取待渲染的视频流。
6.一种渲染视频流的装置,其特征在于,所述装置应用于基于Android的应用程序,所述应用程序包括Unity Activity,所述Unity Activity是基于将Unity作为库集成到所述应用程序的Android项目中而得到的;所述装置包括:
第一进程模块,用于:首次拉取待渲染的视频流,基于原生的Android渲染进程对拉取的视频流进行渲染;
第二进程模块,用于:在所述应用程序检测到指定渲染事件时,第二进程启动,并在启动完成后启动Unity Activity,同时通知第一进程拉流;
第一进程模块,还用于:在收到通知后再次拉取待渲染的视频流,获取所述视频流中的视频帧,并提供给第二进程模块;并且在此期间,继续基于原生的Android渲染进程对首次拉取的视频流进行渲染;
第二进程模块,还用于:运行所述Unity Activity,利用所述Unity Activity对所述视频帧进行渲染;在渲染完成之后,通知第一进程停止拉取由原生的Android渲染机制进行渲染的视频流;
所述第一进程模块还用于:在所述Unity Activity出现异常的情况下,基于原生的Android渲染进程对所述视频帧进行渲染。
7.一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求1~5任一项所述的方法。
8.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,该程序被处理器执行时实现权利要求1~5任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110076063.5A CN112929740B (zh) | 2021-01-20 | 2021-01-20 | 一种渲染视频流的方法、装置、存储介质及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110076063.5A CN112929740B (zh) | 2021-01-20 | 2021-01-20 | 一种渲染视频流的方法、装置、存储介质及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112929740A CN112929740A (zh) | 2021-06-08 |
CN112929740B true CN112929740B (zh) | 2023-06-27 |
Family
ID=76164891
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110076063.5A Active CN112929740B (zh) | 2021-01-20 | 2021-01-20 | 一种渲染视频流的方法、装置、存储介质及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112929740B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113422980B (zh) * | 2021-06-21 | 2023-04-14 | 广州博冠信息科技有限公司 | 视频数据处理方法及装置、电子设备、存储介质 |
CN113407292B (zh) * | 2021-08-16 | 2022-02-22 | 北京蔚领时代科技有限公司 | Ui数据处理系统 |
CN114827652A (zh) * | 2022-05-18 | 2022-07-29 | 上海哔哩哔哩科技有限公司 | 虚拟形象开播方法及装置 |
CN115292020B (zh) * | 2022-09-26 | 2022-12-20 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、设备以及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109922360A (zh) * | 2019-03-07 | 2019-06-21 | 腾讯科技(深圳)有限公司 | 视频处理方法、装置及存储介质 |
CN111556325A (zh) * | 2019-02-12 | 2020-08-18 | 广州艾美网络科技有限公司 | 结合音视频的渲染方法、介质及计算机设备 |
CN111696186A (zh) * | 2019-02-27 | 2020-09-22 | 杭州海康威视系统技术有限公司 | 界面渲染方法及装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8432405B2 (en) * | 2008-06-26 | 2013-04-30 | Microsoft Corporation | Dynamically transitioning between hardware-accelerated and software rendering |
CN106713988A (zh) * | 2016-12-09 | 2017-05-24 | 福建星网视易信息系统有限公司 | 一种对虚拟场景直播进行美颜处理的方法及系统 |
CN107066266A (zh) * | 2017-03-22 | 2017-08-18 | 北京潘达互娱科技有限公司 | 安卓应用中支持Unity的数据处理方法及装置 |
CN107194979A (zh) * | 2017-05-11 | 2017-09-22 | 上海微漫网络科技有限公司 | 一种虚拟角色的场景合成方法及系统 |
CN109151539B (zh) * | 2017-06-16 | 2021-05-28 | 武汉斗鱼网络科技有限公司 | 一种基于unity3d的视频直播方法、系统及设备 |
CN107728997B (zh) * | 2017-10-31 | 2020-09-11 | 万兴科技股份有限公司 | 一种视频播放器渲染系统 |
AU2020101686B4 (en) * | 2018-11-13 | 2021-05-13 | Unbnd Group Pty Ltd | Technology adapted to provide a user interface via presentation of two-dimensional content via three-dimensional display objects rendered in a navigable virtual space |
-
2021
- 2021-01-20 CN CN202110076063.5A patent/CN112929740B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111556325A (zh) * | 2019-02-12 | 2020-08-18 | 广州艾美网络科技有限公司 | 结合音视频的渲染方法、介质及计算机设备 |
CN111696186A (zh) * | 2019-02-27 | 2020-09-22 | 杭州海康威视系统技术有限公司 | 界面渲染方法及装置 |
CN109922360A (zh) * | 2019-03-07 | 2019-06-21 | 腾讯科技(深圳)有限公司 | 视频处理方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112929740A (zh) | 2021-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112929740B (zh) | 一种渲染视频流的方法、装置、存储介质及设备 | |
US7667704B2 (en) | System for efficient remote projection of rich interactive user interfaces | |
CN109168014B (zh) | 一种直播方法、装置、设备及存储介质 | |
US7336280B2 (en) | Coordinating animations and media in computer display output | |
CN113457160B (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
TW201347537A (zh) | 用於傳輸視覺內容之系統及方法 | |
CN113891113A (zh) | 视频剪辑合成方法及电子设备 | |
WO2003102874A1 (en) | Optimized mixed media rendering | |
US10554713B2 (en) | Low latency application streaming using temporal frame transformation | |
CN110505511B (zh) | 一种在网页中播放视频的方法、装置、系统及计算设备 | |
WO2022257699A1 (zh) | 图像画面显示方法、装置、设备、存储介质及程序产品 | |
KR20220143442A (ko) | 장면의 시간 이벤트 트리거 업데이트를 위한 방법 및 장치 | |
US20240007708A1 (en) | Method and apparatus for media scene description | |
Zorrilla et al. | HTML5-based system for interoperable 3D digital home applications | |
CN112540735B (zh) | 多屏同步显示方法、装置及系统以及计算机存储介质 | |
US20050021552A1 (en) | Video playback image processing | |
CN114222185B (zh) | 视频播放方法、终端设备及存储介质 | |
CN117065357A (zh) | 媒体数据处理方法、装置、计算机设备和存储介质 | |
US11013995B2 (en) | Qualified video delivery methods | |
CN115022666B (zh) | 一种虚拟数字人的互动方法及其系统 | |
CN116527983A (zh) | 页面显示方法、装置、设备、存储介质及产品 | |
WO2023280623A1 (en) | Augmenting video or external environment with 3d graphics | |
CN117708454A (zh) | 网页内容处理方法、装置、设备、存储介质及程序产品 | |
CN117873972A (zh) | 导入文件的方法、装置、电子设备及计算机可读介质 | |
CN113663328A (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 |