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)

NDK下 将Platinum SDK 编译成so库 (android - upnp)的更多相关文章

  1. dlib编译成静态库及被其它程序调用

    一.git下载:https://github.com/davisking/dlib 官网:http://dlib.net/ 二.vs中编译成静态库 1.在vs2015中创建静态库工程(vs2015以上 ...

  2. Android导入第三方静态库.a编译成动态库.so

    http://ikinglai.blog.51cto.com/6220785/1324985 在Android开发的时候,经常会使用到用c或c++编写的第三方的静态库.如果有源码的话,可以直接跟你自己 ...

  3. 表格树控件QtTreePropertyBrowser编译成动态库(设计师插件)

    目录 一.回顾 二.动态库编译 1.命令行编译动态库和测试程序 2.vs工具编译动态库和测试程序 3.安装文档 4.测试文档 三.设计师插件编译 1.重写QDesignerCustomWidgetIn ...

  4. 将pugixml库编译成动态库的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 pugixml库默认是编译成静态库的.要把pugixml库编译成一个动态库,需要对代码做一些修改,具体是将 // If ...

  5. (原)linux下利用cmake来编译jthread开源库

    其实上次在用hisi3531平台的时候,就已经编译过一次这个库了,这次换了平台环境,交叉编译器变成了arm-hisiv100-linux-工具链,所以,没办法只能重新来过. 因为之前编译过,所以这次还 ...

  6. cocos2d-x 3.0 引用第三方库 及编译成apk时android mk文件写法

    cocos2d-x 3.0 中.假设你须要使用CocosStudio.Extensions扩展库 等等.都须要自己手动加入. 加入过程例如以下:(比方说如今我要加入libExtensions,libC ...

  7. Linux下用Intel编译器编译安装NetCDF-Fortan库(4.2以后版本)

    本来这个问题真的没必要写的,可是真的困扰我太久%>_<%,决定还是记录一下. 首先,最权威清晰的安装文档还是官方的: Building the NetCDF-4.2 and later F ...

  8. Couldn't load libPassword from loader:NDK开发中C文件编译成cpu对应的so类库时,找不到类库报错的原因之一

    LogCat输出: 03-03 12:42:32.665: E/AndroidRuntime(32432): FATAL EXCEPTION: main03-03 12:42:32.665: E/An ...

  9. [dpdk] dpdk编译成动态库使用 -- PCI port自动发现与pmd动态加载

    1.  修改配置文件 .conf, 设置如下变量的值. [root@D129 x86_64-native-linuxapp-gcc]# cat dpdk/x86_64-native-linuxapp- ...

随机推荐

  1. MP3文件结构及解码概述

    MP3文件结构概述 Layer-3音频文件.MPEG(MovingPicture Experts Group)在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG音频文件是MPEG1标准中的声音 ...

  2. CSS选择符 新的认识

    以前写选择符,很少使用">"符号,一般都是使用" "空格来代替.我觉得他们都是一样的功能,另一方面是为了方便.毕竟不用按住shift. 例如: .demo ...

  3. jQuery 双击事件(dblclick)时,不触发单击事件(click)

    我这是转载的文字 原文地址:http://www.cnblogs.com/wyblog/archive/2011/12/15/2289219.html 万恶的双击事件啊!! 在jQuery的事件绑定中 ...

  4. SpringMvc学习-环境搭建

    最近在学习SpringMVC,首先来说说SpringMVC项目的搭建. 1.SpringMVC简介 spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级W ...

  5. Git应用于Android项目的入门知识:我的理解

    Git应用于Android项目的基本知识.     常常将git,repo和gerrit三种工具配合起来使用,使Android开发中的部分工作自动化.并适应敏捷项目管理的需要.     repo是Go ...

  6. ExtJS 饼状图报表

    简单的ExtJS饼状图报表. 先上源码,咱再慢慢解析: Ext.onReady(function(){ var store = Ext.create('Ext.data.JsonStore', { f ...

  7. Python多线程同步命令行模拟进度显示

    最近在一个Python(3.5)的小项目中需要用到多线程加快处理速度,同时需要显示进度,于是查了些资料找到几个实现方法:线程池的map-reduce和Queue结合线程的实现.这里简单的实例介绍一下Q ...

  8. [C++程序设计]用指针变量作函数参数接收数组地址

    #include <iostream> using namespace std; void select_sort(int *p, int n) { int i, j, k; ; i &l ...

  9. 如何让EcStore和微博同步来推广网站

    EcStore是创建B2C商城的首选PHP系统,它功能强大.操作方便,安装后马上就能建立起一个自己的B2C商城,但建好后如何推广运营商城却不是件容易的事. 新浪微博用户数量大.传播速度快,互联网上拥有 ...

  10. URL锚点定位

    我们都知道<a>标签中的url属性有三种值: 绝对 URL - 指向另一个站点(比如 href="http://www.example.com/index.htm") ...