[0052] {
[0053] uint8x8_tsrcData=vld1_u8(pData);
[0054] uint8x8_tmulData=vld1_u8(pMul);
[0055] uint8x8_t Result=vmul_u8(srcData,mulData);
[0056] }
[0057] }
[0058] 其中,pData和pMul为两个数组形式的原始数据,数据类型为uint8_t*类型;nDataLen为原始数据的长度,数据类型为uint32_t类型。For循环体中的“uint8x8_t srcData=vld1_u8(pData)”用于实现将数组形式的原始数据pData转换成一个8位的向量srcData,向量srcData的每个元素的数据类型为uint8_t类型;For循环体中的“uint8x8_t mulData=vld1_u8(pMul)”用于实现将数组形式的原始数据pMul转换成一个8位的向量mulData,向量mulData的每个元素的数据类型为uint8_t类型;For循环体中的“uint8x8_t Result=vmul_u8(srcData,mulData)”用于实现将向量srcData和向量mulData通过NEON指令中的乘法指令VMUL进行相乘操作。
[0059] 经过上述操作可以看出,利用设置好的乘法运算操作执行乘法运算时,每次都是同时对N个(N为8个、16个、32个或64个)数值相减,相当于一次性的减了N个数,从而达到了单指令多数据流操作的并行运算目的,运算速度上至少快了N倍。
[0060] 4、设置左移运算操作,使得左移运算操作在执行左移运算时按照以下方式进行:将需要左移的数据以及左移位数的数据以数组形式保存;分别将两个数组形式的数据转换成指定位数的向量;利用NEON指令中的左移指令VSHL,将需要左移的数据所对应的向量按照左移位数的数据所对应的向量进行左移操作。
[0061] 还是以转换成8位的向量为例,所设置的左移运算操作对应的函数代码可如下:
[0062]
[0063] 其中,pData为数组形式的需要左移的数据,数据类型为uint8_t*类型;pLeft为数组形式的左移位数的数据,数据类型也为uint8_t*类型。For循环体中的“uint8x8_t srcData=vld1_u8(pData)”用于实现将数组形式的需要左移的数据pData转换成一个8位的向量srcData,向量srcData的每个元素的数据类型为uint8_t类型;For循环体中的“uint8x8_t leftData=vld1_u8(pLeft)”用于实现将数组形式的左移位数的数据pLeft转换成一个8位的向量leftData,向量leftData的每个元素的数据类型为uint8_t类型;For循环体中的“uint8x8_t Result=vshl_u8(srcData,leftData)”用于实现利用NEON指令中的左移指令VSHL,将需要左移的数据所对应的向量按照左移位数的数据所对应的向量进行左移操作。
[0064] 经过上述操作可以看出,利用设置好的左移运算操作执行左移运算时,每次都是同时对N个(N为8个、16个、32个或64个)数值进行左移,相当于一次性的左移了N个数,从而达到了单指令多数据流操作的并行运算目的,运算速度上至少快了N倍。
[0065] 5、设置右移运算操作,使得右移运算操作在执行右移运算时按照以下方式进行:将需要右移的数据以及右移位数的数据以数组形式保存;分别将两个数组形式的数据转换成指定位数的向量;利用NEON指令中的右移指令VSHR,将需要右移的数据所对应的向量按照右移位数的数据所对应的向量进行右移操作。
[0066] 还是以转换成8位的向量为例,所设置的右移运算操作对应的函数代码可如下:
[0067]
[0068]
[0069] 其中,pData为数组形式的需要右移的数据,数据类型为uint8_t*类型;pRight为数组形式的右移位数的数据,数据类型也为uint8_t*类型。For循环体中的“uint8x8_t srcData=vld1_u8(pData)”用于实现将数组形式的需要右移的数据pData转换成一个8位的向量srcData,向量srcData的每个元素的数据类型为uint8_t类型;For循环体中的“uint8x8_t rightData=vld1_u8(pRight)”用于实现将数组形式的右移位数的数据pRight转换成一个8位的向量rightData,向量rightData的每个元素的数据类型为uint8_t类型;For循环体中的“uint8x8_tResult=vshr_u8(srcData,rightData)”用于实现利用NEON指令中的左移指令VSHR,将需要右移的数据所对应的向量按照右移位数的数据所对应的向量进行右移操作。
[0070] 经过上述操作可以看出,利用设置好的右移运算操作执行右移运算时,每次都是对N个(N为8个、16个、32个或64个)数值进行右移,相当于同时一次性的右移了N个数,从而达到了单指令多数据流操作的并行运算目的,运算速度上至少快了N倍。
[0071] 6、设置异或运算操作,使得异或运算操作在执行异或运算时按照以下方式进行:将需要异或的两个原始数据以数组形式保存;分别将两个数组形式的原始数据转换成指定位数的向量;利用NEON指令中的按位异或指令VEOR将两个转换成指定位数的向量进行异或。
[0072] 还是以转换成8位的向量为例,所设置的异或运算操作对应的函数代码可如下:
[0073]
[0074]
[0075] 其中,pData和pEor为两个数组形式的原始数据,数据类型为uint8_t*类型;nDataLen为原始数据的长度,数据类型为uint32_t类型。For循环体中的“uint8x8_t srcData=vld1_u8(pData)”用于实现将数组形式的原始数据pData转换成一个8位的向量srcData,向量srcData的每个元素的数据类型为uint8_t类型;For循环体中的“uint8x8_t eorData=vld1_u8(pEor)”用于实现将数组形式的原始数据pEor转换成一个8位的向量eorData,向量eorData的每个元素的数据类型为uint8_t类型;For循环体中的“uint8x8_t Result=veor_u8(srcData,eorData)”用于实现将向量srcData和向量eorData通过NEON指令中的按位异或指令VEOR进行异或操作。
[0076] 经过上述操作可以看出,利用设置好的异或运算操作执行异或运算时,每次都是同时对N个(N为8个、16个、32个或64个)数值进行一一异或,相当于并行进行了N次异或,从而达到了单指令多数据流操作的并行运算目的,运算速度上至少快了N倍。
[0077] 步骤S2、鉴权数据加密算法的构造:在每个客户端中利用随机选择的基本运算操作构造出相同的鉴权数据加密算法。
[0078] 可以理解的是,由于在每个客户端中都是利用随机选择的相同的基本运算操作来构造鉴权数据加密算法的,因此每个客户端中构造出的鉴权数据加密算法是相同的,例如,随机选择的基本运算操作为加法操作,则每个客户端均是利用加法操作来构造鉴权数据加密算法。另外,可以理解的是,有了用于构造鉴权数据加密算法的基本运算操作,并且这些基本运算操作都是使用的NEON指令来操作,那么构造的鉴权数据加密算法最终也会是基于NEON指令的。举例来说,在每个客户端中利用随机选择的基本算术运算操作构造出相同的鉴权数据加密算法的过程为:
[0079] 假设每个客户端登录到直播平台服务器时,会从直播平台服务器获取到两个原始数据:pData和pKey。其中,pData=“first page test hit 1234566....”,为一串很长的字符串;pKey=“abcdef1234567899......”,也是一长串的字符串。那么,在每个客户端中利用随机选择的基本运算操作来构成相同的鉴权数据加密算法时,可选择相同的加法运算操作构成鉴权数据加密算法,即选择函数AddEncode(pData,pKey,nDataLen)来作为鉴权数据加密算法,此时鉴权数据加密算法则实现的是对两个原始数据pData和pKey进行相加操作来加密。同样的,还可以随机选择左移运算操作、异或运算操作、右移运算操作等来构造鉴权数据加密算法。
[0080] 进一步的,可以理解的是,上述步骤S2中随机选择的基本运算操作可以为单个基本运算操作,也可以为多个基本运算操作。当随机选择多个基本运算操作进行
叠加构成鉴权数据加密算法时,能够进一步提高鉴权数据加密算法被破解的门槛,从而更有效的避免鉴权数据加密算法被恶意破解。
[0081] 举例来说,当随机选择多个基本运算操作进行叠加构成鉴权数据加密算法时,所选择的多个基本运算操作为:先对两个原始数据进行加法运算操作,然后进行左移运算操作,再进行减法操作。则相应构成的鉴权数据加密算法的函数代码为:
[0082] Void Encode(uint8_t*pData,uint32_t pDataLen,uint8_t*pKey)[0083] {
[0084] AddEncode(pData,pKey,nDataLen);
[0085] LeftEncode(pData,pKey,nDataLen);
[0086] SubEncode(pData,pKey,nDataLen);
[0087] }
[0088] 步骤S3、鉴权加密数据的计算:当客户端(任意客户端)登录直播平台服务器并请求观看某个房间视频(即请求获取某个房间的视频流地址)时,直播平台服务器向其下发鉴权原始数据;客户端则使用步骤S2中构造出的鉴权数据加密算法对鉴权原始数据进行加密计算,得到鉴权加密数据后上报至直播平台服务器。
[0089] 可以理解的是,在一种实施方式中,步骤S3具体包括以下操作:
[0090] S301、当客户端登录直播平台服务器并请求观看某个房间视频时,直播平台服务器向其下发鉴权原始数据,该鉴权原始数据包括一段字符串数据,如pData;和一段KEY值,如pKey,也为字符串数据。
[0091] S302、客户端收到鉴权原始数据后,使用步骤S2中构造出的鉴权数据加密算法对鉴权原始数据进行加密,如使用鉴权数据加密算法Encode(pData,pDataLen,pKey),从而将鉴权原始数据使用了基于NEON指令设计的鉴权数据加密算法进行加密。
[0092] S303、客户端对加密后的数据进行HASH(哈希)值的计算,从而得到鉴权加密数据。本实施例中,使用MD5算法来进行HASH值的计算,如代码pdataMd5=MD5.Create(pData’,pDataLen),其中pdataMd5即为得到的鉴权加密数据。实际应用中,所使用的计算HASH值的算法可根据实际需要进行自行选择,此处不做限定。
[0093] S304、客户端将得到鉴权加密数据(如pdataMd5)经再次加密后上报至直播平台服务器。本实施例中,使用对称加密算法DES来对鉴权加密数据进行再次加密后上报至直播平台服务器;实际应用中,所使用的再次加密算法可根据实际需要进行自行选择,此处不做限定。
[0094] 步骤S4、鉴权加密数据的校验:直播平台服务器对客户端上报的鉴权加密数据进行校验,若校验通过,则下发相应视频流地址给客户端。
[0095] 可以理解的是,在一种实施方式中,步骤S4具体包括以下操作:
[0096] S401、直播平台服务器收到客户端加密上报的鉴权加密数据后,会对该数据进行解密,得到客户端经加密计算得到的鉴权加密数据。
[0097] S402、直播平台服务器将该鉴权加密数据与其他客户端上报的鉴权加密数据进行比对,如果一致,则校验通过,转入步骤S403;否则,校验不通过,转入步骤S404。可以理解的是,由于直播平台服务器下发的鉴权原始数据(如pData和pKey)是固定的,且每个客户端中构造出的鉴权数据加密算法也是相同的,那么所有的客户端计算的结果则应该是一致的(除非该客户端是异常客户端),因此服务器则可以将客户端上报的鉴权加密数据与其他客户端上报的鉴权加密数据进行比对,如果一致则说明客户端上报的数据是正确的,否则是异常的。当然,实际应用中,直播平台服务器也可以通过一台正常的设备运行鉴权数据加密算法后,上报的鉴权加密数据作为基准,然后对其他客户端上报的鉴权加密数据进行对比,如果一致则说明客户端上报的数据是正确的,否则是异常的。
[0098] S403、直播平台服务器向该客户端下发相应视频流地址。
[0099] S404、直播平台服务器不向该客户端下发任何视频流地址。
[0100] 可以理解的是,在另一种实施方式中,步骤S304中,客户端将得到鉴权加密数据(如pdataMd5)经再次加密后上报至直播平台服务器时,会将得到鉴权加密数据(如pdataMd5)与客户端登录时获得的TOKEN(令牌)、客户端的当前时间、客户端的设备唯一ID、客户端的当前IP地址以及客户端请求的房间号,一起经过加密后再发送到直播平台服务器。例如,可一起经过对称加密算法DES加密后发送到直播平台服务器,对应的加密过程函数代码可为:
[0101] desResult=DES.Encrypt(pdataMd5+Time+IP+DeviceID+Token+RoomID,KEY);其中,
[0102] pdataMd5则是客户端得到的鉴权加密数据;
[0103] Time则是客户端的当前时间;
[0104] IP则是客户端的当前IP地址;
[0105] DeviceID则是客户端的设备唯一ID;
[0106] Token则是客户端登录时获得的服务器下发的TOKEN;
[0107] RoomID则是客户端当前请求观看的房间号;
[0108] KEY则是直播平台服务器下发的鉴权原始数据中的KEY值,如pKey。
[0109] 在此基础上,步骤S4中,直播平台服务器对客户端上报的鉴权加密数据进行校验的同时,还会对客户端登录时获得的TOKEN、客户端的当前时间、客户端的设备唯一ID、客户端的当前IP地址以及客户端请求的房间号进行校验(校验上报的Token是否是正确的此客户端的Token、校验客户端的IP地址是否正确、校验客户端的当前时间是否和服务器的时间在一个范围内、校验客户端请求的房间号是否正确等),若上述校验均通过,则下发相应视频流地址给客户端;否则,不下发任何视频流地址。该实施方式中,在校验鉴权加密数据的同时,还增设有对客户端TOKEN、客户端时间、客户端ID、客户端IP地址以及客户端请求的房间号的校验操作,能从一定程度上进一步提高视频流地址鉴权的可靠性,从而有效防止黑客盗取视频流地址观看直播。
[0110] 进一步地,为了增加该视频流地址鉴权方法的复杂度,在一种实施方式中,可考虑针对每一个房间下发不同的鉴权原始数据(pdata和pkey),从而使得每个房间对应的鉴权加密数据(pdataMd5)的值是不一样的,从而进一步的增加了算法的复杂度。具体来说,步骤S3中,直播平台服务器向客户端下发鉴权原始数据时,会针对每一个房间下发不同的鉴权原始数据,即请求相同房间的客户端所收到的鉴权原始数据会是相同的,而请求不同房间的客户端所收到的鉴权原始数据会是不同的。在此基础上,步骤S402中,直播平台服务器是将客户端上报的鉴权加密数据与其他请求了相同房间的客户端上报的鉴权加密数据进行比对,如果一致,则校验通过,转入步骤S403;否则,校验不通过,转入步骤S404。
[0111] 对应上述的视频流地址鉴权方法,本发明实施例还提供一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时可实现上述各实施例中的视频流地址鉴权方法的步骤。需要说明的是,所述存储介质包括U盘、移动
硬盘、ROM(Read-Only Memory,
只读存储器)、RAM(Random Access Memory,
随机存取存储器)、磁碟或者光盘等各种可以存储程序代码的介质。
[0112] 另外,参见图2所示,对应上述的视频流地址鉴权方法,本发明实施例还提供一种视频流地址鉴权设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行计算机程序时可实现上述各实施例中的视频流地址鉴权方法的步骤。
[0113] 参见图3所示,本发明实施例还提供一种视频流地址鉴权系统,该系统包括设置于客户端的基本运算操作设置单元、鉴权数据加密算法构造单元、鉴权加密数据计算单元;以及设置于直播平台服务器的鉴权原始数据下发单元、鉴权加密数据校验单元。
[0114] 其中,基本运算操作设置单元用于:利用NEON指令中的逻辑运算指令,设置用于构造鉴权数据加密算法的基本运算操作;鉴权数据加密算法构造单元用于:利用随机选择的基本运算操作构造出鉴权数据加密算法,且构造出的鉴权数据加密算法与其他客户端构造出的鉴权数据加密算法相同;鉴权加密数据计算单元用于:使用构造出的鉴权数据加密算法对直播平台服务器下发的鉴权原始数据进行加密计算,得到鉴权加密数据后上报至直播平台服务器;鉴权原始数据下发单元用于:当客户端登录直播平台服务器并请求观看某个房间视频时,向客户端下发鉴权原始数据;鉴权加密数据校验单元用于:对客户端上报的鉴权加密数据进行校验,若校验通过,则下发相应视频流地址给客户端。
[0115] 具体来说,在一种实施方式中,所述鉴权加密数据计算单元进行加密计算得到鉴权加密数据并上报至直播平台服务器的具体流程为:鉴权加密数据计算单元收到直播平台服务器下发的鉴权原始数据后,使用所述鉴权数据加密算法构造单元构造出的鉴权数据加密算法对鉴权原始数据进行加密;再对加密后的数据进行HASH值的计算,得到鉴权加密数据;将得到鉴权加密数据经再次加密后上报至直播平台服务器。所述鉴权加密数据校验单元对鉴权加密数据进行校验的具体流程为:直播平台服务器将客户端上报的鉴权加密数据与其他客户端上报的鉴权加密数据进行比对,如果一致,则判定校验通过,向该客户端下发相应视频流地址。
[0116] 进一步地,在另一种实施方式中,所述鉴权原始数据下发单元向客户端下发鉴权原始数据时,会针对每一个房间下发不同的鉴权原始数据;所述鉴权加密数据校验单元对客户端上报的鉴权加密数据进行校验时,是将该客户端上报的鉴权加密数据与其他请求相同房间的客户端上报的鉴权加密数据进行比对,如果一致,则判定校验通过,向该客户端下发相应视频流地址。
[0117] 更进一步地,为了在校验鉴权加密数据的同时,还能增设对其他客户端信息的校验操作,从而进一步提高视频流地址鉴权的可靠性,进而有效防止黑客盗取视频流地址观看直播。在一种实施方式中,所述鉴权加密数据计算单元将鉴权加密数据上报至直播平台服务器时,还会将客户端登录时获得的令牌TOKEN、客户端的当前时间、客户端的设备唯一ID、客户端的当前IP地址以及客户端请求的房间号,一同上报至直播平台服务器。在此基础上,所述鉴权加密数据校验单元对客户端上报的鉴权加密数据进行校验的同时,还会对客户端登录时获得的令牌TOKEN、客户端的当前时间、客户端的设备唯一ID、客户端的当前IP地址以及客户端请求的房间号进行校验,若上述校验均通过,则下发相应视频流地址给客户端。
[0118] 需要说明的是:上述实施例提供的系统在实现视频流地址鉴权时,仅以上述各功能模
块的划分进行举例说明,实际应用中,可根据需要而将上述功能分配由不同的功能模块完成,即将系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
[0119] 本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。
[0120] 本
说明书中未作详细描述的内容属于本领域专业技术人员公知的
现有技术。