以后很多文件都要include config.h这个文件,编译器会根据这个文件而选择性对代码进行编译。
2. 编译libavutil.a
在libavutil建立一个Android.mk的文件,libavutil里的makefile文件需要调用subdir.mak,这个其实就是真正的编译,但是书写在Android.mk下,这个make文件可以不要,但需要直接把对应的源文件引入,标准的makefile是指定.o目标文件,但在Android.mk中需要直接指定.c源文件,Android.mk文件如下所示:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := avutil
LOCAL_SRC_FILES:=adler32.c \
...... \
include $(BUILD_STATIC_LIBRARY)
编译时可能会出现很多错误,但这些
问题归结起来大部分都是因为有些头文件没有引入而产生的问题,只要引入相应的头文件后就可以了。比如不识别某些文件的size_t关键字,在该文件include stdio.h后就不报错了,其他类似错误就不一一例举了。
其它模块按照相同的方法书写Android.mk文件,移植到Android平台最为本文中播放器的解码模块。
4 各层模块详解
4.1数据获取层
该层完成主要功能为与流媒体服务器协商媒体信息细节,并根据协商结果从服务器端获取流媒体数据,将流媒体数据存入缓冲区,按照本文中缓冲策略将数据包发送给数据预处理层,其结构图如图2所示:
本文中该层一共启动五个线程,其中一个线程中启动TCP连接,用