一、该例子实现的功能: APlayer 目前网络播放只支持 P2S 的 HTTP/FTP/RTMP/RTSP/MMS 等,如果要利用 APlayer 支持播放 P2P 以及BT/电驴/磁力链等更多的协议的播放,需要利用一个中间层来实现下载功能,
下载后的数据通过一个本地 HTTP 流媒体服务向 APlayer 提供;
本例实现了从远程服务器下载媒体数据并且缓存,然后APlayer再向中间层获取数据播放,
例子的目的
只在于通过 HTTP 来讲解中间层的实现逻辑,介绍中间层的写法框架而已,要支持其他协议还需要开发者自行添加代码,扩展实现。
二、接口说明: 本例的唯一接口:GetUrl,接口参数为视频文件的Url,格式形如
http://f1.flv.kankan.xunlei.com/data/cdn_transfer/demo.hflv,
该接口返回一个本地地址Url2,接下来调用APlayer的Open方法并且以Url2作为参数即可;
三、例子实现思路说明: 1) 首先接收到Url后立即向服务器获取视频文件信息,主要是视频文件大小信息,接着将用于监听的ListenSokcet加入到工作队列以等待APlayer的连接;
2) 当收到APlayer的连接后,新建一个ServerSocket用于与APlayer之间进行通信,APlayer通过HTTP协议发送GET请求,ServerSocket解析GET请求后,
如果请求数据段在缓存文件中,那么则从缓存文件读取;
如果请求数据段没有在缓存文件中,那么新建一个ClientSocket从服务器获取数据,ClientSocket获取数据后缓存到本地文件
四、缓存机制说明: 本例的缓存机制对文件的写入是采用成块写入,即每次只能写入一个完整的BLOCK,或者是视频文件结尾部分,每次从服务器端读入的数据根据字节位置计算出相应的块写入文件,
对读取的数据则可以是任意位置。另外本例中的缓存文件最大大小为65536*64K=4G.
五、其他说明: 本例只是作为一个例子,各方面的实现都相对简单,比如缓存文件名称,位置,http协议的处理,缓存文件大小修改等需要根据自己的需求进行修改。