iOS开发,如何利用Platinum库开发一个DLNA功能
2017-09-19 20:51
253 查看
DLNA的全称是DIGITAL LIVING NETWORK ALLIANCE(数字生活网络联盟), 其宗旨是Enjoy your music, photos and videos, anywhere anytime, DLNA(Digital Living Network Alliance) 由索尼、英特尔、微软等发起成立、旨在解决个人PC,消费电器,移动设备在内的无线网络和有线网络的互联互通,使得数字媒体和内容服务的无限制的共享和增长成为可能,目前成员公司已达280多家。
<引自百度百科>
DLNA包含若干协议和标准,最重要的也是我们最常用的就是UPnP技术。那么UPnP又是什么呢?
通用即插即用 (UPnP) 是一种用于 PC 机和智能设备(或仪器)的常见对等网络连接的体系结构,尤其是在家庭中。UPnP 以 Internet 标准和技术(例如 TCP/IP、HTTP 和 XML)为基础,使这样的设备彼此可自动连接和协同工作,从而使网络(尤其是家庭网络)对更多的人成为可能。
<引自百度百科>
那么,了解了这两个概念,还不够,我们还需要了解DLNA中另外几个重要概念。
DMC:简单点说,就是一个控制点,那么这个控制点是什么,我个人的理解是,谁控制,谁就是控制点。
DMS:这是一个媒体服务器。
DMR:我理解为媒体渲染器。
这三者的关系是,DMC通过获取DMS上的歌曲或者视频(也可以不是DMS上的,而仅仅只是一个链接),把它们传送到DMR上,由DMR进行播放。
好了,我们把几个最基本的概念了解了一下,下面我们正式开始开发DLNA功能。DEMO在最后。
再补充一句,platinum是集成开发,博主认为,各位还是应该先看看底层协议,了解DLNA具体是怎么运作的,然后再使用这个库进行开发,下面给一个博主写的DEMO并推荐四篇文章,让各位学习。
1.DEMO
2.基于DLNA实现iOS,Android投屏:基本概念
3.基于DLNA实现iOS,Android投屏:SSDP发现设备
4.基于DLNA实现iOS,Android投屏:SOAP控制设备
5.基于DLNA实现iOS,Android投屏:订阅事件通知
一、DLNA简介
什么是DLNA?DLNA的全称是DIGITAL LIVING NETWORK ALLIANCE(数字生活网络联盟), 其宗旨是Enjoy your music, photos and videos, anywhere anytime, DLNA(Digital Living Network Alliance) 由索尼、英特尔、微软等发起成立、旨在解决个人PC,消费电器,移动设备在内的无线网络和有线网络的互联互通,使得数字媒体和内容服务的无限制的共享和增长成为可能,目前成员公司已达280多家。
<引自百度百科>
DLNA包含若干协议和标准,最重要的也是我们最常用的就是UPnP技术。那么UPnP又是什么呢?
通用即插即用 (UPnP) 是一种用于 PC 机和智能设备(或仪器)的常见对等网络连接的体系结构,尤其是在家庭中。UPnP 以 Internet 标准和技术(例如 TCP/IP、HTTP 和 XML)为基础,使这样的设备彼此可自动连接和协同工作,从而使网络(尤其是家庭网络)对更多的人成为可能。
<引自百度百科>
那么,了解了这两个概念,还不够,我们还需要了解DLNA中另外几个重要概念。
DMC:简单点说,就是一个控制点,那么这个控制点是什么,我个人的理解是,谁控制,谁就是控制点。
DMS:这是一个媒体服务器。
DMR:我理解为媒体渲染器。
这三者的关系是,DMC通过获取DMS上的歌曲或者视频(也可以不是DMS上的,而仅仅只是一个链接),把它们传送到DMR上,由DMR进行播放。
好了,我们把几个最基本的概念了解了一下,下面我们正式开始开发DLNA功能。DEMO在最后。
再补充一句,platinum是集成开发,博主认为,各位还是应该先看看底层协议,了解DLNA具体是怎么运作的,然后再使用这个库进行开发,下面给一个博主写的DEMO并推荐四篇文章,让各位学习。
1.DEMO
2.基于DLNA实现iOS,Android投屏:基本概念
3.基于DLNA实现iOS,Android投屏:SSDP发现设备
4.基于DLNA实现iOS,Android投屏:SOAP控制设备
5.基于DLNA实现iOS,Android投屏:订阅事件通知
二、集成Platinum库
2.1 下载Platinum库git clone --depth=1 https://github.com/plutinosoft/Platinum.git[/code]
2.2 编译Neptune库
由于Platinum库是基于C++编写的,所以我们要安装一个叫Neptune的跨平台库。不过我们不用自己去编译,打开你下载好的Platinum库,你会发现有一个Cartfile的文件,用cat Cartfiel就能输出里面的内容,你会看到里面有这个库,所以我们直接下载就好了。
下载的话我们需要用homebrew去下载一个carthage,然后再下载这个库。没有homebrew的以及不知道carthage是什么的同学请自行百度哦,这里就不多说了。cd Platinum brew install carthage carthage update
以上三条命令完成后,你会在platinum/Carthage/build文件夹下看到两个文件夹,分别是iOS和Mac,里面各有一个Neptune.framework,这时就说明我们编译成功了。
2.3 编译platinum库
打开platinum/Build/Targets/universal-apple-macosx/Platinum.xcodeproj工程,选择Platinum-iOS的target,分别在模拟器和iOS设备上运行一次。如下:
选择模拟器
选择iOS设备
运行完了之后,你可以看到如下的库:
编译好的库
然后右击选择show in Finder,找到它的位置,两个都要(前面编译了两次,把两次编译后的位置都找到),如下所示:
库的位置
iphonesimulator是模拟器的,iphoneos是真机的。
然后右击库,选择查看简介,复制它的路径,执行以下 的命令//注意:-info 后面的参数请输入自己的 lipo -info /Users/gvs/Library/Developer/Xcode/DerivedData/Platinum-hkmepfuudtuavbfavwowgoojdisc/Build/Products/Release-iphonesimulator/Platinum.framework/Platinum lipo -info /Users/gvs/Library/Developer/Xcode/DerivedData/Platinum-hkmepfuudtuavbfavwowgoojdisc/Build/Products/Release-iphoneos/Platinum.framework/Platinum
如果是博主这样的,说明是正常的:
查看支持的架构
我们看到模拟器支持的是i386 x86_64架构的,真机是支持armv7 arm64架构的,所以我们需要把两个库链接在一起。执行以下命令://把路径换成你自己的 lipo -create /Users/gvs/Library/Developer/Xcode/DerivedData/Platinum-hkmepfuudtuavbfavwowgoojdisc/Build/Products/Release-iphoneos/Platinum.framework/Platinum /Users/gvs/Library/Developer/Xcode/DerivedData/Platinum-hkmepfuudtuavbfavwowgoojdisc/Build/Products/Release-iphonesimulator/Platinum.framework/Platinum -output /Users/gvs/Library/Developer/Xcode/DerivedData/Platinum-hkmepfuudtuavbfavwowgoojdisc/Build/Products/Release-iphoneos/Platinum.framework/Platinum //查看有没有链接成功 lipo -info /Users/gvs/Library/Developer/Xcode/DerivedData/Platinum-hkmepfuudtuavbfavwowgoojdisc/Build/Products/Release-iphoneos/Platinum.framework/Platinum
完成后是这样子的:
链接成功
可以看到,platinum库已经同时支持真机和模拟器的架构了。三、使用platinum库
1.把刚刚编译好的Platinum.framework和我们之前下载的Neptune.framework一起拖进工程里面,勾选copy if needed选项,然后在Embedded Binaries 里面添加这两个库。
2.在使用库里面的头文件的时候,应该用#import <Platinum/Platinum.h>这样子的方式使用。
3.包含头文件后编译一次,如果没有报错,说明我们导入成功了。四、开发DLNA功能
我们先看看这个库它本身是怎么使用的,打开Platinum/Build/Targets/universal-apple-macosx/Platinum.xcodeproj工程文件,target选择MicroMediaController,它是以控制台方式运行的。target对应的代码在Source/Apps/MicroMediaController下面,打开main.cpp,我们先注释一行代码,如下,这行代码是输出一些信息的,我们先可以不看。
注释
然后运行。运行后如果你有支持DLNA的设备,控制台依旧会输出一些信息,这时不用管它。在控制台里面按一下回车,会出现如下信息,也就是命令,然后自己慢慢摸索就可以了。对着MicroMediaController下单代码,慢慢看,慢慢写。
控制台命令
下面提供一个小DEMO,完成了播放,暂停,上一首,下一首,调音量功能,有需要的可以下载下来看看。
PlatinumDemo
相关文章推荐
- 转-iOS利用Platinum库开发DLNA功能
- iOS开发:一个瀑布流的设计与实现(已实现缓存池功能,该功能使得瀑布流cell可以循环利用)
- 【如何快速的开发一个完整的iOS直播app】(点赞功能)
- iOS开发:一个瀑布流的设计与实现(已实现缓存池功能,该功能使得瀑布流cell可以循环利用)
- 【转】 如何利用Cocos2d-x开发一个游戏
- Q:我欲使用WinDriver开发一个PCI卡的驱动程序来传输图像,但是当我利用WinDriver进行Virtex5 FPGA进行读取和写入动作时,计算机会当机,请问如何解决?
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- iOS 开发 中级:Audio之利用AVAudioPlayer实现SystemSoundService的功能
- 用asp.net开发的一个系统,如何给用户提供数据库备份和恢复的功能?
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- [ios开发]利用有道翻译API实现简单的翻译功能
- IOS开发---菜鸟学习之路--(十五)-如何实现拍照功能
- 如何利用Cocos2d-x开发一个游戏?
- ios开发 如何利用 友盟统计 或者 百度统计 进行 错误分析
- Objective-C ,ios,iphone开发基础:如何判断一个字符是不是中文字符。计算一段字符串的长度。
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- ios开发如何批量打包?如何让同一个程序在一个手机上多次安装时不覆盖以前安装的,而是重新生成一个新的
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!