Submitted by gouki on 2012, February 26, 10:19 PM
本文只是一个知识点,主要是Vampire和我说delphi可以开发原生IOS应用了,所以我觉得很奇怪就找了找资料,随手就把这篇infoQ的文章贴了出来。当然我的delphi是一塌糊涂,不过bobby和mpeg就不一样了,他们曾经靠这吃过饭 ,所以他们开发IOS就方便了。
嗯 ,原文在这里:http://www.infoq.com/cn/news/2011/09/RAD-Studio-XE2
继去年8月30日发布XE产品线到现在已经过去一年多的时间了,Embarcadero正准备发布其新版本的RAD Studio XE2工 具,其中包含了Delphi XE2、C++Builder XE2、RADPHP XE2及Prism XE2。此次发布带有很多新特性,最引入关注的莫过于对跨平台开发、Windows 64位、Amazon Cloud API、Native Android与iOS及HD与3D动画的支持了。
长久以来,众多Windows开发者都在使用Delphi与C++Builder针对微软平台创建应用,但现在他们也将目光瞄向了Mac OS X。其IDE并不能运行在Mac上,但编译器所生成的库则可以通过网络安装并运行在Mac计算机上,这样同一套源文件就会有两个应用库了。Delphi支 持Windows 64位,包含一个调试器和部署管理器。
Delphi与C++Builder还带有FireMonkey,这是一个新的平台,用于针对Windows、Mac OS X与iOS创建HD与3D动画。这些原生应用利用CPU与GPU来绘制动画,并且可以通过LiveBindings与任意数据类型进行连接。
Delphi与C++Builder应用可以部署到Amazon EC2与Windows Azure上,同时支持Amazon Simple Storage Service API、Queue Service与SimpleDB。
RADPHP现在则瞄准了iOS与Android设备,能以可视化的形式展现出应用在各个移动设备上的样子。开发人员还可以从PHP生成针对这些平台的原生应用。RADPHP使用了jQuery Mobile控件来设计界面。
除了对原有特性的增强外,Delphi Prism还增加了不少新特性,如下所示:
- 全新的Oxygene Compiler 5.0
- 编辑器可以显示出错误的详细信息、范围以及说明
- 代码编辑器可以即时显示出编译错误
- 针对选定的新错误的修复支持
- 语言软接口与鸭子类型
- 匿名接口实现
- 增强的Oxidizer集成
资源:感兴趣的读者可以在这里查看RAD Studio XE2中更加完整的增强列表。
查看英文原文:New in RAD Studio XE2: Multiplatform, Native iOS&Android, HD&3D Animation, and Cloud
--------
对于XE最早的了解还是来自于delphi4php可惜那个项目实在让人失望,不知道这次这个怎么样
Tags: macosx, delphi, ios, android
苹果相关 | 评论:0
| 阅读:18904
Submitted by gouki on 2011, November 3, 3:59 PM
由于公司的规划,在未来的一段时间内可能会给ipad用户提供流媒体的播放服务,因此,在服务器上架设流媒体服务器就已经被我提上了日程。找了不少资料,发现这一篇还算是相对不错的。
原文地址是:http://www.aojie.biz/902
原文内容:
iOS设备上要用原生的浏览器或者播放器来跑直播流媒体,确实是有点费周折,不过找对了软件和方法就相对容易许多。收集了一下关于iOS设备上搭建直播流媒体服务器的一些解决方案,如下:
1、凤雨小城,HLS 简介,http://www.vexx.cn/blog/read.php?240
2、dancong , wowza服务器无法将RTMP的流播放到iOS上(已解决),http://www.cocoachina.com/bbs/read.php?tid-47849.html
HLS简介 – rainstown (小城秋雨)
HLS(HTTP Live Streaming)是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的基于HTTP协议的流媒体解决方案。
在 HLS 技术中 Web 服务器向客户端提供接近实时的音视频流。但在使用的过程中是使用的标准的 HTTP 协议,所以这时,只要使用 HLS 的技术,就能在普通的 HTTP 的应用上直接提供点播和直播。
在App Store中的视频相关的应用,基本都是应用的此种技术。
该技术基本原理是将视频文件或视频流切分成小片(ts)并建立索引文件(m3u8)。支持的视频流编码为H.264,音频流编码为AAC。
m3u8文件示例:
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:10,
http://192.168.1.36/vod/tt/tt-1.ts
#EXTINF:10,
http://192.168.1.36/vod/tt/tt-2.ts
#EXTINF:10,
http://192.168.1.36/vod/tt/tt-3.ts
#EXT-X-ENDLIST
可以在iOS或Mac OS上通过quicktime或safari(其实还是调用quicktime)来进行播放。
下面分点播和直播分别进行一下介绍。
点播:
苹果官方提供了Segmenter软件,参数如下:
segmenter <input MPEG-TS file> <segment duration in seconds> <output MPEG-TS file prefix> <output m3u8 index file> <http prefix>
示例:
segmenter youku.m2ts 10 tt/tt index.m3u8 http://192.168.1.36/vod/
注意:输入文件必须为MPEG2TS格式。对我们的mp4文件来说,必须先进行一次容器格式转换才能进行分割。分割命令:
ffmpeg -i youku.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb youku.m2ts
我们下一阶段要做的视频分割项目,针对iOS平台的播放,可以考虑采用此种方式。只是若如此做,存储成本会加倍.。
直播:
客户端软件推送H.264视频流和AAC音频流到服务器软件,服务器软件将接收到的流每缓存一定时间后包装为一个新的ts文件,然后更新m3u8文件.。 m3u8文件中只保留最新的几个片段的索引,以保证观众任何时候连接进来都会看到较新的内容,实现近似直播的效果。这种方式的理论最小延时为一个ts文件 的时长,一般为2-3个ts文件的时长。
苹果没有官方的HLS直播服务器软件和客户端软件。其它第三方公司的产品有:
· TVersity
· Helix Universal Server
· Wowza Media Server
· VLC Media Player version 1.2
我采用Helix Universal Server和Helix Producer(客户端软件)进行了直播测试。
若要做针对iOS平台的直播,目前来看,只能采用此种方式。但在其它平台(除了iOS和Mac之外)上无法观看直播,也决定了此种直播方式的应用场景暂时具有相当的局限性,只能作为常规直播方式的一种补充。
wowza服务器无法将RTMP的流播放到iOS上(已解决)
我现在需要将本地Macbook的rtmp的视频流直播到iOS上,准备采用wowza作为服务器。
我按照这个教程用FlashMediaLiveEncoder 3.2 采集本机的iSight视频后,按视频H.264, Baseline 3.0, 音频 AAC为格式输出rtmp协议的流。
复制代码
- FMS URL里填rtmp://localhost:1935/live
- Stream里填mp4:myStream
|
我在本地按wowza官方的配置方法配完后,Mac OS X 网页上可以用jwplayer直接以:
复制代码
- var flashvars = {
- file:’myStream’,
- streamer:’rtmp://localhost/live/’
- };
|
这种方式播放rtmp流,说明wowza已经接收到rtmp流了。
问题是,用iOS访问“http://localhost:1935/live/myStream.sdp/playlist.m3u8”,结果iOS虽然出现播放界面,但是报错“File not found”,查看wowza控制台报错,说:
复制代码
- INFO stream create myStream.sdp -
- WARN server comment – HTTPStreamerAdapterCupertinoStreaming.getAppInstance: Stream not found [live/myStream.sdp/playlist.m3u8]: myStream.sdp
- WARN server comment – HTTPStreamerAdapterCupertinoStreaming.getAppInstance: Stream not found [live/myStream.sdp/playlist.m3u8]: myStream.sdp
- INFO stream destroy myStream.sdp -
|
说明访问到了wowza,但是wowza无法将rtmp流转成myStream。
我看过了Apple官方的HTTP live stream的文档,说需要segmenter将视频流切分成多个ts的视频文件和m3u8的播放列表,我觉得这些都是wowza负责实现的。
请问如何配置wowza才能将rtmp流转成Apple HTTP live stream。
另外,虽然wowza要求SDP文件,但是我不知道怎么生成SDP文件,而且网上有人说不用SDP文件也可以。是因为这个SDP缺失导致的吗?如何生成SDP?
解决方案:
根本不用生成SDP。
原来是iOS上的访问地址被官方误导了,晕死,官网上的竟然是错的。URL里不需要写“.sdp”,应该是http://localhost:1935/live/myStream/playlist.m3u8就可以了。
---------
最后一句超有意思。。
官方的文档应该是这个:http://developer.apple.com/library/ios/#documentation/networkinginternet/conceptual/streamingmediaguide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008332-CH1-DontLinkElementID_31
Tags: 流媒体, ios, fms
苹果相关 | 评论:0
| 阅读:37409
Submitted by gouki on 2011, October 13, 10:10 PM
纯记录,目前我还没有学到这里。
看到这样的文章,就先记录下来,以后不怕网址不在了。。。
1.copy vs mutableCopy
copy,对于不可变的对象,简单的指向其内存.对于可变对象,复制内存内容到新的内存中并把新的内存值赋值给左值.
mutableCopy,始终复制到新的内存中,以一个可变的类型赋值给左值.
2.copy vc retain
retain,引用计数+1,内存地址赋值给左值.
copy,对于不可变对象的,相当于retain;对于可变对象,则是深拷贝赋值.
C++代码
- NSString* a = [NSString stringWithFormat:@"%@",@"this is a"];
-
- NSString* b = [a copy];
-
- NSString* bb = [a retain];
-
- NSString* cc = [a mutableCopy];
-
- NSLog(@"%d,%d,%d,%d",[a retainCount],[b retainCount],[bb retainCount],[cc retainCount]);
-
- 3,3,3,1
-
- NSMutableString* a = [NSMutableString stringWithFormat:@"%@",@"this is a"];
-
- NSString* b = [a copy];
-
- NSString* bb = [a retain];
-
- NSString* cc = [a mutableCopy];
-
- NSLog(@"%d,%d,%d,%d",[a retainCount],[b retainCount],[bb retainCount],[cc retainCount]);
-
- 2,1,2,1
3.一些问题
通过上面2点,思考下面的问题
我们通常如果这样定义一个变量
@property(nonatomic,copy) NSMutableString* mString;
然后这样使用
@synthesize mString;
NSMutableString* a = [NSMutableString stringWithFormat:@"%@",@"this is a"];
self.mString = a;
[mString insertString:@"m-" atIndex:0];
能通过么?当然不能,赋值后的mString是NSString类型的,不可变.如果需要可以改变就需要自己定义属性函数.
-(void)setMString:(NSMutableString *)m
{
mString = [m mutableCopy];
}
-(NSMutableString *)mString
{
return mString;
}
(当然,NSMutableString不是线程安全的,一般都建议私有之:@private;或者一定要用的话以NSString作为对外接口类型)
4.NSCopying NSMutableCopying NSCopyObjective()
NSCopying就是复制一个对象
NSMutableCopying就是深拷贝一个对象,让两个对象的改变互不影响
(其实上面着两个完全看你怎么写啦)
NSCopyObject(self,0,zone)就是简单的赋值=
(在涉及到ns对象的时候,NSCopyObject不建议使用)
注意看下面一个例子:
@interface ClassB : NSObject <NSCopying>{
NSString* stringB;
}
@property(nonatomic,copy) NSString* stringB;
@end
-(id)copyWithZone:(NSZone *)zone
{
ClassB *b = NSCopyObject(self, 0, zone);
// 使用NSCopyObject时的正确赋值方法,因为没有涉及到原来的内存指针什么事
b->stringB = @"what";
// 看看被注释的这个错误方法,犹豫setter方法的特性,原来的stringB的retainCount减一
// 而犹豫NSCopyObject的特性,两者又是指向同一个地址的,所以,原类中stirngB已经释放了,玩了你dealloc中在释放一次?!.就出错啦
// b.stringB = @"what";
return b;
}
参考:http://stackoverflow.com/questions/2002174/copy-mutablecopy
http://stackoverflow.com/questions/4995254/nsmutablestring-as-retain-copy
http://robnapier.net/blog/implementing-nscopying-439#comment-1312
注释:可变对象mutable比如NSMutableString,NSMutableArray等
不可变对象immutable比如NSString,NSArray等
-----EOF--
原文来自:http://www.cnblogs.com/v2m_/archive/2011/10/12/2208684.html
作者:v2m
Tags: ios, 拷贝
苹果相关 | 评论:0
| 阅读:17368
Submitted by gouki on 2011, September 19, 3:15 PM
纯笔记:
在与IOS交互的时候,采用了POST发送数据,同事说需要发送一张图片,于是我直接用$_POST进行获取,发现该字段无值。打印整个$_POST的时候,连这个key都没有找到
于是我在想,php://input有没有值呢?试了一下也没有,其实想想也是,如果真是用Base64处理后的发给我。我也应该是可以通过 $_POST收到的。
不过,还没有尝试这种:
PHP代码
- preg_match('/attachment;\s+name="(.+?)";\s+filename="(.+?)"/i', $_SERVER['HTTP_CONTENT_DISPOSITION'], $info)
这种是HTML5上传了,不过我没有试过。。。
我看了一下同事以前的代码,发现是用$_FILES的,于是很方便的套了几行代码就一切都OK了。。
看来,脑子还是不能乱。
Tags: ios
PHP | 评论:1
| 阅读:20644
Submitted by gouki on 2010, November 8, 9:45 PM
先发个牢骚,我想要苹果我想要苹果。不是那个苹果是那个苹果。you know.....
只是每次申请经费都被上级领导驳回,只能在这里发发牢骚。
昨天参加thinkinlamp的时候有人告诉我,现在ios是4.2了。。这才发现,原来我的ipad在我手里的应用真的很简单的,除了看pdf就是看pdf,当然偶尔也会玩玩所谓的愤怒的小鸟啦之类的小游戏。4。2对我来说有用没?看到功能列表就觉得,升级是必要的,这主要有以下几个原因:1、ipad上的软件删除不掉了。。。2、多任务。至少可以在看网页的时候也能QQ了(装B用)。3、图标合并,这个还是较为有用的。比如把游戏归类,把软件归类等4、那可怜变态升级心理,见不得有软件更新。。。
OK,贴出那所有的更新列表吧。。
1、支持多任务。在适用于iPad的iOS4.2中,开始支持多任务。iPad可以像iPhone 4和iPod touch 4那样,在后台运行多任务和通过连按Home键来调出多任务管理Bar。
2、 应用图标合并功能。这个功能就是iPhone版本上iOS 4中的文件夹式图标管理功能,在iPad上将一个图标拖拽到另一个图标上,系统会自动创建文件夹。这项功能可让iPad用户跟iPhone 4一样轻松地分类管理应用,使iPad的屏幕变得整齐有序。不过与iPhone和iPod touch不同的是,iPad的大屏幕使得这个文件夹可以容纳20个应用图标,而iPhone和iPod touch则只能容纳12个。
3、AirPrint无线打印功能。其实这次iOS 4.2的更新中最受大家关注的就是AirPrint无线打印功能。如今的iPad、iPhone和iPodtouch设备上的默认程序都已经添加了无线打印功能。
4、AirPlay功能。AirPlay技术不仅支持音乐播放,还允许用户通过Wi-Fi播放视频和相片。
5、Gamecenter。从iOS 4.2开始,iPad用户也可以使用苹果的社交网络游戏中心了,在Gamecenter里,iPad用户可以邀请好友一起游戏,对比得分和成就。
6、新的Spotlight选项。在设置的Spotlight搜索功能栏,苹果添加了更多的选项,搜索结果选择显示以下内容:联系人、应用程序、音乐、播客、视频、有声读物、备忘录、邮件和事件。用户还可以重新排列这些内容分类,设置搜索结果按照新的类别顺序显示。
7、全新的限制规则。除了允许或不允许GameCenter的多玩家模式外,iOS 4.2的iPad版本可以让用户选择是否允许定位设置和Mail帐号设置的更改;对于iPad 3G,用户还可以选择是否禁用3G网络和恢复EDGE。
8、新增拼写检查功能。在iOS 4.2系统下,iPad也具有拼写检查功能,用户可以选择打开或关闭。
9、增强的显示设置。iPad版的iOS 4.2支持更大的字体显示,以方便视力有障碍的用户或者老年人,字体大小可设置20pt、24pt、32pt、40pt、48pt、56pt。
10、新的备忘录偏好设置。iPad的备忘录有三种字体可选择:Chalkboard、Helvetica和MarkerFelt。用户还可以设置一个备忘录绑定默认邮箱帐号。
11、屏幕方向锁定键和亮度调节。iPad可以将屏幕方向锁定键转变成静音键,另外还在小工具的左边添加了一个屏幕亮度调节的滑动条。
12、统一关联的邮箱。iPad用户现在可以在Mail偏好设置中管理关联邮箱,跟iPhone和iPod touch一样,iPad收件箱邮件可自动整合到一个窗口,使用户提高效率,节省时间。
13、iAd。iAd互动广告也将出现在iPad,开发者自此可以将iAd广告集成到iPad软件中。
从和讯网COPY而来:http://tech.hexun.com/2010-11-08/125496638.html,准备升级(刚刚下载了itunes。。。HOHO)
后记:下载了itunes10,结果安装后还是itunes8,然后不停的升级。。直到9.2,就再也升不上去了。于是换成英文版,点升级(同时翻墙),OK,终于更新成10(原来在中文版时,一直显示更新成10成功了,可是打开的时候,还是9.。真TMD妖)不过即使是这样,我打开itunes的时候,还是提示我有3.2.2升级没有4.2, 4.2在哪里?我好惊讶
Tags: ipad, ios, apple
Misc | 评论:0
| 阅读:19281