音视频播放

一、系统声音播放AudioToolBox(无界面)

引入@improt AudioToolbox;
1.可以播放系统的声音,如铃声等。
2.可以使手机震动。
3.只能播放时间长度在30s以内的声音。
4.不能够控制播放进度。
5.没有循环播放和立体声功能。
6.调用后立即执行。
7.支持caf/aif/wav/mp3格式。
8.最大的好处:属于底层,节省资源。如搜狗输入法的按键声音等。

- (IBAction)playMusic:(id)sender {
    // 播放系统声音(真机)
    AudioServicesPlaySystemSound(1200);// 1000~2000
    // 震动(静音+真机)
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
    // 1.获取音频地址.
    NSString *path = [[NSBundle mainBundle] pathForResource:@"videoRing" ofType:@"mp3"];
    // 1.1 获取URL路径.
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"videoRing" withExtension:@"mp3"];
    // 系统声音把1000~2000的数字都占用了,其他随便用.
    SystemSoundID soundId = 11;
    // 绑定声音和数字
    AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &soundId);
    // 2.播放声音.
    AudioServicesPlaySystemSound(soundId);
}

二、AudioPlayer用于播放本地音频,没有网络功能,在iOS8之后被AVPlayer取代(没有界面)

引入@import AVFoundation;
为了防止疯狂点击疯狂重复播放,所以需要全局定义AVAudioPlayer:
@property (nonatomic) AVAudioPlayer *audioPlayer;
以下是示例:

- (IBAction)playMusic:(id)sender {
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"周杰伦 - 告白气球" withExtension:@"mp3"];
    NSError *error = nil;
    _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    // 播放的速度
    // 如果是slider的话,要先暂停,表示打开波形的监听
//    _audioPlayer.enableRate = YES;
//    _audioPlayer.rate = 1;
    // 监听播放的音频音线波形的大小
    _audioPlayer.meteringEnabled = YES;
    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(readMeter:) userInfo:nil repeats:YES];
    // 循环播放次数
    _audioPlayer.numberOfLoops = 2;
    // 设置起始播放时间
    _audioPlayer.currentTime = 30;
    // 获取总时长,可以使用滑动条,通过半分法
    NSTimeInterval total = _audioPlayer.duration;
    _audioPlayer.delegate = self;// 设置代理,监听.
    [_audioPlayer play];
}

三、AVPlayer强大的播放类,可以播放视频、音频、远程和本地资源(没有界面)

引入@impoert AVFoundation;
由于该类是没有界面的,所以播放视频的时候需要一个用来显示视频的界面,即AVPlayerLayer创建的对象。

@interface ViewController ()
@property (nonatomic) AVPlayer *audioPlayer;
@property (nonatomic) AVPlayer *videoPlayer;
@property (nonatomic) AVPlayerLayer *videoLayer;// 视频需要一个显示画面的
@end
@implementation ViewController
- (IBAction)playMusic:(id)sender {
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"张宇 - 趁早" withExtension:@"mp3"];
    _audioPlayer = [AVPlayer playerWithURL:url];
    [_audioPlayer play];
}
- (IBAction)playMovie:(id)sender {
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"lllll" withExtension:@"mov"];
    _videoPlayer = [AVPlayer playerWithURL:url];
    // AVPlayerLayer 是用来显示视频的
    _videoLayer = [AVPlayerLayer playerLayerWithPlayer:_videoPlayer];
    _videoLayer.frame = self.view.bounds;
    [self.view.layer addSublayer:_videoLayer];
    [_videoPlayer play];

}

四、MediaPlayer早期的播放视频音频的控制器,在iOS8之后被AVKit所取代(自带播放页面和控制按钮)

引入@improt MediaPlayer;

- (IBAction)playAudio:(id)sender {
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"戴荃 - 悟空" withExtension:@"mp3"];
    MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
    [self presentViewController:vc animated:YES completion:nil];
}
- (IBAction)playVideo:(id)sender {
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"lllll" withExtension:@"mov"];
    MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
    [self presentViewController:vc animated:YES completion:nil];
}

五、AVKit是iOS8之后的,取代MediaPlayer(自带界面和控制按钮)

引入@import AVFoundation;@import AVKit;

- (IBAction)playAudio:(id)sender {
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"戴荃 - 悟空" withExtension:@"mp3"];
    AVPlayerViewController *playerVC = [[AVPlayerViewController alloc] init];
    playerVC.player = [AVPlayer playerWithURL:url];
    [playerVC.player play];
    [self presentViewController:playerVC animated:YES completion:nil];
}
- (IBAction)playVideo:(id)sender {
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"lllll" withExtension:@"mov"];
    AVPlayerViewController *playerVC = [[AVPlayerViewController alloc] init];
    playerVC.player = [AVPlayer playerWithURL:url];
    [playerVC.player play];
    [self presentViewController:playerVC animated:YES completion:nil];
}

系统文字转语音

引入@import AVFoundation;

- (IBAction)sayWords:(id)sender {
    // 必须有网络才能进行文字转语音
    // 1.设置要说的话
    NSString *words = @"你好!";
    // 打印出所支持的语言
    NSLog(@"%@",[AVSpeechSynthesisVoice speechVoices]);
    // 2.设置说话时的语言
    AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-HK"];
    AVSpeechUtterance *utt = [AVSpeechUtterance speechUtteranceWithString:words];
    // 默认是使用系统语言
    utt.voice = voice;
    // 3.开始说
    AVSpeechSynthesizer *syn = [[AVSpeechSynthesizer alloc] init];
    [syn speakUtterance:utt];
}

关于后台播放(可以在程序任何位置设置)

  • 首先需要设置当前的会话模式
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
  • 然后激活会话模式
[[AVAudioSession sharedInstance] setActive:YES error:nil];
  • 最后需要在info.plist文件中添加Required background modes并将其item0改为App plays audio or streams audio/video using AurPlay

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值