一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

多进程解码播放方法和装置与流程

2022-03-26 13:20:30 来源:中国专利 TAG:


1.本发明涉及视频处理技术领域,尤其是涉及多进程解码播放方法和装置。


背景技术:

2.目前,视频播放采用单进程播放器进行播放,单进程播放器无法满足多路节目同时播放;当多个单进程播放器播放时间较长时,会存在崩溃、停播、卡顿或跳转到其他帧界面等问题。
3.另外,随着业务逻辑的复杂化和需求的增加,单进程播放器无法满足产品的迭代需求。


技术实现要素:

4.有鉴于此,本发明的目的在于提供多进程解码播放方法和装置,采用多进程播放器进行播放,可以满足多路节目同时播放和多个播放器长时间播放,提高了独立性和稳定性。
5.第一方面,本发明实施例提供了多进程解码播放方法,应用于客户端,所述客户端上设置有主进程和多个子进程,所述子进程包括libvlc播放器,所述方法包括:
6.获取用户的选取模式;
7.根据所述选取模式在所述主进程上创建主窗口;
8.在所述主窗口上生成多个子窗口,其中,每个所述子进程对应相应的所述子窗口;
9.将每个所述子窗口上对应的视频流进行绘制,得到多个绘制后的视频流;
10.通过所述libvlc播放器将所述多个绘制后的视频流进行解复用和解码,得到多个解码后的视频流;
11.显示所述多个解码后的视频流。
12.进一步的,所述通过所述libvlc播放器将所述多个绘制后的视频流进行解复用和解码,得到多个解码后的视频流,包括:
13.将所述多个绘制后的视频流输入给访问层,并通过访问层发送给流层;
14.将所述多个绘制后的视频流通过所述流层发送给解复用层;
15.所述解复用层对所述多个绘制后的视频流进行解复用,得到多个解复用的视频流;
16.将所述多个解复用的视频流发送给第一输出层,并通过第一输出层发送给解码层;
17.所述解码层对所述多个解复用的视频流进行解码,得到所述多个解码后的视频流。
18.进一步的,所述方法还包括:
19.所述主进程通过dbus将播放信息发送给所述子进程;
20.或者,
21.所述子进程通过所述dbus将播放结果信息发送给所述主进程。
22.进一步的,所述方法还包括:
23.当所述主窗口上生成多个所述子窗口时,根据所述选取模式调整每个所述子窗口的大小和显示位置。
24.进一步的,所述方法还包括:
25.当所述主窗口在界面上发生变化时,根据变化后的主窗口调整每个所述子窗口的大小和所述显示位置。
26.第二方面,本发明实施例提供了多进程解码播放装置,应用于客户端,所述客户端上设置有主进程和多个子进程,所述子进程包括libvlc播放器,所述装置包括:
27.播放器组管理子模块,用于获取用户的选取模式;根据所述选取模式在所述主进程上创建主窗口;在所述主窗口上生成多个子窗口,其中,每个所述子进程对应相应的所述子窗口;
28.播放器视频绘制子模块,用于将每个所述子窗口上对应的视频流进行绘制,得到多个绘制后的视频流;
29.所述libvlc播放器,用于将所述多个绘制后的视频流进行解复用和解码,得到多个解码后的视频流;显示所述多个解码后的视频流。
30.进一步的,所述libvlc播放器具体用于:
31.将所述多个绘制后的视频流输入给访问层,并通过访问层发送给流层;
32.将所述多个绘制后的视频流通过所述流层发送给解复用层;
33.所述解复用层对所述多个绘制后的视频流进行解复用,得到多个解复用的视频流;
34.将所述多个解复用的视频流发送给第一输出层,并通过第一输出层发送给解码层;
35.所述解码层对所述多个解复用的视频流进行解码,得到所述多个解码后的视频流。
36.进一步的,所述装置还包括调整模块;
37.所述调整模块,用于当所述主窗口上生成多个所述子窗口时,根据所述选取模式调整每个所述子窗口的大小和显示位置。
38.第三方面,本发明实施例提供了电子设备,包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的方法。
39.第四方面,本发明实施例提供了具有处理器可执行的非易失的程序代码的计算机可读介质,所述程序代码使所述处理器执行如上所述的方法。
40.本发明实施例提供了多进程解码播放方法和装置,应用于客户端,客户端上设置有主进程和多个子进程,子进程包括libvlc播放器,包括:获取用户的选取模式;根据选取模式在主进程上创建主窗口;在主窗口上生成多个子窗口,其中,每个子进程对应相应的子窗口;将每个子窗口上对应的视频流进行绘制,得到多个绘制后的视频流;通过libvlc播放器将多个绘制后的视频流进行解复用和解码,得到多个解码后的视频流;显示多个解码后的视频流;采用多进程播放器进行播放,可以满足多路节目同时播放和多个播放器长时间
geforce gtx 1060 6gb(6gb/七彩虹)显卡,最优播放为16路(10硬解 6软解);2)英特尔uhd graphics 630(128mb/华硕)显卡,最优播放为12路(8硬解 4软解)。
63.多进程播放器可同时支持16路节目同时播放,并且cpu和内存使用率不应高于80%;多进程播放器稳定性好,最低可满足30*24h持续稳定播放,无卡顿、无停播和不崩溃;支持pc端跟移动端视频切换(即切屏),具体参照图2,以3*3为例显示多个子窗口。
64.主进程包括主窗口、web容器、播放器组管理子模块和播放器视频绘制子模块。其中,web容器为web浏览器引擎,主要是将内容嵌入到没有本机web引擎的平台上qt应用程序中去。子进程包括播放器控制与交互叠加层、播放器叠加绘制层和libvlc播放器。
65.主进程的作用是用于创建与管理主窗口、创建与管理web容器、创建与管理播放器组管理子模块、创建与管理播放器视频绘制子模块、创建与管理播放子进程。
66.子进程的作用是接收主进程发送的视频显示widget标识,通过libvlc接口将视频显示widget标识配置到libvlc播放器中,通过libvlc接口将播放地址配置到libvlc播放器中,通过libvlc接口播放视频。
67.进一步的,步骤s105包括以下步骤:
68.步骤s201,将多个绘制后的视频流输入给访问层,并通过访问层发送给流层;
69.步骤s202,将多个绘制后的视频流通过流层发送给解复用层;
70.步骤s203,解复用层对多个绘制后的视频流进行解复用,得到多个解复用的视频流;
71.步骤s204,将多个解复用的视频流发送给第一输出层,并通过第一输出层发送给解码层;
72.步骤s205,解码层对多个解复用的视频流进行解码,得到多个解码后的视频流。
73.具体地,参照图3,访问层(access),是vlc抽象的一个层,该层向下直接使用文件或网络io接口,向上为流层(stream)服务,提供io接口。
74.流层(stream)是vlc抽象的一个层,该层向下直接使用访问层(access)提供的io接口,向上为解复用层(demux)服务,提供io接口。
75.解复用层(demux)向下直接使用流层(stream)提供的io接口,对多个绘制后的视频流进行解复用,得到多个解复用的视频流,将多个解复用的视频流发送给第一输出层(es_out)。
76.第一输出层(es_out),是vlc抽象的一个层,该层获取解复用层(demux)的多个解复用的视频流,并发送给解码层(decode)。
77.解码层(decode)将多个解复用的视频流进行解码,得到多个解码后的视频流,将多个解码后的视频流发送给第二输出层(output)。
78.第二输出层(output)将多个解码后的视频流发送给绘制显示层(readerer)。绘制显示层(readerer)用于显示多个解码后的视频流。
79.还包括播放列表(playlist),vlc在启动后,即创建一个playlist thread,用户输入后,动态创建input。
80.进一步的,该方法还包括:
81.主进程通过dbus将播放信息发送给子进程;
82.或者,
83.子进程通过dbus将播放结果信息发送给主进程。
84.具体地,主进程与子进程之间的通信,通过dbus实现,dbus兼容通信效率与开发效率。(透明)空间叠加绘制通过无父子关系的wighet组件实现。
85.主进程通过dbus将播放信息发送给子进程。其中,播放信息包括播放地址信息、暂停信息、控制进度信息、停止播放信息、重置播放信息、显示下一帧信息、播放速度信息和截图信息等。
86.子进程通过dbus将播放结果信息发送给主进程。播放结果信息包括播放器创建事件信息、播放器状态变化事件信息、播放器加载状态事件信息、播放器释放事件信息、播放器错误类型事件信息和播放器播放至结尾事件信息等。
87.dbus是实质上一个适用于桌面应用的进程间的通讯机制,即所谓的ipc机制。在dbus中,主进程对应为服务端,每个子进程对应为客户端。
88.dbus适合在同一台机器,不适合于internet的ipc机制。dbus不是一个为所有可能的应用的通用的ipc机制,不支持其他ipc机制的很多特性。dbus提供了一个低时延、低消耗的ipc通讯,因为它采用了二进制的数据交换协议,不需要转换成文本化的数据进行交换,dbus提供了面向多重对象系统的包装,可以在原有的面向对象的应用框架下使用dbus,不需要学习新的概念和规范等。
89.dbus是支持一对一和多对多的对等通讯,在一对一的直接通讯时,两个应用程序连接在一起,这是最简单的工作方式。在多对多的通讯时,这就需要一个叫dbus后台的角色去分转,一个应用程序发消息给另外一个应用程序,先到达后台,再让后台将信息发送到目的应用程序。在这里dbus后台就充当着一个路由器的角色。
90.dbus包含了系统更新通知,如插入新设备通知、新软件安装通知等,和桌面应用的交互协作能力,可作为文件系统监控器和配置服务器。
91.dbus包括对象、消息、连接和dbus后台。对象是一个独立的处理消息的实体。对象有一个或多个接口,在每个接口有一个或多个的方法,每个方法实现了具体的消息处理。在一对一的通讯中,对象通过一个连接直接和另一个客户端应用程序连接起来。在多对多的通讯中,对象通过一个连接和dbus后台进程连接起来。对象有一个路径用于指明该对象的存放位置,消息传递时通过该路径找到该对象。
92.客户端应用是一个桌面应用程序,是请求消息的发起者。客户端应用通过和自身的相连的一个连接将请求消息发送出去,也通过该连接接收回应的消息、错误消息、系统更新消息等。在一对一的通讯中,请求消息直接到达对象。在多对多的通讯中,请求消息先到达dbus后台,dbus后台将消息转发到目的对象。
93.连接是一个双向的消息传递通道。一个连接将对象和dbus后台或客户端应用连接起来,连接支持非阻塞式的异步消息发送和阻塞式的同步消息发送。消息通过连接到达目的端后,连接会将挂起在该连接上的进程唤醒,由该进程将消息取走。每个连接都有一个唯一的名字和可选的其他多个名字,用于在多对多通讯时指明消息的发送者和接收者。
94.连接基于操作系统提供的通讯端口实现消息的交换,现在基于的通讯端口有三种,分别是unix的socket、tcp/ip、管道(调试时用)。通讯端口拥有一个地址,服务器在这个地址上监听,客户端则连接到这个地址上。
95.消息是dbus的ipc机制中的一个信息传递媒介。调用者将调用的方法、方法的参数
打包进一个消息,接收者将方法和参数从消息中解包出来,执行这个方法调用。执行完后,将结果打包进返回消息中,返回给调用者。消息有四种类型,分别是方法调用消息、结果返回消息、错误消息、信号消息。这里的信号消息是主动发送的事件,如新设备插入、文件更改的事件等。
96.dbus后台是在多对多通讯时用来转发消息,管理连接的一个后台进程。每个dbus后台都和多个连接关联,其内部维护了连接名和连接实体的映射关系。dbus后台就象一个路由器,将从发送者连接得到的消息转发到由消息中的接收者连接名指定的接收者连接中。
97.dbus后台有多个。有一个用于和系统通讯,监控系统更新事件,其类型为dbus_bus_system的dbus后台。每个桌面会话(session)有一个用于多个桌面应用之间相互通讯,其类型为dbus_bus_session的dbus后台。一般至少有两个dbus后台,一个系统用,一个桌面会话用。系统用的dbus后台只能处理系统的消息,桌面会话用的dbus后台只能处理桌面会话应用的消息。
98.在客户端使用dbus比较简单,首先,从dbus_bus_session类型的dbus后台获得一个连接,再从这个连接创建得到一个对象的代理,以后对对象的所有操作都将通过这个代理来完成。得到服务代理后,可以在应用程序的各个地方通过对象代理的方法使用函数向对象发出一个方法调用的消息。请求对象的服务,可以发送异步的方法(异步服务),也可以发送同步方法(同步服务),方法是同步还是异步有对象定义。
99.在服务端进程启动后,调用函数dbus_g_object_type_install_info将对象的安装信息结构告诉dbus,随后,从dbus_bus_session类型的dbus获得一个连接,再从这个连接得到一个dbus对象的代理。通过这个dbus代理调用方法requestname为这个连接得到一个命名,客户端应用可以使用这个名字将请求消息发送到连接。接着,服务器进程创建一个指定类型的对象(glib对象)。其中安装信息由xml文件,通过dbus-binding-tool转换成对象的头文件。
100.消息由消息头和消息体组成。消息头由消息的固有字段信息组成。消息体由一串字符串值组成。消息体的每个字符串值的意义由消息头中的描述指定,消息头的长度必须是8的倍数,相应的,消息体由8的倍数处开始。
101.dbus方法调用的一般流程:
102.1)使用不同语言绑定的dbus高层接口,都提供了一些代理对象,调用其他进程里面的远端对象就像是在本地进程中的调用一样。应用调用代理上的方法,代理将构造一个方法调用消息给远端的进程。
103.2)在dbus的底层接口中,应用需要自己构造方法调用消息(method call message),而不能使用代理。
104.3)方法调用消息里面的内容有:目的进程的bus name,方法的名字,方法的参数,目的进程的对象路径,以及可选的接口名称。
105.4)方法调用消息是发送到bus daemon中的。
106.5)bus daemon查找目标的bus name,如果找到,就把这个方法发送到该进程中,否则,daemon会产生错误消息,作为应答消息给发送进程。
107.6)目标进程解开消息,在dbus底层接口中,会立即调用方法,然后发送方法的应答
消息给daemon。在dbus高层接口中,会先检测对象路径,接口,方法名称,然后把它转换成对应的对象(如gobject,qt中的qobject等)的方法,然后再将应答结果转换成应答消息发给daemon。
108.7)bus daemon接受到应答消息,将把应答消息直接发给发出调用消息的进程。
109.8)应答消息中可以包容很多返回值,也可以标识一个错误发生,当使用绑定时,应答消息将转换为代理对象的返回值,或者进入异常。
110.bus daemon不对消息重新排序,如果发送了两条消息到同一个进程,他们将按照发送顺序接受到。接受进程并需要按照顺序发出应答消息,例如在多线程中处理这些消息,应答消息的发出是没有顺序的。消息都有一个序列号可以与应答消息进行配对。
111.进一步的,该方法还包括:
112.当主窗口上生成多个子窗口时,根据选取模式调整每个子窗口的大小和显示位置。
113.进一步的,该方法还包括:
114.当主窗口在界面上发生变化时,根据变化后的主窗口调整每个子窗口的大小和显示位置。
115.具体地,参照图4,首先进入qt系统,建立通信机制;然后进入qt系统的web页面,web页面通过js接口传递相关参数至播放器组管理子模块,相关参数包括视频地址和选取模式。
116.播放器组管理子模块先根据用户的选取模式创建主窗口,在主窗口上生成多个子窗口,实现初始化播放流等。其中,每个子进程对应相应的子窗口,当播放子进程启动后,新建一个libvlc播放器,将视频显示widget标识与播放地址发送给libvlc播放器。
117.当主窗口上生成多个子窗口时,根据选取模式调整每个子窗口的大小和显示位置。
118.web管理模块,用于当主窗口在界面上发生变化时,根据变化后的主窗口调整每个子窗口的大小和显示位置。其中,主窗口在界面上发生变化是指主窗口最大化、主窗口最小化、主窗口还原为标准窗口或对主窗口作拉伸处理。如果主窗口发生上述变化,则根据变化后的主窗口调整每个子窗口的大小和显示位置。
119.本发明实施例提供了多进程解码播放方法,应用于客户端,客户端上设置有主进程和多个子进程,子进程包括libvlc播放器,包括:获取用户的选取模式;根据选取模式在主进程上创建主窗口;在主窗口上生成多个子窗口,其中,每个子进程对应相应的子窗口;将每个子窗口上对应的视频流进行绘制,得到多个绘制后的视频流;通过libvlc播放器将多个绘制后的视频流进行解复用和解码,得到多个解码后的视频流;显示多个解码后的视频流;采用多进程播放器进行播放,可以满足多路节目同时播放和多个播放器长时间播放,提高了独立性和稳定性。
120.实施例二:
121.图5为本发明实施例二提供的多进程解码播放装置示意图。
122.参照图5,应用于客户端,客户端上设置有主进程和多个子进程,子进程包括libvlc播放器,该装置包括:
123.播放器组管理子模块1,用于获取用户的选取模式;根据选取模式在主进程上创建
主窗口;在主窗口上生成多个子窗口,其中,每个子进程对应相应的子窗口;
124.播放器视频绘制子模块2,用于将每个子窗口上对应的视频流进行绘制,得到多个绘制后的视频流;
125.libvlc播放器3,用于将多个绘制后的视频流进行解复用和解码,得到多个解码后的视频流;显示多个解码后的视频流。
126.进一步的,libvlc播放器3具体用于:
127.将多个绘制后的视频流输入给访问层,并通过访问层发送给流层;
128.将多个绘制后的视频流通过流层发送给解复用层;
129.解复用层对多个绘制后的视频流进行解复用,得到多个解复用的视频流;
130.将多个解复用的视频流发送给第一输出层,并通过第一输出层发送给解码层;
131.解码层对多个解复用的视频流进行解码,得到多个解码后的视频流。
132.进一步的,该装置还包括调整模块(未示出);
133.调整模块(未示出),用于当主窗口上生成多个子窗口时,根据选取模式调整每个子窗口的大小和显示位置。
134.本发明实施例提供了多进程解码播放装置,应用于客户端,客户端上设置有主进程和多个子进程,子进程包括libvlc播放器,包括:获取用户的选取模式;根据选取模式在主进程上创建主窗口;在主窗口上生成多个子窗口,其中,每个子进程对应相应的子窗口;将每个子窗口上对应的视频流进行绘制,得到多个绘制后的视频流;通过libvlc播放器将多个绘制后的视频流进行解复用和解码,得到多个解码后的视频流;显示多个解码后的视频流;采用多进程播放器进行播放,可以满足多路节目同时播放和多个播放器长时间播放,提高了独立性和稳定性。
135.本发明实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例提供的多进程解码播放方法的步骤。
136.本发明实施例还提供一种具有处理器可执行的非易失的程序代码的计算机可读介质,计算机可读介质上存储有计算机程序,计算机程序被处理器运行时执行上述实施例的多进程解码播放方法的步骤。
137.本发明实施例所提供的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
138.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
139.另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
140.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说
对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
141.在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
142.最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献