视频处理方法、装置、电子设备及计算机可读介质与流程

文档序号:16688013发布日期:2019-01-22 18:31阅读:179来源:国知局
视频处理方法、装置、电子设备及计算机可读介质与流程

本申请涉及视频处理技术领域,更具体地,涉及一种视频处理方法、装置、电子设备及计算机可读介质。



背景技术:

随着电子技术和信息技术的发展,越来越多的设备能够播放视频。安装在设备上的客户端在视频播放的过程中,需要对视频执行解析、解码、渲染以及合成等操作,再在显示屏上显示视频流并通过音频设备播放音频流。但是,如果有些客户端不支持某个视频的播放,会导致用户体验过差。



技术实现要素:

本申请提出了一种视频处理方法、装置、电子设备及计算机可读介质,以改善上述缺陷。

第一方面,本申请实施例提供了一种视频处理方法,应用于电子设备,所述电子设备包括系统播放模块以及ffmpeg模块。该方法包括:所述系统播放模块获取目标客户端发送的待播放视频文件;判断是否支持播放所述待播放视频文件;若不支持,将所述视频文件解析以获得所述视频文件内的音频流和视频流;为所述音频流配置音频解码器的标识以及为视频流配置视频解码器的标识;将所述视频流、所述音频流、视频解码器的标识以及音频解码器的标识发送至所述ffmpeg模块,以使所述ffmpeg模块根据所述视频解码器的标识查找到对应的视频解码器并对所述视频流解码以获取视频播放数据,并且根据所述音频解码器的标识查找到对应的音频解码器并对所述音频流解码以获取音频播放数据,其中,所述音频播放数据和视频播放数据能够被电子设备的音视频输出模块播放。

第二方面,本申请实施例还提供了一种视频处理方法,应用于电子设备,所述电子设备包括系统播放模块以及ffmpeg模块。该方法包括:所述系统播放模块获取目标客户端发送的待播放视频文件;所述系统播放模块判断是否支持播放所述待播放视频文件;若不支持,所述系统播放模块将所述视频文件解析以获得所述视频文件内的音频流和视频流,为所述音频流配置音频解码器的标识以及为视频流配置视频解码器的标识;所述系统播放模块将所述视频流、所述音频流、视频解码器的标识以及音频解码器的标识发送至所述ffmpeg模块;所述ffmpeg模块将所述待播放视频文件解码以获取音频播放数据和视频播放数据,其中,所述音频播放数据和视频播放数据能够被电子设备的音视频输出模块播放。

第三方面,本申请实施例还提供了一种视频处理装置,包括:获取单元、判断单元、解析单元、配置单元和处理单元。获取单元,用于获取目标客户端发送的待播放视频文件。判断单元,用于判断是否支持播放所述待播放视频文件。解析单元,用于若不支持,将所述视频文件解析以获得所述视频文件内的音频流和视频流。配置单元,用于为所述音频流配置音频解码器的标识以及为视频流配置视频解码器的标识。处理单元,用于将所述视频流、所述音频流、视频解码器的标识以及音频解码器的标识发送至所述ffmpeg模块,以使所述ffmpeg模块根据所述视频解码器的标识查找到对应的视频解码器并对所述视频流解码以获取视频播放数据,并且根据所述音频解码器的标识查找到对应的音频解码器并对所述音频流解码以获取音频播放数据,其中,所述音频播放数据和视频播放数据能够被电子设备的音视频输出模块播放。

第四方面,本申请实施例还提供了一种视频处理装置,包括系统播放模块以及ffmpeg模块。所述系统播放模块用于获取目标客户端发送的待播放视频文件;获取所述待播放视频文件的目标类型;判断是否支持播放所述目标类型的视频文件;若不支持,将所述视频文件解析以获得所述视频文件内的音频流和视频流,为所述音频流配置音频解码器的标识以及为视频流配置视频解码器的标识,将所述视频流、所述音频流、视频解码器的标识以及音频解码器的标识发送至所述ffmpeg模块。所述ffmpeg模块用于根据所述视频解码器的标识查找到对应的视频解码器并对所述视频流解码以获取视频播放数据,并且根据所述音频解码器的标识查找到对应的音频解码器并对所述音频流解码以获取音频播放数据,其中,所述音频播放数据和视频播放数据能够被电子设备的音视频输出模块播放。

第五方面,本申请实施例还提供了一种电子设备,包括:图像处理器、存储器、系统播放模块以及ffmpeg模块和一个或多个应用程序。其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述图像处理器执行,所述一个或多个程序配置用于执行上述方法。

第六方面,本申请实施例还提供了一种计算机可读取存储介质,计算机可读取存储介质中存储有程序代码,所述程序代码可被处理器调用执行上述方法。

相对于现有技术,本申请提供的方案,在客户端播放待播放视频文件时,调用系统播放模块播放该视频文件,则系统播放模块获取到该待播放视频文件,根据该待播放视频文件的类型确定是否支持播放该类型的视频文件,如果不支持,则将待播放视频文件解析为视频流和音频流,并分别配置对应的解码器标识之后一起发送至ffmpeg模块。ffmpeg模块将所述音频流和视频流根据各自对应的解码器解码之后以获取音频播放数据和视频播放数据,其中,所述音频播放数据和视频播放数据能够被电子设备的音视频输出模块播放,则电子设备的音视频系统能够播放音频播放数据和视频播放数据。因此,通过调用ffmpeg模块,能够将不支持播放的视频文件顺利播放。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1示出了本申请实施例提供的视频播放架构的模块框图;

图2示出了本申请一实施例提供的视频播放方法的方法流程图;

图3示出了图1中的s204的方法流程图;

图4示出了本申请另一实施例提供的视频播放方法的方法流程图;

图5示出了本申请一实施例提供的客户端播放视频时界面变化示意图;

图6示出了本申请另一实施例提供的客户端播放视频时界面变化示意图。

图7示出了本申请又一实施例提供的视频播放方法的方法流程图;

图8示出了本申请再又一实施例提供的视频播放方法的方法流程图;

图9示出了本申请一实施例提供的视频播放装置的模块框图;

图10示出了本申请另一实施例提供的视频播放装置的模块框图;

图11示出了本申请实施例提供的电子设备的结构框图;

图12示出了本申请实施例的用于保存或者携带实现根据本申请实施例的视频处理方法的程序代码的存储单元。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。

请参阅图1,示出了视频播放架构的框图。如图1所示,该系统包括客户端10、系统播放模块20和音视频输出模块30。

客户端10在获取到待播放视频文件时,将该视频文件发送至系统播放模块20,系统播放模块20在获取到待播放的数据的时候,接下来就是解析音视频数据了。一般的视频文件都有视频流和音频流两部分组成,不同的视频格式音视频的封装格式肯定不一样。将音频流和视频流合成文件的过程称为muxer,反之从媒体文件中分离音频流和视频流的过程称为demuxer。其中,系统播放模块20为电子设备的操作系统内默认的播放模块,即在电子设备内安装的客户端播放视频文件时,默认为调用该系统播放模块20对视频文件播放。于安卓系统内,该系统播放模块20可以是mediaframework模块。

播放视频文件就需要从文件流中分离出音频流和视频流,即对视频文件解析的过程,该过程由系统播放模块20内的解析子模块201,其中,该解析子模块201可以是安卓系统内的mediaextractor模块,另外,解析的过程除了将视频文件解析成视频流和音频流,还需要为视频流和音频流配置对应的解码器,即配置对应的解码策略。解码后的视频帧可以直接渲染,音频帧可以送到音频输出设备的缓冲区进行播放,当然,视频渲染和音频播放的时间戳一定要控制同步,其中,解码的操作由系统播放模块20内的解码子模块202执行。其中,该解码子模块202可以是安卓系统内的mediacodec。

具体地,视频解码可以包括硬解码和软解码,硬件解码是将原来全部交由中央处理器(centralprocessingunit,cpu)来处理的视频数据的一部分交由图像处理器(graphicsprocessingunit,gpu)来做,而gpu的并行运算能力要远远高于cpu,这样可以大大的降低对cpu的负载,cpu的占用率较低了之后就可以同时运行一些其他的程序了,当然,对于较好的处理器来说,比如i52320,或者amd任何一款四核心处理器来说,硬解和软件依据需求而选定。

解码之后的音频流变为音频播放数据,例如,可以是pcm格式的音频数据,则音视频输出模块30根据pcm编码驱动音频播放设备的音圈等部件振动发声。同理,解码之后的视频流变为视频播放数据,例如,可以是yuv格式的视频数据,音视频输出模块30将yuv格式的视频数据发送至图层传递模块(surfaceflinger),由surfaceflinger将解码后的视频数据渲染和合成之后,在显示屏上显示。其中,surfaceflinger是一个独立的service,它接收所有window的surface作为输入,根据zorder、透明度、大小、位置等参数,计算出每个surface在最终合成图像中的位置,然后交由hwcomposer或opengl生成最终的显示buffer,然后显示到特定的显示设备上。

但是,发明人在研究中发现,由于系统更新问题或者客户端版本问题,该系统播放模块对于一些格式的视频文件不支持播放,例如,mp4格式,如果不支持该格式的视频文件的播放,会调用第三方应用播放,也就是说,在使用系统播放模块的时候,无法对某个视频文件解码,则可以调用第三方应用对该视频文件软解码,从而获取能够被音视频输出模块播放的音频和视频数据。但是,使用第三方应用播放该视频文件,会将第三方应用调起,即当前的客户端被切换至后台而第三方应用被调起之前台,则会打断用户针对客户端的操作,并且,还会导致无法实现客户端对视频的静音播放功能。

因此,为了克服上述缺陷,请参阅图2,本申请实施例提供了一种数据传输方法,应用于上述电子设备,所述电子设备包括系统播放模块以及ffmpeg模块,具体地,该方法的执行主体是系统播放模块,则该方法包括:s201至s204。

s201:所述系统播放模块获取目标客户端发送的待播放视频文件。

具体地,客户端为安装在电子设备内的应用程序,具有视频播放的功能。客户端在系统桌面设有图标,用户点击该客户端的图标,能够将该客户端打开,例如,从用户点击的应用的包名来确认,视频应用的包名可以系统后台从代码中获取,包名格式为:com.android.video。

客户端的视频列表界面内显示有多个视频对应的显示内容,多个视频对应的显示内容包括每个视频对应的缩略图,该缩略图可以作为一个触摸按键使用,用户点击该缩略图,客户端能够检测到用户所选点击的缩略图,也就能够确定欲播放的待播放视频文件。

客户端响应用户在视频列表内选中的视频,进入视频的播放界面,点击该播放界面的播放按钮,客户端通过对用户触控操作的监听,能够检测到用户当前所点击的是什么类型的视频,具体地,播放按钮设置有预设属性,检测到所获取的触控操作对应的播放按钮的属性,就能够确定用户所选中的待播放视频。

客户度在获取到用户输入的待播放视频文件之后,将该待播放视频文件发送至系统播放模块,以便系统播放模块对该视频文件解析解码之后播放。

s202:判断是否支持播放所述待播放视频文件。

系统播放模块对所支持的视频文件能够解析成视频流和音频流,并且能够成功将视频流和音频流解码,获得到音频播放数据和视频播放数据,其中,所述音频播放数据和视频播放数据能够被电子设备的音视频输出模块播放,例如,该音频播放数据和视频播放数据分别为音频pcm数据及视频yuv数据。

而对于系统播放模块不支持播放的视频文件,该系统播放模块无法对该视频文件解析,即无法由该视频文件获取到对应的视频流和音频流,或者,即使可以是对视频文件正常解析,即能够由该视频文件获取到对应的视频流和音频流,而由于无法对该格式的视频流和音频流解码,也就无法获得到音频播放数据和视频播放数据,而无法正常播放该视频文件。

具体地,获取所述待播放视频文件的目标类型。

作为一种实施方式,可以通过视频文件的扩展名判断该视频文件的类型,例如,扩展名是.mp4,则该待播放视频文件的目标类型是mp4。

判断是否支持播放所述目标类型的待播放视频文件。其中,视频文件的类型可以是视频文件的格式。则系统播放模块对应一个支持播放的视频文件的格式列表,在该格式列表内包括多个格式的标识,且该格式列表内的每个格式对应的视频文件均能够被正常播放,具体地,该格式列表内可以包括视频文件的格式对应的音频流的格式以及视频流的格式,以及每个视频流的格式和和音频流的格式对应的解码器的标识,通过查找该格式列表,就能够正常为所支持的视频格式配置正确的解码器。其中,视频文件的格式即为视频文件的类型,而视频流的格式为视频流的类型,而音频流的格式为音频流的类型。

因此,在获取到视频文件的目标类型之后,通过对该格式列表的查找,判断该视频文件的目标类型与该格式列表内的视频文件的类型是否匹配,如果存在匹配的类型,则判定支持播放所述目标类型的视频文件,如果不存在匹配的类型,则判定不支持播放所述目标类型的视频文件。

s203:将所述视频文件解析以获得所述视频文件内的音频流和视频流。

系统播放模块利用解析子模块解析该视频文件,以获取对应的视频流和音频流,例如,可以是通过上述所提及的demuxer过程,能够对视频文件解封装之后,获取到视频文件对应的视频流和音频流。

s204:为所述音频流配置音频解码器的标识以及为视频流配置视频解码器的标识。

具体地,如图3所示,s204的步骤可以包括:s2041至s2043。

s2041:确定所述视频流的类型和所述音频流的类型。

同理,在获取到视频流和音频流之后,也可以通过获取该视频流和音频流的扩展名而确定该视频流的类型和所述音频流的类型。

s2042:根据所述视频流的类型为所述视频流配置视频解码器的标识。

预先获取有视频流的类型与视频解码器的标识的第一对应关系,该第一对应关系可以由用户手动输入,例如,根据目前已经确定能够解码该类型的视频文件的视频解码器的介绍而输入该对应关系内,例如,由一个网络服务器内获取该第一对应关系,而该网路服务器内统计了每种类型的视频流能够被解码的解码器的标识。

当然,也可以是由ffmpeg模块获取到该第一对应关系,具体地,可以是在安装该ffmpeg模块的时候,由ffmpeg模块对应的格式列表内对应的每个类型的视频流对应的解码器的标识而设定该第一对应关系。

则在获取到待播放视频文件对应的视频流的类型之后,由该第一对应关系查找能够解码该类型的视频流的解码器的标识,从而为所述视频流配置视频解码器的标识。

s2043:根据所述音频流的类型为所述音频流配置音频解码器的标识。

同理,也预先获取有音频流的类型与音频解码器的标识的第二对应关系,且该第二对应关系也可以采用诸如上述第一对应关系的获取方式。则在获取到待播放视频文件对应的音频流的类型之后,由该第二对应关系查找能够解码该类型的音频流的音频解码器的标识,从而为所述音频流配置音频解码器的标识。

s205:将所述视频流、所述音频流、视频解码器的标识以及音频解码器的标识发送至所述ffmpeg模块,以使所述ffmpeg模块根据所述视频解码器的标识查找到对应的视频解码器并对所述视频流解码以获取视频播放数据,并且根据所述音频解码器的标识查找到对应的音频解码器并对所述音频流解码以获取音频播放数据。

其中,所述音频播放数据和视频播放数据能够被电子设备的音视频输出模块播放。

其中,ffmpeg模块是一个开源的跨平台的视频和音频流框架,属于自由软件,采用lgpl或gpl许可证(依据选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了丰富的音频/视频编解码库libavcodec。

ffmpeg模块以下几部分组成:

1.ffmpeg视频文件转换命令行工具。

2.ffserver基于http、rtsp用于实时广播的多媒体服务器。

3.ffplay用sdl和ffmpeg库开发的一个简单的媒体播放器。

4.libavcodec一个包含了所有ffmpeg音视频编解码器的库。

5.libavformat一个包含了所有的普通音视格式的解析器和产生器的库。

因此,ffmpeg模块集成了多种格式的音频和视频的编码器,并且具有音视频播放功能,还具有视频文件的解析功能。

则将ffmpeg模块注入电子设备的操作系统内,并且定义好系统播放模块与ffmpeg模块之间的调用接口,例如,可以是一个api也可以是一个sdk,从而系统播放模块与ffmpeg模块之间能够通信。

则在系统播放模块判定不支持客户端请求播放的视频文件的正常播放时,将该视频文件发送至ffmpeg模块,而由于ffmpeg模块的强大的编解码能力,能够支持大量格式的视频文件的解析和解码。并且,ffmpeg模块能够植入到操作系统内,且ffmpeg模块可以作为一个服务进程而在系统的后台内对视频文件解码,从而生成音频播放数据和视频播放数据,而不必切换至前台,而使得客户端被迫切换至后台,而避免打断用户对客户端的操作。

另外,在ffmpeg模块获取到音频播放数据和视频播放数据,可以将音频播放数据和视频播放数据发送至系统播放模块,而系统播放模块控制电子设备的音视频输出模块,利用音频播放设备(例如,扬声器、听筒或者耳机等)播放音频播放数据,并且利用视频播放设备(例如,屏幕)播放视频播放数据。

当然,也可以是ffmpeg模块直接控制电子设备的音视频输出模块输出音频播放数据和视频播放数据。

则由于ffmpeg模块具有视频文件的解析和解码能力,系统播放模块可以将待播放视频文件直接交给ffmpeg模块,则ffmpeg模块对该视频文件解析和解码,另外,也可以由系统播放模块对该待播放视频文件解析之后获得到视频流和音频流之后再发送给ffmpeg模块进行解码。

系统播放模块在获取到视频流与该视频流对应的视频解码器的标识,以及音频流与该音频流对应的音频解码器的标识之后,一起打包发送至ffmpeg模块,具体地,视频流和音频流存储在电子设备的存储空间内,并且定义了句柄或指针等地址标识,而将视频流与音频流发送至ffmpeg模块的过程为,将该音频流的地址标识与视频流的地址标识发送至ffmpeg模块,则ffmpeg模块根据该音频流的地址标识能够由电子设备的存储空间内获取该地址标识对应的音频流,同理,也可以根据该视频流的地址标识由电子设备的存储空间内获取该地址标识对应的视频流。

ffmpeg模块根据预先存储的各个解码器的标识与解码器的对应关系,确定视频解码器的标识对应的视频解码器以及音频解码器的标识对应的音频解码器。然后,再调用该视频解码器对视频流解码,以获取视频播放数据,以及调用该音频解码器对音频流解码,以获取音频播放数据。从而,通过调用ffmpeg模块,能够将那些不支持播放的视频文件顺利播放。

下面,以目标类型为mp4类型为例,说明本申请的方法,如图4所示,该视频处理方法包括:s401至s413。

s401:通过mediaetractor获取播放视频文件解析。

电子设备内安装的客户端在播放视频的时候,通过与mediaetractor的api接口将待播放视频文件发送至系统播放模块,即在客户端的默认播放流程下,客户端会将待播放视频数据发送至mediaetractor进行解析,则mediaetractor与客户端之间设置有api接口。

s402:将待播放视频文件发送至mpeg4extractor。

具体地,在mediaetractor获取到待播放视频文件之后,确定该待播放视频文件为mp4类型,则选择采用mpeg4extractor对该mp4类型视频文件解析,则将待播放视频文件发送至mpeg4extractor,其中,mediaetractor和mpeg4extractor均为植入到系统播放模块内的程序模块。

s403:判断是否支持播放mp4格式的视频文件。

然后,系统播放模块判断是否支持播放mp4格式的视频文件,具体地,可以是mpeg4extractor判断是否支持播放mp4格式的视频文件。

s404:原生解析逻辑。

如果支持mp4格式的视频文件的播放,则可以按照原生解析逻辑解析该视频文件。具体地,可以是采用mediaextractor解析视频数据,从而得到视频流和音频流,再采用mediacodec解码视频流和音频流,得到音频pcm数据及视频yuv数据处理之后,再分别送到音、视频输出系统输出。

s405:通过mpeg4extractor对待播放视频文件解析。

如果不支持mp4格式的视频文件的播放,则采用mpeg4extractor对待播放视频文件解析,具体地,确定视频文件的类型为mp4格式,为该待播放视频文件配置类型id,例如,类型id为mimetype。

其中,类型id用于表示该视频文件的类型,于本申请实施例中,为mp4格式定义的类型id与系统播放模块内所记录的类型id不一致,由此,能够避免系统播放模块将该类型id对应的视频文件采用原生解析逻辑解析而发生错误,因为解析的过程,除了将视频文件解封装成视频流和音频流之外,还需要为为视频流配置视频解码器以及为音频流配置音频解码器,而如果采用原生解析逻辑解析时,即使将获得到视频流和音频流也无法成功配置对应的解码器,而发生错误,而在系统播放模块无法识别本申请所定义的类型id,即mimetype,不会对该类型id进行解析和解码操作。则针对类型id为mimetype能够采用本申请实施例所对应的解析和解码逻辑解析,而不采用原生解析逻辑解析。

s406:配置音频流为audio/ffmpeg。

具体地,在上述类型id为mimetype的基础上,为音频流配置身份标识audio/ffmpeg,该身份标识作为该音频流的身份标识,便于在配置解码器的时候,在确定该音频流的身份标识为audio/ffmpeg时,选择采用本申请的解析和解码方法,即利用ffmpeg模块的视频处理方法,也就是说,该音频流的身份标识与解码策略对应。

s407:判断音频流格式。

其中,针对mp4格式的视频文件,音频流格式包括mp3和adpcm,则判断该音频流格式为mp3还是adpcm,如果是mp3,则执行s408,如果是adpcm,则执行s409。

s408:配置音频流的音频解码器的标识为ffmpeg_codec_id_mp3。

具体地,可以在mpeg4extractor内添加解析mp4格式的程序代码,例如,添加解析这类chunktypebox的代码,使得mpeg4extractor能够为mp4格式的视频文件通过所添加的代码对其解析以及配置解码器。

具体地,如果音频流为mp3,则配置的音频解码器的标识为ffmpeg_codec_id_mp3,该标识对应的解码器能够解码mp3格式的音频流。例如,解析及配置解码器id如下:

#define#defineffmpeg_codec_id_mp30x15001。

音频流mp3:chunktype为.mp3,配置音频流mimetype为audio/ffmpeg,codecid为ffmpeg_codec_id_mp3。

其中,ffmpeg_codec_id_mp3为音频解码器的标识,为该音频解码器的标识赋值,即赋值0x15001,则将音频解码器的标识发送至ffmpeg的时候,将ffmpeg_codec_id_mp3以及所赋的值0x15001一起发送至ffmpeg,则ffmpeg可以通过ffmpeg_codec_id_mp3查找到对应的音频解码器为mp3解码器,也可以根据0x15001查找到对应的解码器。

例如,ffmpeg内4类编码器定义值:

av_codec_id_adpcm_ms=0x11006;

av_codec_id_mjpeg=0x8;

av_codec_id_mp3=0x15001;

av_codec_id_svq3=0x18。

则在系统播放模块的mpeg4extractor内,为mp3格式的音频流配置的音频解码器的赋值与在ffmpeg内mp3格式的音频解码器的赋值相同,例如,都是0x15001,则通过0x15001能够快速查找到该mp3音频解码器。当然,通过分析音频解码器的标识,例如,ffmpeg_codec_id_mp3,也能够确定该标识对应的音频解码器也是mp3音频解码器,例如,通过标识的关键字提取,可以提取出“mp3”的文本,就能够确定该标识对应的是mp3音频解码器。

s409:配置音频流的音频解码器的标识为ffmpeg_codec_id_adpcm_ms。

同理,如果音频流的格式为adpcm,则配置的音频流的音频解码器的标识为ffmpeg_codec_id_adpcm_ms,该标识对应的解码器能够解码adpcm格式的音频流。例如,解析及配置解码器id如下:

#defineffmpeg_codec_id_adpcm_ms0x11006。

音频流adpcm:chumktype为ms02,配置音频流mimetype为audio/ffmpeg,codecid为ffmpeg_codec_id_adpcm_ms。

其中,ffmpeg_codec_id_adpcm_ms为音频解码器的标识,为该音频解码器的标识赋值,即赋值0x11006,则将音频解码器的标识发送至ffmpeg的时候,将ffmpeg_codec_id_adpcm_ms以及所赋的值0x11006一起发送至ffmpeg,则ffmpeg可以通过ffmpeg_codec_id_adpcm_ms查找到对应的音频解码器为adpcm解码器,也可以根据0x11006查找到对应的解码器,具体过程同上述mp3的过程,在此不再赘述。

s410:配置视频流为video/ffmpeg。

具体地,在上述类型id为mimetype的基础上,为视频流配置身份标识video/ffmpeg,该身份标识作为该视频流的身份标识,便于在配置解码器的时候,在确定该视频流的身份标识为video/ffmpeg时,选择采用本申请的解析和解码方法,即利用ffmpeg模块的视频处理方法,也就是说,该视频流的身份标识与解码策略对应。

s411:判断视频流格式。

其中,针对mp4格式的视频文件,视频流格式包括mjpeg和sorenson,则判断该音频流格式为mjpeg还是sorenson,如果是mjpeg,则执行s412,如果是sorenson,则执行s413。

s412:配置视频流的视频解码器的标识为ffmpeg_codec_id_mjpeg。

同理,如果视频流的格式为mjpeg,则配置的视频流的视频解码器的标识为ffmpeg_codec_id_mjpeg,该标识对应的解码器能够解码mjpeg格式的视频流。例如,解析及配置解码器id如下:

#defineffmpeg_codec_id_mjpeg0x8。

视频流mjpeg:chunktype为jpeg,配置视频流mimetype为video/ffmpeg,codecid为ffmpeg_codec_id_mjpeg。

其中,ffmpeg_codec_id_mjpeg为视频解码器的标识,为该视频解码器的标识赋值,即赋值0x8,则将视频解码器的标识发送至ffmpeg的时候,将ffmpeg_codec_id_mjpeg以及所赋的值0x8一起发送至ffmpeg,则ffmpeg可以通过ffmpeg_codec_id_mjpeg查找到对应的视频解码器为mjpeg解码器,也可以根据0x8查找到对应的解码器,具体过程同上述mp3的过程,在此不再赘述。

s413:配置视频流的视频解码器的标识为ffmpeg_codec_id_sorenson。

同理,如果视频流的格式为sorenson,则配置的视频流的视频解码器的标识为ffmpeg_codec_id_sorenson,该标识对应的解码器能够解码sorenson格式的视频流。例如,解析及配置解码器id如下:

#defineffmpeg_codec_id_sorenson0x18。

视频流sorenson:chunktype为sorenson,配置视频流mimetype为video/ffmpeg,codecid为ffmpeg_codec_id_sorenson。

其中,ffmpeg_codec_id_sorenson为视频解码器的标识,为该视频解码器的标识赋值,即赋值0x18,则将视频解码器的标识发送至ffmpeg的时候,将ffmpeg_codec_id_sorenson以及所赋的值0x18一起发送至ffmpeg,则ffmpeg可以通过ffmpeg_codec_id_sorenson查找到对应的视频解码器为sorenson解码器,也可以根据0x18查找到对应的解码器,具体过程同上述mp3的过程,在此不再赘述。

通过上述mp4解析器的扩展,对于之前这类不支持的视频可以正常解析,得到需要解码的二进制数据。

app调用mediacodec并传出正确的音视频流mimetype,选择系统中集成的ffmpeg解码器系统,并且通过codecid精确配置ffmpeg中的相关解码器。

另外,客户端在播放系统播放模块不支持的视频文件的时候,相比通过调起第三方应用软解码该视频文件以播放视频,采用本申请的方法能够避免切换至第三方应用的视频播放界面,而是利用系统播放模块播放视频文件,不必进行跳转。

具体地,如图5所示,图5(a)的画面为客户端的界面,在该界面内显示有待播放视频文件的播放按钮,即“视频内容”对应的播放按钮,用户点击该播放按钮,如果调起第三方应用播放该视频,则客户端会被切换至后台,而第三方应用被调起并且被切换至前台,如图5(b)所示。而如果采用本申请的视频处理方法,则系统播放模块和ffmpeg在后台对视频解析和解码,则不会导致客户端被切换至后台,如图6(b)所示,依然在客户端的界面上播放该视频。

另外,客户端不调起第三方应用程序播放该视频,也能够避免用户在对客户端静音之后,由于使用第三方应用程序播放该视频,却依然导致视频播放发出声音。具体地,如图7所示,本申请实施例提供了一种数据传输方法,应用于上述电子设备,所述电子设备包括系统播放模块以及ffmpeg模块,具体地,该方法的执行主体是系统播放模块,则该方法包括:s701至s708。

s701:所述系统播放模块获取目标客户端发送的待播放视频文件。

s702:判断是否支持播放所述待播放视频文件。

s703:将所述视频文件解析以获得所述视频文件内的音频流和视频流。

s704:为所述音频流配置音频解码器的标识以及为视频流配置视频解码器的标识。

s705:将所述视频流、所述音频流、视频解码器的标识以及音频解码器的标识发送至所述ffmpeg模块,以使所述ffmpeg模块根据所述视频解码器的标识查找到对应的视频解码器并对所述视频流解码以获取视频播放数据,并且根据所述音频解码器的标识查找到对应的音频解码器并对所述音频流解码以获取音频播放数据。

s706:获取所述ffmpeg模块返回的所述音频播放数据和视频播放数据。

在ffmpeg模块获取到音频播放数据和视频播放数据,可以将音频播放数据和视频播放数据发送至系统播放模块,而系统播放模块控制电子设备的音视频输出模块,利用音频播放设备(例如,扬声器、听筒或者耳机等)播放音频播放数据,并且利用视频播放设备(例如,屏幕)播放视频播放数据。

当然,也可以是ffmpeg模块直接控制电子设备的音视频输出模块输出音频播放数据和视频播放数据。

于本申请实施例中,ffmpeg模块将解码之后的音频播放数据和视频播放数据返回至系统播放模块,则系统播放模块能够控制所述电子设备的音视频输出模块播放所述音频播放数据和视频播放数据,由此,系统播放模块继续使用原生播放逻辑播放视频,可移植性更高。

s707:检测所述目标客户端是否处于静音模式。

其中,目标客户端为请求播放待播放视频文件的客户端。

作为另一种实施方式,确认所述目标客户端是否处于静音模式的方式为:获取目标客户端的音量参数,如果所述音量参数为目标参数,则判定目标客户端处于静音模式。如果所述音量参数不是目标参数,则判定目标客户端不处于静音模式。

于本申请实施例中,第一参数与静音状态对应,第二参数与非静音状态对应,该目标参数为第一参数。目标客户端在播放音频时,读取与该目标客户端对应的音量参数,如果所读取的音量参数为第一参数,即所述音量参数为目标参数,则将目标客户端静音,即此时应用程序的音量状态为静音状态。如果音量参数是第二参数,即所述音量参数不是第一参数,则指示所述目标客户端按照预设音量播放所述视频文件,即此时应用程序的音量状态为非静音状态。其中,将目标客户端静音的具体实施方式可以是,禁止播放目标客户端内的视频文件,也可以是,以静音方式播放所述视频文件,即运行该视频文件但是不通过扬声器或耳机等设备播放该视频文件。

具体地,目标客户端的音量参数可以是由用户设定的,例如,通过移动终端的输入设备为该目标客户端设定音量参数。作为一种实施方式,可以设置一个目标客户端音量控制键,该目标客户端音量控制键至少包括两个逻辑状态,分别为第一状态和第二状态,其中,第一状态对应第一参数,第二状态对应第二参数,而且,也能够将目标客户端的音频设置为静音,即处于静音模式。在静音模式下,客户端可以是播放所有的视频文件或者音频文件均不发出声音。

作为另一种实施方式,检测所述目标客户端是否处于静音模式的方式为:判断当前是否存在其他客户端正在播放音频;若存在其他客户端正在播放音频,则判定所述目标客户端处于静音模式。

判断当前是否存在其他客户端正在播放音频,如果存在其他客户端正在播放音频,则判定所述网页客户端满足静音条件,如果不存在其他客户端正在播放音频,则判定所述网页客户端不满足静音条件。具体地,系统可以通过一些特定的api接口或者sdk组件来查阅所安装在移动终端内的客户端的启动、运行数据等情况。具体地,可以通过系统的音频管理器的对外接口来查看当前系统内是否有应用正在播放音频,例如,获取ismusicactive()的返回结果,由此确定是否有其他应用正在播放音频文件。如果有,则判定目标客户端处于静音模式,否则,则判定目标客户端未处于静音模式。

s708:控制所述电子设备的音视频输出模块以静音音量播放所述音频播放数据和视频播放数据。

而如果目标客户端未处于静音模式,则控制电子设备的音视频输出模块以预设音量播放所述音频播放数据和视频播放数据,其中,预设音量可以是当前的系统音量,也可以是目标客户端被设置的音量值。

请参阅图8,本申请实施例提供了一种数据传输方法,应用于上述电子设备,所述电子设备包括系统播放模块以及ffmpeg模块,具体地,该方法为系统播放模块与ffmpeg模块的交互过程,则该方法包括:s801至s805。

s801:所述系统播放模块获取目标客户端发送的待播放视频文件。

s802:所述系统播放模块判断是否支持播放所述待播放视频文件。

s803:所述系统播放模块将所述视频文件解析以获得所述视频文件内的音频流和视频流,为所述音频流配置音频解码器的标识以及为视频流配置视频解码器的标识。

s804:所述系统播放模块将所述视频流、所述音频流、视频解码器的标识以及音频解码器的标识发送至所述ffmpeg模块。

s805:所述ffmpeg模块根据所述视频解码器的标识查找到对应的视频解码器并对所述视频流解码以获取视频播放数据,并且根据所述音频解码器的标识查找到对应的音频解码器并对所述音频流解码以获取音频播放数据。

其中,ffmpeg模块将所述待播放视频文件解码以获取音频播放数据和视频播放数据的具体实施方式,可以是上述图3所示的步骤,系统播放模块解析之后,将所述视频流、所述音频流、视频解码器的标识以及音频解码器的标识发送至所述ffmpeg模块,以使所述ffmpeg模块根据所述视频解码器的标识查找到对应的视频解码器并对所述视频流解码以获取视频播放数据,并且根据所述音频解码器的标识查找到对应的音频解码器并对所述音频流解码以获取音频播放数据。

作为另一种实施方式,ffmpeg模块具有视频解析解码的功能,则ffmpeg模块将所述待播放视频文件解码以获取音频播放数据和视频播放数据的具体实施方式可以是:ffmpeg模块获取所述待播放视频文件内的音频流和视频流;根据所述视频流的类型查找到对应的视频解码器并对所述视频流解码以获取视频播放数据,并且根据所述音频流的类型查找到对应的音频解码器并对所述音频流解码以获取音频播放数据。

具体地,本申请实施例示出了系统播放模块与ffmpeg模块的交互过程,详细的实施方式可以参考前述实施例。

请参阅图9,其示出了本申请实施例提供的一种视频处理装置900的结构框图,该装置可以包括:获取单元901、判断单元902、解析单元903、配置单元904和处理单元905。

获取单元901,用于获取目标客户端发送的待播放视频文件。

判断单元902,用于判断是否支持播放所述待播放视频文件。

解析单元903,用于若不支持,将所述视频文件解析以获得所述视频文件内的音频流和视频流。

配置单元904,用于为所述音频流配置音频解码器的标识以及为视频流配置视频解码器的标识。

处理单元905,用于将所述视频流、所述音频流、视频解码器的标识以及音频解码器的标识发送至所述ffmpeg模块,以使所述ffmpeg模块根据所述视频解码器的标识查找到对应的视频解码器并对所述视频流解码以获取视频播放数据,并且根据所述音频解码器的标识查找到对应的音频解码器并对所述音频流解码以获取音频播放数据,其中,所述音频播放数据和视频播放数据能够被电子设备的音视频输出模块播放。

另外,还包括播放单元,用于获取所述ffmpeg模块返回的所述音频播放数据和视频播放数据,控制所述电子设备的音视频输出模块播放所述音频播放数据和视频播放数据。

其中,上述各单位位于系统播放模块内,可以是设置植入视频播放模块的程序代码。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,模块相互之间的耦合可以是电性,机械或其它形式的耦合。

另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

请参阅图10,本申请实施例还提供了一种视频处理装置1000,包括系统播放模块1001以及ffmpeg模块1002。

所述系统播放模块1001用于获取目标客户端发送的待播放视频文件;判断是否支持播放所述待播放视频文件;若不支持,将所述视频文件解析以获得所述视频文件内的音频流和视频流,为所述音频流配置音频解码器的标识以及为视频流配置视频解码器的标识,将所述视频流、所述音频流、视频解码器的标识以及音频解码器的标识发送至所述ffmpeg模块1002。

所述ffmpeg模块1002用于根据所述视频解码器的标识查找到对应的视频解码器并对所述视频流解码以获取视频播放数据,并且根据所述音频解码器的标识查找到对应的音频解码器并对所述音频流解码以获取音频播放数据,其中,所述音频播放数据和视频播放数据能够被电子设备的音视频输出模块播放。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,模块相互之间的耦合可以是电性,机械或其它形式的耦合。

另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

请参考图11,其示出了本申请实施例提供的一种电子设备的结构框图。该电子设备100可以是智能手机、平板电脑、电子书等能够运行应用程序的电子设备。本申请中的电子设备100可以包括一个或多个如下部件:处理器110、存储器120、音视频输出模块30以及一个或多个应用程序,其中一个或多个应用程序可以被存储在存储器120中并被配置为由一个或多个处理器110执行,一个或多个程序配置用于执行如前述方法实施例所描述的方法。

处理器110可以包括一个或者多个处理核。处理器110利用各种接口和线路连接整个电子设备100内的各个部分,通过运行或执行存储在存储器120内的指令、程序、代码集或指令集,以及调用存储在存储器120内的数据,执行电子设备100的各种功能和处理数据。可选地,处理器110可以采用数字信号处理(digitalsignalprocessing,dsp)、现场可编程门阵列(field-programmablegatearray,fpga)、可编程逻辑阵列(programmablelogicarray,pla)中的至少一种硬件形式来实现。处理器110可集成中央处理器(centralprocessingunit,cpu)、图像处理器(graphicsprocessingunit,gpu)和调制解调器等中的一种或几种的组合。其中,cpu主要处理操作系统、用户界面和应用程序等;gpu用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器110中,单独通过一块通信芯片进行实现。

另外,处理器110包括系统播放模块1001和ffmpeg模块1002,则系统播放模块1001和ffmpeg模块1002的具体实施方式可参考前述实施例,在此不再赘述。

存储器120可以包括随机存储器(randomaccessmemory,ram),也可以包括只读存储器(read-onlymemory)。存储器120可用于存储指令、程序、代码、代码集或指令集。存储器120可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储电子设备100在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。

请参考图12,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读存储介质1200中存储有程序代码,所述程序代码可被处理器调用执行上述方法实施例中所描述的方法。

计算机可读存储介质1200可以是诸如闪存、eeprom(电可擦除可编程只读存储器)、eprom、硬盘或者rom之类的电子存储器。可选地,计算机可读存储介质1200包括非易失性计算机可读介质(non-transitorycomputer-readablestoragemedium)。计算机可读存储介质1200具有执行上述方法中的任何方法步骤的程序代码1210的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码1210可以例如以适当形式进行压缩。

最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1