iOS 学习总结----音频/视频处理

本文详细总结了iOS平台上的音频和视频处理技术,包括音视频编解码、播放控制、录制与编辑等方面,探讨了AVFoundation框架的使用及实战经验,同时分享了在实际项目中遇到的问题和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

音频:
1.AVAudioPlayer:使用简单,但是只能播放本地
//获取本地mp3链接
NSString *musicPath = [[ NSBundle mainBundle ] pathForResource : @"music.mp3" ofType : nil ];
//NSURL *url = [NSURL URLWithString:musicPath]; 转换网络连接
   
//转换本地链接
NSURL *url = [ NSURL fileURLWithPath :musicPath];
   
_audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];
_audioPlayer . delegate = self ;
[_audioPlayer prepareToPlay];

2.AVPlayer  既可以播放流媒体,也可以播放本地
    _player = [[ AVPlayer alloc ] initWithURL :[ NSURL URLWithString :str]];


后台播放音频:
1.在后台播放音乐(按下home键或锁屏情况下):
// 后台任务:   音频、定位(耗电量大)、 VOIP( 网络电话 )
//1、在plist文件中设置Required background modes  Voide
    //2 、将音频设置为支持后台
    [[
AVAudioSession sharedInstance ] setCategory : AVAudioSessionCategoryPlayback error : nil ];
   
   
NSString *str = [[ NSBundle mainBundle ] pathForResource : @"music.mp3" ofType : nil ];
   
NSURL *url = [ NSURL fileURLWithPath :str];
   
_player = [[ AVPlayer alloc ] initWithURL :url];
    [_player play];

在视图将要出现时,设置第一响应者和远程控制:
// 成为第一响应者
    [ self becomeFirstResponder ];
   
   
// 让应用程序接收远程控制器事件
    [[
UIApplication sharedApplication ] beginReceivingRemoteControlEvents ];
   
视图消失时取消第一响应者,关闭远程控制:
  // 取消第一响应者
    [
self resignFirstResponder ];
   
// 关闭远程控制
    [[
UIApplication sharedApplication ] endReceivingRemoteControlEvents ];
   
锁屏时显示的信息:
  // 设置专辑图
   
MPMediaItemArtwork *artWork = [[ MPMediaItemArtwork alloc ] initWithImage :[ UIImage imageNamed : @“专辑图片名" ]];
   
   
NSDictionary *dic = @{
                         
MPMediaItemPropertyAlbumTitle : @ 歌曲名 " ,
                         
MPMediaItemPropertyArtist : @ 歌手名 " ,
                         
MPMediaItemPropertyArtwork :artWork
                         
} ;
   
// 锁屏时显示信息
    [[
MPNowPlayingInfoCenter defaultCenter ] setNowPlayingInfo :dic];
   

// 选择线控事件 :锁屏时可点击 暂停 / 开始   / 下一首(按钮)
- ( void )remoteControlReceivedWithEvent:( UIEvent *)event{  
if (event. type == UIEventTypeRemoteControl ) {
       
switch (event. subtype ) {
           
case UIEventSubtypeRemoteControlPlay :
               [
_player play ];
               
break ;
           
case UIEventSubtypeRemoteControlPause :
                [
_player pause ];
               
break ;
           
case UIEventSubtypeRemoteControlNextTrack :
               
NSLog ( @" 下一首 " );
               
break ;
           
case UIEventSubtypeRemoteControlPreviousTrack :
               
NSLog ( @" 上一首 " );
               
break ;
               
           
default :
               
break ;
        }
    }

  }  

视频:
 1. 使用MPMoviePlayerController创建视频播放器,设置网络视频连接
NSURL *url = [ NSURL URLWithString : @"http://vf1.mtime.cn/Video/2012/04/23/mp4/120423212602431929.mp4" ];
   
// 创建播放器
   
_moviePlayer = [[ MPMoviePlayerController alloc ] initWithContentURL :url];
    _moviePlayer.view.frame = CGRectMake(20, 50, 320, 300);

 [ self . view addSubview : _moviePlayer . view ];
 
2.利用通知来获取播放器的播放/暂停状态,
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playStateChange:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];

通知调用的方法:
- ( void )playStateChange:( NSNotification *)notification{     
  MPMoviePlayerController *playerCtrl = notification. object ;
   
if (playerCtrl. playbackState == MPMoviePlaybackStatePlaying ) {
       
NSLog ( @" 播放 " );
    }
else if (playerCtrl. playbackState == MPMoviePlaybackStatePaused ){
       
NSLog ( @" 暂停 " );
    }
}


3. 定义一个BOO类型的变量_isPLay,通过取非改变改变播放状态
if (! _isPlay ) {
        [
_moviePlayer play ];
    }
else {
        [
_moviePlayer pause ];
    }
   
    _isPlay = !_isPlay;
如果不设置全屏,效果图如下:


通过模态视图弹出一个播放器,这个播放器是自动全屏的,不需要设置样式:
  NSURL *url = [ NSURL URLWithString : @"http://vf1.mtime.cn/Video/2012/06/21/mp4/120621104820876931.mp4" ];
   
MPMoviePlayerViewController *playerViewCtrl = [[ MPMoviePlayerViewController alloc ] initWithContentURL :url];
   
    [
self presentViewController :playerViewCtrl animated : YES completion : nil ];
}
效果图如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值