自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iOS開發(fā)之多媒體API

移動開發(fā) iOS
視頻格式可以分為適合本地播放的本地影像視頻和適合在網(wǎng)絡(luò)中播放的網(wǎng)絡(luò)流媒體影像視頻兩大類。盡管后者在播放的穩(wěn)定性和播放畫面質(zhì)量上可能沒有前者 優(yōu)秀,但網(wǎng)絡(luò)流媒體影像視頻的廣泛傳播性使之正被廣泛應用于視頻點播、網(wǎng)絡(luò)演示、遠程教育、網(wǎng)絡(luò)視頻廣告等等互聯(lián)網(wǎng)信息服務(wù)領(lǐng)域。

播放視頻

視頻文件介紹

視頻格式可以分為適合本地播放的本地影像視頻和適合在網(wǎng)絡(luò)中播放的網(wǎng)絡(luò)流媒體影像視頻兩大類。盡管后者在播放的穩(wěn)定性和播放畫面質(zhì)量上可能沒有前者 優(yōu)秀,但網(wǎng)絡(luò)流媒體影像視頻的廣泛傳播性使之正被廣泛應用于視頻點播、網(wǎng)絡(luò)演示、遠程教育、網(wǎng)絡(luò)視頻廣告等等互聯(lián)網(wǎng)信息服務(wù)領(lǐng)域。

適合移動設(shè)備的視頻文件

3GP,3GP是一種3G流媒體的視頻編碼格式,主要是為了配合3G網(wǎng)絡(luò)的高傳輸速度而開發(fā)的,也是目前手機中最為常見的一種視頻格式。 視頻MP4格式,除了支持MP3所具有的音樂播放功能外,還具備強大的MPEG-4視頻播放能力。

iPhone中還支持mov格式文件。

iOS播放視頻 

iOS sdk為播放視頻提供了非常簡便方法,提供的MPMoviePlayerViewController類作為開發(fā)使用,在iOS4以前的版本是MPMoviePlayerController。

在iPhone開發(fā)規(guī)范中禁止使用私有API播放視頻,因此播放畫面的控制的控件都是有iPhone提供好的,我們沒有別的選擇。我們能做的:

加載URL中視頻

播放、暫停視頻

用戶控制行為和縮放模式

產(chǎn)生通知

視頻播放案例

wps_clip_image-11562

添加 MediaPlayer.framework 

MoviePlayerViewController.h

  1. #import <MediaPlayer/MediaPlayer.h> 
  2.  
  3. @interface MoviePlayerViewController : UIViewController { 
  4.  
  5.     MPMoviePlayerViewController * moviePlayerView; 
  6.  
  7. @property (nonatomic, retain) MPMoviePlayerViewController * moviePlayerView; 
  8.  
  9.  
  10. -(IBAction) playMovie: (id) sender; 
  11. - (void) playingDone; 
  12.  
  13. @end 

m文件的加載和卸載方法

  1. - (void) viewDidLoad {  
  2.     [[NSNotificationCenter defaultCenter] addObserver:self selector: @selector(playingDone) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];  
  3. }  
  4. - (void)dealloc {  
  5.     [[NSNotificationCenter defaultCenter] removeObserver:self];  
  6.     [moviePlayerView release];  
  7.     [super dealloc];  
  8. }  

MPMoviePlayerViewController提供了在播放過程中的狀態(tài)改變和其它事件的通知。在viewDidLoad注冊了一個播放完成的通知,常用的通知有:

MPMoviePlayerPlaybackDidFinishNotification通知接收者播放結(jié)束。

MPMoviePlayerScalingModeDidChangeNotification改變影片的尺寸。

MPMoviePlayerContentPreloadDidFinishNotification表示預處理以及完成,準備開始播放影片。

dealloc方法中的[[NSNotificationCenter defaultCenter]

removeObserver:self];影片播放完成要注銷通知。

播放事件

  1. - (IBAction) playMovie: (id) sender { 
  2.      
  3.     moviePlayerView = [[MPMoviePlayerViewController alloc]  
  4.                    initWithContentURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]  
  5.                                 pathForResource:@"short" ofType:@"3gp"]]]; 
  6.      
  7.     moviePlayerView.moviePlayer.controlStyle = MPMovieControlStyleFullscreen; 
  8.     moviePlayerView.moviePlayer.scalingMode = MPMovieScalingModeAspectFit; 
  9.     // MPMovieControlStyleNone 
  10.     //MPMovieControlStyleEmbedded  
  11.     //MPMovieControlStyleDefault 
  12.      
  13.     //[movieplayer play]; 
  14.     //在當前view上添加視頻的視圖 
  15.     [[[UIApplication sharedApplication] keyWindow] addSubview:moviePlayerView.view];     
  16.  

視頻文件可以播放資源目錄、沙箱目錄和網(wǎng)絡(luò)播放。本例中我們采用資源目錄。

moviePlayerView.moviePlayer屬性是MPMoviePlayerController類型,它有的controlStyle屬性

可以控制播放行為,它的取值有:

MPMovieControlStyleFullscreen

MPMovieControlStyleNone沒有播放控件

MPMovieControlStyleEmbedded 

MPMovieControlStyleDefault

MPMoviePlayerController類還有scalingMode屬性用于控制影片的尺寸,它的取值有:

MPMovieScalingModeNone原始尺寸

MPMovieScalingModeAspectFit縮放到一個填充方向

MPMovieScalingModeAspectFill填充兩邊可能會切除一部分

MPMovieScalingModeFill填充兩邊可能會改變比例

播放完成

  1. - (void) playingDone { 
  2.     NSLog(@"播放完成"); 
  3.     [moviePlayerView.view removeFromSuperview]; 
  4.     [moviePlayerView release]; 
  5.     moviePlayerView = nil;     

playingDone 方法是在影片播放完成時候調(diào)用,這是因為我們在通知中心注冊的方法。

播放完成需要把播放視圖remove這樣才可以獲得上一個屏幕。

12.2 播放音頻

12.2.1 音頻文件介紹

有兩類主要的音頻文件格式: 

無損格式,例如WAV,PCM,TTA,F(xiàn)LAC,AU,APE,TAK,WavPack(WV) ,CAF

有損格式,例如MP3,Windows Media Audio(WMA),Ogg Vorbis(OGG),AAC 

移動音頻文件

作為移動設(shè)備音頻文件應該原則上比較小,一般的格式:

WAV、由于無損壓縮效果最好。

MP3、有損壓縮,文件比較小,由于去除的是人類無法感應到的聲音,效果也很好。這是目前常用格式。

AAC、壓縮比例更大,比MP3文件還要小。

CAF(Core Audio Format)是Apple專用的無損壓縮格式。

12.2.2 Core Audio

wps_clip_image-7562

高級API,易用

System Sound API –播放短聲音、警告音等。

AVFoundation 可以播放長時間聲音,簡單易用。

低級API,能夠?qū)σ纛l有更多的控制

Audio Toolbox – 錄制、播放、音頻流有全面的控制。

OpenAL – 播放立體聲,常用于游戲。

12.2.3 System Sound API

System Sound 可以播放“短的”聲音,所謂短聲音就是5秒以內(nèi)。 不循環(huán)、沒有聲音控制、立即播放。

播放格式限制:

線性PCM 和 IMA4

.caf .aif 或 .wav

播放“短聲音”

播放“短聲音”主要就是兩個步驟:

注冊聲音

  1. AudioServicesCreateSystemSoundID ((CFURLRef)fileURL, &myID); 

播放聲音

  1. AudioServicesPlaySystemSound (myID); 

監(jiān)聽完成事件方法

  1. AudioServicesAddSystemSoundCompletion 

清除播放sound ID

  1. SystemSoundID myID;  
  2.  
  3.    AudioServicesDisposeSystemSoundID (myID);   

震動

也可以通過System Sound API讓iPhone震動,但是iPod touch不能震動。

震動可以通過指定一個特殊的system sound ID—— kSystemSoundID_Vibrate實現(xiàn)。

AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);

#p#

實例

wps_clip_image-14723

SystemSoundServices

添加AudioToolbox.framework框架

SystemSoundServicesViewController.h文件

 
  1. #import <UIKit/UIKit.h> 
  2. #include <AudioToolbox/AudioToolbox.h> 
  3.  
  4. @interface SystemSoundServicesViewController : UIViewController; 
  5.  
  6. - (IBAction) playSystemSound; 
  7. - (IBAction) vibrate; 
  8.  
  9. @end 

播放事件

  1. - (IBAction) playSystemSound{ 
  2.  
  3.     NSURL* system_sound_url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"BeepGMC500" ofType:@"wav"]]; 
  4.     SystemSoundID system_sound_id; 
  5.  
  6.     AudioServicesCreateSystemSoundID( 
  7.         (CFURLRef)system_sound_url, 
  8.         &system_sound_id 
  9.     ); 
  10.      
  11.     // Register the sound completion callback. 
  12.     AudioServicesAddSystemSoundCompletion( 
  13.         system_sound_id, 
  14.         NULL, // uses the main run loop 
  15.         NULL, // uses kCFRunLoopDefaultMode 
  16.         MySoundFinishedPlayingCallback, // the name of our custom callback function 
  17.         NULL // for user data, but we don't need to do that in this case, so we just pass NULL 
  18.     ); 
  19.  
  20.     // Play the System Sound 
  21.     AudioServicesPlaySystemSound(system_sound_id); 

AudioServicesAddSystemSoundCompletion方法5個參數(shù),第一參數(shù)SystemSoundID,第二參數(shù)是是否使用循環(huán),第三個參數(shù)是循環(huán)模式,第四個參數(shù)是回調(diào)函數(shù),就是當播放完成時候回調(diào)的方法,第五個參數(shù)是為回調(diào)函數(shù)提供參數(shù)。

這里回調(diào)的方法是C語言風格的函數(shù):MySoundFinishedPlayingCallback。

回調(diào)函數(shù)

  1. void MySoundFinishedPlayingCallback(SystemSoundID sound_id, void* user_data){ 
  2.     AudioServicesDisposeSystemSoundID(sound_id); 

震動方法調(diào)用

  1. // Vibrate on action 
  2. - (IBAction) vibrate{ 
  3.     AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 

12.3 播放和錄制音頻

AVFoundation控件可以實現(xiàn)一般音頻播放和錄制。

AVAudioPlayer音頻播放類,用于播放大于5秒鐘聲音,可以播放本地聲音,但是不能播放網(wǎng)絡(luò)媒體文件。能夠播放、 暫停、循環(huán)和跳過等操作。

AVAudioRecorder音頻錄制類。

實例AVAudioPlayer

wps_clip_image-30534

添加AVFoundation.framework框架

AvplayerViewController.h文件

 
  1. #import <UIKit/UIKit.h> 
  2. #import <AVFoundation/AVFoundation.h> 
  3.  
  4. @interface AvplayerViewController : UIViewController <AVAudioPlayerDelegate> { 
  5.     AVAudioPlayer * player; 
  6.  
  7.  
  8. - (IBAction) stopSong: (id) sender; 
  9. - (IBAction) playSong: (id) sender; 
  10.  
  11.  
  12. @end 

AvplayerViewController.m

  1. #import "AvplayerViewController.h" 
  2.  
  3. @implementation AvplayerViewController 
  4.  
  5. - (IBAction) playSong: (id) sender { 
  6.     NSError *error = nil; 
  7.     player = [[AVAudioPlayer alloc] initWithContentsOfURL:  
  8.                  [NSURL fileURLWithPath:[[NSBundle mainBundle]  
  9.                     pathForResource:@"charleston1925_64kb" ofType:@"mp3"]] error:&error]; 
  10.     player.delegate = self; 
  11.     if(error) { 
  12.         NSLog(@"%@",[error description]);  
  13.         [error release]; 
  14.     } 
  15.     [player play]; 
  16.  
  17. - (IBAction) stopSong: (id) sender { 
  18.     [player stop]; 
  19.  
  20. - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { 
  21.     NSLog(@"播放完成。");     
  22.  
  23. - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error { 
  24.     NSLog(@"播放錯誤發(fā)生: %@", [error localizedDescription]);     
  25.  
  26.  
  27. - (void)dealloc { 
  28.     [player release]; 
  29.     [super dealloc]; 
  30.  
  31. @end 

AVAudioPlayer委托

AVAudioPlayerDelegate委托對象提供了兩個主要方法:

audioPlayerDidFinishPlaying:successfully:

audioPlayerDecodeErrorDidOccur:error:

AVAudioRecorder

新建實例:Recorder

wps_clip_image-7998

RecorderViewController.h文件

 
  1. #import <UIKit/UIKit.h> 
  2. #import <AVFoundation/AVFoundation.h> 
  3.  
  4. @interface RecorderViewController : UIViewController 
  5.     AVAudioRecorder *recorder; 
  6.     AVAudioPlayer *player; 
  7.     UILabel *label; 
  8. @property (retain, nonatomic) AVAudioRecorder * recorder; 
  9. @property (retain, nonatomic) AVAudioPlayer * player; 
  10. @property (retain, nonatomic) IBOutlet UILabel *label; 
  11. -(IBAction)recordPushed:(id)sender; 
  12. -(IBAction)playPushed:(id)sender; 
  13. -(IBAction)stopPushed:(id)sender; 
  14. @end 

音頻錄制方法

 
  1. -(IBAction)recordPushed:(id)sender  
  2.     label.text = @"recode..."
  3.     if([recorder isRecording]) 
  4.         return
  5.      
  6.     if([player isPlaying]) 
  7.         [player stop]; 
  8.     NSError *error = nil; 
  9.     [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord 
  10.                                            error:&error]; 
  11.     [[AVAudioSession sharedInstance] setActive:YES error:&error]; 

AVAudioSession 是iOS提供音頻會話類,音頻會話是指定應用程序與音頻系統(tǒng)如何交互。AVAudioSession 通過指定一個音頻類別(Category)實現(xiàn)的,音頻類別(Category)描述了應用程序使用音頻的方式。下面是語句是設(shè)定音頻會話類別:

[[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryRecord error:&error];

AVAudioSessionCategoryRecord代表只能輸入音頻,即錄制音頻了。其效果是停止其它音頻播放。

使用類別后,音頻會話要設(shè)置為“活躍的”Active,這會把后臺的任何系統(tǒng)聲音關(guān)閉。

[[AVAudioSession sharedInstance]  setActive:YES error:&error];   

音頻錄制方法

 
  1. NSMutableDictionary *settings = [NSMutableDictionary dictionary]; 
  2.     [settings setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM]  
  3.                 forKey:AVFormatIDKey]; 
  4.     [settings setValue:[NSNumber numberWithFloat:44100.0]  
  5.                 forKey:AVSampleRateKey]; //采樣率 
  6.     [settings setValue:[NSNumber numberWithInt:1]  
  7.                 forKey:AVNumberOfChannelsKey];//通道的數(shù)目 
  8.     [settings setValue:[NSNumber numberWithInt:16]  
  9.                 forKey:AVLinearPCMBitDepthKey];//采樣位數(shù)  默認 16 
  10.     [settings setValue:[NSNumber numberWithBool:NO]  
  11.                 forKey:AVLinearPCMIsBigEndianKey];//大端還是小端 是內(nèi)存的組織方式 
  12.     [settings setValue:[NSNumber numberWithBool:NO]  
  13.                 forKey:AVLinearPCMIsFloatKey];//采樣信號是整數(shù)還是浮點數(shù) 
  14.      
  15.     NSString *filePath =  
  16.     [NSString stringWithFormat:@"%@/rec_audio.caf", [self documentsDirectory]]; 
  17.     NSURL *fileUrl = [NSURL fileURLWithPath:filePath]; 
  18.      
  19.     //[self setRecorder:nil]; 
  20.     recorder = [[AVAudioRecorder alloc]  
  21.                                     initWithURL:fileUrl  
  22.                                     settings:settings  
  23.                                     error:&error]; 
  24.      
  25.    // [recorder setMeteringEnabled:YES]; 
  26.     [recorder record]; 
-(NSString *)documentsDirectory{     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,                                                           NSUserDomainMask, YES);      return [paths objectAtIndex:0]; }

音頻播放方法

  1. -(IBAction)playPushed:(id)sender{ 
  2.     label.text = @"play..."
  3.      
  4.     if([recorder isRecording]) 
  5.         [recorder stop]; 
  6.     if([player isPlaying]) 
  7.         [player stop]; 
  8.      
  9.     NSString *filePath =  
  10.     [NSString stringWithFormat:@"%@/rec_audio.caf", [self documentsDirectory]]; 
  11.     NSURL *fileUrl = [NSURL fileURLWithPath:filePath]; 
  12.     NSError *error = nil; 
  13.    // [self setPlayer:nil]; 
  14.     [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback 
  15.                                            error:&error]; 
  16.     [[AVAudioSession sharedInstance] setActive:YES error:&error]; 
  17.     player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileUrl error:&error]; 
  18.    // [player setMeteringEnabled:YES]; 
  19.     [player play]; 

音頻停止方法

  1. -(IBAction)stopPushed:(id)sender{ 
  2.     label.text = @"stop..."
  3.     if([recorder isRecording]) 
  4.         [recorder stop]; 
  5.     if([player isPlaying]) 
  6.         [player stop]; 
責任編輯:張葉青 來源: 博客園
相關(guān)推薦

2013-12-17 13:29:04

iOS開發(fā)多媒體

2011-08-02 10:36:02

iOS開發(fā) SDK 多媒體

2021-09-13 15:15:18

鴻蒙HarmonyOS應用

2013-08-28 16:08:19

多媒體Windows8.1

2011-08-18 17:07:23

IOS開發(fā)多線程NSInvocatio

2010-08-01 15:34:27

Android

2011-06-09 10:07:28

Qt phonon

2010-06-30 10:38:05

2009-12-25 17:02:33

WPF多媒體

2010-10-27 11:27:50

MAS視頻監(jiān)控H3C

2014-09-24 11:04:31

微信企業(yè)號開發(fā)

2020-12-20 09:05:30

騰訊多媒體5G

2009-12-22 16:29:51

Linux多媒體軟件

2018-02-07 15:35:04

2011-06-15 17:28:23

Qt 多視圖 架構(gòu)

2012-04-27 14:34:15

2013-11-18 10:01:19

2010-01-27 16:21:29

Android多媒體播

2012-11-14 16:30:32

張宏江多媒體
點贊
收藏

51CTO技術(shù)棧公眾號