iOS开发之多媒体API(1)
本文转载至 http://mobile.51cto.com/iphone-423224.htm
视频格式可以分为适合本地播放的本地影像视频和适合在网络中播放的网络流媒体影像视频两大类。尽管后者在播放的稳定性和播放画面质量上可能没有前者 优秀,但网络流媒体影像视频的广泛传播性使之正被广泛应用于视频点播、网络演示、远程教育、网络视频广告等等互联网信息服务领域。
播放视频
视频文件介绍
视频格式可以分为适合本地播放的本地影像视频和适合在网络中播放的网络流媒体影像视频两大类。尽管后者在播放的稳定性和播放画面质量上可能没有前者 优秀,但网络流媒体影像视频的广泛传播性使之正被广泛应用于视频点播、网络演示、远程教育、网络视频广告等等互联网信息服务领域。
适合移动设备的视频文件
3GP,3GP是一种3G流媒体的视频编码格式,主要是为了配合3G网络的高传输速度而开发的,也是目前手机中最为常见的一种视频格式。 视频MP4格式,除了支持MP3所具有的音乐播放功能外,还具备强大的MPEG-4视频播放能力。
iPhone中还支持mov格式文件。
iOS播放视频
iOS sdk为播放视频提供了非常简便方法,提供的MPMoviePlayerViewController类作为开发使用,在iOS4以前的版本是MPMoviePlayerController。
在iPhone开发规范中禁止使用私有API播放视频,因此播放画面的控制的控件都是有iPhone提供好的,我们没有别的选择。我们能做的:
加载URL中视频
播放、暂停视频
用户控制行为和缩放模式
产生通知
视频播放案例
添加 MediaPlayer.framework
MoviePlayerViewController.h
- #import <MediaPlayer/MediaPlayer.h>
- @interface MoviePlayerViewController : UIViewController {
- MPMoviePlayerViewController * moviePlayerView;
- }
- @property (nonatomic, retain) MPMoviePlayerViewController * moviePlayerView;
- -(IBAction) playMovie: (id) sender;
- - (void) playingDone;
- @end
m文件的加载和卸载方法
- - (void) viewDidLoad {
- [[NSNotificationCenter defaultCenter] addObserver:self selector: @selector(playingDone) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
- }
- - (void)dealloc {
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- [moviePlayerView release];
- [super dealloc];
- }
MPMoviePlayerViewController提供了在播放过程中的状态改变和其它事件的通知。在viewDidLoad注册了一个播放完成的通知,常用的通知有:
MPMoviePlayerPlaybackDidFinishNotification通知接收者播放结束。
MPMoviePlayerScalingModeDidChangeNotification改变影片的尺寸。
MPMoviePlayerContentPreloadDidFinishNotification表示预处理以及完成,准备开始播放影片。
dealloc方法中的[[NSNotificationCenter defaultCenter]
removeObserver:self];影片播放完成要注销通知。
播放事件
- - (IBAction) playMovie: (id) sender {
- moviePlayerView = [[MPMoviePlayerViewController alloc]
- initWithContentURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]
- pathForResource:@"short" ofType:@"3gp"]]];
- moviePlayerView.moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
- moviePlayerView.moviePlayer.scalingMode = MPMovieScalingModeAspectFit;
- // MPMovieControlStyleNone
- //MPMovieControlStyleEmbedded
- //MPMovieControlStyleDefault
- //[movieplayer play];
- //在当前view上添加视频的视图
- [[[UIApplication sharedApplication] keyWindow] addSubview:moviePlayerView.view];
- }
视频文件可以播放资源目录、沙箱目录和网络播放。本例中我们采用资源目录。
moviePlayerView.moviePlayer属性是MPMoviePlayerController类型,它有的controlStyle属性
可以控制播放行为,它的取值有:
MPMovieControlStyleFullscreen
MPMovieControlStyleNone没有播放控件
MPMovieControlStyleEmbedded
MPMovieControlStyleDefault
MPMoviePlayerController类还有scalingMode属性用于控制影片的尺寸,它的取值有:
MPMovieScalingModeNone原始尺寸
MPMovieScalingModeAspectFit缩放到一个填充方向
MPMovieScalingModeAspectFill填充两边可能会切除一部分
MPMovieScalingModeFill填充两边可能会改变比例
播放完成
- - (void) playingDone {
- NSLog(@"播放完成");
- [moviePlayerView.view removeFromSuperview];
- [moviePlayerView release];
- moviePlayerView = nil;
- }
playingDone 方法是在影片播放完成时候调用,这是因为我们在通知中心注册的方法。
播放完成需要把播放视图remove这样才可以获得上一个屏幕。
12.2 播放音频
12.2.1 音频文件介绍
有两类主要的音频文件格式:
无损格式,例如WAV,PCM,TTA,FLAC,AU,APE,TAK,WavPack(WV) ,CAF
有损格式,例如MP3,Windows Media Audio(WMA),Ogg Vorbis(OGG),AAC
移动音频文件
作为移动设备音频文件应该原则上比较小,一般的格式:
WAV、由于无损压缩效果最好。
MP3、有损压缩,文件比较小,由于去除的是人类无法感应到的声音,效果也很好。这是目前常用格式。
AAC、压缩比例更大,比MP3文件还要小。
CAF(Core Audio Format)是Apple专用的无损压缩格式。
12.2.2 Core Audio
高级API,易用
System Sound API –播放短声音、警告音等。
AVFoundation 可以播放长时间声音,简单易用。
低级API,能够对音频有更多的控制
Audio Toolbox – 录制、播放、音频流有全面的控制。
OpenAL – 播放立体声,常用于游戏。
12.2.3 System Sound API
System Sound 可以播放“短的”声音,所谓短声音就是5秒以内。 不循环、没有声音控制、立即播放。
播放格式限制:
线性PCM 和 IMA4
.caf .aif 或 .wav
播放“短声音”
播放“短声音”主要就是两个步骤:
注册声音
- AudioServicesCreateSystemSoundID ((CFURLRef)fileURL, &myID);
播放声音
- AudioServicesPlaySystemSound (myID);
监听完成事件方法
- AudioServicesAddSystemSoundCompletion
清除播放sound ID
- SystemSoundID myID;
- AudioServicesDisposeSystemSoundID (myID);
震动
也可以通过System Sound API让iPhone震动,但是iPod touch不能震动。
震动可以通过指定一个特殊的system sound ID—— kSystemSoundID_Vibrate实现。
AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);