CN109862385A - 直播的方法、装置、计算机可读存储介质及终端设备 - Google Patents
直播的方法、装置、计算机可读存储介质及终端设备 Download PDFInfo
- Publication number
- CN109862385A CN109862385A CN201910203858.0A CN201910203858A CN109862385A CN 109862385 A CN109862385 A CN 109862385A CN 201910203858 A CN201910203858 A CN 201910203858A CN 109862385 A CN109862385 A CN 109862385A
- Authority
- CN
- China
- Prior art keywords
- target
- data
- frame
- area information
- channel
- 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.)
- Granted
Links
Landscapes
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
本申请公开了直播的方法、装置、计算机可读存储介质及终端设备,其中所述方法包括:获取目标直播区域信息,所述目标直播区域信息包括用户指定的想要进行直播的局部屏幕区域的目标起始坐标和目标大小;创建与所述目标大小对应的目标帧缓冲区;从对整张屏幕进行录屏得到的完整图像帧中,确定与所述目标直播区域信息匹配的局部图像数据,并将所述局部图像数据拷贝至所述目标帧缓冲区中,生成局部图像帧;将所述目标帧缓冲区中的局部图像帧编码成流媒体数据,并将所述流媒体数据发送至服务器中,以由所述服务器将所述流媒体数据发送至观众客户端中,以此实现了自定义直播区域的功能。
Description
技术领域
本申请涉及直播领域,尤其涉及直播的方法、装置、计算机可读存储介质及终端设备。
背景技术
随着移动互联网的发展,直播软件越来越受欢迎,越来越多的主播利用直播平台向观众播放各种内容。在直播过程中,主播使用的主播客户端将通过信号采集设备(如:摄像头、麦克风等)采集到的数据上传到直播服务器,再通过直播服务器分发到一个或多个观众客户端进行播放。
在相关技术提到的直播方案中,都是录制整个屏幕进行推流直播的,这使得主播在直播的过程中只能进行直播活动,而不能同时处理其他事情,否则就会被粉丝看到主播的隐私,降低了主播直播的积极性。
发明内容
有鉴于此,本申请提供一种直播的方法、装置、计算机可读存储介质及终端设备。
根据本申请实施例的第一方面,提供一种直播的方法,所述方法包括步骤:
获取目标直播区域信息,所述目标直播区域信息包括用户指定的想要进行直播的局部屏幕区域的目标起始坐标和目标大小;
创建与所述目标大小对应的目标帧缓冲区;
从对整张屏幕进行录屏得到的完整图像帧中,确定与所述目标直播区域信息匹配的局部图像数据,并将所述局部图像数据拷贝至所述目标帧缓冲区中,生成局部图像帧;
将所述目标帧缓冲区中的局部图像帧编码成流媒体数据,并将所述流媒体数据发送至服务器中,以由所述服务器将所述流媒体数据发送至观众客户端中。
在本实施例的一种可能的实施方式中,在所述从获取的当前完整图像帧中确定与所述目标直播区域信息匹配的局部图像数据之前,还包括:
对整张屏幕进行录屏,得到完整图像帧;
将所述完整图像帧存储在源帧缓冲区中,所述源帧缓冲区的大小等于整张屏幕的大小。
在本实施例的一种可能的实施方式中,所述局部屏幕区域的目标大小包括宽度viewW以及高度viewH;
所述确定与所述目标直播区域信息匹配的局部图像数据,包括:
在完整图像帧中定位所述目标起始坐标;
从定位的所述目标起始坐标开始,确定宽度为viewW,高度为viewH的数据为局部图像数据。
在本实施例的一种可能的实施方式中,所述局部图像数据包括局部Y通道数据、局部U通道数据以及局部V通道数据;
所述从定位的所述目标起始坐标开始,确定宽度为viewW,高度为viewH的数据为局部图像数据,包括:
从该完整图像帧的Y通道数据中确定与所述目标直播区域信息匹配的局部Y通道数据;以及
从该完整图像帧的U通道数据中确定与所述目标直播区域信息匹配的局部U通道数据;以及
从该完整图像帧的V通道数据中确定与所述目标直播区域信息匹配的局部V通道数据。
在本实施例的一种可能的实施方式中,所述目标起始坐标为(x,y),
所述从该完整图像帧的Y通道数据中确定与所述目标直播区域信息匹配的局部Y通道数据,包括:
获取该完整图像帧的Y通道的起始地址数值指针,以及该Y通道的每行具有的字节数;
从第y行开始,以第x列作为提取数据的起始地址,以viewW个字节长度作为各行提取的字节数,确定各行的局部Y通道数据,其中,提取的局部Y通道数据的行数为viewH;
所述将所述局部图像数据拷贝至所述目标帧缓冲区中,包括:
分别将提取的各行局部Y通道数据拷贝到所述目标帧缓冲区中Y通道的以第0行开始,以第0列作为起始地址的位置。
在本实施例的一种可能的实施方式中,在所述将所述流媒体数据发送至服务器之后,所述方法还包括:
将下一帧完整图像帧对应的局部图像数据存储至所述目标帧缓冲区,以复用所述目标帧缓冲区。
根据本申请实施例的第二方面,提供一种直播装置,所述装置包括:
目标直播区域信息获取模块,用于获取目标直播区域信息,所述目标直播区域信息包括用户指定的想要进行直播的局部屏幕区域的目标起始坐标和目标大小;
目标帧缓冲区创建模块,用于创建与所述目标大小对应的目标帧缓冲区;
局部图像数据确定模块,用于从对整张屏幕进行录屏得到的完整图像帧中,确定与所述目标直播区域信息匹配的局部图像数据;
局部图像数据拷贝模块,用于将所述局部图像数据拷贝至所述目标帧缓冲区中,生成局部图像帧;
编码模块,用于将所述目标帧缓冲区中的局部图像帧编码成流媒体数据;
推流模块,用于将所述流媒体数据发送至服务器中,以由所述服务器将所述流媒体数据发送至观众客户端中。
在本实施例的一种可能的实施方式中,所述局部屏幕区域的目标大小包括宽度viewW以及高度viewH;
所述局部图像数据确定模块包括:
坐标定位子模块,用于在完整图像帧中定位所述目标起始坐标;
局部图像数据确定子模块,用于从定位的所述目标起始坐标开始,确定宽度为viewW,高度为viewH的数据为局部图像数据。
根据本申请实施例的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述方法的步骤。
根据本申请实施例的第四方面,提供一种终端设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法的步骤。
本申请提供的方案具有如下有益效果:
在本申请实施例中,用于推流的流媒体数据为主播用户指定的想要进行直播的局部屏幕区域对应的数据。通过获取用户指定的局部屏幕区域的目标直播区域信息,创建与局部直播区域的目标大小对应的目标帧缓冲区,并从对整张屏幕进行录屏得到的完整图像帧中确定与该目标直播区域信息匹配的局部图像数据,将该局部图像数据拷贝至目标帧缓冲区后可以得到局部图像帧,对该局部图像帧编码成流媒体数据发送至服务器等过程,可以实现了自定义直播区域的功能,主播用户可以只直播他想要展示的内容,而无需直播整张屏幕的内容,节省了终端的带宽资源,同时保护了主播用户的隐私,提高了主播用户直播的积极性。
附图说明
图1是本申请一示例性实施例示出的直播系统的架构图;
图2是本申请一示例性实施例示出的一种直播的方法实施例的步骤流程图;
图3是本申请一示例性实施例示出的一种直播的方法实施例中的直播区域显示示意图;
图4是本申请另一示例性实施例示出的一种直播的方法实施例的步骤流程图;
图5是本申请的装置所在设备的一种硬件结构图;
图6是本申请一示例性实施例示出的一种直播装置实施例的结构框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
图1是根据一示例性实施例示出的直播系统的架构图,直播系统可以包括:主播客户端10、可与直播客户端10进行通信的服务器20及可与服务器20进行通信的观众客户端30A、30B。其中,上述主播客户端可以是主播使用的设备(如:电脑、手机等),上述观众客户端可以是观众使用的设备(如:电脑、手机、虚拟现实(Virtual Reality,VR)头盔等)。示例性地,主播客户端可以包括一种或多种信号采集设备(如:摄像头、麦克风等)。在直播过程中,主播客户端10通过相应的信号采集设备采集到音/视频信号,处理成流媒体数据上传到服务器20,以由服务器20将流媒体数据分发到一个或多个观众客户端上进行播放。其中,服务器20可以是单个服务器或由多个服务器构成的服务器集群。
参考图2,示出了本申请一示例性实施例示出的一种直播的方法实施例的步骤流程图,该直播的方法可以应用于主播客户端所在的终端上,具体可以包括如下步骤:
步骤101,获取目标直播区域信息。
作为一种示例,目标直播区域信息可以包括但不限于:用户指定的想要进行直播的局部屏幕区域的目标起始坐标和目标大小。例如,局部屏幕区域的目标起始坐标可以为(x,y),目标大小可以包括宽度viewW以及高度viewH。
为了满足主播在直播时不想屏幕显示的所有内容都让粉丝看到的,只想直播特定的区域的需求,本实施例可以允许用户自定义直播区域进行直播。在一种可能的实施方式中,主播客户端中可以设置用于支持主播自定义直播区域的交互按钮,当主播用户触发(例如点击)该交互按钮时,则主播用户可以在显示的屏幕中指定所要直播的局部直播区域。
例如,如图3所示,区域1为整张屏幕的显示区域,当主播用户点击交互按钮时,可以圈出如区域2所示的区域作为指定的局部直播区域,则在直播时只直播区域2中显示的内容,当然,用户可以根据实际需求调整区域2的大小和位置,如对区域2进行拉伸操作。
当主播用户指定想要进行直播的局部屏幕区域以后,本实施例可以通过相关的屏幕定位算法确定该局部屏幕区域的目标直播区域信息。示例性地,在图3中,区域2的目标直播区域信息可以包括如下信息(x,y,viewH,viewW),其中x、y为区域2的起始坐标,可以理解为用户点击屏幕进行自定义直播区域时的第一个点,如第一个触碰点(相对于触摸屏按钮)或第一个点击操作。当用户触发第一个点后执行拖动操作,则可以圈定局部直播区域。viewH表示区域2的高度,viewW表示区域2的宽度。
需要说明的是,为了提升直播效果、提高观众的观看体验,本实施例中记录的目标坐标以及目标大小可以为横屏模式下的坐标和大小,后续的操作也为横屏模式下的操作。若主播客户端所在的设备为竖屏模式,在进行坐标和大小计算时可以转换为横屏模式的数据,由于将竖屏模式的参数转换为横屏模式的参数的计算过程属于现有技术,此处不再赘述了。
确定局部屏幕区域的目标直播区域信息以后,可以将该自定义的目标直播区域信息保存下来以供后续使用。在其他实施例中,保存下来的自定义的目标直播区域信息也可以作为用户的个性化数据,下次用户需要直播时,可以直接为用户推荐该局部屏幕区域用于直播。
在其他实施例中,用户也可以指定至少两个局部屏幕区域,在这种情况下,每个局部屏幕区域各对应于一个目标直播区域信息,各局部屏幕区域显示的内容可以不相同,从而实现一个主播用户可以在同一时间内进行至少两个直播。
步骤102,创建与所述目标大小对应的目标帧缓冲区。
当确定主播用户需要进行直播的局部屏幕区域的目标大小以后,可以调用操作系统中指定的用于创建缓冲区的接口,创建与该目标大小对应的目标帧缓冲区areaBuffer。例如,在图3中,针对用户圈定的区域2,可以创建高度为viewH、宽度为viewW的areaBuffer,同时还可以指定该areaBuffer的图像格式。
步骤103,从对整张屏幕进行录屏得到的完整图像帧中,确定与所述目标直播区域信息匹配的局部图像数据,并将所述局部图像数据拷贝至所述目标帧缓冲区中,生成局部图像帧。
本实施例中主播客户端所在的操作系统支持录屏功能,其中,录屏是指终端将整张屏幕显示的画面进行截屏,得到完整图像帧,并将连续截屏得到的多个完整图像帧进行编码并合成视频的过程。在进行录屏前,可以先在终端中设置录屏帧率,然后终端可以按照设置的该录屏帧率录屏。
在一种实施方式中,在对整张屏幕进行录屏得到完整图像帧以后,还可以将得到的完整图像帧存储在源帧缓冲区sourceBuffer中,示例性地,该sourceBuffer的大小等于整张屏幕的大小。
在本实施例中,可以根据步骤101中确定的目标直播区域信息,从完整图像帧中确定显示在局部屏幕区域对应位置的内容,将该内容从完整图像帧中拷贝出来作为局部图像数据,并将该局部图像数据存储至areaBuffer中,最终得到局部图像帧。
在一种可能的实施方式中,一种确定局部图像数据的方式可以为:在完整图像帧中定位目标起始坐标,并从定位的目标起始坐标开始,确定宽度为viewW,高度为viewH的数据为局部图像数据。
当确定局部图像数据以后,可以将该局部图像数据拷贝至areaBuffer中,拷贝完成之后,areaBuffer则拥有了用于直播的局部图像帧。
步骤104,将所述目标帧缓冲区中的局部图像帧编码成流媒体数据,并将所述流媒体数据发送至服务器中,以由所述服务器将所述流媒体数据发送至观众客户端中。
在一种可能的实施方式中,针对areaBuffer中的局部图像帧,可以将该局部图像帧传送至主播客户端所在终端的编码模块或编码器中进行编码,得到流媒体数据。示例性地,可以预先指定一种或多种编码规则,以对局部图像帧进行编码。
在一种实施方式中,获得流媒体数据以后,可以通过RTMP(Real Time MessageProtocol,实时消息协议)协议将该流媒体数据推到服务器,以完成推流过程,则服务器可以将该流媒体数据经过处理后下发至一个或多个观众客户端中进行播放。
在本申请实施例的一种可能的实施方式中,在将流媒体数据发送至服务器之后,本实施例还可以包括如下步骤:
将下一帧完整图像帧对应的局部图像数据存储至所述目标帧缓冲区,以复用所述目标帧缓冲区。
本实施例可以复用areaBuffer的空间,当上一帧完整图像帧对应的局部图像帧编码并推流完毕以后,在处理下一帧完整图像帧时,可以将该下一帧完整图像帧对应的局部图像数据存储至areaBuffer以覆盖前一帧的局部图像数据,可以避免耗时耗性能重复创建新areaBuffer的过程。
通过本申请实施例自定义确定的局部屏幕区域,主播用户可以只直播他想要展示的内容,涉及隐私的区域不让粉丝看到,对于主播来说较为便利,主播可以一边直播,一边做其他的事情。也能满足直播内容的多样化的需求,玩法更多,从而提高了主播直播的积极性,例如,主播需要离开直播的时候,可以播放电影让观众好好休息放松一下;又如,主播需要隐藏最上方的ID私密信息的时候,可以选择隐藏一定的高度;又如,主播需要举办抽奖活动的时候,可以选择隐藏掉抽奖的区域。又如,主播可以不断变化直播的区域,满足内容的多样性需求;或者,用户还可以同时进行多个直播,等等。
在本申请实施例中,用于推流的流媒体数据为主播用户指定的想要进行直播的局部屏幕区域对应的数据。通过获取用户指定的局部屏幕区域的目标直播区域信息,创建与局部直播区域的目标大小对应的目标帧缓冲区,并从对整张屏幕进行录屏得到的完整图像帧中确定与该目标直播区域信息匹配的局部图像数据,将该局部图像数据拷贝至目标帧缓冲区后可以得到局部图像帧,对该局部图像帧编码成流媒体数据发送至服务器等过程,可以实现了自定义直播区域的功能,主播用户可以只直播他想要展示的内容,而无需直播整张屏幕的内容,节省了终端的带宽资源,同时保护了主播用户的隐私,提高了主播用户直播的积极性。
参考图4,示出了本申请另一示例性实施例示出的一种直播的方法实施例的步骤流程图,在本实施例中,以完整图像帧以及局部图像帧的图像格式为YUVI420格式为例进行说明。I420(即YUV标准格式4:2:0)的数据量是size=width×heigth×1.5Byte,相比于其他图像格式的数据量要少,例如,RGB24一帧的大小size=width×heigth×3Byte;RGB32的size=width×heigth×4Byte。
但应当理解的是,本实施例不应理解为对本申请的限制,除了YUV格式而特定提供的内容之外,根据下面描述的逻辑也可以适用于其他图像格式。
本实施例对主播客户端所在的终端的操作系统不作限定,以下以IOS操作系统的终端为例进行说明。
本申请实施例具体可以包括如下步骤:
步骤201,对整张屏幕进行录屏,得到完整图像帧。
在一种可能的实施方式中,可以采用IOS系统提供的录屏方案来对整张屏幕进行录屏,得到完整图像帧。
示例性的,IOS系统提供的录屏方案可以包括但不限于:通过私有API(Application Programming Interface,应用程序编程接口)获取系统的IOSurface(IOSurface框架提供了一个适合跨进程边界共享的帧缓冲区对象);通过Airplay(Airplay是苹果公司提供的一种远程播放技术,可以将IOS设备上的音频、照片、ppt、视频和系统界面镜像等内容传送到同一局域网中支持Airplay的设备(如:音箱、Apple TV)中播放)录屏;基于ReplayKit框架的录屏,等等。
步骤202,将所述完整图像帧存储在源帧缓冲区sourceBuffer中,所述sourceBuffer的大小等于整张屏幕的大小。
在实际中,上述基于IOS系统的录屏方案进行录屏得到的都是基于整张屏幕的完整图像帧,该完整图像帧可以存储在源帧缓冲区sourceBuffer,其中sourceBuffer的大小等于整张屏幕的大小。
例如,Airplay录屏SDK(Software Development Kit,软件开发工具包)返回的sourceBuffer是整张屏幕的视频帧(即完整视频帧)。
sourceBuffer是一种CVPixelBuffer,属于CVPixelBufferRef类型,是一种像素图片类型,由于CV开头,所以它是属于CoreVideo模块的。
步骤203,获取目标直播区域信息,所述目标直播区域信息包括用户指定的想要进行直播的局部屏幕区域的目标起始坐标(x,y)和目标大小。
在实现时,当主播用户设置完局部屏幕区域以后,可以通过IOS操作系统提供的屏幕定位功能,确定用户指定的想要进行直播的局部屏幕区域的目标起始坐标(x,y)和目标大小。示例性的,目标大小可以包括宽度viewW以及高度viewH。
确定用户设定的局部屏幕区域的目标直播区域信息以后,可以保存该目标直播区域信息。在一种可能的实施方式中,在保存时,可以先将该目标直播区域信息转换成字符串,然后可以直接保存该字符串。
步骤204,创建与所述目标大小对应的目标帧缓冲区areaBuffer。
在一种可能的实施方式中,可以采用CVPixelBufferCreateWithBytes函数创建高度为viewH、宽度为viewW、格式为YUVI420的areaBuffer。
创建完areaBuffer以后,在一种可能的实施方式中,可以从sourceBuffer中拷贝与目标直播区域信息匹配的局部图像数据填充到areaBuffer中。在进行areaBuffer的数据填充时,可以分别填充Y通道、U通道以及V通道的数据,具体可以参照下述步骤205-步骤207的过程。
步骤205,从该完整图像帧的Y通道数据中确定与所述目标直播区域信息匹配的局部Y通道数据,并将所述局部Y通道数据拷贝至所述areaBuffer中。
在进行areaBuffer的Y通道的数据填充时,可以先从完整图像帧的Y通道数据中确定与目标直播区域信息匹配的局部Y通道数据,然后将该局部Y通道数据拷贝至所述areaBuffer中。
在本申请的一种可能的实施例中,在步骤205中确定局部Y通道数据的步骤可以包括如下子步骤:
子步骤S11,获取该完整图像帧的Y通道的起始地址数值指针,以及该Y通道的每行具有的字节数。
在一种可能的实施方式中,可以通过CVPixelBufferGetBaseAddressOfPlane(sourceBuffer,0)确定完整图像帧的Y通道的起始地址数值指针。通过CVPixelBufferGetBytesPerRowOfPlane(sourceBuffer,0)确定Y通道的每行所占用的字节数。
子步骤S12,从第y行开始,以第x列作为提取数据的起始地址,以viewW个字节长度作为各行提取的字节数,确定各行的局部Y通道数据,其中,提取的局部Y通道数据的行数为viewH。
在实现时,可以设置一个循环程序,从第y行开始(int offsetTop=y)进行循环,循环次数为viewH,则可以得到从第y行开始的viewH行,各行以第x列作为起始地址(即从Y通道的各行的起始地址数值指针开始偏移x个像素,int offsetLeft=x),确定viewW个字节长度作为各行提取的字节数(int length=viewW),得到各行的局部Y通道数据。
在本申请的一种可能的实施例中,在步骤205中将局部Y通道数据拷贝至areaBuffer中的步骤可以包括如下子步骤:
分别将提取的各行局部Y通道数据拷贝到所述目标帧缓冲区中Y通道的以第0行开始,以第0列作为起始地址的位置。
在实现时,针对确定的Y通道的各行局部Y通道数据,可以使用C语言API内存拷贝memcpy将该行局部Y通道数据拷贝到areaBuffer中Y通道的以第0行开始,以第0列作为起始地址的位置。
例如,确定sourceBuffer Y通道的第y行的局部Y通道数据以后,可以将该第y行的局部Y通道数据从sourceBuffer拷贝到areaBuffer的Y通道的第0行,以第0列作为起始地址的位置;
确定sourceBuffer Y通道的第y+1行的局部Y通道数据以后,可以将该第y+1行的局部Y通道数据从sourceBuffer拷贝到areaBuffer的Y通道的第1行,以第0列作为起始地址的位置;
确定sourceBuffer Y通道的第y+2行的局部Y通道数据以后,可以将该第y+2行的局部Y通道数据从sourceBuffer拷贝到areaBuffer的Y通道的第2行,以第0列作为起始地址的位置;
以此类推,直到循环的行数为viewH行,从而完成了areaBuffer的Y通道的数据填充。
步骤206,从该完整图像帧的U通道数据中确定与所述目标直播区域信息匹配的局部U通道数据,并将所述局部U通道数据拷贝至所述areaBuffer中。
步骤207,从该完整图像帧的V通道数据中确定与所述目标直播区域信息匹配的局部V通道数据,并将所述局部V通道数据拷贝至所述areaBuffer中。
步骤206及步骤207中进行areaBuffer的U通道及V通道的数据填充的过程与步骤205的Y通道的数据填充过程基本类似,相同之处可以参照步骤205的描述。不同之处可以体现为:针对I420的格式,U和V平面是Y平面的一半高度一半宽度,因此相关计算中,需要将Y通道的对应参数值取一半,即offsetTop=(y+1)/2;offsetLeft=(x+1)/2;length=(viewW+1)/2,循环次数=(viewH+1)/2。以此避免超出长度造成系统崩溃。
步骤208,将所述areaBuffer中得到的局部图像帧编码成流媒体数据,并将所述流媒体数据发送至服务器中,以由所述服务器将所述流媒体数据发送至观众客户端中。
当areaBuffer中Y通道、U通道以及V通道的数据都填充完毕以后,则可以得到局部图像帧,然后可以将该局部图像帧传送至主播客户端所在终端的编码模块或编码器中进行编码,得到流媒体数据,并通过RTMP协议将该流媒体数据推到服务器,以完成推流过程,则服务器可以将该流媒体数据经过处理后下发至一个或多个观众客户端中进行播放。
在本申请实施例中,当获取用户指定的想要进行直播的局部屏幕区域的目标直播区域信息以后,可以通过创建areaBuffer,并从存储完整图像帧的sourceBuffer中的Y、U、V三个通道中分别确定局部Y通道数据、局部U通道数据、局部V通道数据拷贝到areaBuffer中,从而完成在IOS系统中自定义直播区域的过程,打破了传统的airplay直播及ReplayKit框架不支持自定义区域进行直播的局限,丰富了直播的多样化,提高了主播用户的直播体验。
与前述方法的实施例相对应,本申请还提供了直播装置实施例。
本申请的装置实施例可以应用在终端设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图5所示,为本申请的装置所在设备的一种硬件结构图,除了图5所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的设备通常根据该装置的实际功能,还可以包括其他硬件,对此不再赘述。
请参考图6,示出了本申请一示例性实施例示出的一种直播装置实施例的结构框图,所述装置包括如下模块:
目标直播区域信息获取模块301,用于获取目标直播区域信息,所述目标直播区域信息包括用户指定的想要进行直播的局部屏幕区域的目标起始坐标和目标大小;
目标帧缓冲区创建模块302,用于创建与所述目标大小对应的目标帧缓冲区;
局部图像数据确定模块303,用于从对整张屏幕进行录屏得到的完整图像帧中,确定与所述目标直播区域信息匹配的局部图像数据;
局部图像数据拷贝模块304,用于将所述局部图像数据拷贝至所述目标帧缓冲区中,生成局部图像帧;
编码模块305,用于将所述目标帧缓冲区中的局部图像帧编码成流媒体数据;
推流模块306,用于将所述流媒体数据发送至服务器中,以由所述服务器将所述流媒体数据发送至观众客户端中。
在本申请的一种可能的实施方式中,所述装置还包括如下模块:
录屏模块,用于对整张屏幕进行录屏,得到完整图像帧;
完整图像帧存储模块,用于将所述完整图像帧存储在源帧缓冲区中,所述源帧缓冲区的大小等于整张屏幕的大小。
在本申请的一种可能的实施方式中,所述局部屏幕区域的目标大小包括宽度viewW以及高度viewH;
所述局部图像数据确定模块303包括如下子模块:
坐标定位子模块,用于在完整图像帧中定位所述目标起始坐标;
局部图像数据确定子模块,用于从定位的所述目标起始坐标开始,确定宽度为viewW,高度为viewH的数据为局部图像数据。
在本申请的一种可能的实施方式中,所述局部图像数据包括局部Y通道数据、局部U通道数据以及局部V通道数据;
所述局部图像数据确定子模块包括:
局部Y通道数据确定单元,用于从该完整图像帧的Y通道数据中确定与所述目标直播区域信息匹配的局部Y通道数据;以及
局部U通道数据确定单元,用于从该完整图像帧的U通道数据中确定与所述目标直播区域信息匹配的局部U通道数据;以及
局部V通道数据确定单元,用于从该完整图像帧的V通道数据中确定与所述目标直播区域信息匹配的局部V通道数据。
在本申请的一种可能的实施方式中,所述目标起始坐标为(x,y),
所述局部Y通道数据确定单元具体用于:
获取该完整图像帧的Y通道的起始地址数值指针,以及该Y通道的每行具有的字节数;
从第y行开始,以第x列作为提取数据的起始地址,以viewW个字节长度作为各行提取的字节数,确定各行的局部Y通道数据,其中,提取的局部Y通道数据的行数为viewH;
所述局部图像数据拷贝模块304具体用于:
分别将提取的各行局部Y通道数据拷贝到所述目标帧缓冲区中Y通道的以第0行开始,以第0列作为起始地址的位置。
在本申请的一种可能的实施方式中,所述装置还包括:
缓冲区复用模块,用于将下一帧完整图像帧对应的局部图像数据存储至所述目标帧缓冲区,以复用所述目标帧缓冲区。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述方法实施例的步骤。
本申请还提供了一种终端设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法实施例的步骤。
本说明书中描述的主题及功能操作的实施例可以在以下中实现:数字电子电路、有形体现的计算机软件或固件、包括本说明书中公开的结构及其结构性等同物的计算机硬件、或者它们中的一个或多个的组合。本说明书中描述的主题的实施例可以实现为一个或多个计算机程序,即编码在有形非暂时性程序载体上以被数据处理装置执行或控制数据处理装置的操作的计算机程序指令中的一个或多个模块。可替代地或附加地,程序指令可以被编码在人工生成的传播信号上,例如机器生成的电、光或电磁信号,该信号被生成以将信息编码并传输到合适的接收机装置以由数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备、或它们中的一个或多个的组合。
本说明书中描述的处理及逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机执行,以通过根据输入数据进行操作并生成输出来执行相应的功能。所述处理及逻辑流程还可以由专用逻辑电路—例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)来执行,并且装置也可以实现为专用逻辑电路。
适合用于执行计算机程序的计算机包括,例如通用和/或专用微处理器,或任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器和/或随机存取存储器接收指令和数据。计算机的基本组件包括用于实施或执行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如磁盘、磁光盘或光盘等,或者计算机将可操作地与此大容量存储设备耦接以从其接收数据或向其传送数据,抑或两种情况兼而有之。然而,计算机不是必须具有这样的设备。此外,计算机可以嵌入在另一设备中,例如车载终端、移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏操纵台、全球定位系统(GPS)接收机、或例如通用串行总线(USB)闪存驱动器的便携式存储设备,仅举几例。
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、媒介和存储器设备,例如包括半导体存储器设备(例如EPROM、EEPROM和闪存设备)、磁盘(例如内部硬盘或可移动盘)、磁光盘以及CD ROM和DVD-ROM盘。处理器和存储器可由专用逻辑电路补充或并入专用逻辑电路中。
虽然本说明书包含许多具体实施细节,但是这些不应被解释为限制任何发明的范围或所要求保护的范围,而是主要用于描述特定发明的具体实施例的特征。本说明书内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。
由此,主题的特定实施例已被描述。其他实施例在所附权利要求书的范围以内。在某些情况下,权利要求书中记载的动作可以以不同的顺序执行并且仍实现期望的结果。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (10)
1.一种直播的方法,其特征在于,所述方法包括:
获取目标直播区域信息,所述目标直播区域信息包括用户指定的想要进行直播的局部屏幕区域的目标起始坐标和目标大小;
创建与所述目标大小对应的目标帧缓冲区;
从对整张屏幕进行录屏得到的完整图像帧中,确定与所述目标直播区域信息匹配的局部图像数据,并将所述局部图像数据拷贝至所述目标帧缓冲区中,生成局部图像帧;
将所述目标帧缓冲区中的局部图像帧编码成流媒体数据,并将所述流媒体数据发送至服务器中,以由所述服务器将所述流媒体数据发送至观众客户端中。
2.根据权利要求1所述的方法,其特征在于,在所述从获取的当前完整图像帧中确定与所述目标直播区域信息匹配的局部图像数据之前,还包括:
对整张屏幕进行录屏,得到完整图像帧;
将所述完整图像帧存储在源帧缓冲区中,所述源帧缓冲区的大小等于整张屏幕的大小。
3.根据权利要求1或2所述的方法,其特征在于,所述局部屏幕区域的目标大小包括宽度viewW以及高度viewH;
所述确定与所述目标直播区域信息匹配的局部图像数据,包括:
在完整图像帧中定位所述目标起始坐标;
从定位的所述目标起始坐标开始,确定宽度为viewW,高度为viewH的数据为局部图像数据。
4.根据权利要求3所述的方法,其特征在于,所述局部图像数据包括局部Y通道数据、局部U通道数据以及局部V通道数据;
所述从定位的所述目标起始坐标开始,确定宽度为viewW,高度为viewH的数据为局部图像数据,包括:
从该完整图像帧的Y通道数据中确定与所述目标直播区域信息匹配的局部Y通道数据;以及
从该完整图像帧的U通道数据中确定与所述目标直播区域信息匹配的局部U通道数据;以及
从该完整图像帧的V通道数据中确定与所述目标直播区域信息匹配的局部V通道数据。
5.根据权利要求4所述的方法,其特征在于,所述目标起始坐标为(x,y),
所述从该完整图像帧的Y通道数据中确定与所述目标直播区域信息匹配的局部Y通道数据,包括:
获取该完整图像帧的Y通道的起始地址数值指针,以及该Y通道的每行具有的字节数;
从第y行开始,以第x列作为提取数据的起始地址,以viewW个字节长度作为各行提取的字节数,确定各行的局部Y通道数据,其中,提取的局部Y通道数据的行数为viewH;
所述将所述局部图像数据拷贝至所述目标帧缓冲区中,包括:
分别将提取的各行局部Y通道数据拷贝到所述目标帧缓冲区中Y通道的以第0行开始,以第0列作为起始地址的位置。
6.根据权利要求1所述的方法,其特征在于,在所述将所述流媒体数据发送至服务器之后,所述方法还包括:
将下一帧完整图像帧对应的局部图像数据存储至所述目标帧缓冲区,以复用所述目标帧缓冲区。
7.一种直播装置,其特征在于,所述装置包括:
目标直播区域信息获取模块,用于获取目标直播区域信息,所述目标直播区域信息包括用户指定的想要进行直播的局部屏幕区域的目标起始坐标和目标大小;
目标帧缓冲区创建模块,用于创建与所述目标大小对应的目标帧缓冲区;
局部图像数据确定模块,用于从对整张屏幕进行录屏得到的完整图像帧中,确定与所述目标直播区域信息匹配的局部图像数据;
局部图像数据拷贝模块,用于将所述局部图像数据拷贝至所述目标帧缓冲区中,生成局部图像帧;
编码模块,用于将所述目标帧缓冲区中的局部图像帧编码成流媒体数据;
推流模块,用于将所述流媒体数据发送至服务器中,以由所述服务器将所述流媒体数据发送至观众客户端中。
8.根据权利要求7所述的方法,其特征在于,所述局部屏幕区域的目标大小包括宽度viewW以及高度viewH;
所述局部图像数据确定模块包括:
坐标定位子模块,用于在完整图像帧中定位所述目标起始坐标;
局部图像数据确定子模块,用于从定位的所述目标起始坐标开始,确定宽度为viewW,高度为viewH的数据为局部图像数据。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现权利要求1-6任一项所述方法的步骤。
10.一种终端设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1-6任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910203858.0A CN109862385B (zh) | 2019-03-18 | 2019-03-18 | 直播的方法、装置、计算机可读存储介质及终端设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910203858.0A CN109862385B (zh) | 2019-03-18 | 2019-03-18 | 直播的方法、装置、计算机可读存储介质及终端设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109862385A true CN109862385A (zh) | 2019-06-07 |
CN109862385B CN109862385B (zh) | 2022-03-01 |
Family
ID=66901096
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910203858.0A Active CN109862385B (zh) | 2019-03-18 | 2019-03-18 | 直播的方法、装置、计算机可读存储介质及终端设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109862385B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112637624A (zh) * | 2020-12-14 | 2021-04-09 | 广州繁星互娱信息科技有限公司 | 直播流处理方法、装置、设备及存储介质 |
CN115225881A (zh) * | 2021-04-19 | 2022-10-21 | 广州视源电子科技股份有限公司 | 一种数据传输方法、装置、设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016085498A1 (en) * | 2014-11-26 | 2016-06-02 | Hewlett-Packard Development Company, L.P. | Virtual representation of a user portion |
CN106406710A (zh) * | 2016-09-30 | 2017-02-15 | 维沃移动通信有限公司 | 一种录制屏幕的方法及移动终端 |
CN106488301A (zh) * | 2015-08-25 | 2017-03-08 | 北京新唐思创教育科技有限公司 | 一种录屏方法和装置及视频播放方法和装置 |
CN106598380A (zh) * | 2016-11-04 | 2017-04-26 | 宇龙计算机通信科技(深圳)有限公司 | 录屏方法、装置及终端 |
CN108924452A (zh) * | 2018-06-12 | 2018-11-30 | 西安艾润物联网技术服务有限责任公司 | 局部录屏方法、装置及计算机可读存储介质 |
CN108989830A (zh) * | 2018-08-30 | 2018-12-11 | 广州虎牙信息科技有限公司 | 一种直播方法、装置、电子设备及存储介质 |
-
2019
- 2019-03-18 CN CN201910203858.0A patent/CN109862385B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016085498A1 (en) * | 2014-11-26 | 2016-06-02 | Hewlett-Packard Development Company, L.P. | Virtual representation of a user portion |
CN106488301A (zh) * | 2015-08-25 | 2017-03-08 | 北京新唐思创教育科技有限公司 | 一种录屏方法和装置及视频播放方法和装置 |
CN106406710A (zh) * | 2016-09-30 | 2017-02-15 | 维沃移动通信有限公司 | 一种录制屏幕的方法及移动终端 |
CN106598380A (zh) * | 2016-11-04 | 2017-04-26 | 宇龙计算机通信科技(深圳)有限公司 | 录屏方法、装置及终端 |
CN108924452A (zh) * | 2018-06-12 | 2018-11-30 | 西安艾润物联网技术服务有限责任公司 | 局部录屏方法、装置及计算机可读存储介质 |
CN108989830A (zh) * | 2018-08-30 | 2018-12-11 | 广州虎牙信息科技有限公司 | 一种直播方法、装置、电子设备及存储介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112637624A (zh) * | 2020-12-14 | 2021-04-09 | 广州繁星互娱信息科技有限公司 | 直播流处理方法、装置、设备及存储介质 |
CN115225881A (zh) * | 2021-04-19 | 2022-10-21 | 广州视源电子科技股份有限公司 | 一种数据传输方法、装置、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109862385B (zh) | 2022-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109327741B (zh) | 游戏直播方法、装置和系统 | |
WO2016150317A1 (zh) | 直播视频的合成方法、装置及系统 | |
CN109525853B (zh) | 直播间封面展示方法、装置、终端、服务器及可读介质 | |
CN104883516B (zh) | 一种制作实时演唱视频的方法及系统 | |
CN105450642B (zh) | 一种基于在线直播的数据处理方法、相关装置及系统 | |
CN108989830A (zh) | 一种直播方法、装置、电子设备及存储介质 | |
CN106331877B (zh) | 弹幕播放方法及装置 | |
CN1127260C (zh) | 与视频/音频播放协同的视频/音频及图形演示方法和系统 | |
CN106131700B (zh) | 一种视频直播时的文件分享方法及装置 | |
CN107027046B (zh) | 辅助直播的音视频处理方法及装置 | |
WO2019214371A1 (zh) | 图像的显示方法、生成方法、装置、存储介质及电子装置 | |
CN105072475B (zh) | 一种电视互动系统生成互动信息的方法及装置 | |
CN106162357B (zh) | 获取视频内容的方法及装置 | |
CN108282598A (zh) | 一种软件导播系统及方法 | |
WO2019114330A1 (zh) | 一种视频播放方法、装置和终端设备 | |
CN104504447A (zh) | 一种分配虚拟座位图像的方法及装置 | |
CN107484011A (zh) | 一种视频资源解码方法及装置 | |
CN109218754A (zh) | 一种直播中的信息显示方法、装置、设备及介质 | |
CN105138216A (zh) | 一种在虚拟座位上显示观众互动信息的方法及装置 | |
CN103618952B (zh) | 一种智能电视开机动画的播放方法和智能电视 | |
CN105704399A (zh) | 多画面电视节目的播出方法和系统 | |
CN110012336A (zh) | 直播界面的图片配置方法、终端及装置 | |
CN109862385A (zh) | 直播的方法、装置、计算机可读存储介质及终端设备 | |
CN106792244A (zh) | 视频直播方法及装置 | |
CN108989855A (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 |