一种基于Android系统的解码视频的方法与流程

文档序号:14687438发布日期:2018-06-15 05:20阅读:355来源:国知局

本发明涉及视频解码播放技术领域,尤其涉及一种基于Android系统的解码视频的方法。



背景技术:

常用的流媒体协议主要有HTTP渐进下载和基于RTSP/RTP的实时流媒体协议.

目前比较方便又好用的是用HTTP渐进下载协议,其中,Apple公司的HTTP Live Streaming(HLS,超文本直播流)是这种协议的代表,HLS协议是由Apple公司创立,基于HTTP的流媒体传输交互协议,并且HLS协议支持自动码率适配,在HLS技术中Web服务器向通信终端提供视频流服务。它最初是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的流,现在在桌面也有很多应用。在HLS技术中,Web服务器向客户端提供接近实时的音视频流。但在使用的过程中是使用的标准的HTTP协议,所以,只要使用HLS的技术,就能在普通的HTTP的应用上直接提供点播和直播。在App Store中的视频相关的应用,基本都是应用的此种技术。该技术基本原理是将视频文件或视频流切分成小片(ts)并建立索引文件(M3U8)。支持的视频流编码为H.264,音频流编码为AAC。

M3U8文件是指UTF-8编码格式的M3U文件。M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。M3U8是苹果公司推出的用在iPhone手机上的视频流媒体播出协议,视音频格式采用h.264/aac编码,使用mpeg2ts进行封包。

在现有技术条件下,在基于Android系统的设备上无法实现对M3U8协议进行解析,也即这种协议的流媒体文件无法在基于Android系统的终端设备上进行播放,现在的解决的方案主要有以下两种:

1.HTML播放,即在HTML中播放M3U8协议的流媒体文件。

优点:HTML是直接支持M3U8协议的流媒体文件,不用考虑终端设备的系统问题。

缺点:体验不好,没有原生开发的播放器流畅及操控的便捷性。

2.浏览器伪装Ipad模式,即在Android设备的浏览器中设置为Ipad模式,然后播放该类型的的流媒体文件。

优点:伪装成Apple设备访问行为,操作相对简单。

缺点:浏览器播放体验不好,且容易被检查出原设备为基于Android系统的终端,造成播放失败。



技术实现要素:

本发明的目的在于提供一种基于Android系统的解码视频的方法,从而解决现有技术中存在的前述问题。

为了实现上述目的,本发明采用的技术方案如下:

一种基于Android系统的解码视频的方法,包括如下步骤:

S1,获取M3U8文件;

S2,解析M3U8文件,获取.TS包文件;

S3,对.TS包文件进行解析,直接获取TS视频片段地址,或对TS视频片段索引列表进行URL拼接后,获取TS视频片段地址;

S4,创建播放任务列表,存储M3U8文件中每个TS视频片段的地址;

S5,根据每个TS视频片段的地址,在基于Android系统的设备上播放任务列表中TS视频片段。

优选地,S1具体为:通过网络传输从存储视频文件的服务器获取或从设备存储器中取得带解析的文件。

优选地,S1中,所述M3U8文件如有加密,则获取key的URL地址和M3U8索引列表密文,获取内容解密公钥,并对M3U8索引列表密文进行解密。

优选地,S2具体为,根据M3U8文件中的系列标签对M3U8文件进行解析,得到.TS包文件的URL地址或相对索引地址,所述系列标签包括:

#EXTM3U,位于每个M3U8文件的第一行;

#EXT-X-TARGETDURATION,用于指定最大的媒体段时间长度,其值在M3U8文件中只出现一次;

#EXTINF,用于描述单个媒体文件的长度,其值小于或等于#EXT-X-TARGETDURATION标签中指定的值,该标签之后为.TS包文件的URL地址或相对索引地址。

优选地,S3中,TS视频片段地址为文件名称、目录结构、目录结构且与M3U8文件的下载地址目录重叠或完整的片段下载地址;

所述直接获取TS视频片段地址,或对TS视频片段索引列表进行URL拼接后,获取TS视频片段地址,采用如下方法进行实施:

打开一级文件,获取TS视频片段地址;

打开一级文件后,对TS视频片段索引列表进行URL拼接后,获取TS视频片段地址;

在一级文件中,直接获取到二级文件的地址,在二级文件中,直接获取TS视频片段地址,或在二级文件中,拼接二级链接的地址获取到TS视频片段地址;

在一级文件中,拼接一级链接的地址获取到二级文件的地址,在二级文件中,直接获取TS视频片段地址,或在二级文件中,拼接二级链接的地址获取到TS视频片段地址。

优选地,S4具体为:

创建一个数组或序列的播放任务列表,用于存储解析获得的每个TS视频文件的索引地址,并将播放任务列表利用以下任意一种的安卓数据存储技术存储到应用数据里:SharedPreferences存储数据、文件存储数据、SQLite或其他数据库存储数据、ContentProvider存储数据和网络存储数据。

优选地,S5具体为:将每个TS视频片段的地址传递给播放器,播放器根据这个地址获取相应的视频流文件进行播放。

本发明的有益效果是:本发明实施例提供的基于Android系统的解码视频的方法,通过在Android系统上对M3U8协议进行解析,然后对TS进行解包,再在Android系统上对h.264/aac进行解码播放(Android系统的设备本身可以播放mp4格式h.264/aac编码的视频),在使用过程中,Android用户下载M3U8文件,通过M3U8文件的索引地址,播放索引列表下具体的每个小段视频,实现了在Android设备上对M3U8索引列表下视频文件的解析播放,进而实现了流媒体的跨平台跨设备视频点播和直播体验。

附图说明

图1是本发明实施例提供的基于Android系统的解码视频的方法流程示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。

如图1所示,本发明实施例提供了一种基于Android系统的解码视频的方法,包括如下步骤:

S1,获取M3U8文件;

S2,解析M3U8文件,获取.TS包文件;

S3,对.TS包文件进行解析,直接获取TS视频片段地址,或对TS视频片段索引列表进行URL拼接后,获取TS视频片段地址;

S4,创建播放任务列表,存储M3U8文件中每个TS视频片段的地址;

S5,根据每个TS视频片段的地址,在基于Android系统的设备上播放任务列表中TS视频片段。

其中,S1具体可以为:通过网络传输从存储视频文件的服务器获取或从设备存储器中取得带解析的文件。

在实际使用过程中,即用户下载M3U8文件。

在本发明的一个优选实施例中,S1中,所述M3U8文件如有加密,则获取key的URL地址和M3U8索引列表密文,获取内容解密公钥,并对M3U8索引列表密文进行解密。

采用上述方法,可以实现对M3U8文件的解密。

本发明实施例中,S2具体可以为,根据M3U8文件中的系列标签对M3U8文件进行解析,得到.TS包文件的URL地址或相对索引地址,所述系列标签包括:

#EXTM3U,位于每个M3U8文件的第一行;

#EXT-X-TARGETDURATION,用于指定最大的媒体段时间长度,其值在M3U8文件中只出现一次;

#EXTINF,用于描述单个媒体文件的长度,其值小于或等于#EXT-X-TARGETDURATION标签中指定的值,该标签之后为.TS包文件的URL地址或相对索引地址。

由于M3U8是用文本方式对媒体文件进行描述的,它是由一系列标签组成的,所以,采用上述方法,可以方便快捷的实现对M3U8文件的解析,得到.TS包文件的URL地址或相对索引地址。

本发明实施例中,S3中,TS视频片段地址可以为文件名称、目录结构、目录结构且与M3U8文件的下载地址目录重叠或完整的片段下载地址;

所述直接获取TS视频片段地址,或对TS视频片段索引列表进行URL拼接后,获取TS视频片段地址,采用如下方法进行实施:

打开一级文件,获取TS视频片段地址;

打开一级文件后,对TS视频片段索引列表进行URL拼接后,获取TS视频片段地址;

在一级文件中,直接获取到二级文件的地址,在二级文件中,直接获取TS视频片段地址,或在二级文件中,拼接二级链接的地址获取到TS视频片段地址;

在一级文件中,拼接一级链接的地址获取到二级文件的地址,在二级文件中,直接获取TS视频片段地址,或在二级文件中,拼接二级链接的地址获取到TS视频片段地址。

在实际使用过程中,TS视频片段的地址存在以下可能的四种情况:

第一种:ts片段地址为文件名称;

第二种:ts片段地址为目录结构;

第三种:ts片段地址为目录结构,但是和m3u8下载地址目录重叠;

第四种:ts片段地址为完整的片段下载地址。

针对这四种情况,可以通过以下方法获取TS视频片段地址

直接获取TS视频片段地址,或者,通过对TS视频片段索引列表进行URL拼接后,获取TS视频片段地址,具体的获取方法主要包括两种:

1)一级目录:

打开第一级文件,能找到真正的视频地址;

第一级文件中,没有真正的视频地址,需要拼接才能找到真正的视频地址;

2)二级目录:

二级地址在一级文件中直接能看到;

二级地址在一级文件中不能直接看到,需要拼接一级链接的地址才能找到二级文件的地址;

打开二级目录,能找到真正的视频地址;

没有真正的视频地址,需要拼接才能找到真正的视频地址;

本发明实施例中,S4具体可以为:

创建一个数组或序列的播放任务列表,用于存储解析获得的每个TS视频文件的索引地址,并将播放任务列表利用以下任意一种的安卓数据存储技术存储到应用数据里:SharedPreferences存储数据、文件存储数据、SQLite或其他数据库存储数据、ContentProvider存储数据和网络存储数据。

本发明实施例中,S5具体为:将每个TS视频片段的地址传递给播放器,播放器根据这个地址获取相应的视频流文件进行播放。

ts文件为传输流文件,视频编码主要格式h264/mpeg4,音频为acc/MP3。ts文件分为三层:ts层Transport Stream、pes层Packet Elemental Stream、es层Elementary Stream.es层就是音视频数据,pes层是在音视频数据上加了时间戳等对数据帧的说明信息,ts层就是在pes层加入数据流的识别和传输必须的信息,其中ts层的内容是通过PID值来标识的,主要内容包括:PAT表、PMT表、音频流、视频流。解析ts流要先找到PAT表,只要找到PAT就可以找到PMT,然后就可以找到音视频流了。对于HLS流只要有PAT和PMT就可以播放。所以根据视频文件的真正地址,只需把地址传递给播放器,播放器就可以根据这个地址获取相应的视频流文件播放,从而实现在基于Android系统的设备上播放任务列表中视频文件。

通过采用本发明公开的上述技术方案,得到了如下有益的效果:本发明实施例提供的基于Android系统的解码视频的方法,通过在Android系统上对M3U8协议进行解析,然后对TS进行解包,再在Android系统上对h.264/aac进行解码播放(Android系统的设备本身可以播放mp4格式h.264/aac编码的视频),在使用过程中,Android用户下载M3U8文件,通过M3U8文件的索引地址,播放索引列表下具体的每个小段视频,实现了在Android设备上对M3U8索引列表下视频文件的解析播放,进而实现了流媒体的跨平台跨设备视频点播和直播体验。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。

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