多媒体文件的播放方法、装置、电子设备及存储介质与流程

文档序号:30908312发布日期:2022-07-27 02:21阅读:140来源:国知局
多媒体文件的播放方法、装置、电子设备及存储介质与流程

1.本发明涉及音视频领域,尤其是涉及一种多媒体文件的播放方法、装置、电子设备及存储介质。


背景技术:

2.为了其安全性以及防止其泄露,会对保存的音视频进行加密,例如,对保存在手机中的视频进行加密。目前对于加密的音视频进行播放的方法为根据关键帧将一段音视频切分成多个子音视频块,通过加密模块对每个子音视频块进行加密,将加密后的音视频文件和含有私钥的文本文档上传到储存服务器,播放时对加密后的每个子音视频块进行解密播放。
3.上述方法虽然能够在一定程度上避免加解密整个音视频带来的巨大延时和开销,但因子音视频块解密开销依然会带来一定的卡顿和延时,从而导致了加密多媒体文件无法实时解密播放。


技术实现要素:

4.有鉴于此,本发明的目的在于提供一种多媒体文件的播放方法、装置、电子设备及存储介质,通过目标加密多媒体文件对应的加密数据以数据流的形式在应用层、播放器引擎层和ffmpeg层各层间流动,实现了数据读取、数据解密和数据播放的无缝衔接,解决了ffmpeg无法读取加密文件以及由于预解密而造成的播放卡顿和播放延时的问题,实现了加密多媒体文件的实时解密播放。
5.第一方面,本发明实施例提供了一种多媒体文件的播放方法,所述多媒体文件的播放方法包括:
6.通过ffmpeg层调用指定协议,以通过所述指定协议流式读取目标加密多媒体文件,得到加密数据流;
7.通过应用层对所述加密数据流进行解密,得到解密数据流;
8.通过播放器引擎层和所述ffmpeg层对所述解密数据流进行播放处理。
9.上述通过ffmpeg层调用指定协议,以通过所述指定协议流式读取目标加密多媒体文件,得到加密数据流的步骤之前,还包括:
10.通过应用层获取目标加密多媒体文件的指定协议名和保存地址,并将所述指定协议名与所述保存地址进行拼接,得到目标加密多媒体文件的地址信息,其中,所述指定协议名用于ffmpeg层调用指定协议,以通过所述指定协议基于所述保存地址流式读取目标加密多媒体文件;
11.通过播放器引擎层,调用预置的ffmpeg层接口将所述目标加密多媒体文件的地址信息传入所述ffmpeg层中。
12.上述通过ffmpeg层调用指定协议,以通过所述指定协议流式读取目标加密多媒体文件,得到加密数据流的步骤,包括:
13.通过ffmpeg层获取目标加密多媒体文件的地址信息,并对所述地址信息进行解析,得到指定协议名和保存地址;
14.基于所述指定协议名定位指定协议;
15.通过所述指定协议基于所述保存地址从存储的磁盘中,将所述目标加密多媒体文件以流的方式读取到内存中,得到加密数据流。
16.上述通过所述指定协议基于所述保存地址从存储的磁盘中,将所述目标加密多媒体文件以流的方式读取到内存中,得到加密数据流的步骤,包括:
17.调用所述指定协议根据所述指定协议名获取协议上下文,并基于所述协议上下文设置单次读取存储的磁盘中的文件大小;
18.获取seek值,基于所述保存地址将所述目标加密多媒体文件的文件偏移位置设置到所述seek值对应的位置,得到文件读取位置;
19.调用预置读取函数,基于所述文件读取位置和所述文件大小,将所述目标加密多媒体文件以流的方式读取到内存中,得到加密数据流。
20.上述通过应用层对所述加密数据流进行解密,得到解密数据流的步骤,包括:
21.将所述加密数据流传入至预置的播放器引擎层,并通过所述播放器引擎层将所述加密数据流传入至应用层;
22.通过所述应用层对所述加密数据流进行原始文件头部数据替换,得到解密数据流。
23.上述通过所述应用层对所述加密数据流进行原始文件头部数据替换,得到解密数据流的步骤,包括;
24.通过所述应用层,基于预置的回调函数获取所述加密数据流的偏移量和读取数据长度;
25.基于所述偏移量和读取数据长度,判断所述加密数据流是否对应原始多媒体文件头文件;
26.若所述加密数据流对应原始多媒体文件头文件,则获取所述加密数据流中的目标数据;
27.将所述目标数据替换为原始多媒体文件的头部数据,得到解密数据流。
28.上述通过ffmpeg层调用指定协议,以通过所述指定协议流式读取目标加密多媒体文件,得到加密数据流的步骤之前,还包括:
29.对待加密的多媒体文件进行分类,得到第一数据和第二数据,所述第一数据用于指示所述待加密的多媒体文件预设字节位置前的数据,所述第二数据用于指示所述待加密的多媒体文件中预设字节位置后的数据;
30.基于预置的流加密算法对所述第一数据进行加密,并对所述第二数据进行单表置换,得到加密多媒体文件。
31.上述通过应用层对所述加密数据流进行解密,得到解密数据流的步骤,包括:
32.通过应用层调用预置的密码初始化解密模块,基于所述流加密算法对所述加密数据流中的第一数据进行解密,并获取逆映射表,基于所述逆映射表对所述加密数据流中的第二数据进行解密,得到解密数据流。
33.第二方面,本发明实施例提供了一种多媒体文件的播放装置,所述多媒体文件的
播放装置包括:
34.读取模块,用于通过ffmpeg层调用指定协议,以通过所述指定协议流式读取目标加密多媒体文件,得到加密数据流;
35.解密模块,用于通过应用层对所述加密数据流进行解密,得到解密数据流;
36.播放模块,用于通过播放器引擎层和所述ffmpeg层对所述解密数据流进行播放处理。
37.第三方面,本发明实施例提供了一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现上述多媒体文件的播放方法。
38.第四方面,本发明实施例提供了一种机器可读存储介质,机器可读存储介质存储有机器可执行指令,机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现上述多媒体文件的播放方法。
39.本发明实施例带来了以下有益效果:
40.上述多媒体文件的播放方法、装置、电子设备及存储介质,通过ffmpeg层调用指定协议,以通过指定协议流式读取目标加密多媒体文件,得到加密数据流;通过应用层对加密数据流进行解密,得到解密数据流;通过播放器引擎层和ffmpeg层对解密数据流进行播放处理。该方法中,通过目标加密多媒体文件对应的加密数据以数据流的形式在应用层、播放器引擎层和ffmpeg层各层间流动,实现了数据读取、数据解密和数据播放的无缝衔接,解决了ffmpeg无法读取加密文件以及由于预解密而造成的播放卡顿和播放延时的问题,实现了加密多媒体文件的实时解密播放。
41.本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
42.为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
43.为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
44.图1为本发明实施例提供的应用层、播放器引擎层和ffmpeg层三者之间的逻辑关系的一个实施例示意图;
45.图2为本发明实施例提供的多媒体文件的播放方法的一个实施例示意图;
46.图3为本发明实施例提供的多媒体文件的播放方法的流程步骤的一个实施例示意图;
47.图4为本发明实施例提供的多媒体文件的播放方法的流程步骤的另一个实施例示意图;
48.图5为本发明实施例提供的多媒体文件的播放方法的另一个实施例示意图;
49.图6为本发明实施例提供的内置的默认加密算法的流程的一个实施例示意图;
50.图7为本发明实施例提供的对加密数据流进行原始文件头部数据替换的流程的一个实施例示意图;
51.图8为本发明实施例提供的一种多媒体文件的播放装置的示意图;
52.图9为本发明实施例提供的一种电子设备的示意图。
具体实施方式
53.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
54.移动端(例如手机)或终端中会保存一些不希望被他人获取的多媒体文件。为了防止这些多媒体泄露导致的恶劣影响,对这些多媒体文件进行加密。目前对于加密的音视频进行播放的方法为根据关键帧将一段音视频切分成多个子音视频块,通过加密模块对每个子音视频块进行加密,将加密后的音视频文件和含有私钥的文本文档上传到储存服务器,播放时对加密后的每个子音视频块进行解密播放。
55.其中,也会使用到作为多媒体领域传播范围最广的开源库之一的ffmpeg,但是ffmpeg本身不支持视频的加密和解密,且上述方法虽然能够在一定程度上避免加解密整个音视频带来的巨大延时和开销,但因子音视频解密开销依然会带来一定的卡顿和延时,从而导致了加密多媒体文件无法实时解密播放,这一缺点在顺序播放时可以通过预解密的方式来规避,但在seek操作时由于无法预先知道要解密的子多媒体文件,因此尚无可行的规避方案,此外,上述方法对子多媒体文件解密后需要将解密子多媒体文件临时保存在磁盘中,播放时直接对其进行读取,此时未处于加密状态下的子多媒体文件也容易被他人获取从而造成内容泄漏。
56.基于上述,本发明实施例提供的一种多媒体文件的播放方法、装置、电子设备及存储介质。
57.在一种可能的实施方式中,本发明实施例提供了一种多媒体文件的播放方法,其中,终端设备可以是前述提到的本地终端设备。
58.本发明实施例中多媒体文件的播放方法提供了一种用于加密多媒体文件的实时解密播放的架构,播放器引擎接入应用程序后,其多媒体文件播放功能可为接入的应用层、播放器引擎层和ffmpeg层三层,即应用程序从上到下被分为应用层、播放器引擎层和ffmpeg层三层,播放器引擎层负责多媒体文件的播放、渲染和seek等播放逻辑控制,应用层通过调用播放器引擎获取多媒体文件播放功能,ffmpeg层负责具体的解协议、解封装和解码等操作,其中,解协议用于指示将流媒体协议的数据解析为相应的封装格式数据,解封装用于指示将输入的封装格式数据分离成为多媒体文件压缩编码数据(例如,音频流压缩编码数据或视频流压缩编码数据),解码用于指示将多媒体文件压缩编码数据解码成为非压缩的多媒体文件原始数据(例如,视频原始数据或音频原始数据),seek用于指示跳转到多媒体文件的某个时间点播放。具体的,应用程序、播放器引擎和多媒体文案处理库三者之间的逻辑关系如图1所示。
59.通过上述架构能够实现加密多媒体文件的实时解密播放,无需在播放前预先对加密多媒体文件进行解密操作,在进行seek等相关操作时,由于只需要对seek后读取的加密多媒体文件的数据(例如,加密视频流)解密即可播放,也不会因为预解密而造成视频播放延时。
60.参见图2所示的一种多媒体文件的播放方法的一实施例示意图,该多媒体文件的播放方法包括如下步骤:
61.步骤s201,通过ffmpeg层调用指定协议,以通过指定协议流式读取目标加密多媒体文件,得到加密数据流。
62.上述ffmpeg层用于对多媒体文件的加密数据进行封装格式解析、解封装和解码。ffmpeg有两种使用方式:一种是安装在电脑中以应用程序的方式运行,使用行命令进行调用;另一种就是接入源码,调用的时候通过c语言函数进行调用。本发明实施例中的ffmpeg是以静态库或动态库的形式接入到播放器引擎中,可以理解为源码接入,是播放器引擎的一部分。
63.上述指定协议为ffmpeg层中用于解协议的结构体类型urlprotocol,在此不做限定在,作为示例而非限定的是,本发明实施的指定协议可为在ffmpeg现有urlprotocol协议体系中添加了用于实时解密播放的自研协议ccsecretprotocol,在播放目标多媒体文件的目标加密文件时可以做到随机读取(seek操作时出现)和实时解密播放,后续以ccsecretprotocol进行说明。其中,上述指定协议是ffmpeg层中的协议,是ffmpeg的一部分,即在ffmpeg的协议数组中添加了自研协议,ffmpeg可通过文件路径前的协议名遍历协议数组来定位指定协议。
64.上述目标加密多媒体文件为选中的或者检索的待播放的加密后的多媒体文件,例如,加密后的mp4文件。为了便于理解,本发明实施例以目标加密多媒体文件为视频为例进行说明。
65.通过ffmpeg层调用指定协议,以通过指定协议流式读取目标多媒体文件的加密文件,得到加密数据流后。
66.通过ffmpeg层调用指定协议,以通过指定协议流式读取目标多媒体文件,得到加密数据流,解决了现有ffmpeg层无法读取加密后的多媒体文件的问题,并能够使得ffmpeg层能够随机读取加密后的多媒体文件。
67.步骤s202,通过应用层对加密数据流进行解密,得到解密数据流。
68.上述应用层为播放器引擎层接入的应用,应用可为云交互系统下可以运行的各种云应用。
69.通过应用层基于预置接口,从播放器引擎层调用预置的加解密算法,对加密数据流进行解密,从而得到解密数据流,其中,加解密算法的类型可为数字签名、信息加密等,在此不做限定,为了提高加密精度,优选加密精度较高的加密算法,其中,采用的加解密算法可为单一算法,也可为多个算法结合,例如,单一算法为仅采用哈希运算消息认证码(hash-based message authentication code,hmac)算法,多个算法结合为采用哈希运算消息认证码(hash-based message authentication code,hmac)算法和安全哈希(secure hash algorithm,sha1)算法,先进行hmac算法的加解密,再进行sha1算法的加解密。
70.步骤s203,通过播放器引擎层和ffmpeg层对解密数据流进行播放处理。
71.上述播放器引擎层中的播放器引擎可为以静态库或动态库的形式为应用程序提供功能的软件开发工具包,在此不做限定在,作为示例而非限定的是,本发明实施的播放器引擎为sdk,后续以播放器引擎为sdk进行辅助说明。
72.通过ffmpeg层对解密数据流进行解封装和解码,得到待播放数据,其中,通过ffmpeg层将解密数据流解析为相应的封装格式数据,以实现对解密数据流的解封装,得到解封装后的解密数据流,对解封装后的解密数据流进行解码处理,得到待播放数据,并将待播放数据发送至播放器引擎,通过播放器引擎层渲染待播放数据,并通过屏幕或其他的显示设备或装置进行播放显示。具体的,通过ffmpeg层将解密数据流分离为对应的多媒体压缩编码数据,即对解密数据流进行解封装处理,加密数据流解密后的解密数据流实际上是封装数据流(例如,mp4、flv等,实际上都是封装数据流),封装数据流可以是封装的音频数据流、也可以是封装的视频数据流、但更多的是音视频数据的混合,例如,若解密数据流为混合音视频编码数据,则将解密数据流解码分离后的多媒体压缩编码数据为音频数据流和视频数据流。通过ffmpeg层将多媒体压缩编码数据解码为非压缩的原始数据,从而得到待播放数据。
73.通过应用层解密,通过播放器引擎层进行播放,实现了加解密算法调用和播放器逻辑的分离,从而实现了应用程序能够根据需求更换加密算法而无需修改播放器引擎的效果。作为基础组件的提供者,播放器引擎(software development kit,sdk)通常会被接入数十上百款应用,加解密算法可修改不仅方便sdk接入软件、自由定义加解密算法,还减少了sdk本身的维护成本。
74.上述多媒体文件的播放方法,通过ffmpeg层调用指定协议,以通过指定协议流式读取目标加密多媒体文件,得到加密数据流;通过应用层对加密数据流进行解密,得到解密数据流;通过播放器层和ffmpeg层对解密数据流进行播放处理。该方法中,通过目标加密多媒体文件对应的加密数据以数据流的形式在应用层、播放器引擎层和ffmpeg层各层间流动,实现了数据读取、数据解密和数据播放的无缝衔接,解决了ffmpeg无法读取加密文件以及由于预解密而造成的播放卡顿和播放延时的问题,实现了加密多媒体文件的实时解密播放。
75.本发明提供的一种多媒体文件的播放方法需经历解协议、解封装、解码和渲染等几个步骤,主要作用于其中的解协议步骤,以加密数据流为加密视频数据流为例进行说明,(通过ffmpeg层调用指定协议,以通过指定协议流式读取目标加密多媒体文件的数据,即加密视频文件的数据)后,对加密视频文件的数据进行解协议后得到加密视频数据流,即加密数据流,(通过应用层)对加密视频数据流进行解密,得到封装数据(即解密数据流),(通过ffmpeg层)对封装数据进行解封装,得到编码数据,(通过ffmpeg层)对编码数据进行解码,得到图像数据,(通过播放器引擎)渲染图像数据,(通过屏幕)进行播放,如图3所示。
76.具体的,发明实施例中多媒体文件的播放方法提供了一种用于加密多媒体文件的实时解密播放的架构,播放器引擎接入应用程序后,其多媒体文件播放功能可为接入的应用层、播放器引擎sdk层和ffmpeg层三层,应用层、播放器引擎sdk层和ffmpeg层对应的多媒体文件的播放方法的处理流程如图4所示。以下对应用层、播放器引擎sdk层和ffmpeg层对应的多媒体文件的播放方法的处理流程进行具体说明。
77.参见图5所示的一种多媒体文件的播放方法的另一实施例示意图,该多媒体文件
的播放包括如下步骤:
78.步骤s501,通过应用层获取目标加密多媒体文件的指定协议名和保存地址,并将指定协议名与保存地址进行拼接,得到目标加密多媒体文件的地址信息,其中,指定协议名用于ffmpeg层调用指定协议,以通过指定协议基于保存地址流式读取目标加密多媒体文件。
79.在多媒体领域中不同类型的加密多媒体文件(例如,加密视频文件)对应于不同的拉流协议,对应的拉流协议可以通过加密多媒体文件的磁盘地址(即保存地址,例如,加密视频的磁盘地址,/d/media/test.mp4)前的协议名识别,例如,视频地址(即保存地址)以http://开头表示该地址是http视频流,ffmpeg将通过http协议读取视频流;若视频地址(即保存地址)以file://开头,则表示该地址为本地视频文件,ffmpeg将通过file协议读取视频流。由于ffmpeg无法读取加密后的多媒体文件,以通过协议ccsecretprotocol进行来读取,因而需要在多媒体文件地址(例如,加密视频的磁盘地址,)前添加协议名ccmediadatasource,即指定协议名。其中,将指定协议名与保存地址进行拼接,得到目标加密多媒体文件的地址信息,例如,ccmediadatasouce:/d/media/test.mp4。
80.在一种实现方式中,步骤501之前,对待加密的多媒体文件进行分类,得到第一数据和第二数据,第一数据用于指示待加密的多媒体文件预设字节位置前的数据,第二数据用于指示待加密的多媒体文件中预设字节位置后的数据;基于预置的流加密算法对第一数据进行加密,并对第二数据进行单标置换,得到加密多媒体文件。
81.其中,预设字节位置的数据为排列预设字节前所有的数据,例如,预设字节位置前的数据为前32kb数据。对待加密的多媒体文件进行分类,得到第一数据和第二数据,是为了区分头部数据和头部数据之外的数据,其中,第一数据为待加密的多媒体文件预设字节位置前的数据,是为了包括头部数据,即第一数据中包含了头部数据。
82.为了方便应用层使用,也考虑到如果在移动段实现加密数据流实时解密时对解密算法计算量上的苛刻要求,本发明实施例依据目标加密多媒体文件(加密视频)特点提供了一个简单的内置的默认加密算法。具体流程如图6所示,以第一数据为待加密的多媒体文件预设字节位置前(前32kb)的数据(以下简述前32kb数据),第二数据用于指示待加密的多媒体文件中预设字节位置后的数据,即前32kb之后的数据(以下简述后续数据),预置的流加密算法为流加密算法(rivest cipher 4,rc4)为例说明,对待加密的多媒体文件进行分类,得到前32kb数据和后续数据,基于rc4算法,对前32kb数据进行加密,并对后续数据进行单表置换,将加密后的前32kb数据和加密后的后续数据合并,得到加密多媒体文件。
83.需要说明的是,若对第一数据进行加密采用的是复杂的加密算法(例如,流密码加密算法rc4),则对第二数据进行加密(单表置换)所采用的映射表为第一数据加密时计算所得的映射表,若对第一数据进行加密采用的不是复杂的加密算法(例如,流密码加密算法rc4),则对第二数据进行加密(单表置换)所采用的映射表为重新单独计算所得的映射表。
84.实际使用中,应用程序可以自行选择合适的加解密算法,当采用的加解密算法不是复杂的加密算法(流密码加密算法rc4)和单表置换时,无需区分第一数据和第二数据,即无需对待加密的多媒体文件进行分类,得到第一数据和第二数据,通过预置的流密码加密算法(rc4)对第一数据进行加密,并对第二数据进行单标置换;本实施例方案中采用的内置算法(即复杂的加密算法(例如,流密码加密算法rc4)和单表置换)时区分第一数据和第二
数据,是考虑到一些加密算法解密时计算复杂度太大,会对移动端性能造成负担,如果终端是个人计算机(personal computer,pc)之类的可以使用复杂一些的算法,更安全;且采用流密码加密算法rc4和单表置换的加密方式,流密码加密算法rc4生成的随机字符串刚好可以用于置换表的计算。
85.具体的,分别初始化预设长度的状态向量和预设长度的映射表,得到初始化状态向量和初始化映射表;根据输入密码生成预设长度的初始密码,并对初始密码进行截取,得到目标密码;对初始化状态向量进行替换操作,得到替换后的初始化状态向量;基于替换后的初始化状态向量和初始化映射表生成目标映射表;对待加密的多媒体文件进行分类,得到第一数据和第二数据,第一数据用于指示待加密的多媒体文件预设字节位置前的数据,第二数据用于指示待加密的多媒体文件中预设字节位置后的数据;基于预置的流加密算法,基于目标密码对第一数据进行加密,并基于目标映射表对第二数据进行加密,将加密后的第一数据和加密后的第二数据合并,得到加密多媒体文件。
86.例如,第一步骤:初始化长度为256的状态向量和长度为256的映射表,得到初始化状态向量s:s={0,1,2,3,......,255}和初始化映射表m:m={0,1,2,3,......,255};第二步骤:根据输入密码生成长度为256的初始密码,若初始密码长度大于或等于256,则截取初始密码的前256个字符,若初始密码长度小于256个字符,则循环生成,得到目标密码,如初始密码为1,2,3,4,5,6,则目标密码为t={1,2,3,4,5,6,1,2,3,4,5,6,1,......,4,6},其中,由于每个字符都是ascii字符,因此特殊符号和字母在本文中均用对应的ascii值表示(数字);第三步骤:对初始化状态向量s进行替换操作,替换后的初始化状态向量具有一定的随机性;第四步骤:使用替换后的初始化状态向量和初始化映射表m生成目标映射表,目标映射表中保存的是根据目标密码生成的乱序而不重复的ascii字符集;第五步骤:通过rc4算法基于目标密码对第一数据(即待加密的多媒体文件预设字节位置前的数据,即前n字节(n≥32*1024)的数据)进行加密(通过进行了一次异或运算实现),通过目标映射表对第二数据进行加密,将加密后的第一数据和加密后的第二数据合并,得到加密多媒体文件。
87.步骤s502,通过播放器引擎层,调用预置的ffmpeg层接口将目标加密多媒体文件的地址信息传入ffmpeg层中。
88.通过播放器引擎sdk层调用ffmpeg接口将目标加密多媒体文件的地址信息传入ffmpeg中。
89.通过在目标加密多媒体文件的保存地址前加入自定义协议名(指定协议名),能够随机读取所有流地址,并能够播放所读取所有流地址对应的目标加密多媒体文件。
90.步骤s503,通过ffmpeg层调用指定协议,以通过指定协议流式读取目标加密多媒体文件,得到加密数据流。
91.通过ffmpeg层调用指定协议,以通过指定协议流式读取目标加密多媒体文件,得到加密数据流之后,ffmpeg层通过回调函数的缓冲区buffer参数,将加密数据流传入至应用层。
92.在一种实现方式中,步骤s503的执行过程包括:通过ffmpeg层获取目标加密多媒体文件的地址信息,并对地址信息进行解析,得到指定协议名和保存地址;基于指定协议名定位指定协议;通过指定协议基于保存地址从存储的外存中,将目标加密多媒体文件以流的方式读取到内存中,得到加密数据流。
93.可通过ffmpeg层获取目标加密多媒体文件的检索信息,该检索信息可为目标加密多媒体文件的文件名、保存位置或地址等,其中,保存地址为外存地址,例如,磁盘路径,通过检索信息对存储的磁盘中进行匹配(检索),得到对应的目标加密多媒体文件的地址信息,对目标加密多媒体文件的地址信息进行解析,得到指定协议名和保存地址,作为示例而非限定的是,本发明实施例的指定协议名为ccmediadatasource;通过指定协议名ccmediadatasource定位到指定协议,作为示例而非限定的是,本发明实施例的指定协议为ccsecretprotocol;磁盘是外存的一种,作为示例而非限定的是,本发明实施例的外存为磁盘;通过指定协议ccsecretprotocol基于保存地址从存储的磁盘中将目标加密多媒体文件以流的方式读取到内存中,得到加密数据流。
94.通过ffmpeg层调用指定协议流式读取目标加密多媒体文件,得到加密数据流,实现了ffmpeg层工具的解协议功能。
95.在另一种实现方式中,步骤s503的执行过程包括:调用指定协议根据指定协议名获取协议上下文,并基于协议上下文设置单次读取存储的磁盘中的文件大小;获取seek值,基于保存地址将目标加密多媒体文件的文件偏移位置设置到seek值对应的位置,得到文件读取位置;调用预置读取函数,基于文件读取位置和文件大小,将目标加密多媒体文件以流的方式读取到内存中,得到加密数据流。具体的,调用指定协议从统一资源定位系统(uniform resource locator,url)中获取协议名,根据指定协议名获取协议上下文,并基于协议上下文设置单次读取存储的磁盘中的文件大小;判断是否seek操作,若否,则不执行,若是,则获取对应的seek值,基于保存地址将目标加密多媒体文件的文件偏移位置设置到seek值对应的位置,得到文件读取位置;调用预置读取函数,基于文件读取位置和文件大小,将目标加密多媒体文件以流的方式读取到内存中,得到加密数据流。
96.在ffmpeg中,数据流读取的操作是通过urlprotocol实现的,不同的流媒体协议对应于不同的urlprotocol,这些urlprotocol具有统一的对外接口以方便ffmpeg做统一处理,例如,负责流打开的对外接口url_open、负责流读取的对外接口url_read、负责流写入的对外接口url_write、负责流seek的对外接口url_seek、负责流关闭的对外接口url_close等。各个对外接口的具体实现依据流协议类型的不同而不同,例如,url_open对外接口在文件读取协议(如指定协议ccsecretprotocol)中作用是打开本地文件,在http流协议中则是建立和服务端的tcp连接。ffmpeg在播放时根据目标加密多媒体文件的保存地址前的指定协议名定位所使用的指定协议urlprotocol,并使用该urlprotocol对目标加密多媒体文件进行相关操作。
97.ffmpeg层调用指定协议根据指定协议名获取协议上下文,并基于协议上下文设置单次读取存储的磁盘中的文件大小(例如,size=32768),其中,可通过设置单次读取内容的初始大小,基于协议上下文获取存储的磁盘中的文件状态,基于文件状态和单次读取内容的初始大小设置单次读取存储的磁盘中的文件大小,以实现基于协议上下文设置单次读取存储的磁盘中的文件大小;进行文件偏移定位:基于保存地址将目标加密多媒体文件的文件偏移位置设置到seek值对应的位置,得到文件读取位置,文件读取位置为seek操作中从目标加密多媒体文件中读取数据的目标位置,文件偏移位置用于指示文件首部加上偏移量后的位置(即上述的目标位置),例如,目标加密多媒体文件的大小一共为10kb(仅作为举例说明),文件偏移位置为目标加密多媒体文件的首部开始至偏移量(5kb)对应的点,即目
标加密多媒体文件的第5kb对应的位置;调用预置读取函数(ccsecret_read),基于文件位置和文件大小将目标加密多媒体文件以流的方式读取到内存中,得到加密数据流。
98.通过预置的指定协议,实现了ffmpeg层能够随机读取目标加密多媒体文件,得到加密数据流的效果。
99.步骤s504,通过应用层对加密数据流进行解密,得到解密数据流。
100.在一种实现方式中,通过应用层对加密数据流进行解密,得到解密数据流的步骤,包括:通过应用层调用预置的密码初始化解密模块,基于流加密算法对加密数据流中的第一数据进行解密,并获取逆映射表,基于逆映射表对加密数据流中的第二数据进行解密,得到解密数据流。
101.需要说明的是,若对第一数据进行加密采用的是复杂的加密算法(例如,流密码加密算法rc4),则对第二数据进行解密所采用的逆映射表为第一数据加密时计算所得的逆映射表,若对第一数据进行加密采用的不是复杂的加密算法(例如,流密码加密算法rc4),则对第二数据进行解密所采用的逆映射表为重新单独计算所得的逆映射表。
102.实际使用中,应用程序可以自行选择合适的加解密算法,当采用的加解密算法不是复杂的加密算法(流密码加密算法rc4)和单表置换时,在解密时无需区分第一数据和第二数据,即无需基于流加密算法对加密数据流中的第一数据进行解密,基于逆映射表对加密数据流中的第二数据进行解密。
103.通过应用层调用预置的密码初始化解密模块对解密数据流进行解密的前四个步骤的执行过程和上述加密的前四个步骤的执行过程类似,也需要生成初始化状态向量和目标映射表,之后步骤执行过程如下:生成逆映射表;通过应用程序调用rc4算法,基于目标密码对加密数据流中的第一数据进行解密,由于和同一个值进行两次异或运算即可得到原值,加密时进行了一次异或运算,因而解密时再计算一次即可;基于逆映射表对加密数据流中的第二数据进行解密,得到解密数据流,由于逆映射表的解密以字符为单位,因而要解密的数据可以是加密数据流的任意一段内容,支持目标多媒体文件播放时的seek等随机访问操作,可以看出解密的时间复杂度是o(n)级别(其中,n是加密数据流的长度)和内存复制复杂度相同,可以应对移动设备和嵌入式设备对计算复杂度的苛刻要求。
104.在一种实现方式中,通过应用层对加密数据流进行解密,得到解密数据流的步骤,包括:将加密数据流传入至预置的播放器引擎层,并通过播放器引擎层将加密数据流传入至应用层;通过应用层对加密数据流进行原始文件头部数据替换,得到解密数据流。
105.以目标加密多媒体文件为加密视频为例进行说明,由于加密视频的主要参数信息通常保存在视频头部,因此有些应用使用简单的替换视频头部的方式来加密视频,即通过将待加密的多媒体文件进行头文件替换以实现对待加密的多媒体文件进行加密,当视频播放时找到真实的头文件和头部被替换的视频文件,将其再次替换回一个完整的视频进行播放,然而这一方案并不安全,特别是在播放时换回了真实头部的视频文件是保存在磁盘中的,用户可以很容易的拿到,为了加强这一方案(头部文件替换的加解密方式)的安全性,本发明实施例提供一种方案,如图7所示,加密数据流为替换过头文件数据的头部数据,即替换数据,通过ffmpeg层ffmpeg将替换数据(目标加密文件)和对应的文件位置传入播放器引擎sdk层,播放器引擎sdk层将替换数据和文件位置传入应用层,应用层基于替换数据和文件位置对加密数据流进行原始文件头部数据替换,得到原始头文件数据,即解密数据流,该
加密数据流为替换原始文件头部数据后的头文件数据,播放器引擎sdk层将原始头文件数据传送至ffmpeg层,ffmpeg层对原始头文件数据进行解封装和解码得到原视频内容(即待播放数据),并将原视频内容传入至播放器引擎sdk层,即原样数据返回至播放器引擎sdk层。
106.在一种实现方式中,通过应用层对加密数据流进行原始文件头部数据替换,得到解密数据流的步骤,包括:通过应用层,基于预置的回调函数获取加密数据流的偏移量和读取数据长度;基于偏移量和读取数据长度,判断加密数据流是否对应原始多媒体文件头文件;若加密数据流对应原始多媒体文件头文件,则获取加密数据流中的目标数据;将目标数据替换为原始多媒体文件的头部数据,得到解密数据流。
107.由于ccsecretprotocol的回调函数中包含文件描述符,应用层可以以回调函数获取当前文件数据(即加密数据流)的偏移量和读取数据长度,当发现读取数据包含视频头文件内容(即多媒体头文件内容)时,可以直接将处于内存中的读取数据替换为真实的视频头部数据(即原始文件头部数据)再返回给播放器引擎sdk,因而,通过应用程序,基于预置的回调函数获取加密数据流的偏移量和读取数据长度;基于偏移量和读取数据长度,判断加密数据流是否对应原始多媒体文件头文件;若加密数据流不对应原始多媒体文件头文件,则不执行处理;若加密数据流对应原始多媒体文件头文件,则获取加密数据流中的目标数据;将目标数据替换为原始多媒体文件的头部数据,得到解密数据流。其中,加密数据流中的目标数据用于指示替换后的无意义数据,这些数据是不属于原来的多媒体文件(原始多媒体文件)的,而是人为编造出的一段无意义的数据,比如随机生成。
108.例如,一个视频文件长度为100字节(仅作为举例说明),前10字节为视频头(即原始多媒体文件头文件),后90字节为视频内容,加密时将前10字节替换为无意义的10字节数据(即目标数据),比如全是0,解密时对这100字节数据一个字节一个字节的读取,成为加密数据流,如果当前读取的字节是第3个字节,第3个字节属于原视频的头部位置,那么应用层将其替换为头文件中的第3个字节对应的数据(即原始多媒体文件的头部数据),返回给ffmpeg,如当前读取的数据是第50字节,50字节不处于头文件的位置,则原样返回给ffmpeg。
109.通过应用层直接对替换了头部的加密数据流进行播放,不需要临时保存包含真实头部的完整视频,降低了加密数据流被破解的风险。
110.步骤s505,通过播放器引擎层和ffmpeg层对解密数据流进行播放处理。
111.通过ffmpeg层对解密数据流进行解封装和解码,得到待播放数据,其中,通过ffmpeg层将解密数据流解析为相应的封装格式数据,以实现对解密数据流的解封装,得到解封装后的解密数据流,对解封装后的解密数据流进行解码处理,得到待播放数据,并将待播放数据发送至播放器引擎层,通过播放器引擎层渲染待播放数据,并通过屏幕或其他的显示设备或装置进行播放显示。具体的,通过ffmpeg层将解密数据流分离为对应的多媒体压缩编码数据,,即对解密数据流进行解封装处理,加密数据流解密后的解密数据流实际上是封装数据流(例如,mp4、flv等,实际上都是封装数据流),封装数据流可以是封装的音频数据流、也可以是封装的视频数据流、但更多的是音视频数据的混合,例如,若解密数据流为混合音视频编码数据,则将解密数据流解码分离后的多媒体压缩编码数据为音频数据流和视频数据流。通过ffmpeg层将多媒体压缩编码数据解码为非压缩的原始数据,从而得到
待播放数据。
112.本发明提供了一种基于ffmpeg的可更改加解密算法的用于加密多媒体文件的实时解密播放的架构以及多媒体文件的播放方法,在ffmpeg现有的urlprotocol协议体系中添加了用于实时解密播放的指定协议ccsecretprotocol,在播放目标加密多媒体文件时可以做到随机读取(seek操作时出现)和实时解密播放,加密和解密均不涉及目标加密多媒体文件分割和目标加密多媒体文件的临时保存,因此不会造成目标加密多媒体文件的内容泄漏。
113.将播放器引擎的播放逻辑和目标加密多媒体文件的解密逻辑分离,可以让接入的应用层自由定义加解密算法,各个流程间无缝衔接,解决了应用层接入播放器引擎sdk层后解密方案无法修改的问题。此外本发明提供的多媒体文件的播放方法作用于解协议层,因此适用于目前所有的封装格式和编码格式,提供了默认的加解密算法,测试后确认其资源消耗较低,可以在保证数据安全的前提下满足移动端的性能要求。
114.上述多媒体文件的播放方法,不仅通过目标加密多媒体文件对应的加密数据以数据流的形式在应用层、播放器引擎层和ffmpeg层各层间流动,实现了数据读取、数据解密和数据播放的无缝衔接,解决了ffmpeg无法读取加密文件以及由于预解密而造成的播放卡顿和播放延时的问题,实现了加密多媒体文件的实时解密播放,还可方便sdk接入软件、自由定义加解密算法,也减少了sdk本身的维护成本,以及能够随机读取所有流地址,并能够播放所读取所有流地址对应的加密数据流,加密和解密均不涉及目标多媒体文件分割和目标多媒体文件的临时保存,不会造成加密多媒体文件的内容泄漏,在保证数据安全的前提下满足移动端的性能要求。
115.对应于上述方法实施例,参见图8所示的一种多媒体文件的播放装置的示意图,
116.读取模块801,用于通过ffmpeg层调用指定协议,以通过指定协议流式读取目标加密多媒体文件,得到加密数据流;
117.解密模块802,用于通过应用层对加密数据流进行解密,得到解密数据流;
118.播放模块803,用于通过播放器引擎层和ffmpeg层对解密数据流进行播放处理。
119.上述多媒体文件的播放装置,通过ffmpeg层调用指定协议,以通过指定协议流式读取目标加密多媒体文件,得到加密数据流;通过应用层对加密数据流进行解密,得到解密数据流;通过播放器引擎层和ffmpeg层对解密数据流进行播放处理。该方法中,通过目标加密多媒体文件对应的加密数据以数据流的形式在应用层、播放器引擎层和ffmpeg层各层间流动,实现了数据读取、数据解密和数据播放的无缝衔接,解决了ffmpeg无法读取加密文件以及由于预解密而造成的播放卡顿和播放延时的问题,实现了加密多媒体文件的实时解密播放。
120.多媒体文件的播放装置还包括:
121.拼接模块804,用于通过应用层获取目标加密多媒体文件的指定协议名和保存地址,并将指定协议名与保存地址进行拼接,得到目标加密多媒体文件的地址信息,其中,指定协议名用于ffmpeg层调用指定协议,以通过指定协议基于保存地址流式读取目标加密多媒体文件;
122.传送模块805,用于通过播放器引擎层,调用预置的ffmpeg层接口将目标加密多媒体文件的地址信息传入ffmpeg层中。
123.读取模块801,还用于:通过ffmpeg层获取目标加密多媒体文件的地址信息,并对地址信息进行解析,得到指定协议名和保存地址;
124.基于指定协议名定位指定协议;
125.通过指定协议基于保存地址从存储的磁盘中,将目标加密多媒体文件以流的方式读取到内存中,得到加密数据流。
126.读取模块801,还用于:调用指定协议根据指定协议名获取协议上下文,并基于协议上下文设置单次读取存储在外存中的文件大小;
127.获取seek值,基于保存地址将目标加密多媒体文件的文件偏移位置设置到seek值对应的位置,得到文件读取位置;
128.调用预置读取函数,基于文件读取位置和文件大小,将目标加密多媒体文件以流的方式读取到内存中,得到加密数据流。
129.解密模块802,还用于:将加密数据流传入至预置的播放器引擎层,并通过播放器引擎层将加密数据流传入至应用层;
130.通过应用层对加密数据流进行原始文件头部数据替换,得到解密数据流。
131.解密模块802,还用于:通过应用层,基于预置的回调函数获取加密数据流的偏移量和读取数据长度;
132.基于偏移量和读取数据长度,判断加密数据流是否对应原始多媒体文件头文件;
133.若加密数据流对应原始多媒体文件头文件,则获取加密数据流中的目标数据;
134.将目标数据替换为原始多媒体文件的头部数据,得到解密数据流。
135.多媒体文件的播放装置还包括:
136.分类模块806,用于对待加密的多媒体文件进行分类,得到第一数据和第二数据,第一数据用于指示待加密的多媒体文件预设字节位置前的数据,第二数据用于指示待加密的多媒体文件中预设字节位置后的数据;
137.加密模块807,用于基于预置的流加密算法对第一数据进行加密,并对第二数据进行单表置换,得到加密多媒体文件。
138.解密模块802,还用于:通过应用层调用预置的密码初始化解密模块,基于流加密算法对加密数据流中的第一数据进行解密,并获取逆映射表,基于逆映射表对加密数据流中的第二数据进行解密,得到解密数据流。
139.本实施例还提供一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现上述多媒体文件的播放方法。该电子设备可以是服务器,也可以是终端设备。
140.参见图9所示,该电子设备包括处理器900和存储器901,该存储器901存储有能够被处理器900执行的机器可执行指令,该处理器900执行机器可执行指令以实现上述多媒体文件的播放方法。
141.进一步地,图9所示的电子设备还包括总线902和通信接口903,处理器800、通信接口903和存储器901通过总线902连接。
142.其中,存储器901可能包含高速随机存取存储器(ram,random access memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口903(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通
信连接,可以使用互联网,广域网,本地网,城域网等。总线902可以是isa总线、pci总线或eisa总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图9中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
143.处理器900可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器900中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器900可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(digital signal processor,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(field-programmable gate array,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器901,处理器900读取存储器901中的信息,结合其硬件完成前述实施例的方法的步骤。
144.本实施例还提供一种机器可读存储介质,机器可读存储介质存储有机器可执行指令,机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现上述多媒体文件的播放方法。
145.本发明实施例所提供的多媒体文件的播放方法、装置、电子设备及存储介质的计算机程序产品,包括存储了程序代码的计算机可读存储介质,程序代码包括的指令可用于执行前面方法实施例中的方法,具体实现可参见方法实施例,在此不再赘述。
146.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
147.另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
148.功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
149.在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、
以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
150.最后应说明的是:以上实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1