一种实现摄像头资源共享的方法及系统转让专利

申请号 : CN200910087532.2

文献号 : CN101594510B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杨民党建国王旭新董炳军

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本发明公开了一种实现摄像头资源共享的方法,包括:各摄像头服务使用者分别创建并初始化自身对应的共享内存;需使用摄像头的摄像头服务使用者发送摄像头服务请求,摄像头服务提供模块根据请求中携带的共享内存名,将当前采集的摄像头视频数据写入对应的共享内存中。本发明还同时公开了一种实现摄像头资源共享的系统,采用本发明能够通过简单的方式实现摄像头资源的共享。

权利要求 :

1.一种实现摄像头资源共享的方法,其特征在于,该方法包括:

各摄像头服务使用者分别创建并初始化自身对应的共享内存;

需使用摄像头的摄像头服务使用者发送摄像头服务请求,摄像头服务提供模块收到摄像头服务请求后,如果是第一个摄像头服务请求,则先启动摄像头,再从摄像头设备获取摄像头采集的视频数据,如果不是第一个摄像头服务请求,则直接从摄像头设备获取摄像头采集的视频数据;

之后摄像头服务提供模块根据请求中携带的共享内存名,将当前采集的摄像头视频数据按照约定格式写入对应的共享内存中;

所述约定的格式包括表示视频图像大小的信息、表示视频图像制式的信息、视频图像采集时间的信息;

当有多个摄像头服务使用者提出摄像头服务请求时,摄像头服务提供模块向所有发起请求的摄像头服务使用者提供的共享内存,广播来自摄像头的视频数据。

2.根据权利要求1所述的方法,其特征在于,该方法进一步包括:摄像头服务使用者发送摄像头服务请求后,循环从自身对应的共享内存中读取已写入的视频数据。

3.根据权利要求2所述的方法,其特征在于,该方法进一步包括:摄像头服务使用者不再需要摄像头服务时,向摄像头服务提供模块发送停止摄像头服务请求;摄像头服务提供模块收到最后一个摄像头服务使用者的停止摄像头服务请求后,停止摄像头工作。

4.根据权利要求3所述的方法,其特征在于,所述摄像头服务使用者为终端中需要使用摄像头的软件、或进程、或软件中的模块。

5.一种实现摄像头资源共享的系统,其特征在于,该系统包括:

分别创建并初始化自身对应的共享内存,需使用摄像头时发送摄像头服务请求的摄像头服务使用者;

接收摄像头服务请求,收到的请求是第一个摄像头服务请求时,先启动摄像头再从摄像头设备获取摄像头采集的视频数据,收到的请求不是第一个摄像头服务请求时,直接从摄像头设备获取摄像头采集的视频数据;并根据请求中携带的共享内存名,将当前采集的摄像头视频数据按照约定格式写入对应的共享内存中;且在有多个摄像头服务使用者提出摄像头服务请求时,向所有发起请求的摄像头服务使用者提供的共享内存,广播来自摄像头的视频数据的摄像头服务提供模块;

其中,所述约定的格式包括表示视频图像大小的信息、表示视频图像制式的信息、视频图像采集时间的信息。

6.根据权利要求5所述的系统,其特征在于,所述请求为摄像头服务请求、或停止摄像头服务请求。

7.根据权利要求5或6所述的系统,其特征在于,所述摄像头服务使用者为终端中需要使用摄像头的软件、或进程、或软件中的模块。

说明书 :

一种实现摄像头资源共享的方法及系统

技术领域

[0001] 本发明涉及摄像头技术,特别是涉及一种实现摄像头资源共享的方法及系统。 背景技术
[0002] 随着网络通讯技术和多媒体传输技术的迅猛发展,越来越多的人通过网络进行会话、沟通,传输数据、图片、音视频信息。在通讯双方进行会话过程中,为了让对方能够看到自己,用户可以在本地终端上安装摄像头,由摄像头采集用户当前所处环境的图像并转换为视频数据,然后将采集到的视频数据发送到进行会话的对端。显然,采用这种通讯方式时,摄像头的使用处于很重要的地位。
[0003] 目前,安装在终端上的摄像头可以由终端内部的不同软件、或同一软件中的不同模块来控制使用,但是,由于摄像头是硬件资源,现有软件对摄像头的使用大都是独占方式的,即:当一款软件或某软件内的一个模块使用摄像头的过程中,其他软件或软件中的其他模块都不能再使用该摄像头资源,这就使得多个软件或同一软件的多个模块无法同时正常使用摄像头资源。也就是说,摄像头资源无法实现共享。
[0004] 为了解决摄像头无法共享的问题,业界提出了虚拟摄像头技术。所谓虚拟摄像头技术是指采用虚拟摄像头软件,用于虚拟软件摄像头,它能够在用户的系统上模拟摄像头,可在任何支持摄像头的软件中使用,比如:在一些即时通信的聊天工具上使用。虚拟摄像头软件可支持在系统中注册多个虚拟摄像头设备,并对这些虚拟摄像头设备进行管理和操作。
[0005] 虽然虚拟摄像头技术能支持多个虚拟摄像头的使用,但是,现有技术中使用虚拟摄像头还存在以下缺陷:一方面,使用虚拟摄像头的用户需要在终端上额外安装相应的虚拟摄像头软件,操作起来比较麻烦;另一方面,由于虚拟摄像头软件同时可以支持多个虚拟摄像头,在实际应用时,用户需要根据不同环境、不同需求、不同效果从多个虚拟摄像头中选择出一个合适的摄像头来使用,而很多用户并不知道应如何选择、设置,有的用户甚至不知道在何处进行选择,所以对用户来说,选择正确的虚拟摄像头存在一定的难度,如此给用户使用也带来很多的不便。

发明内容

[0006] 有鉴于此,本发明的主要目的在于提供一种实现摄像头资源共享的方法及系统,能够通过简单的方式实现摄像头资源的共享。
[0007] 为达到上述目的,本发明的技术方案是这样实现的:
[0008] 本发明提供了一种实现摄像头资源共享的方法,包括:
[0009] 各摄像头服务使用者分别创建并初始化自身对应的共享内存; [0010] 需使用摄像头的摄像头服务使用者发送摄像头服务请求,摄像头服务提供模块收到摄像头服务请求后,如果是第一个摄像头服务请求,则先启动摄像头,再从摄像头设备获取摄像头采集的视频数据,如果不是第一个摄像头服务请求,则直接从摄像头设备获取摄像头采集的视频数据;
[0011] 之后摄像头服务提供模块根据请求中携带的共享内存名,将当前采集的摄像头视频数据按照约定格式写入对应的共享内存中所述约定的格式包括表示视频图像大小的信息、表示视频图像制式的信息、视频图像采集时间的信息;当有多个摄像头服务使用者提出摄像头服务请求时,摄像头服务提供模块向所有发起请求的摄像头服务使用者提供的共享内存,广播来自摄像头的视频数据。
[0012] 上述方案中,该方法进一步包括:摄像头服务使用者发送摄像头服务请求后,循环从自身对应的共享内存中读取已写入的视频数据。
[0013] 上述方案中,该方法进一步包括:摄像头服务使用者不再需要摄像头服务时,向摄像头服务提供模块发送停止摄像头服务请求;摄像头服务提供模块收到最后一个摄像头服务使用者的停止摄像头服务请求后,停止摄像头工作。
[0014] 上述方案中,所述摄像头服务使用者为终端中需要使用摄像头的软件、或进程、或软件中的模块。
[0015] 本发明还提供了一种实现摄像头资源共享的系统,包括:
[0016] 分别创建并初始化自身对应的共享内存,需使用摄像头时发送摄像头服务请求的摄像头服务使用者;
[0017] 接收摄像头服务请求,收到的请求是第一个摄像头服务请求时,先启动摄像头再从摄像头设备获取摄像头采集的视频数据,收到的请求不是第一个摄像头服务请求时,直接从摄像头设备获取摄像头采集的视频数据;并根据请求中携带的共享内存名,将当前采集的摄像头视频数据按照约定格式写入对应的共享内存中;且在有多个摄像头服务使用者提出摄像头服务请求时,向所有发起请求的摄像头服务使用者提供的共享内存,广播来自摄像头的视频数据的摄像头服务提供模块;
[0018] 其中,所述约定的格式包括表示视频图像大小的信息、表示视频图像制式的信息、视频图像采集时间的信息。
[0019] 上述方案中,所述请求为摄像头服务请求、或停止摄像头服务请求。 [0020] 本发明所提供的实现摄像头资源共享的方法及系统,在终端设置摄像头服务提供模块,且各摄像头服务使用者分别在终端的存储空间中开辟存储自身视频数据的共享内存并命名;由摄像头服务提供模块完成与多个摄像头服务使用者之间、以及与摄像头设备之间视频数据的传输和交互,摄像头设备采集的视频数据同时写入当前发送摄像头服务请求的所有摄像头服务使用者对应的共享内存中。如此,可由摄像头服务提供模块实现多个摄像头服务使用者对摄像头设备的使用,使多个摄像头服务使用者能够同时获取摄像头设备的视频数据,从而共享摄像头资源。
[0021] 本发明不用安装额外的虚拟摄像头软件,也不用对多个摄像头进行选择,仅由摄像头服务提供模块根据来自不同摄像头服务使用者的请求,启动摄像头,并将当前采集的摄像头视频数据写入对应的共享内存即可,实现简单、方便、灵活,适用范围更广。 [0022] 附图说明
[0023] 图1为本发明系统的组成结构示意图;
[0024] 图2为本发明方法的实现流程示意图;
[0025] 图3为本发明实施例一的交互流程示意图;
[0026] 图4为本发明实施例二的交互流程示意图;
[0027] 图5为本发明实施例三的交互流程示意图;
[0028] 图6为本发明一应用实施例的交互流程示意图。

具体实施方式

[0029] 本发明的基本思想是:在终端设置摄像头服务提供模块,且各摄像头服务使用者分别在终端的存储空间中开辟自身对应的共享内存;当不同需要使用摄像头时,分别向摄像头服务提供模块发送请求,摄像头服务提供模块根据请求将当前采集的摄像头视频数据写入相应的共享内存中。
[0030] 进一步的,需要使用摄像头的摄像头服务使用者各自读取与自身对应的共享内存中写入的视频数据。
[0031] 这里,所述终端是指用户当前使用的终端设备,比如当前使用的PC机。 [0032] 如图1所示,本发明实现摄像头资源共享的系统包括:摄像头设备、一个以上摄像头服务使用者、一个以上共享内存、以及摄像头服务提供模块;其中, [0033] 所述摄像头设备,用于采集视频图像并转换为视频数据;
[0034] 所述摄像头服务使用者,用于创建并初始化自身对应的共享内存并命名;向摄像头服务提供模块发送请求,并提供共享内存名称;从自身对应的共享内存中循环读取视频数据,以供显示;这里,所述请求为摄像头服务请求、或停止摄像头服务请求; [0035] 所述摄像头服务使用者可以是终端内部需要使用摄像头的软件、或进程、或软件中的模块;
[0036] 所述共享内存,与摄像头服务使用者一一对应,用于为对应的摄像头服务使用者存储摄像头采集的视频数据,可不断进行更新;
[0037] 所述共享内存设置于终端内的内存存储空间中,是指在终端内部的存储空间中为每个摄像头服务使用者开辟的一段存储空间;
[0038] 所述摄像头服务提供模块,用于完成与多个摄像头服务使用者之间、以及与摄像头设备之间的传输和交互;具体的:用于接收摄像头服务使用者的请求,启动摄像头,并向由摄像头服务使用者指定的共享内存中按照约定格式写入视 频数据;这里,所述请求为来自各个摄像头服务使用者的摄像头服务请求、或停止摄像头服务请求,请求中携带有当前摄像头服务使用者所使用共享内存的名称;所述按约定格式是摄像头服务提供模块与摄像头服务使用者预先协商好的,比如:写入表示视频图像大小的信息,如长、宽、高,表示视频图像制式的信息,视频图像采集时间的信息等等,只要能根据写入的视频数据显示出所需的视频图像即可。
[0039] 总之,当有多个摄像头服务使用者提出摄像头服务请求时,摄像头服务提供模块会向所有发起请求的摄像头服务使用者提供的共享内存,广播来自摄像头的视频数据,即:向所有对应的共享内存写入当前摄像头采集的视频数据。
[0040] 图1所示系统的实际处理过程是这样的:在发起摄像头服务请求之前,各个需要使用摄像头的摄像头服务使用者会在终端的内存存储空间中为自己开辟一块内存空间,作为自身对应的共享内存,并为所开辟的共享内存命名,命名以能唯一标识该共享内存属于哪个摄像头服务使用者为原则。参见图1所示,当某个摄像头服务使用者需要使用摄像头服务时,该摄像头服务使用者向摄像头服务提供模块发送携带有自身对应共享内存名称的摄像头服务请求;摄像头服务提供模块收到摄像头服务请求后,如果是第一个请求,就先启动摄像头,之后从摄像头设备获取摄像头采集的视频数据,如果不是第一个请求,就直接从摄像头设备获取摄像头采集的视频数据;获取视频数据后,摄像头服务提供模块会将所获取的视频数据,写入当前所有发起摄像头服务请求的摄像头服务使用者对应的共享内存中;各摄像头服务使用者可根据需要分别从自身对应的共享内存中读取视频数据,以便自己使用,比如:在即时通信会话中,将摄像头采集的视频数据发给自己的好友;再比如:在进行视频游戏时,不同的游戏软件可以共享使用一个摄像头,并将读取的视频数据发送给其他游戏方。
[0041] 本发明实现摄像头资源共享的方法如图2所述,包括以下步骤: [0042] 步骤201:各摄像头服务使用者分别创建并初始化自身对应的共享内存并命名; [0043] 这里,所述创建并初始化共享内存:各摄像头服务使用者可以在终端启动 后马上创建;也可以在需要获取摄像头视频数据之前再创建。命名可以采用任意方式,如:使用字符、数字、字符+数字等等,只要能唯一标识是哪个摄像头服务使用者对应的共享内存即可。
[0044] 步骤202:需使用摄像头的摄像头服务使用者发送摄像头服务请求,摄像头服务提供模块根据请求中携带的共享内存名,将当前采集的摄像头视频数据写入对应的共享内存中。
[0045] 这里,当前有几个摄像头服务使用者,就向几个共享内存中写入当前采集的摄像头视频数据,就相当于向多个共享内存广播当前采集的摄像头视频数据。请求摄像头服务的多个摄像头服务使用者发起请求是随机的,没有固定的先后顺序。
[0046] 其中,摄像头服务提供模块收到第一个摄像头服务请求后,还要先启动摄像头工作。
[0047] 进一步的,当摄像头服务使用者不再需要摄像头服务时,则向摄像头服务提供模块发送停止摄像头服务请求;其中,摄像头服务提供模块收到最后一个摄像头服务使用者的停止摄像头服务请求后,还要停止摄像头工作。
[0048] 下面结合附图和具体实施例详细说明本发明的实现过程。
[0049] 实施例一:
[0050] 本实施例中,有摄像头服务使用者A和摄像头服务使用者B两个摄像头服务使用者;摄像头服务使用者A和摄像头服务使用者B在一开始就分别创建并初始化自身对应的共享内存;摄像头服务使用者B先发送请求。
[0051] 本实施例实现摄像头资源共享的方法如图3所示,包括以下步骤: [0052] 步骤301~302:摄像头服务使用者A创建并初始化共享内存A,摄像头服务使用者B创建并初始化共享内存B;
[0053] 实际应用中,这两个共享内存的创建没有固定的先后顺序。
[0054] 步骤303:摄像头服务使用者B向摄像头服务提供模块发送摄像头服务请求,请求中携带有共享内存B的名称。
[0055] 步骤304a~304b:摄像头服务提供模块收到摄像头服务请求后,启动摄像头,并获取当前摄像头采集的视频数据;摄像头服务使用者B循环从共享内存B读取已写入的视频数据;
[0056] 这里,步骤304a和304b是分别由摄像头服务提供模块、摄像头服务使用者完成的操作,没有固定的先后顺序。
[0057] 步骤305:摄像头服务提供模块将获取的最新视频数据写入共享内存B; [0058] 这里,因为当前只有一个摄像头服务使用者,所以只写入一个共享内存。 [0059] 步骤306:摄像头服务使用者A向摄像头服务提供模块发送摄像头服务请求,请求中携带有共享内存A的名称。
[0060] 步骤307a~307b:摄像头服务提供模块收到摄像头服务请求后,获取当前摄像头采集的视频数据;摄像头服务使用者A循环从共享内存A读取已写入的视频数据; [0061] 这里,步骤307a和307b是分别由摄像头服务提供模块、摄像头服务使用者完成的操作,没有固定的先后顺序。
[0062] 步骤308:摄像头服务提供模块将获取的最新视频数据写入共享内存A和共享内存B;
[0063] 这里,因为当前有两个摄像头服务使用者,所以同时写入两个共享内存。 [0064] 步骤309~311:摄像头服务使用者B和摄像头服务使用者A分别向摄像头服务提供模块发送停止摄像头服务请求,请求中分别携带有相应的共享内存名称;摄像头服务提供模块收到最后一个摄像头服务使用者的停止摄像头服务请求后,停止摄像头的工作。 [0065] 实施例二:
[0066] 本实施例中,有摄像头服务使用者A和摄像头服务使用者B两个摄像头服务使用者;摄像头服务使用者A和摄像头服务使用者B分别在发送摄像头服务请求前,再创建并初始化自身对应的共享内存;摄像头服务使用者A先发送请求。
[0067] 本实施例实现摄像头资源共享的方法如图4所示,包括以下步骤: [0068] 步骤401:摄像头服务使用者A创建并初始化共享内存A。
[0069] 步骤402:摄像头服务使用者A向摄像头服务提供模块发送摄像头服务请求,请求中携带有共享内存A的名称。
[0070] 步骤403a~403b:摄像头服务提供模块收到摄像头服务请求后,启动摄像头,并获取当前摄像头采集的视频数据;摄像头服务使用者A循环从共享内存A读取已写入的视频数据;
[0071] 这里,步骤403a和403b是分别由摄像头服务提供模块、摄像头服务使用者完成的操作,没有固定的先后顺序。
[0072] 步骤404:摄像头服务提供模块将获取的最新视频数据写入共享内存A; [0073] 这里,因为当前只有一个摄像头服务使用者,所以只写入一个共享内存。 [0074] 步骤405:摄像头服务使用者B创建并初始化共享内存B。
[0075] 步骤406:摄像头服务使用者B向摄像头服务提供模块发送摄像头服务请求,请求中携带有共享内存B的名称。
[0076] 步骤407a~407b:摄像头服务提供模块收到摄像头服务请求后,获取当前摄像头采集的视频数据;摄像头服务使用者B循环从共享内存B读取已写入的视频数据; [0077] 这里,步骤407a和407b是分别由摄像头服务提供模块、摄像头服务使用者完成的操作,没有固定的先后顺序。
[0078] 步骤408~411:与实施例一中的步骤308~311的操作和原理完全相同。 [0079] 实施例三:
[0080] 本实施例中,有摄像头服务使用者A和摄像头服务使用者B两个摄像头服务使用者;摄像头服务使用者A和摄像头服务使用者B同时发送请求。本实施例中的步骤编号仅仅为了说明方便,并不限定两个摄像头服务使用者操作的先后顺序。
[0081] 本实施例实现摄像头资源共享的方法如图5所示,包括以下步骤: [0082] 步骤501~502:摄像头服务使用者A创建并初始化共享内存A,摄像头服务使用者B创建并初始化共享内存B;
[0083] 步骤503~504:摄像头服务使用者A、摄像头服务使用者B分别向摄像头服务提供模块发送摄像头服务请求,请求中分别携带有共享内存A、共享内存B的名称。 [0084] 步骤505a~505b:摄像头服务提供模块收到摄像头服务请求后,启动摄像头,并获取当前摄像头采集的视频数据;摄像头服务使用者A、摄像头服务使用者B各自循环从自身对应的共享内存中读取已写入的视频数据;
[0085] 这里,步骤505a和505b是分别由摄像头服务提供模块、摄像头服务使用者完成的操作,没有固定的先后顺序。
[0086] 步骤506~509:与实施例一中的步骤308~311的操作和原理完全相同。 [0087] 实施例四:
[0088] 本实施例是一个实际应用实例,本实施例中,摄像头服务使用者是两个在运行的视频游戏软件--视频游戏软件A和视频游戏软件B,在进行视频游戏过程中,用户希望将自己相关的视频数据如头像、所处周围环境等发送给参与游戏的游戏对方,那么,视频游戏软件就需要通过摄像头获取视频数据,再发送给游戏对方。其中,游戏对方可以是一个或多个;向游戏对方发送视频数据可以通过即时通信系统实现。视频游戏软件A和视频游戏软件B在视频游戏软件启动时就分别创建并初始化自身对应的共享内存,并且分别命名为共享内存A、共享内存B。视频游戏软件B先发送摄像头服务请求,视频游戏软件A过一段时间后发送摄像头服务请求。
[0089] 本实施例实现摄像头资源共享的方法如图6所示,包括以下步骤: [0090] 步骤601~602:视频游戏软件A和视频游戏软件B在自身软件启动时,分别创建并初始化自身对应的共享内存A、共享内存B;这两个共享内存的创建没有固定的先后顺序。
[0091] 步骤603:视频游戏软件B向摄像头服务提供模块发送携带有共享内存B 名称的摄像头服务请求。
[0092] 步骤604a~604b:摄像头服务提供模块收到摄像头服务请求后,启动摄像头,并获取当前摄像头采集的视频数据;视频游戏软件B循环从共享内存B读取已写入的视频数据;
[0093] 这里,步骤604a和604b是分别由视频游戏软件、摄像头服务提供模块完成的操作,没有固定的先后顺序。
[0094] 步骤605:摄像头服务提供模块将获取的最新视频数据写入共享内存B; [0095] 这里,因为当前只有一个视频游戏软件,所以只写入一个共享内存。 [0096] 步骤606:视频游戏软件A向摄像头服务提供模块发送携带有共享内存A名称的摄像头服务请求。
[0097] 步骤607a~607b:摄像头服务提供模块收到摄像头服务请求后,获取当前摄像头采集的视频数据;视频游戏软件A循环从共享内存A读取已写入的视频数据; [0098] 这里,步骤607a和607b是分别由视频游戏软件、摄像头服务提供模块完成的操作,没有固定的先后顺序。
[0099] 步骤608:摄像头服务提供模块将获取的最新视频数据写入共享内存A和共享内存B;
[0100] 这里,因为当前有两个视频游戏软件,所以同时写入两个共享内存。 [0101] 步骤609~611:当不再需要使用摄像头如视频游戏结束时,视频游戏软件B和视频游戏软件A分别向摄像头服务提供模块发送停止摄像头服务请求,请求中分别携带有相应的共享内存名称;摄像头服务提供模块收到最后一个视频游戏软件的停止摄像头服务请求后,停止摄像头的工作。
[0102] 以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。