成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS開發之多媒體API

移動開發 iOS
視頻格式可以分為適合本地播放的本地影像視頻和適合在網絡中播放的網絡流媒體影像視頻兩大類。盡管后者在播放的穩定性和播放畫面質量上可能沒有前者 優秀,但網絡流媒體影像視頻的廣泛傳播性使之正被廣泛應用于視頻點播、網絡演示、遠程教育、網絡視頻廣告等等互聯網信息服務領域。

播放視頻

視頻文件介紹

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

適合移動設備的視頻文件

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

iPhone中還支持mov格式文件。

iOS播放視頻 

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

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

加載URL中視頻

播放、暫停視頻

用戶控制行為和縮放模式

產生通知

視頻播放案例

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提供了在播放過程中的狀態改變和其它事件的通知。在viewDidLoad注冊了一個播放完成的通知,常用的通知有:

MPMoviePlayerPlaybackDidFinishNotification通知接收者播放結束。

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.  

視頻文件可以播放資源目錄、沙箱目錄和網絡播放。本例中我們采用資源目錄。

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 方法是在影片播放完成時候調用,這是因為我們在通知中心注冊的方法。

播放完成需要把播放視圖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

wps_clip_image-7562

高級API,易用

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

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

低級API,能夠對音頻有更多的控制

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

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

12.2.3 System Sound API

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

播放格式限制:

線性PCM 和 IMA4

.caf .aif 或 .wav

播放“短聲音”

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

注冊聲音

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

播放聲音

  1. AudioServicesPlaySystemSound (myID); 

監聽完成事件方法

  1. AudioServicesAddSystemSoundCompletion 

清除播放sound ID

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

震動

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

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

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個參數,第一參數SystemSoundID,第二參數是是否使用循環,第三個參數是循環模式,第四個參數是回調函數,就是當播放完成時候回調的方法,第五個參數是為回調函數提供參數。

這里回調的方法是C語言風格的函數:MySoundFinishedPlayingCallback。

回調函數

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

震動方法調用

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

12.3 播放和錄制音頻

AVFoundation控件可以實現一般音頻播放和錄制。

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

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(@"播放錯誤發生: %@", [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提供音頻會話類,音頻會話是指定應用程序與音頻系統如何交互。AVAudioSession 通過指定一個音頻類別(Category)實現的,音頻類別(Category)描述了應用程序使用音頻的方式。下面是語句是設定音頻會話類別:

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

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

使用類別后,音頻會話要設置為“活躍的”Active,這會把后臺的任何系統聲音關閉。

[[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];//通道的數目 
  8.     [settings setValue:[NSNumber numberWithInt:16]  
  9.                 forKey:AVLinearPCMBitDepthKey];//采樣位數  默認 16 
  10.     [settings setValue:[NSNumber numberWithBool:NO]  
  11.                 forKey:AVLinearPCMIsBigEndianKey];//大端還是小端 是內存的組織方式 
  12.     [settings setValue:[NSNumber numberWithBool:NO]  
  13.                 forKey:AVLinearPCMIsFloatKey];//采樣信號是整數還是浮點數 
  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]; 
責任編輯:張葉青 來源: 博客園
相關推薦

2013-12-17 13:29:04

iOS開發多媒體

2011-08-02 10:36:02

iOS開發 SDK 多媒體

2021-09-13 15:15:18

鴻蒙HarmonyOS應用

2013-08-28 16:08:19

多媒體Windows8.1

2011-08-18 17:07:23

IOS開發多線程NSInvocatio

2010-08-01 15:34:27

Android

2010-06-30 10:38:05

2011-06-09 10:07:28

Qt phonon

2009-12-25 17:02:33

WPF多媒體

2010-10-27 11:27:50

MAS視頻監控H3C

2020-12-20 09:05:30

騰訊多媒體5G

2009-12-22 16:29:51

Linux多媒體軟件

2018-02-07 15:35:04

2014-09-24 11:04:31

微信企業號開發

2011-06-15 17:28:23

Qt 多視圖 架構

2014-07-16 16:17:00

2012-04-27 14:18:02

HTML5

2010-01-27 13:52:15

Android多媒體框

2020-02-14 12:56:56

Git多媒體文件開源
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久草资源在线 | 久久国产精品免费一区二区三区 | 久久视频免费看 | 美女福利网站 | 九九伦理电影 | 亚洲精品在线观看视频 | 日韩久久久久久久 | 欧美精品影院 | 91国在线视频 | 久久这里有精品 | 黄色在线免费观看视频网站 | 精品免费国产一区二区三区四区介绍 | av网站在线播放 | 人人九九精 | 怡红院成人在线视频 | 欧美伊人 | 日韩成人精品在线观看 | 免费的av网站 | 综合国产 | 中文字幕在线网 | 成人超碰| 日韩专区中文字幕 | 免费视频一区二区 | 国产精品日韩欧美一区二区三区 | 国产精品久久久久久久久久久久 | 成人av电影天堂 | 欧美一级片 | 99精品欧美一区二区三区综合在线 | 国产精品免费一区二区三区 | 一区二区三区日 | 日本在线免费观看 | 色橹橹欧美在线观看视频高清 | 极品销魂美女一区二区 | 久热精品在线观看视频 | 看羞羞视频免费 | 久久久久久91香蕉国产 | 国产精品久久久久久福利一牛影视 | 成人免费视频网站在线看 | 福利成人 | 一级免费毛片 | 国产96色在线 |