做网页的时候需要考虑在IOS上的显示效果,不能随便用字体,于是官网的这个页面就可以做参考了
http://support.apple.com/kb/HT4980?viewlocale=zh_CN&locale=zh_CN
受影响的产品
iPhone, iPad, iPod touch
系列名称 |
版本 |
Academy Engraved LET |
7.0d1e1 |
American Typewriter |
7.0d1e1 |
Apple Color Emoji |
7.0d18e1 |
AppleGothic |
7.0d5e1 |
Arial |
5.01.2x 版 |
Arial Hebrew |
6.0d2e1 |
Arial Rounded MT Bold |
1.51x 版 |
Bangla Sangam MN |
7.0d4e1 |
Baskerville |
7.0d4e2 |
Bodoni 72 |
7.0d1e2 |
Bodoni 72 Oldstyle |
7.0d1e2 |
Bodoni 72 Smallcaps |
7.0d1e2 |
Bodoni Ornaments |
7.0d2e1 |
Bradley Hand |
7.0d3e1 |
Chalkboard SE |
7.0d13e1 |
Chalkduster |
7.0d6e1 |
Cochin |
7.0d1e1 |
Copperplate |
7.0d1e2 |
Courier |
7.0d2e1 |
Courier New |
5.00.2x 版 |
Devanagari Sangam MN |
7.0d10e1 |
Didot |
6.1d4e1 |
Euphemia UCAS |
6.1d4e1 |
Futura |
6.2d1e1 |
Geeza Pro |
6.1d8e1 |
Georgia |
5.00x-3 版 |
Gill Sans |
6.1d9e1 |
Gujarati Sangam MN |
7.0d2e1 |
Gurmukhi MN |
7.0d2e1 |
Heiti SC |
7.0d21e1 |
Heiti TC |
7.0d21e1 |
Helvetica |
8.0d9e1 |
Helvetica Neue |
7.1d5e2 |
Hiragino Kaku Gothic ProN |
8.10 版 |
Hiragino Mincho ProN |
8.10 版 |
Hoefler Text |
6.1d7e1 |
Kailasa |
7.0d3e1 |
Kannada Sangam MN |
7.0d3e1 |
Malayalam Sangam MN |
7.0d3e1 |
Marion |
7.1d3e2 |
Marker Felt |
4.4d2e1 |
Noteworthy |
7.0d15e1 |
Optima |
6.1d4e1 |
Oriya Sangam MN |
7.0d4e1 |
Palatino |
7.0d4e4 |
Papyrus |
6.1d10e2 |
Party LET |
7.0d2e1 |
Sinhala Sangam MN |
7.05e1 |
Snell Roundhand |
7.0d6e3 |
Tamil Sangam MN |
7.0d2e1 |
Telugu Sangam MN |
7.0d2e1 |
Thonburi |
10.7d8e1 |
Times New Roman |
5.01.3x 版 |
Trebuchet MS |
5.00x 版 |
Verdana |
5.01x 版 |
Zapf Dingbats |
6.1d3e1 |
Zapfino |
6.1d5e1 |
由于公司的规划,在未来的一段时间内可能会给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
纯记录,目前我还没有学到这里。
看到这样的文章,就先记录下来,以后不怕网址不在了。。。
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
妖怪的文章,用作参考:http://dualface.qeeplay.com/index.php/archives/1415
原文如下:
由于 OS X 是 64bit 操作系统,所以默认情况下编译出来的 Lua 是 64bit 的。一般应用不会有任何问题,但使用 luac 编译源代码后得到的字节码就只能在 64bit 操作系统中使用。
我使用 Lua 的主要目的是在 iOS/Android 环境中简化游戏开发,因此必须在 OS X 中编译出 32bit 的 Lua 及相关库。
下载 lua 5.1.4 源代码和 5.1.4-3 patch:
XML/HTML代码
- $ wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
- $ tar zxf lua-5.1.4.tar.gz
- $ wget -O lua-5.1.4-3.patch http://www.lua.org/ftp/patch-lua-5.1.4-3
- $ cd lua-5.1.4/src
- $ patch < ../../lua-5.1.4-3.patch
编辑 lua-5.1.4/src/Makefile,将:
XML/HTML代码
- macosx:
- $(MAKE) all MYCFLAGS=-DLUA_USE_LINUX MYLIBS="-lreadline"
改为:
XML/HTML代码
- macosx:
- $(MAKE) all MYCFLAGS="-DLUA_USE_LINUX -arch i386" MYLIBS="-lreadline -arch i386"
最后:
XML/HTML代码
- $ cd lua-5.1.4
- $ make macosx
- $ sudo make install
然后,就安装到/usr/local/ 下面了。
这是执行make install后显示在屏幕上的,先记录下来,以后可以做参考【膘叔】
- cd src && mkdir -p /usr/local/bin /usr/local/include /usr/local/lib /usr/local/man/man1 /usr/local/share/lua/5.1 /usr/local/lib/lua/5.1
- cd src && install -p -m 0755 lua luac /usr/local/bin
- cd src && install -p -m 0644 lua.h luaconf.h lualib.h lauxlib.h ../etc/lua.hpp /usr/local/include
- cd src && install -p -m 0644 liblua.a /usr/local/lib
- cd doc && install -p -m 0644 lua.1 luac.1 /usr/local/man/man1
下载 LuaSocket 2.0.2:
XML/HTML代码
- $ wget http://files.luaforge.net/releases/luasocket/luasocket/\
- luasocket-2.0.2/luasocket-2.0.2.tar.gz
- $ tar zxf luasocket-2.0.2.tar.gz
- $ cd luasocket-2.0.2
打开 config 文件,修改为(使用 Mac OS X 的设定,并指定 32bit 架构):
XML/HTML代码
- LUAINC=-I/usr/local/include/lua5.1
-
- #------
- # Compiler and linker settings
- # for Mac OS X
- #
- CC=gcc
- DEF= -DLUASOCKET_DEBUG -DUNIX_HAS_SUN_LEN
- CFLAGS= $(LUAINC) -I$(COMPAT) $(DEF) -pedantic -Wall -O2 -fno-common -arch i386
- LDFLAGS=-bundle -undefined dynamic_lookup -arch i386
- LD=export MACOSX_DEPLOYMENT_TARGET="10.7"; gcc
-
- #------
- # Compiler and linker settings
- # for Linux
- #CC=gcc
- #DEF=-DLUASOCKET_DEBUG
- #CFLAGS= $(LUAINC) $(DEF) -pedantic -Wall -O2 -fpic
- #LDFLAGS=-O -shared -fpic
- #LD=gcc
最后编译安装即可:
XML/HTML代码
- $ make
- $ sudo make install
-----EOF--
如果你不是特别需要安装32位的lua,那么妖怪那段增加 -arch i386这一段的内容就可以不需要改动了。嗯。就是这样简单。
但真的这样吗?NND,事实上我在按照上面操作的时候,告诉我wget这个函数不存在,我晶啊,wget居然不是标配。
最后只能用curl解决了这个问题,把wget http://xxxx.xxx/xxx.xxx.gz 改为:curl http://xxx.xxx/xxx.gz -O xxx.gz,OK,就完成了。。
然后利用这样的操作也下载了一份wget,搞定。还是wget更方便,因为它很简单。。。
苹果下的ssh工具不是特别的多,所幸老牌的securecrt还是支持MAC版本的。
不过,beta版只有30天的试用期,查了一下的网上资料,发现还是有办法的。
那就是。。。
rm /Users/用户名/Library/Application\ Support/VanDyke/SecureCRT/Config/SecureCRT_eval.lic
这个文件,我最初是想改那个文件里的过期时间 ,失败了,所以还是直接删除吧。。。
最后设了个crontab,每周一次算了。每周一13点删除一次。以防万一,HOHO