最近将视频客户端移植到了ANDROID平台。 分享一下开发心得。
类似HTTP LIVE STREAMING的流式下载方式, 但APPLE的TS格式冗余数据太多, 我用的是私有格式,更加节省带宽资源。H264+AMRNB编码。每个分片文件20秒。整体架构如下图:
作为HTTP下载模块对稳定性要求比较高,用NDK的话debug会很麻烦,JAVA层下载效率也还行,所以采用JAVA层的HttpURLConnection类, 服务器端在Response header里包含了下一个文件的filename,下一次的连接时将把filename作为URL的一个参数发送。这样就能做到流式的下载。 建立一个bytearrayoutputstream实例来缓存数据。 并通过JNI传递给文件解析层。
因为JAVA与JNI层数据交互很耗时,所以选择下载好一个完整文件再feed给Parser。
AUDIO必须要流畅,所以单开一个thread, Video来得及的话可以用一个timer(减少一点功耗