zoukankan      html  css  js  c++  java
  • NDK下 将Platinum SDK 编译成so库 (android upnp)

    Platinum UPnP SDK 是一个跨平台的C++库,利用该库,可以很容易就构建出DLNA/UPnP控制点(DLNA/UPnP Control Point)和DLNA/UPnP设备(DLNA/UPnP Device),其中包括有UPnP AV Media Server, Media Render & Control Point的例子。它可以在Windows, Mac OSX, Linux, iPhone, Android, Symbian等多种C语言开发平台上编译通过且运行 

    官方网址:http://www.plutinosoft.com/platinum

    SDK下载地址:http://sourceforge.net/projects/platinum/

    下载后得到一个PlatinumKit-1-0-4-2_99100e_aab601.zip

    版本信息为

    Platinum Kit Version 1-0-4-2

    -----------------------------

    Neptune:  aab601

    Platinum:  99100e

    解压开来先熟悉下该包的内容

    查看Platinum目录下的ReadMe.txt

    该包包含了这两个主要的库

    进入Platinum\Build\Targets\x86-microsoft-win32-vs2008目录

    打开PlatinumManaged.sln解决方案可以看到工程的关联

    Neptune和Platinum都是静态链接库,后续编译so库会用到

    Platinum.Managed是动态链接库,暂时不用管

    看看给android调用的so库如何编译

    首先要下载ndk组件包

    网址:http://developer.android.com/tools/sdk/ndk/index.html#Installing

    这里我以ubuntun 64位环境为例,下载android-ndk-r8e-linux-x86_64.tar.bz2 

    在ubuntun下解压后配置ANDROID_NDK_ROOT环境变量

    <1>使用命令vi ~/.bashrc 打开环境变量设置,并在文件末尾添加:

    ANDROID_NDK_ROOT=你的ndk根目录绝对路径

    export ANDROID_NDK_ROOT

    <2>使用命令source  ~/.bashrc使环境变量设置生效。

    <3>使用命令echo $ANDROID_NDK_ROOT查看是否生效,如果输出完整路径正确,说明环境变量设置ok.

    <4>此步可选,使用cd命令进入到androidNDK/samples/hello-jni进入例子目录,然后使用命令:sudo $ANDROID_NDK_ROOT/ndk-build如果编译成功,则会生成so库,表示NDK能够正常Work了

    Ndk环境搭好后就可以编译Platinum lib了

    <1>在androidNDK目录下面生成out/config.mk文件,里面输入内容如下:

    HOST_TAG:=linux-x86

    然后保存退出;

    <2>进入Platinum目录

    打命令scons target=arm-android-linux build_config=Release

    (请确保scons工具已安装)

    正常的话最后会输出:scons: done building targets.表示编译完成了。

    在Platinum\Build\Targets\arm-android-linux\Release目录下生成相关*.a库

    不带后缀的是c可执行文件

    <3>进入到/PlatinumKit/Platinum/Source/Platform/Android/module/platinum/jni目录下面,

    注意:这里需要先修改该jni目录下的Android.mk文件,将LOCAL_LDLIBS += -laxTls改为LOCAL_LDLIBS += -laxTLS,主要是前面生成库的名字是-laxTLS而不是-laxTls

    使用命令:$ANDROID_NDK_ROOT/ndk-build NDK_DEBUG=0

    编译之后会输出如下信息,表示生成SO库成功。

    SharedLibrary  : libplatinum-jni.so

    Install        : libplatinum-jni.so => libs/armeabi/libplatinum-jni.so

    进入到目录PlatinumKit/Platinum/Source/Platform/Android/module/platinum/lib目录下面可以看到生成so库.

    最后是测试该so库

    将Platinum\Source\Platform\Android下的两个工厂导入eclipse

    一个是lib工程,一个是apk工程,建立引用关系,然后在platinum工程下建立libs/armeabi目录并将前面编好的so库放进去

    运行sample-upnp

    示例比较粗糙,start后设备并不能被外界发现,需要自己重新封装,具体用法可参照

    Platinum\Source\Tests\MediaRenderer下的MediaRendererTest.cpp文件

    可在PlatinumManaged.sln解决方案下将MediaRendererTest工程导入,然后配置项目依赖项把那两个静态库添进来,在window下将MediaRendererTest跑起来可被外界发现

    至此一个简单的platinum的so库封装和调用就实现了

    至于DMR,DMS以及DMC等实现就需要自己先摸透该框架的使用方法

    主要涉及到这三个类

    PLT_FileMediaServer:封装实现了DMS
    PLT_MicroMediaController:不是库里的类,是其一个例子的类,继承了PLT_SyncMediaBrowser和PLT_MediaController,即实现了DMC
    PLT_MediaRenderer:实现了DMR 

    另外里面许多示例程序包括Platinum.Managed都是值得参考借鉴的

    好了Platinum UPnP SDK的初级使用教程到此结束

    关于DMR和DMS的实现请参考这两篇博文:

    基于Platinum库的DMS实现(android)

    基于Platinum库的DMR实现(android)
     

    预知后事如何,且听下回分解

    more brilliant,Please pay attention to my CSDN blog -->http://blog.csdn.net/geniuseoe2012

  • 相关阅读:
    treesurgeon
    WatiN
    综艺《燃烧吧!天才程序员》:科技类真人秀凭什么吸引人?它是在消费群体吗?
    海外IT老兵谈996:人才不是加班加出来的,期待有企业能站出来破局
    C语言游戏脚本:利用API 函数实现一个简单的超级玛丽外挂!
    C语言基础丨运算符之逻辑运算符(四)
    40岁程序员被90后训斥不996,这世界怎么了?
    C语言丨关键字signed和unsigned 的使用与区别详解
    C语言基础丨运算符之关系运算符(三)
    最硬核的方式找女朋友:用 VS Code 找对象?还是不看脸的那种?!
  • 原文地址:https://www.cnblogs.com/lance2016/p/5204266.html
Copyright © 2011-2022 走看看