安徽大学Word文档格式.docx
《安徽大学Word文档格式.docx》由会员分享,可在线阅读,更多相关《安徽大学Word文档格式.docx(20页珍藏版)》请在冰点文库上搜索。
iOS;
Xcode;
iPhoneSDK;
VMware;
Objective-C;
视频播放;
PlaySystemofReal-timeVideoStreamonIOSPlatform
Abstract
Apple'
sMacworldExpoinJanuary9,2007announcedthefirstiOS,theninJunethesameyearreleasedthefirstversionofiosoperatingsystem,theoriginalnameforthe"
iPhonerunsOSX"
.Ininitially,intheabsencepeopletounderstanditspotentialvalueandprospectsfordevelopment,notasoftwarecompanywillingtoprovidesoftwaresupport.AppleCEOSteveJobswhenhechangedallthat.2011iOSequipmenthasaccountedfor44%shareoftheglobalmobileoperatingsystem,nowiOSplatformequipmenthasbecomeamainstreamtool.ThisarticleisiOSplatform-basedreal-timevideostreamsbroadcastsystemdesign.Objective-ClanguageinXcodeiPhoneSDKvideoplaybackcontrols,theuseofvirtualmachinesrunningMacOSXtheultimaterealizationofthenetworkreal-timevideostreamplayback,allowinguserstoexperienceiOSsystemunderWINDOWS7.
Keywords:
iOS;
Videoplayer
目 录
1绪论……………………………………………………………………………………5
1.1本课题研究的背景……………………………………………………………5
1.2本课题研究的意义……………………………………………………………5
1.3本论文研究思路和工作安排(开题报告)……………………………………2
2视频播放平台和技术…………………………………………………………………5
2.1Objective-C简介……………………………………………………………5
2.2iOS概述及其系统架构………………………………………………………6
2.2.1iOS的系统架构……………………………………………………………6
2.2.2Framework-应用程序框架………………………………………………8
2.3VMware中安装虚拟MacOSX……………………………………………8
2.4Xcode和iPhoneSDK的获取和安装………………………………………8
2.5网络实时视频流及其传输(HTTP)…………………………………………8
3iPhone应用程序开发的学习和系统的实现………………………………………8
3.1HelloApple……………………………………………………………6
3.2UIApplication和UIView…………………………………………6
3.3MediaPlayerFramework播放视频影片…………………………
4结论(结束语)…………………………………………………………………40
主要参考文献…………………………………………………………………………………46
附录A……………………………………………………………………………………………51
附录B……………………………………………………………………………………………54
·
致谢……………………………………………………………………………………………57
1绪论
本课题研究的是基于ios平台的实时视频流播放,在windows7系统下使用Vmware安装虚拟的MacOS,通过Xcode和IphoneSDK在虚拟机里体验iphone应用程序的开发。
同时熟悉Objective-C的编程优点和网络实时视频流的传输协议。
1.1本课题研究的背景
iOS最早于2007年1月9日的苹果Macworld展览会上公布,随后于同年的6月发布的第一版iOS操作系统,当初的名称为“iPhonerunsOSX”。
最初,由于没有人了解“iPhonerunsOSX”的潜在价值和发展前景,导致没有一家软件公司、没有一个软件开发者给“iPhonerunsOSX”开发软件或者提供软件支持。
于是,苹果公司时任CEO斯蒂夫.乔布斯说服各大软件公司以及开发者可以先搭建低成本的网络应用程序(WEBAPP)来使得它们能像iPhone的本地化程序一样来测试“iPhonerunsOSX”平台。
北京时间6月7日凌晨,苹果2011年度的WWDC大会,scottForstall正式公布了iOS设备至今已经销售了2亿台,占全球移动操作系统44%份额.随着ios5的到来,世界范围内迎来了全新的移动操作系统,ios5越来越被人所熟知。
1.2本课题研究的意义
随着ios的流行,越来越多的人体验到了其所带来的科技魅力,但是对一部分人来说一件时尚的ios设备略显奢侈。
也给研究者带来了一定的不方便。
本课题主要研究在低端的PC上通过VMware来实现ios的视频播放体验。
同时对于初学者来说也是踏入iphone程序开发的必要准备,让研究者在学习的同时慢慢体会到ios的精髓,打好未来成为ios程序员的根基。
1.3本论文的研究思路和工作安排
首先在自己的PC上面安装VMwareWorkstation7.0,通过网络下载MacOSXleopard10.5.7。
其次自学Objective-C,熟悉该语言的特点和编程方法,初步学习iphone程序开发基础教程。
最后一步步实现系统的完成。
第一阶段:
2011年12月09日——2011年12月20日;
选题,撰写开题,报告;
第二阶段:
2012年03月01日——2012年04月20日;
收集、查阅相关文献资料,与指导老师取得联系,开发环境的搭建,撰写初稿;
第三阶段:
2012年04月21日——2012年05月15日;
收集资料,修改初稿,总结经验,与指导老师交流解决疑难,撰写二稿;
第四阶段:
2011年05月16日——2012年05月30日;
修改二稿,撰写三稿,将上一阶段存在的问题进一步修改、总结、完善,增加论文的科学性;
2视频播放平台和技术
2.1Objective-C简介
1980年代初,布莱德·
确斯(BradCox)在其公司Stepstone发明Objective-C,它以一种叫做SmallTalk-80的语言为基础。
Objective-C建立在C语言之上,意味着它是在C语言基础上添加了扩展而创造出来的能够创建和操作对象的一门新的程序设计语言。
Objective-C,通常写作ObjC和较少用的ObjectiveC或Obj-C,是在C的基础上,加入面向对象特性扩充而成的编程语言。
目前,Objective-C主要应用于MacOSX和iOS这两个NeXTSTEP的衍生系统,而在NeXTSTEP和OpenStep中它更是基本语言。
Objective-C可以在任何gcc支持的平台上进行编译,因为gcc原生支持Objective-C
Objective-C是C语言的严格母集合,意指任何原始的C语言程式都可以通过Objective-C编译器而不需修改,也允许Objective-C使用任何原始的C语言代码。
Objective-C形容自己为覆盖于C语言上的一层薄纱,这是因为Objective-C的原意就是在原始C语言主体上加入面向对象的特性。
Objective-C的面向对象语法源于Smalltalk讯息传递风格。
所有其他非面向对象的语法,包括变量型别,前处理器(preprocessing),流程控制,函数声明与调用皆与C语言完全一致。
Objective-C面向对象最大的特色是的讯息传递(messagepassing)模型。
Objective-C里,物件不呼叫方法,而是互相传递讯息,这与今日的主流C++式面向对象风格差异甚大。
此二种风格的差异主要在于程序如何看待呼叫方法/传送讯息这个动作。
C++里类与方法的关系非常严格清楚,一个方法必定属于一个类,且于编译期(compiletime)就已经紧密绑在一起,你不可能呼叫一个不存在类里的方法。
但在Objective-C,类与讯息的关系较为松散,所有方法都被视为对讯息的回应,而呼叫方法则视为对类发送讯息。
所有讯息处理直到执行期(runtime)才会动态决定,并交由类自行决定如何处理收到的讯息。
也就是说,一个类不保证一定会回应收到的讯息,如果类收到了一个无法处理的讯息,程式并不会出错或当掉,它只会抛出一个Exception。
在2006年苹果全球开发者会议中,Apple宣布了“Objective-C2.0”的发布,其增加了“现代的垃圾收集,语法改进,运行时性能改进,以及64位支持”。
2007年10月发布的MacOSXv10.5中包含了Objective-C2.0的编译器。
Objective-C是非常“实际”的语言。
它用一个很小的、用C写成的运行库,使得应用程式的大小增加很少,与此相比,大部分OO系统需要极大的运行时虚拟机来执行。
ObjC写成的程式通常不会比其源代码和函式库(通常无需包含在软件发行版本中)大太多,不会像Smalltalk系统,即使只是打开一个窗口也需要大量的容量。
由于Obj-C的动态类型特征,Obj-C不能对方法进行内联(inline)一类的优化,使得Obj-C的应用程序一般比类似的C或C++程序更小。
目前,Objective-C是MacOSX的首要开发语言,也是GNUstep在Linux和其它平台上的开发语言。
Objective-C是ANSIC的超集,扩展了C语言使它具备面向对象设计的能力,如类,消息和继承。
Objective-C程序中可以利用现有的C语言代码,使其利用现有的软件架构。
这也是为甚莫Objective-C过去多年间能够成为一种流行的用户界面开发语言而且至今没有消亡,因为一方面用它可以实现底层系统编程,另一方面可以支持利用动态架构进行开发。
Objective-C和C++的比较
单一继承:
Objective-C不支持多重继承,(同Java和Smalltalk),而C++语言支持多重继承。
动态:
Objective-C是动态定型(dynamicalytyped)所以它的类库比C++要容易操作。
Objective-C在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。
C++跟从面向对象编程里的Simula67(一种早期OO语言)学派,而Objecive-C属于Smalltalk学派。
在C++里,对象的静态类型决定你是否可以发送消息给它,而对Objecive-C来说,由动态类型来决定。
2.2ios系统概述及其架构
2.2.1ios的系统架构
iOS的系统架构分为四个层次:
核心操作系统层(CoreOSlayer)、核心服务层(CoreServiceslayer)、媒体层(Medialayer)和可触摸层(CocoaTouchlayer)。
下图1展示了MacOSX和iOS系统架构层次的一个对比。
(图1)
图1
从上图中我们可以发现MacOSX与iOS的系统架构层次只有最上面一层不同,由Cocoa框架换成了CocoaTouch,因此开发iOS应用程序与开发MacOSX程序是相似的,现在就让我们来具体看看每层所包含的内容。
其实iOS是基于UNIX的,所以我们完全可以相信这个操作系统,要知道从系统的稳定性上来说它要比其他操作系统的产品好很多。
位于iOS系统架构最下面的一层是核心操作系统层,它包括内存管理、文件系统、电源管理以及一些其他的操作系统任务。
它可以直接和硬件设备进行交互。
核心操作系统层包括以下这些组件:
(表1)
OSXKernel
Mach3.0
BSD
Sockets
PowerMgmt
FileSystem
Keychain
Certificates
Security
Bonjour
表1
第二层是核心服务层,我们可以通过它来访问iOS的一些服务。
它包括以下这些组件:
(表2)
Collections
AddressBook
Networking
FileAccess
SQLite
CoreLocation
NetServices
Threading
Preferences
URLUtilities
表2
第三层是媒体层,通过它我们可以在应用程序中使用各种媒体文件,进行音频与视频的录制,图形的绘制,以及制作基础的动画效果。
(表3)
CoreAudio
OpenGL
AudioMixing
AudioRecording
VideoPlayback
JPG,PNG,TIFF
PDF
Quartz
CoreAnimation
OpenGLES
表3
最上面一层是可触摸层,这一层为我们的应用程序开发提供了各种有用的框架,并且大部分与用户界面有关,本质上来说它负责用户在iOS设备上的触摸交互操作。
(表4)
Multi-TouchEvents
CoreMotion
Camera
ViewHierarchy
Localization
Alerts
WebViews
ImagePicker
Multi-TouchControls
表4
在CocoaTouch层中的很多技术都是基于Objective-C语言的。
Objective-C语言为iOS提供了像集合、文件管理、网络操作等支持。
像UIKit框架,它为应用程序提供了各种可视化组件,比如像窗口(Window)、视图(View)和按钮组件(UIButton)。
CocoaTouch层中的其他框架,对我们在应用程序中的开发来说也是非常有用的,如访问用户通信录功能框架、获取照片信息功能的框架、负责加速感应器和三维陀螺仪等硬件支持的框架。
2.2.2FrameWork-应用程序框架
什么是框架?
本质上来说它是帮助我们完成各种特定功能的软件库。
我们编写的应用程序项目,都是从CocoaTouch层开始的,具体来说就是从UIKitFramework开始的。
当在编写程序的过程中需要用到一些特殊功能的时候,我们应该从框架的最顶端技术开始寻找相应的框架,只有在上层结构无法解决时,才能使用其下层的技术。
其实,顶层的框架已经涵盖了我们绝大多数需要的功能。
表5列举了一些常用的iosSDK框架
框架名称
功能
AddressBook.framework
提供访问存储核心数据库中用户联系人信息的功能
AddressBookUI.framework
提供一个用户界面,用于显示存储在地址簿中的联系人信息
AudioToolbox.framework
提供音频录制和回放的底层API,同时也负责管理音频硬件
AudioUnit.framework
提供一个接口,让我们的应用程序可以对音频进行处理
AVFoundation.framework
CFNetwork.framework
访问和配置网络,像HTTP、FTP和BonjourServices
CoreFoundation.framework
提供抽象的常用数据类型,如Unicodestrings、XML、URL等
CoreGraphics.framework
提供2D绘制的基于C的API
MediaPlayer.framework
提供播放视频和音频的功能
CoreLocation.framework
使用GPS和Wi-Fi获取位置信息
OpenGLES.framework
提供简洁而高效的绘制2D和3D图形的OpenGLAPI子集
表5
2.3VMware中安装虚拟的MacOSX
图2显示的是我的电脑配置
图2
因为我的电脑(windows7系统)CPU是core2的T6400无法支持硬件VT技术,不能安装MacOSX10.6雪豹操作系统和10.7lion系统,只能采用10.5.leopard。
虚拟机的版本是VMware7.0汉化破解版。
使用步奏:
windows7+VMware7.0+MacOSXLeopardOnVMware.[支持Intel和AMD的CPU].
1.解压下载的压缩包(8G)到指定的文件夹
图3显示的解压后的文件
图3
2.打开VMware打开开已存在的虚拟机或分组选择打开后就进入欢迎页面
图4显示的是打开虚拟机的界面
图4
图5显示的是打开解压后的文件(已经存在的虚拟机)
图5
图6显示的打开下载的虚拟机
图6
图7显示的是打开已存在的虚拟机
图7
2.虚拟机的配置
图8显示的是虚拟机的设置(下载时已经设置好)
图8
为了使用PC下载的Xcode和SDK,所以还要设置一个共享文件夹与主机共享文件
图9显示的是共享文件夹的设置
图9
此时注意:
共享的文件夹路径中必须全是英文!
3.进入虚拟的MacOSX10.5.5
图10显示的是打开虚拟机电源后的登陆界面
图10
点击左上角的苹果图样关于本机
图11显示的是系统版本
图11
特别提醒:
1.虚拟机里无法直接升级系统所以选择软件升级下载完毕后也无法升级
2.安装VMwareTools后才可以看见共享文件夹图样,WMwareTools可以点击右上角的图样进行下载和安装,按照提示下载后重启即可看见共享的文件夹图样,双击该图样可以找到自己设定的共享文件夹,来共享主机的文件夹。
当然在此之前也要设置主机的文件夹属性改为共享。
右击文件夹--属性—共享—共享(s)--选择共享用户为vmwareuser
图12显示的是主机文件夹共享设置过程
图12
图13显示的是打开虚拟机里的共享文件夹
图13
2.4Xcode和iphoneSDK的获取和安装
想要进行iphone的程序设计,注册AppleID当然是必须的。
图14显示的是打开苹果开发者网页
图14
图15显示的是注册后登陆界面
图15
登陆苹果开发者联盟以后从网上下载iphone_sdk_3.1.3_with_xcode_3.1.4__leopard__9m2809a.dmg后将该镜像文件放到共享的文件夹里面并在虚拟机里的共享文件夹打开
图16显示的是打开共享文件里的SDK打开Packges
图16
提醒:
1.iphonesdk3需要安装在leopard10.5.7版本上才可以,而我们的虚拟Mac是10.5.5所以只能选择早期的SDK2-2-1,Xcode选择3.1.4.
2.安装工程中会提示无法安装SDK,直接跳过继续安装Xcode,然后单独下载SDK2.2版本放到共享的文件夹里打开。
按照提示安装完成后即可开始接着完成下面的任务。
2.5网络实时视频流及其传输(HTTP)
常用的流媒体协议主要有HTTP渐进下载和基于RTSP/RTP的实时流媒体协议,这二种基本是完全不同的东西,目前比较方便又好用的我建议使用HTTP渐进下载的方法。
在这个中apple公司的HTTPLiveStreaming是这个方面的代表。
它最初是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的流.现在见到在桌面也有很多应用了,HTML5是直接支持这个。
我们可以看看HTTPLiveStreaming是怎么样工作的。
平时的直播技术中,播放模式中必须等待整个文件下载完才行,在HLS技术中Web服务器向客户端提供接近实时的音视频流。
但在使用的过程中是使用的标准的HTTP协议,所以这时,只要使用HLS的技术,就能在普通的HTTP的应用上直接提供点播和直播。
要详细了解原理,我们先看看这个所需要的步骤。
视频采集->
编码器->
流分割->
普通web服务(索引文件和视频文件)->
客户端
内容准备的过程大约二种,一是视频采集,编码器首先将摄像机实时采集的音视频数据压缩编码为符合特定标准的音视频基本流,也可以拿编码完了的文件,有一点必须保证,就是一定要使用H.264视频和AAC音频,因为发明这个的是苹果公司,只支持这个。
然后给这些封装成成为符合MPEG-2(MPEG2TS、MPEG2PS之所以使用这个,主要是因为声音和视频会交织在一起,也会有关键帧来让视频可以直接播放).
流分割部分在这个中,比起RTSP之类和普通点播的最大不同,就是他会给MPEG-2分割成很多个ts的文件。
分割过程大多是按时间来切,根据国外的资料,建议切10s一个的文件,如果码流高可以5秒一次。
在分割还有一点不同,就是这时流分割器会生成一个含有指向这些小TS文件指针的索引文件
所以这个文件也必须在web服务器上,不能少。
每多10s时,