音视频播放

一、系统声音播放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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容