author: A.TNG <jiyucn@163.com>
关于Media-S,之前的文章有描述。代码好几年没有更新了,但是由于代码量小,流程简单,相关文档还算完善,本着学习的目的,决定先编译通过,试着运行一下。
目标平台: Redhat 9
gcc 3.2.2
其实选择平台的时候,考虑到Media-S的最近更新时间是2003年,并且Redhat 9也是同年发布的,为了方便编译,选择了以上版本。
编译工作:
1. 检查 /usr/include 目录下。因为Media-S需要pthread,expat,CURL,OpenSSL,Ogg和Vorbis的支持,首选需要检查对应目录下存在相关的头文件:
/usr/include/pthread.h
/usr/include/expat.h
检查对应目录下存在相关的文件夹,并且文件夹中包含相关头文件:
/usr/include/openssl/
/usr/include/curl/
/usr/include/ogg/
/usr/include/vorbis/
2. 除了以上头文件,Media-S还使用了Kerberos库中的krb5.h,找到该头文件所在的目录,通常是在/usr/kerberos/include/目录下,分别打开oggsen/Makefile和oggs123/Makefile,在各个文件的CFLAGS后加上 -I/usr/kerberos/include。目的就是让编译器上对应的目录找krb5.h。
3. 打开oggs123/Makefile,将
static: $(LIBOBJS)
ar rcs libmediasdecrypt.a libmediasdecrypt/mediasdecrypt.o ../common/common.o libmediasdecrypt/decryptcommon.o
改成
static: $(LIBOBJS)
ar rcs libmediasdecrypt.a libmediasdecrypt/mediasdecrypt.o ../common/common.o libmediasdecrypt/decryptcommon.o /
libmediasdecrypt/licensevault.o /
libmediasdecrypt/streamrequest.o /
libmediasdecrypt/licenseserver.o /
../common/simpledb.o
4. 打开/common/common.c和/common/common.h,整个源代码中,竟然只有函数freeCommentList的声明,没有定义,仅为了编译通过的话,直接在空白处加上
int freeCommentList(CommentData * oComment)
{
return 0;
}
猜测该函数是用来释放链表的空间,因此如上定义函数的话,一定会有内存泄漏的。
5. 修改工作完成以后就可以开始编译了,因为有一些依赖关系,因此在编译的时候尽量不要打乱顺序。
1) 进入oggs123,make shared
2) 在oggs123中,make static
3) 在oggs123中,make license
4) 在oggs123中,make。以上步骤成功以后,create-license和oggs123都已经生成,同时生成了静态库libmediasdecrypt.a和动态库libmediasdecrypt.so.1.0.1。
5) 进入oggsenc,make。成功后,oggsenc就生成了。