CN107566843B - 一种视频解码进程保护方法及装置 - Google Patents
一种视频解码进程保护方法及装置 Download PDFInfo
- Publication number
- CN107566843B CN107566843B CN201710929541.6A CN201710929541A CN107566843B CN 107566843 B CN107566843 B CN 107566843B CN 201710929541 A CN201710929541 A CN 201710929541A CN 107566843 B CN107566843 B CN 107566843B
- Authority
- CN
- China
- Prior art keywords
- decoding
- decoding process
- new
- video
- function
- 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
- 238000000034 method Methods 0.000 title claims abstract description 466
- 230000008569 process Effects 0.000 title claims abstract description 434
- 230000006870 function Effects 0.000 claims abstract description 175
- 238000004891 communication Methods 0.000 claims description 35
- 238000009877 rendering Methods 0.000 claims description 8
- 238000012544 monitoring process Methods 0.000 claims description 7
- 230000004044 response Effects 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 5
- 230000001681 protective effect Effects 0.000 claims description 4
- 230000001360 synchronised effect Effects 0.000 claims description 4
- 239000011800 void material Substances 0.000 claims 1
- 230000000694 effects Effects 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 239000003550 marker Substances 0.000 description 2
- 238000003672 processing method Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 238000011112 process operation Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
本发明公开了一种视频解码进程保护方法及装置,该方法包括:在主控进程创建用于与所述主控进程协同对同一视频资源进行解码并播放的解码进程时,从任务管理器中获取SSDT系统服务描述符表中的目标服务函数;对SSDT表的内存去写保护;通过钩挂操作将目标服务函数替换为与目标服务函数不同的新服务函数;在获得用于获取当前进程的进程句柄值的命令时,通过新服务函数判断当前进程是否为所述解码进程,如果是,返回拒绝获取当前进程的句柄值的消息至任务管理器,否则通过目标服务函数返回当前进程的句柄值至任务管理器。从而本发明解决了通过任务管理器容易将一个或多个解码进程误杀的技术问题。
Description
技术领域
本发明涉及视频解码领域,尤其涉及一种视频解码进程保护方法及装置。
背景技术
现有技术中都是采用在一个进程中进行音视频解码,然后将解码后音视频进行播放。这种方案比较简单、快速。
但是如果要实现播放器多开(播放器多开就是在一个播放器中能够同时打开多个视频资源,比如:视频文件或者网络视频流)。随着多开视频的个数越来越多,那么该进程需要的系统资源,如CPU占用、内存消耗也就会越来越多。达到该进程的性能瓶颈时会使播放效果越来越差,画面越来越卡顿,甚至会造成播放器的崩溃。为了防止这种情况,则由一个独立的进程来解码视频流,以避免了画面效果差和卡顿的问题。
但是,随着视频多开就会出现多个解码进程,通过任务管理器容易将其中一个或多个解码进程误杀,进而导致播放器主程序的视频播放停止。
发明内容
本发明实施例通过提供一种视频解码进程保护方法及装置,解决了通过任务管理器容易将一个或多个解码进程误杀的技术问题。
第一方面,本发明实施例提供了一种视频解码进程保护方法,包括:
在主控进程创建用于与所述主控进程协同对同一视频资源进行解码并播放的解码进程时,从任务管理器中获取SSDT系统服务描述符表中的目标服务函数,其中,所述目标服务函数用于获取当前进程的进程句柄值;
对所述SSDT表的内存去写保护;
通过钩挂操作将所述目标服务函数替换为与所述目标服务函数不同的新服务函数;
在获得用于获取当前进程的进程句柄值的命令时,通过所述新服务函数判断当前进程是否为所述解码进程,如果是,返回拒绝获取当前进程的句柄值的消息至所述任务管理器,否则通过所述目标服务函数返回当前进程的句柄值至所述任务管理器。
可选的,所述从任务管理器中获取SSDT系统服务描述符表中的目标服务函数,包括:
通过所述目标服务函数的服务号定位出所述目标服务函数所在的地址;
根据所述目标服务函数所在的地址获取所述目标服务函数。
可选的,所述对所述SSDT表的内存去写保护,包括:
创建与所述解码进程对应的新虚拟内存;
将所述SSDT表所在的原始虚拟内存映射至所述新虚拟内存,使得所述新虚拟内存与所述SSDT表所在的虚拟内存对应同一物理内存;
锁定所述新虚拟内存的内存描述符。
可选的,所述通过钩挂操作将所述目标服务函数替换为与所述目标服务函数不同的新服务函数,包括:
根据锁定的所述新虚拟内存的内存描述符和所述目标服务函数的服务号,从所述新虚拟内存中识别出所述目标服务函数并替换为所述新服务函数。
可选的,在所述主控进程创建所述解码进程之后,所述方法还包括:
在所述主控进程与所述解码进程协同对同一视频资源进行解码并播放的过程中,监测所述主控进程与所述解码进程之间的RPC通信连接是否断开;
监测到所述主控进程与所述解码进程之间的RPC通信连接断开时,创建新的解码进程并建立所述新的解码进程与所述主控进程之间的RPC通信连接;
通过所述新的解码进程与所述主控进程协同对所述视频资源继续解码并播放。
可选的,所述通过所述新的解码进程与所述主控进程协同对所述视频资源继续解码并播放,包括:
通过所述主控进程向所述新的解码进程发送所述视频资源的当前解码进度和存储位置标识;
由所述新的解码进程根据所述存储位置标识获取所述视频资源,并从视频资源的当前解码进度继续对所述视频资源解码;
将通过所述新的解码进程对所述视频资源继续解码得到的解码后视频图像写入由所述解码进程所创建的系统共享内存中;
通过所述主控进程响应于来自所述新的解码进程的图像绘制命令,以从所述解码进程所创建的系统共享内存中读取所述视频资源的后续解码后视频图像;
所述视频资源的后续解码后视频图像通过所述主控进程进行绘制,并由所述新的解码进程同步对所述视频资源的后续解码后音频进行播放。
可选的,在所述新的解码进程同步对所述视频资源的后续解码后音频进行播放的过程中,所述方法还包括:
所述新的解码进程在对所述视频资源的解码后音频进行播放时,记录所述视频资源的当前帧解码后音频播放时的音频时间戳;
获取所述新的解码进程从所述文件解码服务模块中获得所述视频资源的当前帧解码后视频图像时的视频时间戳;
判断所述视频时间戳是否小于等于所述音频时间戳;
如果是,从所述解码进程所创建的系统共享内存中删除所述当前帧解码后视频图像。
第二方面,本发明实施例提供了一种视频解码进程保护装置,包括:
目标函数获取单元,用于在主控进程创建用于与所述主控进程协同对同一视频资源进行解码并播放的解码进程时,从任务管理器中获取SSDT系统服务描述符表中的目标服务函数,其中,所述目标服务函数用于获取当前进程的进程句柄值;
去写保存单元,用于对所述SSDT表的内存去写保护;
函数替换单元,用于通过钩挂操作将所述目标服务函数替换为与所述目标服务函数不同的新服务函数;
判别单元,用于在获得用于获取当前进程的进程句柄值的命令时,通过所述新服务函数判断当前进程是否为所述解码进程,如果是,返回拒绝获取当前进程的句柄值的消息至所述任务管理器,否则通过所述目标服务函数返回当前进程的句柄值至所述任务管理器。
第三方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任一实施方式所述的步骤。
第四方面,本发明实施例提供了一种计算机设备,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现第一方面中任一实施方式所述的步骤。
本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
由于从任务管理器中获取SSDT系统服务描述符表中的用于获取当前进程的进程句柄值的目标服务函数;对SSDT表的内存去写保护;将目标服务函数替换为与目标服务函数不同的新服务函数;在获得用于获取当前进程的进程句柄值的命令时,通过新服务函数判断当前进程是否为所述解码进程,如果是,返回拒绝获取当前进程的句柄值的消息至任务管理器,否则通过目标服务函数返回当前进程的句柄值至任务管理器。从而在新服务函数不直接响应获取当前进程的进程句柄值的命令返回句柄值,而只有在不是需要保护的解码进程的前提下才返回句柄值至任务管理器,由于任务管理器需要获取正确的进程句柄值才能够将进程杀死,而通过上述技术方案使得任务管理器不能获得解码进程的进程句柄值,则解码进程就不能通过任务管理器被杀死。因此,能够防止通过任务管理器来结束解码进程,从而使得播放框架更加的安全稳定,进而避免播放器主程序的视频播放停止。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的视频解码进程保护方法的流程图;
图2为本发明实施例提供的视频解码进程保护装置的程序模块图;
图3为本发明实施例提供的计算机可读存储介质的结构示意图;
图4为本发明实施例提供的计算机设备的结构示意图。
具体实施方式
为了解决通过任务管理器容易将一个或多个解码进程误杀的技术问题,本发明实施例提供一种视频解码进程保护方法及装置。为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。
本发明实施例提供的视频解码进程保护方法,参考图1所示,包括如下步骤:
首先,执行步骤S101、在主控进程创建用于与主控进程协同对同一视频资源进行解码并播放的解码进程时,从任务管理器中获取SSDT(System Services DescriptorTable,中文为系统服务描述符表)中的目标服务函数,其中,目标服务函数用于获取当前进程的进程句柄值。
具体的,以RPC(Remote Procedure Call,远程过程调用)通信的方式实现主控进程与所创建的解码进程之间的通信。
为了获取目标服务函数,先通过目标服务函数的服务号定位出目标服务函数所在的地址;然后,根据目标服务函数所在的地址获取目标服务函数。
在本实施例中,目标服务函数可以为系统驱动层所提供的ZwOpenProcess函数,因为ZwOpenProcess函数是SSDT表中的一个服务函数,而在SSDT表中的每一个服务函数都有一个相应的SSDT服务号,从而通过目标服务函数的服务号来定位该目标服务函数所在的地址。具体的,ZwOpenProcess所在的地址加所处的内存值为ZwOpenProcess函数的SSDT服务号。
具体的,获得对N个视频资源的播放请求时,通过同一主控进程创建针对N个视频资源的均与主控进程RPC通信的N个解码进程,N为正整数。同一主控进程所创建解码进程的个数与视频资源的个数相同。对N个解码进程的创建为独立执行的步骤,由同一主控进程在获得针对N个视频资源中的各个视频资源各自的播放请求时创建各自所需的解码进程。
主控进程创建用于与主控进程协同对同一视频资源进行解码并播放的解码进程,具体为:分配用于解码进程与主控进程之间通信的RPC连接地址;通过主控进程创建解码进程,由主控进程将用于解码进程与主控进程通信的RPC连接地址传递给创建的解码进程;解码进程通过用于解码进程与主控进程之间通信的RPC连接地址与主控进程通信,从而实现了解码进程与主控进程之间的RPC通信连接。
在步骤S101之后,接着执行步骤S102:对SSDT表的内存去写保护。
具体的,对SSDT表的内存去写保护为:去掉对SSDT表的内存写保护,Windows系统中分为应用层与驱动层,在驱动层中通过KeServiceDescriptorTable变量导出SSDT表,该KeServiceDescriptorTable变量中的ServiceTableBase字段代表了SSDT表的首地址。因为ServiceTableBase字段是只读的,因此不能改写SSDT表的首地址处的内容,进而无法对SSDT表进行改写。为了去掉对SSDT表的内存写保护,使得SSDT表可以改写,提供一种实施方式为:创建与解码进程对应的新虚拟内存,将SSDT表所在的原始虚拟内存映射至新虚拟内存,使得新虚拟内存与所述SSDT表所在的虚拟内存对应同一物理内存,锁定新虚拟内存的内存描述符。
具体来讲,通过调用MmCreateMdl系统函数创建一个新虚拟内存的内存描述符,将ServiceTableBase字段的参数传入到MmCreateMdl系统函数中,然后,MmCreateMdl系统函数返回一个类型为MDL的内存描述符,标记为“g_ssdtmdl”。调用MmMapLockedPages函数锁定返回的内存描述符“g_ssdtmdl”,通过调用MmMapLockedPages函数获取到内存描述符所对应的虚拟内存的地址,从而获得新虚拟内存并对新虚拟内存进行改写,对新虚拟内存的改写影响到SSDT表的首地址处的内容,可以进行对目标服务函数所在的进程Hook操作。
通过步骤S102去掉了SSDT表的内存写保护之后,就可以对目标服务函数所在的进程Hook操作,即执行进行步骤S103:
S103:通过钩挂操作将目标服务函数替换为与目标服务函数不同的新服务函数。
具体的,根据新虚拟内存的内存描述符和目标服务函数的服务号,从新虚拟内存中识别目标服务函数,并将识别出的目标服务函数替换为新服务函数,从而完成对目标服务函数的Hook操作。
需要说明的是,通过用于保护解码进程的驱动模块执行hook函数,以通过钩挂(hook)操作将目标服务函数替换为与目标服务函数不同的新服务函数,从而实现钩挂(Hook)住SSDT表中的ZwQuerySystemInformations函数,进而使得任务管理器无法获取解码进程的进程句柄。需要说明的是,在执行步骤S105之后,需要卸载hook函数(钩子函数)。具体,钩子函数是一种特殊的回调函数。监视的特定事件发生后系统会调用钩子函数进行处理,在本实施例中,在之后步骤S101~S102之后会触发钩子函数进行处理。
具体来讲,根据新虚拟内存的内存描述符获取到新虚拟内存的地址,根据新虚拟内存的地址确定出新虚拟内存,根据目标服务函数的服务号从新虚拟内存中识别出目标服务函数的服务号。
具体的,新服务函数可以为MyOpenProcess,通过调用InterlockedExchange函数,以实现根据新虚拟内存的内存描述符“g_ssdtImage”获取到新虚拟内存的地址,ZwOpenProcess函数的服务号从新虚拟内存中识别出ZwOpenProcess函数,并将识别出的ZwOpenProcess函数替换为新服务函数MyOpenProcess,从而完成对ZwOpenProcess函数的Hook操作。
在步骤S103之后,接着执行步骤S104:在获得用于获取当前进程的进程句柄值的命令时,通过新服务函数判断当前进程是否为解码进程,如果是,返回拒绝获取当前进程的句柄值的消息至任务管理器,否则通过目标服务函数返回当前进程的句柄值至任务管理器。
解码进程可以为RpcMediaDecoder,主控进程可以为dy_pcclient。则新服务函数通过调用ZwQueryInformationProcess系统函数来判断要获取进程句柄值的进程名是否为RpcMediaDecoder,如果是,则直接返回STATUS_ACCESS_DENIED值,STATUS_ACCESS_DENIED值为表征拒绝获取当前进程的句柄值的消息,这样任务管理器就无法获取到解码进程的进程句柄值,如果不是解码进程,则新服务函数直接调用目标服务函数返回当前进程的进程句柄值至任务管理器。
在Windows操作系统中,有一个系统API叫做TerminateProcess,该API的作用就是结束进程,任务管理器就是通过调用该API函数,来杀死一个进程。调用该API函数的时候,需要提供一个HANDLE类型的进程句柄值,只有正确的提供了进程的句柄值,TerminateProcess函数才能将该进程杀死。
在Windows操作系统中,可以通过调用系统的OpenProcess函数,根据进程的进程id值获取该进程的句柄值。然后通过调用系统的TerminateProcess函数,根据获取到的进程句柄值,来杀死该进程。
因为在Windows系统中,分为应用层与驱动层,OpenProcess函数是Windows系统向应用层开发者,提供的API函数,而该API函数还依赖于系统驱动层所提供的ZwOpenProcess函数。在Windows操作系统中,任何进程对OpenProcess函数的调用,都会调用到驱动层的ZwOpenProcess函数。而ZwOpenProcess函数是SSDT表中的一个服务函数。就是通过RpcMediaDecoderProtecter驱动模块,来Hook SSDT表中的ZwOpenProcess函数替换为新的服务函数,从而使得任务管理器无法获取解码进程进程的进程句柄值。从而防止通过任务管理器杀死解码进程。
进一步的,在主控进程创建解码进程之后,主控进程与解码进程协同对同一视频资源进行解码并播放。
主控进程与解码进程协同对同一视频资源进行解码并播放的过程中,监测主控进程与解码进程之间的RPC通信连接是否断开;监测到主控进程与解码进程之间的RPC通信连接断开时,创建新的解码进程并建立新的解码进程与主控进程之间的RPC通信连接;通过新的解码进程与主控进程协同对视频资源继续解码并播放。
具体的,通过主控进程发送信号通知给控制进程,由控制进程的创建新的解码进程。
分配用于连接新的解码进程与主控进程的RPC连接地址;通过主控进程发送用于通知控制进程创建新的解码进程的通知消息;如果控制进程的错误处理模块接收该通知消息,则通过控制进程创建新的解码进程;由主控进程将用于连接新的解码进程与主控进程的RPC连接地址传递给新的解码进程,使得新的解码进程通过用于连接新的解码进程与主控进程的RPC连接地址连接到控进程。
为了使得新的解码进程在投入后继续对视频资源解码的位置准确,避免错误的对其他视频资源解码,实现准确对接解码进程处理到的经度进度,还提供了步骤新的解码进程与主控进程协同继续解码并播放的一具体实施方式,包括如下步骤:
通过主控进程向新的解码进程发送视频资源的当前解码进度和存储位置标识;由新的解码进程根据存储位置标识获取视频资源,并从视频资源的当前解码进度继续对视频资源解码;将通过新的解码进程对视频资源继续解码得到的解码后视频图像写入由解码进程所创建的系统共享内存中;通过主控进程响应于来自新的解码进程的图像绘制命令,以从解码进程所创建的系统共享内存中读取视频资源的后续解码后视频图像;视频资源的后续解码后视频图像通过主控进程进行绘制,并由新的解码进程同步对视频资源的后续解码后音频进行播放。
为了实现解码进程播放解码后音频与主控进程绘制解码后视频图像的同步,还提供如下步骤:新的解码进程在对视频资源的解码后音频进行播放的过程中,记录视频资源的当前帧解码后音频播放时的音频时间戳;获取新的解码进程从文件解码服务模块中获得视频资源的当前帧解码后视频图像时的视频时间戳;判断视频时间戳是否小于等于音频时间戳;如果是,从解码进程所创建的系统共享内存中删除当前帧解码后视频图像。
具体来讲,无论是新的解码进程还是原解码进程,在对解码后音频播放过程中,均需控制解码后视频图像与解码后音频之间的同步。采用解码后视频图像同步到解码后音频图像的方式保持音视频同步。每播放一帧解码后音频,记录下当前的音频时间戳audioPts。获取新的解码进程从文件解码服务模块中获得视频资源的当前帧解码后视频图像时的视频时间戳videoFrame.pts,如果视频时间戳的值小于等于音频时间戳的值,则表示该视频图像帧的播放时间已经小于音频帧的播放时间,则调用文件解码服务模块的相关命令将当前帧解码后视频图像删除,这样,主控进程从系统共享内存中读取时获取的是下一解码后视频图像帧,从而实现音视频同步。
应用于视频播放器应用程序,针对视频播放器应用程序播放的视频资源可以为本地视频文件或者网络视频流。
具体的,为了监测主控进程与解码进程之间的RPC通信连接是否断开,获得针对视频资源的播放请求时,通过主控进程创建解码进程,并建立主控进程与解码进程之间的RPC通信连接;通过主控进程注册针对主控进程与解码进程之间的RPC通信连接的目标回调函数;在主控进程与解码进程之间的RPC通信连接打开时,使主控进程进入目标回调函数。
主控进程在创建解码进程之后,创建RPC通信实例,在调用RpcCreateInstance函数创建RPC通信实例时,向该RpcCreateInstance函数提供一个结构为RpcCallbackFunctions的回调函数数组,并向该结构的onConnection字段提供一个函数指针,当主控进程与解码进程之间的RPC通信连接对打开时,主控进程进入到目标回调函数onConnection中。
对视频资源的打开过程,具体包括如下步骤:通过解码进程对视频资源进行打开操作;如果解码进程对视频资源打开成功,则通过解码进程对打开成功后的视频资源解码;视频资源的解码后视频图像通过主控进程进行绘制,视频资源的解码后音频通过解码进程进行播放。
更具体来讲,对视频资源的打开可以通过如下流程实现:调用主控进程向解码进程发送视频打开命令,通过解码进程响应于视频打开命令,以对视频资源对应进行打开操作。在具体实施过程中,解码进程可以调用open方法对视频资源进行打开操作,比如解码进程调用文件解码服务模块(MediaDecoder)中的open方法打开视频资源,并获取open方法的返回值result作为视频资源的打开结果,由解码进程将对视频资源的打开结果返回给主控进程。
通过主控进程判断对视频资源的打开结果,具体判断返回值result为1或0,如果判断出返回值result为1,则表示视频资源打开成功,如果判断出返回值result为0,则表示视频资源打开失败。如果视频资源打开成功,则通过主控进程通知解码进程对打开成功后的视频资源进行解码;如果视频资源打开失败,则通过主控进程通知解码进程退出。
需要说明的是,主控进程为播放器应用程序的主控进程。
具体来讲,获得针对视频资源的播放请求时,主控进程通过调用系统CreateProcess函数创建解码进程。
具体来讲,通过主控进程创建解码进程,并建立主控进程与解码进程之间的RPC通信连接的过程,具体为:分配用于解码进程与主控进程之间连接的RPC连接地址;通过主控进程创建解码进程,由主控进程将用于解码进程与主控进程连接的RPC连接地址传递给已经创建的解码进程;解码进程通过用于解码进程与主控进程之间连接的RPC连接地址连接到主控进程。从而实现了解码进程与主控进程之间的RPC通信连接。
在具体实施过程中,RPC连接地址是采用主控进程的进程ID和将要创建的解码进程的进程索引为标识的。比如,形如“pid_index”的字符串。
监测主控进程与解码进程之间的RPC通信连接是否断开的一种实施方式如下:
在主控进程与解码进程之间RPC通信连接的内部进行检测用于支持主控进程与解码进程之间的RPC通信连接的命名管道是否断开;如果断开,对目标回调函数的状态参数设置为0;通过处于目标回调函数中的主控进程判断目标回调函数的状态参数当前是否为零;如果为零,确定主控进程与解码进程之间的RPC通信连接已断开。
主控进程与解码进程之间的RPC通信连接的底层依赖于Windows系统的命名管道协议,主控进程与解码进程进行命名管道通信对应的功能类为命名管道会话:NamedPipeSession。则对应的,监测主控进程与解码进程之间的RPC通信连接是否断开的过程具体如下:
步骤a、如果主控进程与解码进程之间RPC通信连接的内部检测到命名管道会话在读取数据过程中发生了错误,并且错误码为目标错误码:ERROR_BROKEN_PIPE时,确定解码进程与主控进程之间的命名管道通信处于断开状态。
步骤b、通过命名管道会话NamePipeSession检测到命名管道断开之后,则通过调用错误处理函数:OnError,使得错误处理函数中调用注册的目标回调函数,并将目标回调函数的状态参数:status设置为0,以作为RPC通信连接已断开的通知。
步骤c、通过进入到目标回调函数中的主控进程判断该目标回调函数的状态参数是否等于0;如果等于0,则主控进程确定与解码进程之间的RPC通信连接已断开。
在具体实施过程中,通过解码进程控制视频播放器中进行解码后音频的播放,因此,首先初始化音频播放器。具体初始化的参数包括:音频采样率、音频声道和音频采样格式。
当解码进程从文件解码服务模块(MediaDecoder)的回调通知中接收到播放器相关消息(MDT_AudioHeader)时,并调用initAudioDevice函数,以通过该播放器相关消息中的audioSampleRate(音频采样率)参数、audioChannel(音频声道)参数、audioSampleFormat(音频采样格式)参数,对音频播放器初始化。
需要说明的是,解码进程与主控进程协同对同一视频资源的一帧视频图像进行解码并播放的过程进行举例描述:
步骤1、调用解码进程从文件解码服务模块中获取当前帧视频图像;步骤2、将当前帧视频图像写入到解码进程创建的系统共享内存中;步骤3、解码进程向主控进程发送图像绘制命令,主控进程响应来自解码进程的图像绘制命令,从系统共享内存中获取当前帧视频图像,然后调用update方法对播放器上的图像进行更新为当前帧视频图像;步骤5、调用解码进程从文件解码服务模块中获取下一帧视频图像并返回步骤2。以此循环来实现对主控进程对视频资源进行循环解码并对视频播放器上的图像进行更新。
通过本发明实施例提供的技术方案,能够打开一个本体视频文件或者一个网络视频流时,主控进程就会创建一个与该主控进程之间为RPC通信连接的解码进程,由该解码进程负责对该视频文件或者网络视频流的音视频解码以及音频播放,并将解码后的视频图像写入到由解码进程所创建的系统共享内存中。解码进程向主控进程发送一个绘制命令,当主控进程接收到绘制命令后,就会依次从该视频文件或者网络视频流所对应的解码进程所创建的系统共享内存中读取每一帧视频图像,然后进行绘制。从而,每次打开一个视频资源,主控进程就会新创建一个解码进程来负责该视频资源的解码以及解码后音频的播放。而不占用在先正在对其他视频资源进行解码和音频播放的解码进程,进一步避免了多开视频导致的原播放效果差以及播放卡顿的问题。
基于同一发明构思,本发明实施例提供了一种视频解码进程保护装置,参考图2所示,包括:
目标函数获取单元201,用于在主控进程创建用于与所述主控进程协同对同一视频资源进行解码并播放的解码进程时,从任务管理器中获取SSDT系统服务描述符表中的目标服务函数,其中,目标服务函数用于获取当前进程的进程句柄值;
去写保存单元202,用于对所述SSDT表的内存去写保护;
函数替换单元203,用于通过钩挂操作将所述目标服务函数替换为与所述目标服务函数不同的新服务函数;
判别单元204,用于在获得用于获取当前进程的进程句柄值的命令时,通过所述新服务函数判断当前进程是否为所述解码进程,如果是,返回拒绝获取当前进程的句柄值的消息至所述任务管理器,否则通过所述目标服务函数返回当前进程的句柄值至所述任务管理器。
在一实施方式中,所述目标函数获取单元201,具体用于:
通过所述目标服务函数的服务号定位出所述目标服务函数所在的地址;
根据所述目标服务函数所在的地址获取所述目标服务函数。
在一实施方式中,所述去写保存单元202,具体用于:
创建与所述解码进程对应的新虚拟内存;
将所述SSDT表所在的原始虚拟内存映射至所述新虚拟内存,使得所述新虚拟内存与所述SSDT表所在的虚拟内存对应同一物理内存;
锁定所述新虚拟内存的内存描述符。
在一实施方式中,所述函数替换单元203,具体用于:
根据锁定的所述新虚拟内存的内存描述符和所述目标服务函数的服务号,从所述新虚拟内存中识别出所述目标服务函数并替换为所述新服务函数。
在一实施方式中,所述装置还包括:
断开检测单元,用于在所述主控进程与所述解码进程协同对同一视频资源进行解码并播放的过程中,监测所述主控进程与所述解码进程之间的RPC通信连接是否断开;
创建单元,用于监测到所述主控进程与所述解码进程之间的RPC通信连接断开时,创建新的解码进程并建立所述新的解码进程与所述主控进程之间的RPC通信连接;
继续播放单元,用于通过所述新的解码进程与所述主控进程协同对所述视频资源继续解码并播放。
进一步的,所述继续播放单元,具体用于:
通过所述主控进程向所述新的解码进程发送所述视频资源的当前解码进度和存储位置标识;
由所述新的解码进程根据所述存储位置标识获取所述视频资源,并从视频资源的当前解码进度继续对所述视频资源解码;
将通过所述新的解码进程对所述视频资源继续解码得到的解码后视频图像写入由所述解码进程所创建的系统共享内存中;
通过所述主控进程响应于来自所述新的解码进程的图像绘制命令,以从所述解码进程所创建的系统共享内存中读取所述视频资源的后续解码后视频图像;
所述视频资源的后续解码后视频图像通过所述主控进程进行绘制,并由所述新的解码进程同步对所述视频资源的后续解码后音频进行播放。
所述装置还包括:
音频时间记录单元,用于所述新的解码进程在对所述视频资源的解码后音频进行播放时,记录所述视频资源的当前帧解码后音频播放时的音频时间戳;
视频时间获取单元,用于获取所述新的解码进程从所述文件解码服务模块中获得所述视频资源的当前帧解码后视频图像时的视频时间戳;
判断单元,判断所述视频时间戳是否小于等于所述音频时间戳;
图像删除单元,用于如果判断单元的判断结果为是,从所述解码进程所创建的系统共享内存中删除所述当前帧解码后视频图像。
基于同一发明构思,参考图3所示,本发明实施例提供了一种计算机可读存储介质301,其上存储有计算机程序302,该程序302被处理器执行时实现前述模态对话框处理方法实施例中的任一实施方式的步骤。
基于同一发明构思,本发明实施例提供了一种计算机设备400,参考图4所示,包括存储器410、处理器420及存储在存储器410上并可在处理器420上运行的计算机程序411,处理器420执行程序411时实现前述模态对话框处理方法实施例中任一实施方式的步骤。
本发明提供的一个或多个实施例,至少实现了如下技术效果或优点:
由于从任务管理器中获取SSDT系统服务描述符表中的目标服务函数;对SSDT表的内存去写保护;将目标服务函数替换为与目标服务函数不同的新服务函数;在获得用于获取当前进程的进程句柄值的命令时,通过新服务函数判断当前进程是否为解码进程,如果是,返回拒绝获取当前进程的句柄值的消息至任务管理器,否则通过目标服务函数返回当前进程的句柄值至任务管理器。从而在新服务函数不直接响应获取当前进程的进程句柄值的命令返回句柄值,而只有在不是需要保护的解码进程的前提下才返回句柄值至任务管理器,由于任务管理器需要获取正确的进程句柄值才能够将进程杀死,而通过上述技术方案使得任务管理器不能获得解码进程的进程句柄值,则解码进程就不能通过任务管理器被杀死。因此,能够防止通过任务管理器来结束解码进程,从而使得播放框架更加的安全稳定,进而避免播放器主程序的视频播放停止。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (9)
1.一种视频解码进程保护方法,其特征在于,包括:
在主控进程创建用于与所述主控进程协同对同一视频资源进行解码并播放的解码进程时,从任务管理器中获取SSDT系统服务描述符表中的目标服务函数,其中,所述目标服务函数用于获取当前进程的进程句柄值;
对所述SSDT表的内存去写保护,具体包括:创建与所述解码进程对应的新虚拟内存;将所述SSDT表所在的原始虚拟内存映射至所述新虚拟内存,使得所述新虚拟内存与所述SSDT表所在的虚拟内存对应同一物理内存;锁定所述新虚拟内存的内存描述符;
通过钩挂操作将所述目标服务函数替换为与所述目标服务函数不同的新服务函数;
在获得用于获取当前进程的进程句柄值的命令时,通过所述新服务函数判断当前进程是否为所述解码进程,如果是,返回拒绝获取当前进程的句柄值的消息至所述任务管理器,否则通过所述目标服务函数返回当前进程的句柄值至所述任务管理器。
2.如权利要求1所述的视频解码进程保护方法,其特征在于,所述从任务管理器中获取SSDT系统服务描述符表中的目标服务函数,包括:
通过所述目标服务函数的服务号定位出所述目标服务函数所在的地址;
根据所述目标服务函数所在的地址获取所述目标服务函数。
3.如权利要求1所述的视频解码进程保护方法,其特征在于,所述通过钩挂操作将所述目标服务函数替换为与所述目标服务函数不同的新服务函数,包括:
根据锁定的所述新虚拟内存的内存描述符和所述目标服务函数的服务号,从所述新虚拟内存中识别出所述目标服务函数并替换为所述新服务函数。
4.如权利要求1-3中任一所述的视频解码进程保护方法,其特征在于,在所述主控进程创建所述解码进程之后,所述方法还包括:
在所述主控进程与所述解码进程协同对同一视频资源进行解码并播放的过程中,监测所述主控进程与所述解码进程之间的RPC通信连接是否断开;
监测到所述主控进程与所述解码进程之间的RPC通信连接断开时,创建新的解码进程并建立所述新的解码进程与所述主控进程之间的RPC通信连接;
通过所述新的解码进程与所述主控进程协同对所述视频资源继续解码并播放。
5.如权利要求4所述的视频解码进程保护方法,其特征在于,所述通过所述新的解码进程与所述主控进程协同对所述视频资源继续解码并播放,包括:
通过所述主控进程向所述新的解码进程发送所述视频资源的当前解码进度和存储位置标识;
由所述新的解码进程根据所述存储位置标识获取所述视频资源,并从视频资源的当前解码进度继续对所述视频资源解码;
将通过所述新的解码进程对所述视频资源继续解码得到的解码后视频图像写入由所述解码进程所创建的系统共享内存中;
通过所述主控进程响应于来自所述新的解码进程的图像绘制命令,以从所述解码进程所创建的系统共享内存中读取所述视频资源的后续解码后视频图像;
所述视频资源的后续解码后视频图像通过所述主控进程进行绘制,并由所述新的解码进程同步对所述视频资源的后续解码后音频进行播放。
6.如权利要求5所述的视频解码进程保护方法,其特征在于,在所述新的解码进程同步对所述视频资源的后续解码后音频进行播放的过程中,所述方法还包括:
所述新的解码进程在对所述视频资源的解码后音频进行播放时,记录所述视频资源的当前帧解码后音频播放时的音频时间戳;
获取所述新的解码进程从文件解码服务模块中获得所述视频资源的当前帧解码后视频图像时的视频时间戳;
判断所述视频时间戳是否小于等于所述音频时间戳;
如果是,从所述解码进程所创建的系统共享内存中删除所述当前帧解码后视频图像。
7.一种视频解码进程保护装置,其特征在于,包括:
目标函数获取单元,用于在主控进程创建用于与所述主控进程协同对同一视频资源进行解码并播放的解码进程时,从任务管理器中获取SSDT系统服务描述符表中的目标服务函数,其中,所述目标服务函数用于获取当前进程的进程句柄值;
去写保存单元,用于对所述SSDT表的内存去写保护,所述去写保存单元具体用于:创建与所述解码进程对应的新虚拟内存;将所述SSDT表所在的原始虚拟内存映射至所述新虚拟内存,使得所述新虚拟内存与所述SSDT表所在的虚拟内存对应同一物理内存;锁定所述新虚拟内存的内存描述符;
函数替换单元,用于通过钩挂操作将所述目标服务函数替换为与所述目标服务函数不同的新服务函数;
判别单元,用于在获得用于获取当前进程的进程句柄值的命令时,通过所述新服务函数判断当前进程是否为所述解码进程,如果是,返回拒绝获取当前进程的句柄值的消息至所述任务管理器,否则通过所述目标服务函数返回当前进程的句柄值至所述任务管理器。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-6中任一权利要求所述方法。
9.一种计算机设备,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-6中任一权利要求所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710929541.6A CN107566843B (zh) | 2017-10-09 | 2017-10-09 | 一种视频解码进程保护方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710929541.6A CN107566843B (zh) | 2017-10-09 | 2017-10-09 | 一种视频解码进程保护方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107566843A CN107566843A (zh) | 2018-01-09 |
CN107566843B true CN107566843B (zh) | 2019-07-09 |
Family
ID=60983963
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710929541.6A Active CN107566843B (zh) | 2017-10-09 | 2017-10-09 | 一种视频解码进程保护方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107566843B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108449634A (zh) * | 2018-03-27 | 2018-08-24 | 武汉斗鱼网络科技有限公司 | 一种多进程解码的播放方法、计算机设备和存储介质 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107484011B (zh) * | 2017-10-09 | 2020-10-16 | 武汉斗鱼网络科技有限公司 | 一种视频资源解码方法及装置 |
CN112437341B (zh) * | 2019-08-10 | 2022-04-29 | 荣耀终端有限公司 | 一种视频流处理方法及电子设备 |
CN112637634B (zh) * | 2020-12-24 | 2022-08-05 | 北京睿芯高通量科技有限公司 | 一种多进程共享数据的高并发视频处理方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102801961A (zh) * | 2012-08-21 | 2012-11-28 | 北京捷成世纪科技股份有限公司 | 一种基于多进程的音视频数据处理方法及系统 |
CN104850456A (zh) * | 2015-05-27 | 2015-08-19 | 苏州科达科技股份有限公司 | 多进程解码方法和系统 |
CN104881291A (zh) * | 2015-06-03 | 2015-09-02 | 北京金山安全软件有限公司 | 默认浏览器的控制方法、装置及终端 |
CN106203093A (zh) * | 2016-06-30 | 2016-12-07 | 北京金山安全软件有限公司 | 进程保护方法、装置以及终端 |
CN106469272A (zh) * | 2016-08-31 | 2017-03-01 | 北京力鼎创软科技有限公司 | 一种windows进程保护方法和系统 |
-
2017
- 2017-10-09 CN CN201710929541.6A patent/CN107566843B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102801961A (zh) * | 2012-08-21 | 2012-11-28 | 北京捷成世纪科技股份有限公司 | 一种基于多进程的音视频数据处理方法及系统 |
CN104850456A (zh) * | 2015-05-27 | 2015-08-19 | 苏州科达科技股份有限公司 | 多进程解码方法和系统 |
CN104881291A (zh) * | 2015-06-03 | 2015-09-02 | 北京金山安全软件有限公司 | 默认浏览器的控制方法、装置及终端 |
CN106203093A (zh) * | 2016-06-30 | 2016-12-07 | 北京金山安全软件有限公司 | 进程保护方法、装置以及终端 |
CN106469272A (zh) * | 2016-08-31 | 2017-03-01 | 北京力鼎创软科技有限公司 | 一种windows进程保护方法和系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108449634A (zh) * | 2018-03-27 | 2018-08-24 | 武汉斗鱼网络科技有限公司 | 一种多进程解码的播放方法、计算机设备和存储介质 |
CN108449634B (zh) * | 2018-03-27 | 2021-04-23 | 武汉斗鱼网络科技有限公司 | 一种多进程解码的播放方法、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN107566843A (zh) | 2018-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107566843B (zh) | 一种视频解码进程保护方法及装置 | |
CN107729132B (zh) | 一种视频解码进程保护方法及装置 | |
US8909758B2 (en) | Physical server discovery and correlation | |
US7876694B2 (en) | Identifying VPN faults based on virtual routing address and edge interface relationship information | |
CN107484010A (zh) | 一种视频资源解码方法及装置 | |
US9628334B2 (en) | VLAN tagging in a virtual environment | |
CN104883547B (zh) | 基于网络接入设备物理端口接入ipc的方法及nvr | |
CN104253860A (zh) | 一种基于共享存储消息队列的虚拟机高可用实现方法 | |
CN107484011A (zh) | 一种视频资源解码方法及装置 | |
US20090216853A1 (en) | Subnet management discovery of point-to-point network topologies | |
CN108933948A (zh) | 一种视频播放进度同步方法及装置 | |
CN107704360A (zh) | 监控数据的处理方法、设备、服务器及存储介质 | |
CN104811473B (zh) | 一种创建虚拟非易失性存储介质的方法、系统及管理系统 | |
CN105635311A (zh) | 一种云管理平台中资源池信息同步的方法 | |
CN106658111A (zh) | 一种投屏方法及装置 | |
CN107633168A (zh) | 自动化密码管理 | |
CN108449634A (zh) | 一种多进程解码的播放方法、计算机设备和存储介质 | |
EP3884620A1 (en) | Fast session restoration for latency sensitive middleboxes | |
CN109542590A (zh) | Docker集群多租户下虚拟Socket通信的方法 | |
CN106909197B (zh) | 一种虚拟化主机时间管理方法及虚拟化主机系统 | |
US10523491B2 (en) | Reliable and resilient end-to-end connectivity for heterogeneous networks | |
CN109088830B (zh) | 一种端口状态同步方法及装置 | |
CN101552786A (zh) | 通信装置、通信方法、记录程序的记录介质 | |
CN109787789A (zh) | 软件升级的兼容性管理方法、装置及设备、存储介质 | |
CN104636086B (zh) | 一种ha存储设备、管理ha状态的方法 |
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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20231123 Address after: Room 606-609, Compound Office Complex Building, No. 757, Dongfeng East Road, Yuexiu District, Guangzhou, Guangdong Province, 510699 Patentee after: China Southern Power Grid Internet Service Co.,Ltd. Address before: 430000 East Lake Development Zone, Wuhan City, Hubei Province, No. 1 Software Park East Road 4.1 Phase B1 Building 11 Building Patentee before: WUHAN DOUYU NETWORK TECHNOLOGY Co.,Ltd. |
|
TR01 | Transfer of patent right |