当前位置: 首页 > 工具软件 > libdvbpsi > 使用案例 >

Android下libdvbpsi的使用

唐健
2023-12-01

DVB的项目还是用libdvbpsi舒服些,省得自己去分析那些鸟表,linux平台好些,但在android下,还没弄过,这回就试试。

上vlc网站发现libdvbpsi更新了,现在是1.0.0 pre2版本,看来终于算是正式版了,在ubuntu上先编译了一下,以前那些无聊的warning也没有了,挺好。

下面就往android上挪吧:

1、看了一下我的android平台ndk的编译器是arm-linux-androideabi-gcc,直接configure:

./configure --host=arm-linux-androideabi

报错(oh no!!!!)

configure: error: C compiler cannot create executables

怎么会!查config.log吧,提示:

configure:3173: arm-linux-androideabi-gcc    conftest.c  >&5

error: cannot open crtbegin_dynamic.o: No such file or directory,

查了一下编译器的目录,有啊,这个文件是存在的,又google一下(这期间绕了许多弯路),原来该编译器需要指定sysroot路径,就是ndk所使用的工具链的路径,于是改成:

./configure --host=arm-linux-androideabi CFLAGS="--sysroot=<YOUR_COMPILER_ROOT>"

configure轻松过了。

2、开始make

make -j 8

哥是8核啊,i7 8核16G啊,编译你还不容易。

我x,报错:

tables/tot.c:78: error: cast increases required alignment of target type

ubuntu没问题啊,都验证过了!

查了一下,跟configure自带的一个flag:Wcast-align有关系,可是为毛这玩意是默认的呢,直接修改Makefile吧

把src/Makefile:128行的-Wcast-align和有同样问题的Wsign-compare去掉,lib编译就没有问题了,example也是有同样的问题,用到再改。

3、集成

make出的libdvbpsi有2个版本,.a的静态库和.so的动态库,我用的是动态库,把libdvbpsi.so*拷贝到ndk能找到的路径下,修改自己的Android.mk

LOCAL_SHARED_LIBRARIES += libdvbpsi

把头文件拷到模块的本地目录,并在Android.mk中增加相应的LOCAL_C_INCLUDES就mm吧。

结果报bool没找到。。。

我搜了一下libdvbpsi的源代码,居然没有bool的定义,按说c是没有bool定义的。

随便打开一个dvbpsi的源文件,原来秘密在于c99增加的<stdbool.h>,这里定义的以前没有的bool类型,太爽了。

4、成功

编译成功后,给dvbpsi注入一个PAT,成功打印如下:

New PAT
  transport_stream_id : 35
  version_number      : 0
    | program_number @ [NIT|PMT]_PID
    |           5537 @ 0x101 (257)
  active              : 1


 类似资料: