技术领域
[0001] 本
申请涉及媒体处理技术领域,具体地说,涉及一种对终端进行流媒体采集自动识别方向并调整的方法及系统。
背景技术
[0002] 互联网的普及和多媒体技术在互联网商的应用,迫切要求能解决实时传送视频、音频、计算机动画等媒体文件的技术,在这种背景下,产生了
流式传输技术及流媒体。通俗的讲,流式传输技术是指在互联网的视音频
服务器将声音、图像或动画等媒体文件从服务器向客户端是实时连续传输时,用户不必等待全部媒体文件下载完毕,而只需延迟几秒或十几秒,就可以在用户的计算机或其他播放终端上播放,而文件的其余部分则由用户在后台继续播放,直至播放完毕或用户终止操作。这种技术使用户在播放视音频或动画等媒体的等待时间成百倍的减少,而且不需要太多的缓存。而流媒体是采用流式传输的方式在Internet播放的连续时基媒体,如音频、视频或多媒体文件,比如,商家用一个视频传送服务器把节目当成数据包发出,传送到网络上,用户通过解压设备对这些数据进行解压后,节目就会像发送前的那样显示出来。流媒体的出现极大地方便了人民的工作和生活。流媒体技术广泛地应用于视频直播、
视频点播等多个领域,包括源
信号采集、压缩编码、流媒体传输、播出等多个环节的处理。
[0003]
现有技术中,利用手机等移动拍摄终端可以方便地采集、上传、直播流媒体文件。在采用手机等移动拍摄终端采集流媒体文件的过程中,由于场景的变化,往往需要采用不同的方向拍摄,例如横屏拍摄、竖屏拍摄等,这就需要将拍摄终端本身的方向进行旋转,从而导致以下问题:
[0004] 由于采集的图像无法旋转,在播放视频文件时,就会出现拍摄的内容在屏幕中旋转的现象,从而无法满足正常观看和播放的
质量要求。
[0005] 采用拍摄终端录制MP4视频时,虽然可以在信息头中加入composition matrix,在播放视频时可利用此信息进行旋转,但此种方式只能进行第一次方向改变的判断,若视频中途进行一次以上手机拍摄
角度的转换时,该方式仍无法解决拍摄内容在屏幕中旋转的问题,因而还是无法满足正常观看和播放的质量要求。
发明内容
[0006] 有鉴于此,本申请所要解决的技术问题是提供了一种的对终端进行流媒体采集自动识别方向并调整的方法及系统,解决现有技术中利用手机等拍摄终端采集视频的过程中,由于手机本身方向发生旋转而导致播放所采集的视频时,视频内的图像也出现旋转的问题,保证视频能够流畅且正常地播放显示。
[0007] 为了解决上述技术问题,本申请有如下技术方案:
[0008] 本发明提供一种对终端进行流媒体采集自动识别方向并调整的方法,包括:
[0010] 获取所述终端相对于终端基准的旋转角度A1以及所述终端上摄像头相对于终端基准的旋转角度A2;
[0011] 根据所述终端相对于终端基准的旋转角度A1以及所述终端上摄像头相对于终端基准的旋转角度A2计算得到视频图像的旋转角度A3;
[0012] 对所述原始视频流进行编码,形成
视频帧编码数据;
[0013] 在所述视频帧编码数据的编码头文件中加入所述视频图像的旋转角度信息,形成带有旋转角度信息的码流;
[0014] 将形成的所述带有旋转角度信息的码流上传至服务器;
[0015] 客户端从所述服务器获取所述码流,对所述码流进行解码,获得所述视频图像的旋转角度信息和视频流;
[0016] 对所述旋转角度信息进行解析,并将解析出的信息及解码出的视频流一同发送至显示
渲染模
块;
[0017] 所述显示渲染模块对视频图像进行
加速旋转处理,使视频图像正常显示。
[0018] 优选地,其中,所述视频图像为所述终端的前置摄像头显示的图像,所述视频图像的旋转角度A3通过以下公式计算得到:
[0019] A3=(A2-A1+360)%360。
[0020] 优选地,其中,所述视频图像为所述终端的后置摄像头显示的图像,所述视频图像的旋转角度A3通过以下公式计算得到:
[0021] A3=(A2+A1)%360。
[0022] 优选地,其中所述显示渲染模块对视频图像进行加速旋转处理,使视频图像正常显示,进一步为:
[0023] 所述显示渲染模块利用OpenGL ES(OpenGL for Embedded Systems)对视频图像在显存内进行加速旋转渲染处理,使视频图像正常显示。
[0024] 本发明还提供一种对终端进行流媒体采集自动识别方向并调整的系统,包括:采集模块、
传感器模块、计算模块、编码模块、通讯模块、解码模块、解析模块以及显示渲染模块;其中,
[0025] 采集模块,用于采集原始视频流;
[0026] 传感器模块,用于获取所述终端相对于终端基准的旋转角度A1以及所述终端上摄像头相对于终端基准的旋转角度A2;
[0027] 计算模块,用于根据所述终端相对于终端基准的旋转角度A1以及所述终端上摄像头相对于终端基准的旋转角度A2计算得到视频图像的旋转角度A3;
[0028] 编码模块,对所述原始视频流进行编码,形成视频帧编码数据,并在所述视频帧编码数据的编码头文件中加入所述视频图像的旋转角度信息,形成带有旋转角度信息的码流;
[0029] 通讯模块,用于将形成的所述带有旋转角度信息的码流上传至服务器;
[0030] 解码模块,用于将从所述服务器获取的码流进行解码,获得所述视频图像的旋转角度信息和视频流;
[0031] 解析模块,用于对所述旋转角度信息进行解析,并将解析出的信息及解码出的视频流一同发送至显示渲染模块;
[0032] 显示渲染模块,用于对视频图像进行加速旋转,使视频图像正常显示。
[0033] 与现有技术相比,本申请所述的方法和系统,达到了如下效果:
[0034] 第一,在利用拍摄终端进行视频采集的过程中,本发明中的传感器模块能够获取到拍摄终端本身及拍摄终端上摄像头相对于终端基准的旋转角度,计算模块能够计算出播放的视频图像的旋转角度,在对视频信息进行上传编码的过程中,本发明在编码的头文件中加入视频图像的旋转角度信息,客户端从服务器获取并播放视频的过程中,对上述旋转角度进行解析,并能根据该旋转角度对视频图像进行加速旋转处理,因此在视频采集的过程中随意旋转拍摄角度,都可以在播放端得到无需旋转、显示正常的视频图像。从而,本发明能够解决现有技术中利用手机等拍摄终端采集视频的过程中,由于手机本身方向发生旋转而导致播放所采集的视频时,视频内的图像出现旋转,无法正常显示的问题。
[0035] 第二,本发明所提供的方法及系统在进行流媒体采集的过程中能够自动识别方向并能够对方向进行调整,使最终播放的图像能够正常显示,而且对终端上摄像头的
位置无要求。以手机摄像头为例,无论是通过前置摄像头采集流媒体,还是利用后置摄像头采集,本发明均能准确计算出视频图像的旋转角度,根据该角度对图像进行加速旋转处理,均能够得到正常显示的视频图像。
[0036] 第三,本发明的显示渲染模块利用OpenGL ES对视频图像进行加速旋转处理,无需损耗CPU资源,该过程无资源损耗,可有效保证视频流畅且正常显示。
[0037] 第四,无论是实时直播还是录像点播,均可采用本发明所提供的方案对视频图像进行动态调整,使最终播放的视频图像能够正常显示。
附图说明
[0038] 此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性
实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0039] 图1为本发明的所述一种的对终端进行流媒体采集自动识别方向并调整的方法
流程图。
具体实施方式
[0040] 如在
说明书及
权利要求当中使用了某些词汇来指称特定组件。本领域技术人员应可理解,
硬件制造商可能会用不同名词来称呼同一个组件。本说明书及权利要求并不以名称的差异来作为区分组件的方式,而是以组件在功能上的差异来作为区分的准则。如在通篇说明书及权利要求当中所提及的“包含”为一开放式用语,故应解释成“包含但不限定于”。“大致”是指在可接收的误差范围内,本领域技术人员能够在一定误差范围内解决所述技术问题,基本达到所述技术效果。此外,“耦接”一词在此包含任何直接及间接的电性耦接手段。因此,若文中描述一第一装置耦接于一第二装置,则代表所述第一装置可直接电性耦接于所述第二装置,或通过其他装置或耦接手段间接地电性耦接至所述第二装置。说明书后续描述为实施本申请的较佳实施方式,然所述描述乃以说明本申请的一般原则为目的,并非用以限定本申请的范围。本申请的保护范围当视所附权利要求所界定者为准。
[0041] 图1所示为本申请所述一种的对终端进行流媒体采集自动识别方向并调整的方法的具体实施例,本实施例中所述方法包括以下步骤:
[0042] 步骤101、采集原始视频流;;
[0043] 步骤102、获取终端相对于终端基准的旋转角度A1以及终端上摄像头相对于终端基准的旋转角度A2;
[0044] 步骤103、根据终端相对于终端基准的旋转角度A1以及终端上摄像头相对于终端基准的旋转角度A2计算得到视频图像的旋转角度A3;
[0045] 步骤104、对原始视频流进行编码,形成视频帧编码数据;
[0046] 步骤105、在视频帧编码数据的编码头文件中加入视频图像的旋转角度信息,形成带有旋转角度信息的码流;
[0047] 步骤106、将形成的带有旋转角度信息的码流上传至服务器;
[0048] 步骤107、客户端从服务器获取码流,对码流进行解码,获得视频图像的旋转角度信息和视频流;
[0049] 步骤108、对旋转角度信息进行解析,并将解析出的信息及解码出的视频流一同发送至显示渲染模块;
[0050] 步骤109、显示渲染模块对视频图像进行加速旋转处理,使视频图像正常显示。
[0051] 本发明还提供一种对终端进行流媒体采集自动识别方向并调整的系统,包括:采集模块、传感器模块、计算模块、编码模块、通讯模块、解码模块、解析模块以及显示渲染模块;其中,
[0052] 采集模块,用于采集原始视频流;
[0053] 传感器模块,用于获取所述终端相对于终端基准的旋转角度A1以及所述终端上摄像头相对于终端基准的旋转角度A2;
[0054] 计算模块,用于根据所述终端相对于终端基准的旋转角度A1以及所述终端上摄像头相对于终端基准的旋转角度A2计算得到视频图像的旋转角度;
[0055] 编码模块,对所述原始视频流进行编码,形成视频帧编码数据,并在所述视频帧编码数据的编码头文件中加入所述视频图像的旋转角度信息,形成带有旋转角度信息的码流;
[0056] 通讯模块,用于将形成的所述带有旋转角度信息的码流上传至服务器;
[0057] 解码模块,用于将从所述服务器获取的码流进行解码,获得所述视频图像的旋转角度信息和视频流;
[0058] 解析模块,用于对所述旋转角度信息进行解析,并将解析出的信息及解码出的视频流一同发送至显示渲染模块;
[0059] 显示渲染模块,用于对视频图像进行加速旋转,使视频图像正常显示。
[0060] 通过本发明所提供的对终端进行流媒体采集自动识别方向并调整的方法及系统,在利用拍摄终端进行视频采集的过程中,本发明中的传感器模块能够获取到拍摄终端本身及拍摄终端上摄像头相对于终端基准的旋转角度,计算模块能够计算出播放的视频图像的旋转角度,在对视频信息进行上传编码的过程中,本发明在编码的头文件中加入视频图像的旋转角度信息,客户端从服务器获取并播放视频的过程中,对上述旋转角度进行解析,并能根据该旋转角度对视频图像进行加速旋转处理,因此在视频采集的过程中随意旋转拍摄角度,都可以在播放端得到无旋转、显示正常的视频图像。从而,本发明能够解决现有技术中利用手机等拍摄终端采集视频的过程中,由于手机本身方向发生旋转而导致播放所采集的视频时,视频内的图像也出现旋转的问题。
[0061] 本发明中的终端可以是手机、
平板电脑、相机等可以进行视频录制的设备,也可是诸如摄像机的视频录制设备,可以是同时包括前置摄像头和后置摄像头的设备,也可是只有一个摄像头的设备。
[0062] 当采用前置摄像头采集视频时,视频图像的旋转角度A3可采用以下公式计算得到:
[0063] A3=(A2-A1+360)%360
[0064] 该公式中,A3代表视频图像的旋转角度,A2代表终端上前置摄像头相对与终端基准的旋转角度,A1代表终端相对于终端基准的旋转角度。
[0065] 当采用后置摄像头采集视频时,视频图像的旋转角度A3可采用以下公式计算得到:
[0066] A3=(A2+A1)%360
[0067] 该公式中,A3代表视频图像的旋转角度,A2代表终端上后置摄像头相对于终端基准的旋转角度,A1代表终端相对于终端基准的旋转角度。
[0068] 以通过手机捕捉视频为例,假设手机设备是tall类型的(宽比高大)目前主流手机都为此类型,手机摄像头相对于手机基准的旋转角度A2是固定的,由于摄像头与手机基准角度是固定的,故无论如何旋转都是固定的,对于后置摄像头为90度,前置摄像头270度,手机基准角度是竖直方向,即竖直放置为0度,此时顺
时针方向旋转的90度、180度、或270度表示A1,假设顺时针旋转了180度,
[0069] 对于后置摄像头而言,视频图像的旋转角度通过下式计算得到:
[0070] A3=(A2+A1)%360=(180+90)%360=270
[0071] 对于前置摄像头而言,视频图像的旋转角度通过下式计算得到:
[0072] A3=(A2–A1+360)%360=(90-180+360)%360=90
[0073] 无论是通过前置摄像头采集流媒体,还是利用后置摄像头采集,本发明均能准确计算出视频图像的旋转角度,根据该角度对图像进行加速旋转处理,均能够得到正常显示的视频图像,因而,本发明中的方法及系统在进行流媒体采集的过程中能够自动识别方向并能够对方向进行调整,使最终播放的图像能够正常显示,而且对终端上摄像头的位置无要求。
[0074] 本发明中的显示渲染模块可利用OpenGL ES对视频图像进行显存加速旋转渲染处理,渲染部分利用GPU加速,OpenGL ES跨平台图形API以及Shader编程技术实现显存内图像的旋转,直接进行GPU运算,节省CPU资源还可有效保证视频流畅且正常显示。其中,OpenGL为Open Graphics Library的缩写,是个定义了一个跨编程语言、跨平台的编程
接口规格的专业的图形程序接口;GPU是Graphics Processing Unit的缩写,代表图形处理器,又称显示核心、视觉处理器、显示芯片,是一种专
门在个人电脑、工作站、
游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的
微处理器。
[0075] 下面以手机为例,对本发明进行举例说明:
[0076] 1)利用手机采集流媒体时,采集的视频应正确旋转的角度可由以下公式得到,其中orientation表示手机设备与设备基准之间的方向,camerainfo.orientation表示摄像头与设备基准之间的方向,两者值均可由手机的传感器获取得到。以下公式1得到的是手机前置摄像头最终设置的视频图像的显示方向,公式2得到的是手机后置摄像头最终设置的视频图像的显示方向。
[0077] 公式1:rotation=(camerainfo.orientation-orientation+360)%360;
[0078] 公式2:rotation=(camerainfo.orientation+orientation)%360;
[0079] 2)对手机进行流媒体采集自动识别方向并调整的具体步骤如下:
[0080] ①视频采集过程中由传感器获取得到具体显示应旋转的方向角度,由前述1)的内容得到。
[0081] ②在视频帧编码数据生成的H.264码流中加入旋转角度,采用NAL保留扩展类型16(十六进制为0x10),如:旋转角度为180度,则每帧码流中最前端加入00 00 00 01 10 00 B4,由于旋转角度范围0-360,故采用两字节方式(00 B4)即可表示其角度,将采集到的带有旋转角度的码流上传至
云服务端。H.264的功能分为两层,
视频编码层(VCL)和网络提取层(NAL),VCL数据即被压缩编码后的视频数据序列。在VCL数据要封装到NAL单元中之后,才可以用来传输或存储。
[0082] ③客户端播放云服务端视频时首先解析其H.264码流中的旋转角度,解析方法由上述的逆方法获取,在显示渲染时将此角度交由OpenGL进行旋转显示,由此得到正确的显示图像。
[0083] 由于每帧都保存其旋转信息,故采集过程中随意旋转拍摄角度,都可以在播放端解析调整,播放端可以自适应随之自动旋转,进而调整为正确的图像显示。录播方式与直播方式类似,也需将旋转信息存入每帧的码流中,在播放时将其信息进行解析进而调整显示。
[0084] 本领域内的技术人员应明白,本申请的实施例可提供为方法、装置、或
计算机程序产品。因此,本申请可采用完全硬件实施例、完全
软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘
存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0085] 上述说明示出并描述了本申请的若干优选实施例,但如前所述,应当理解本申请并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、
修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本申请的精神和范围,则都应在本申请所附权利要求的保护范围内。